package zmaster587.advancedRocketry.satellite;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import zmaster587.advancedRocketry.api.SatelliteRegistry;
import zmaster587.advancedRocketry.api.satellite.SatelliteBase;
import zmaster587.advancedRocketry.api.satellite.SatelliteProperties;
import zmaster587.libVulpes.api.IUniversalEnergyTransmitter;
import zmaster587.libVulpes.util.UniversalBattery;
public class SatelliteEnergy extends SatelliteBase implements IUniversalEnergyTransmitter {
UniversalBattery battery;
long lastActionTime;
byte teir;
public SatelliteEnergy() {
}
@Override
public boolean acceptsItemInConstruction(ItemStack item) {
int flag = SatelliteRegistry.getSatelliteProperty(item).getPropertyFlag();
return super.acceptsItemInConstruction(item) || SatelliteProperties.Property.BATTERY.isOfType(flag) || (SatelliteProperties.Property.POWER_GEN.isOfType(flag) && SatelliteRegistry.getSatelliteProperty(item).getPowerGeneration() >= 10);
}
@Override
public void setProperties(SatelliteProperties satelliteProperties) {
super.setProperties(satelliteProperties);
battery = new UniversalBattery(Math.max(satelliteProperties.getPowerStorage(),1));
}
@Override
public String getInfo(World world) {
return "Collecting Energy";
}
protected int energyCreated(World world) {
int amt =(int) ((world.getTotalWorldTime() - lastActionTime)*getPowerPerTick());
lastActionTime = world.getTotalWorldTime();
return amt;
}
public int getPowerPerTick() {
return satelliteProperties.getPowerGeneration()/10;
}
@Override
public String getName() {
return "Microwave Energy Satellite";
}
@Override
public boolean performAction(EntityPlayer player, World world, int x,
int y, int z) {
return false;
}
@Override
public double failureChance() {
return 0;
}
@Override
public int getEnergyMTU(ForgeDirection side) {
return 10;
}
@Override
public void setDimensionId(World world) {
super.setDimensionId(world);
lastActionTime = world.getTotalWorldTime();
}
@Override
public int transmitEnergy(ForgeDirection dir, boolean simulate) {
if(getDimensionId() != -1) {
World world = net.minecraftforge.common.DimensionManager.getWorld(getDimensionId());
if(world != null) {
battery.acceptEnergy(energyCreated(world), simulate);
int energy = battery.extractEnergy(getEnergyMTU(ForgeDirection.UNKNOWN), simulate);
return energy;
}
}
return 0;
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
battery.writeToNBT(nbt);
nbt.setLong("lastActionTime", lastActionTime);
nbt.setByte("teir", teir);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
if(battery == null)
battery = new UniversalBattery();
battery.readFromNBT(nbt);
//Fix breakages with earlier version of the mod
if(battery.getMaxEnergyStored() != this.satelliteProperties.getPowerStorage())
battery.setMaxEnergyStored(this.satelliteProperties.getPowerStorage());
lastActionTime = nbt.getLong("lastActionTime");
teir = nbt.getByte("teir");
}
}