This commit is contained in:
Calclavia 2014-01-19 17:01:41 +08:00
commit db4af58b2b
3 changed files with 257 additions and 248 deletions

View file

@ -21,141 +21,148 @@ import calclavia.lib.utility.LanguageUtility;
@UniversalClass @UniversalClass
public class ItemBlockBattery extends ItemBlock implements IEnergyItem, IVoltageItem public class ItemBlockBattery extends ItemBlock implements IEnergyItem, IVoltageItem
{ {
public ItemBlockBattery(int id) public ItemBlockBattery(int id)
{ {
super(id); super(id);
this.setMaxStackSize(1); this.setMaxStackSize(1);
this.setMaxDamage(100); this.setMaxDamage(100);
this.setNoRepair(); this.setNoRepair();
} }
@Override @SuppressWarnings("unchecked")
public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) @Override
{ public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4)
String color = ""; {
long joules = this.getEnergy(itemStack); String color = "";
long joules = this.getEnergy(itemStack);
if (joules <= this.getEnergyCapacity(itemStack) / 3) if (joules <= this.getEnergyCapacity(itemStack) / 3)
{ {
color = "\u00a74"; color = "\u00a74";
} }
else if (joules > this.getEnergyCapacity(itemStack) * 2 / 3) else if (joules > this.getEnergyCapacity(itemStack) * 2 / 3)
{ {
color = "\u00a72"; color = "\u00a72";
} }
else else
{ {
color = "\u00a76"; color = "\u00a76";
} }
itemStack.getItemDamageForDisplay();
list.add(LanguageUtility.getLocal("tooltip.battery.energy").replace("%0", color).replace("%1", EnumColor.GREY.toString()).replace("%v0", UnitDisplay.getDisplayShort(joules, Unit.JOULES)).replace("%v1", UnitDisplay.getDisplayShort(this.getEnergyCapacity(itemStack), Unit.JOULES)));
}
list.add(LanguageUtility.getLocal("tooltip.battery.energy").replace("%0", color).replace("%1", EnumColor.GREY.toString()).replace("%v0", UnitDisplay.getDisplayShort(joules, Unit.JOULES)).replace("%v1", UnitDisplay.getDisplayShort(this.getEnergyCapacity(itemStack), Unit.JOULES))); @Override
} public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata)
{
boolean place = super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata);
@Override if (place)
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) {
{ TileBattery tileEntity = (TileBattery) world.getBlockTileEntity(x, y, z);
boolean place = super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata); tileEntity.setEnergy(null, this.getEnergy(stack));
}
if (place) return place;
{ }
TileBattery tileEntity = (TileBattery) world.getBlockTileEntity(x, y, z);
tileEntity.setEnergy(null, this.getEnergy(stack));
}
return place; /** Makes sure the item is uncharged when it is crafted and not charged. Change this if you do
} * not want this to happen! */
@Override
public void onCreated(ItemStack itemStack, World par2World, EntityPlayer par3EntityPlayer)
{
this.setEnergy(itemStack, 0);
}
/** @Override
* Makes sure the item is uncharged when it is crafted and not charged. Change this if you do public long recharge(ItemStack itemStack, long energy, boolean doReceive)
* not want this to happen! {
*/ long rejectedElectricity = Math.max((this.getEnergy(itemStack) + energy) - this.getEnergyCapacity(itemStack), 0);
@Override long energyToReceive = Math.min(energy - rejectedElectricity, getTransferRate(itemStack));
public void onCreated(ItemStack itemStack, World par2World, EntityPlayer par3EntityPlayer)
{
this.setEnergy(itemStack, 0);
}
@Override if (doReceive)
public long recharge(ItemStack itemStack, long energy, boolean doReceive) {
{ this.setEnergy(itemStack, this.getEnergy(itemStack) + energyToReceive);
long rejectedElectricity = Math.max((this.getEnergy(itemStack) + energy) - this.getEnergyCapacity(itemStack), 0); }
long energyToReceive = Math.min(energy - rejectedElectricity, getTransferRate(itemStack));
if (doReceive) return energyToReceive;
{ }
this.setEnergy(itemStack, this.getEnergy(itemStack) + energyToReceive);
}
return energyToReceive; @Override
} public long discharge(ItemStack itemStack, long energy, boolean doTransfer)
{
long energyToExtract = Math.min(Math.min(this.getEnergy(itemStack), energy), getTransferRate(itemStack));
@Override if (doTransfer)
public long discharge(ItemStack itemStack, long energy, boolean doTransfer) {
{ this.setEnergy(itemStack, this.getEnergy(itemStack) - energyToExtract);
long energyToExtract = Math.min(Math.min(this.getEnergy(itemStack), energy), getTransferRate(itemStack)); }
if (doTransfer) return energyToExtract;
{ }
this.setEnergy(itemStack, this.getEnergy(itemStack) - energyToExtract);
}
return energyToExtract; @Override
} public long getVoltage(ItemStack itemStack)
{
return UniversalElectricity.DEFAULT_VOLTAGE;
}
@Override @Override
public long getVoltage(ItemStack itemStack) public void setEnergy(ItemStack itemStack, long joules)
{ {
return UniversalElectricity.DEFAULT_VOLTAGE; if (itemStack.getTagCompound() == null)
} {
itemStack.setTagCompound(new NBTTagCompound());
}
@Override long electricityStored = Math.max(Math.min(joules, this.getEnergyCapacity(itemStack)), 0);
public void setEnergy(ItemStack itemStack, long joules) itemStack.getTagCompound().setLong("electricity", electricityStored);
{ }
if (itemStack.getTagCompound() == null)
{
itemStack.setTagCompound(new NBTTagCompound());
}
long electricityStored = Math.max(Math.min(joules, this.getEnergyCapacity(itemStack)), 0); public long getTransfer(ItemStack itemStack)
itemStack.getTagCompound().setLong("electricity", electricityStored); {
itemStack.setItemDamage((int) (100 - ((double) electricityStored / (double) getEnergyCapacity(itemStack)) * 100)); return this.getEnergyCapacity(itemStack) - this.getEnergy(itemStack);
} }
public long getTransfer(ItemStack itemStack) /** Gets the energy stored in the item. Energy is stored using item NBT */
{ @Override
return this.getEnergyCapacity(itemStack) - this.getEnergy(itemStack); public long getEnergy(ItemStack itemStack)
} {
if (itemStack.getTagCompound() == null)
{
itemStack.setTagCompound(new NBTTagCompound());
}
/** Gets the energy stored in the item. Energy is stored using item NBT */ long energyStored = itemStack.getTagCompound().getLong("electricity");
@Override return energyStored;
public long getEnergy(ItemStack itemStack) }
{
if (itemStack.getTagCompound() == null)
{
itemStack.setTagCompound(new NBTTagCompound());
}
long energyStored = itemStack.getTagCompound().getLong("electricity"); @Override
itemStack.setItemDamage((int) (100 - ((double) energyStored / (double) getEnergyCapacity(itemStack)) * 100)); public int getDisplayDamage(ItemStack stack)
return energyStored; {
} return (int) (100 - ((double) this.getEnergy(stack) / (double) getEnergyCapacity(stack)) * 100);
}
@Override @Override
public long getEnergyCapacity(ItemStack theItem) public long getEnergyCapacity(ItemStack theItem)
{ {
return TileBattery.getEnergyForTier(theItem.getItemDamage()); return TileBattery.getEnergyForTier(theItem.getItemDamage() + 1);
} }
public long getTransferRate(ItemStack itemStack) public long getTransferRate(ItemStack itemStack)
{ {
return this.getEnergyCapacity(itemStack) / 100; return this.getEnergyCapacity(itemStack) / 100;
} }
@Override @SuppressWarnings("unchecked")
public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List) @Override
{ public void getSubItems(int par1, CreativeTabs par2CreativeTabs, List par3List)
par3List.add(CompatibilityModule.getItemWithCharge(new ItemStack(this), 0)); {
par3List.add(CompatibilityModule.getItemWithCharge(new ItemStack(this), this.getEnergyCapacity(new ItemStack(this)))); par3List.add(new ItemStack(this, 1, 0));
} par3List.add(CompatibilityModule.getItemWithCharge(new ItemStack(this, 1, 0), this.getEnergyCapacity(new ItemStack(this, 1, 0))));
par3List.add(new ItemStack(this, 1, 1));
par3List.add(CompatibilityModule.getItemWithCharge(new ItemStack(this, 1, 1), this.getEnergyCapacity(new ItemStack(this, 1, 1))));
}
} }

View file

@ -24,169 +24,171 @@ import com.google.common.io.ByteArrayDataInput;
import cpw.mods.fml.common.network.PacketDispatcher; import cpw.mods.fml.common.network.PacketDispatcher;
/** /** A modular battery.
* A modular battery.
* *
* @author Calclavia * @author Calclavia */
*/
public class TileBattery extends TileElectrical implements IConnector<BatteryStructure>, IVoltageInput, IVoltageOutput, IPacketSender, IPacketReceiver, IEnergyInterface, IEnergyContainer public class TileBattery extends TileElectrical implements IConnector<BatteryStructure>, IVoltageInput, IVoltageOutput, IPacketSender, IPacketReceiver, IEnergyInterface, IEnergyContainer
{ {
/** The transfer rate **/ /** The transfer rate **/
public static final long DEFAULT_WATTAGE = (long) (getEnergyForTier(1) * 0.01); public static final long DEFAULT_WATTAGE = getEnergyForTier(1);
/** Voltage increases as series connection increases */ /** Voltage increases as series connection increases */
public static final long DEFAULT_VOLTAGE = UniversalElectricity.DEFAULT_VOLTAGE; public static final long DEFAULT_VOLTAGE = UniversalElectricity.DEFAULT_VOLTAGE;
private BatteryStructure structure; private BatteryStructure structure;
public Set<EntityPlayer> playersUsing = new HashSet<EntityPlayer>(); public Set<EntityPlayer> playersUsing = new HashSet<EntityPlayer>();
public float clientEnergy; public float clientEnergy;
public int clientCells; public int clientCells;
public float clientMaxEnergy; public float clientMaxEnergy;
public TileBattery() public TileBattery()
{ {
this.energy = new EnergyStorageHandler(getEnergyForTier(1)); this.energy = new EnergyStorageHandler(getEnergyForTier(1));
this.saveIOMap = true; this.saveIOMap = true;
} }
public static long getEnergyForTier(int tier) public static long getEnergyForTier(int tier)
{ {
return (long) Math.pow(1000000, tier); if (tier <= 0)
} {
tier = 1;
}
return (long) Math.pow(1000000, tier);
}
@Override @Override
public void initiate() public void initiate()
{ {
this.updateStructure(); this.updateStructure();
} }
public void updateStructure() public void updateStructure()
{ {
if (!this.worldObj.isRemote) if (!this.worldObj.isRemote)
{ {
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{ {
TileEntity tile = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj); TileEntity tile = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj);
if (tile instanceof TileBattery) if (tile instanceof TileBattery)
{ {
this.getNetwork().merge(((TileBattery) tile).getNetwork()); this.getNetwork().merge(((TileBattery) tile).getNetwork());
} }
} }
this.energy.setMaxTransfer(DEFAULT_WATTAGE * this.getNetwork().get().size()); this.energy.setMaxTransfer(DEFAULT_WATTAGE * this.getNetwork().get().size());
this.getNetwork().redistribute(); this.getNetwork().redistribute();
} }
} }
@Override @Override
public void updateEntity() public void updateEntity()
{ {
super.updateEntity(); super.updateEntity();
if (!this.worldObj.isRemote) if (!this.worldObj.isRemote)
{ {
if (this.produce() > 0) if (this.produce() > 0)
{ {
this.getNetwork().redistribute(); this.getNetwork().redistribute();
} }
} }
} }
@Override @Override
public long onReceiveEnergy(ForgeDirection from, long receive, boolean doReceive) public long onReceiveEnergy(ForgeDirection from, long receive, boolean doReceive)
{ {
long returnValue = super.onReceiveEnergy(from, receive, doReceive); long returnValue = super.onReceiveEnergy(from, receive, doReceive);
this.getNetwork().redistribute(); this.getNetwork().redistribute();
return returnValue; return returnValue;
} }
@Override @Override
public long onExtractEnergy(ForgeDirection from, long extract, boolean doExtract) public long onExtractEnergy(ForgeDirection from, long extract, boolean doExtract)
{ {
long returnValue = super.onExtractEnergy(from, extract, doExtract); long returnValue = super.onExtractEnergy(from, extract, doExtract);
this.getNetwork().redistribute(); this.getNetwork().redistribute();
return returnValue; return returnValue;
} }
public void updateClient() public void updateClient()
{ {
PacketDispatcher.sendPacketToAllPlayers(ResonantInduction.PACKET_TILE.getPacket(this, getPacketData(0).toArray())); PacketDispatcher.sendPacketToAllPlayers(ResonantInduction.PACKET_TILE.getPacket(this, getPacketData(0).toArray()));
} }
@Override @Override
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra) public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
{ {
} }
@Override @Override
public ArrayList getPacketData(int type) public ArrayList getPacketData(int type)
{ {
ArrayList data = new ArrayList(); ArrayList data = new ArrayList();
return data; return data;
} }
@Override @Override
public BatteryStructure getNetwork() public BatteryStructure getNetwork()
{ {
if (this.structure == null) if (this.structure == null)
{ {
this.structure = new BatteryStructure(); this.structure = new BatteryStructure();
this.structure.add(this); this.structure.add(this);
} }
return this.structure; return this.structure;
} }
@Override @Override
public void setNetwork(BatteryStructure structure) public void setNetwork(BatteryStructure structure)
{ {
this.structure = structure; this.structure = structure;
} }
@Override @Override
public Object[] getConnections() public Object[] getConnections()
{ {
Object[] connections = new Object[6]; Object[] connections = new Object[6];
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{ {
TileEntity tile = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj); TileEntity tile = new Vector3(this).modifyPositionFromSide(dir).getTileEntity(this.worldObj);
if (tile instanceof TileBattery) if (tile instanceof TileBattery)
{ {
connections[dir.ordinal()] = tile; connections[dir.ordinal()] = tile;
} }
} }
return connections; return connections;
} }
@Override @Override
public void invalidate() public void invalidate()
{ {
this.getNetwork().redistribute(this); this.getNetwork().redistribute(this);
this.getNetwork().split(this); this.getNetwork().split(this);
super.invalidate(); super.invalidate();
} }
@Override @Override
public long getVoltageOutput(ForgeDirection side) public long getVoltageOutput(ForgeDirection side)
{ {
return DEFAULT_VOLTAGE; return DEFAULT_VOLTAGE;
} }
@Override @Override
public long getVoltageInput(ForgeDirection direction) public long getVoltageInput(ForgeDirection direction)
{ {
return DEFAULT_VOLTAGE; return DEFAULT_VOLTAGE;
} }
@Override @Override
public void onWrongVoltage(ForgeDirection direction, long voltage) public void onWrongVoltage(ForgeDirection direction, long voltage)
{ {
} }
} }

View file

@ -24,7 +24,7 @@ public class TileSolarPanel extends TileElectrical
{ {
if (!(this.worldObj.isThundering() || this.worldObj.isRaining())) if (!(this.worldObj.isThundering() || this.worldObj.isRaining()))
{ {
this.energy.receiveEnergy(1, true); this.energy.receiveEnergy(5, true);
this.produce(); this.produce();
} }
} }