2012-11-25 16:45:00 +01:00
|
|
|
package mekanism.common;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
2012-12-20 22:53:39 +01:00
|
|
|
import mekanism.api.IEnergyCube;
|
|
|
|
import mekanism.api.Tier.EnergyCubeTier;
|
|
|
|
import net.minecraft.block.Block;
|
|
|
|
import net.minecraft.entity.Entity;
|
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
|
|
import net.minecraft.item.ItemBlock;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
import net.minecraft.nbt.NBTTagFloat;
|
|
|
|
import net.minecraft.world.World;
|
2012-11-25 16:45:00 +01:00
|
|
|
import universalelectricity.core.electricity.ElectricInfo;
|
|
|
|
import universalelectricity.core.electricity.ElectricInfo.ElectricUnit;
|
|
|
|
import universalelectricity.core.implement.IItemElectric;
|
|
|
|
|
2012-11-28 16:33:34 +01:00
|
|
|
public class ItemBlockEnergyCube extends ItemBlock implements IItemElectric, IEnergyCube
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2012-11-28 16:33:34 +01:00
|
|
|
public Block metaBlock;
|
2012-11-25 16:45:00 +01:00
|
|
|
|
2012-11-28 16:33:34 +01:00
|
|
|
public ItemBlockEnergyCube(int id, Block block)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
|
|
|
super(id);
|
2012-11-28 16:33:34 +01:00
|
|
|
metaBlock = block;
|
2012-11-25 16:45:00 +01:00
|
|
|
setMaxStackSize(1);
|
|
|
|
setMaxDamage(100);
|
|
|
|
setNoRepair();
|
|
|
|
setCreativeTab(Mekanism.tabMekanism);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag)
|
|
|
|
{
|
|
|
|
double energy = getJoules(itemstack);
|
|
|
|
|
|
|
|
list.add("Stored Energy: " + ElectricInfo.getDisplayShort(energy, ElectricUnit.JOULES));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onUpdate(ItemStack itemstack, World world, Entity entity, int i, boolean flag)
|
|
|
|
{
|
2012-11-28 16:33:34 +01:00
|
|
|
ItemBlockEnergyCube item = ((ItemBlockEnergyCube)itemstack.getItem());
|
2012-11-25 16:45:00 +01:00
|
|
|
item.setJoules(item.getJoules(itemstack), itemstack);
|
2012-11-28 16:33:34 +01:00
|
|
|
item.setTier(itemstack, item.getTier(itemstack));
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
2012-12-19 21:23:55 +01:00
|
|
|
public ItemStack getUnchargedItem(EnergyCubeTier tier)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
|
|
|
ItemStack charged = new ItemStack(this);
|
2012-11-28 17:26:52 +01:00
|
|
|
setTier(charged, tier);
|
2012-11-25 16:45:00 +01:00
|
|
|
charged.setItemDamage(100);
|
|
|
|
return charged;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getJoules(Object... data)
|
|
|
|
{
|
|
|
|
if (data[0] instanceof ItemStack)
|
|
|
|
{
|
|
|
|
ItemStack itemStack = (ItemStack) data[0];
|
|
|
|
|
|
|
|
if (itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
double electricityStored = 0;
|
|
|
|
|
|
|
|
if (itemStack.stackTagCompound.getTag("electricity") instanceof NBTTagFloat)
|
|
|
|
{
|
|
|
|
electricityStored = itemStack.stackTagCompound.getFloat("electricity");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
electricityStored = itemStack.stackTagCompound.getDouble("electricity");
|
|
|
|
}
|
|
|
|
|
2012-11-28 16:33:34 +01:00
|
|
|
itemStack.setItemDamage((int)(getTier(itemStack).MAX_ELECTRICITY - electricityStored)/getTier(itemStack).DIVIDER);
|
2012-11-25 16:45:00 +01:00
|
|
|
return electricityStored;
|
|
|
|
}
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setJoules(double wattHours, Object... data)
|
|
|
|
{
|
|
|
|
if (data[0] instanceof ItemStack)
|
|
|
|
{
|
|
|
|
ItemStack itemStack = (ItemStack) data[0];
|
|
|
|
|
|
|
|
if (itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
itemStack.setTagCompound(new NBTTagCompound());
|
|
|
|
}
|
|
|
|
|
2012-11-28 16:33:34 +01:00
|
|
|
double electricityStored = Math.max(Math.min(wattHours, getMaxJoules(itemStack)), 0);
|
2012-11-25 16:45:00 +01:00
|
|
|
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
|
2012-11-28 16:33:34 +01:00
|
|
|
itemStack.setItemDamage((int)(getTier(itemStack).MAX_ELECTRICITY - electricityStored)/getTier(itemStack).DIVIDER);
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double getMaxJoules(Object... data)
|
|
|
|
{
|
2012-11-28 16:33:34 +01:00
|
|
|
if(data[0] instanceof ItemStack)
|
|
|
|
{
|
|
|
|
ItemStack itemstack = (ItemStack)data[0];
|
|
|
|
|
|
|
|
return getTier(itemstack).MAX_ELECTRICITY;
|
|
|
|
}
|
2012-12-19 21:23:55 +01:00
|
|
|
return EnergyCubeTier.BASIC.MAX_ELECTRICITY;
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-01-14 19:30:58 +01:00
|
|
|
public double getVoltage(Object... data)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-01-14 19:30:58 +01:00
|
|
|
return 120;
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double onReceive(double amps, double voltage, ItemStack itemStack)
|
|
|
|
{
|
2012-11-28 16:33:34 +01:00
|
|
|
double rejectedElectricity = Math.max((getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1)) - getMaxJoules(itemStack), 0);
|
2012-11-25 16:45:00 +01:00
|
|
|
setJoules(getJoules(itemStack) + ElectricInfo.getJoules(amps, voltage, 1) - rejectedElectricity, itemStack);
|
|
|
|
return rejectedElectricity;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public double onUse(double joulesNeeded, ItemStack itemStack)
|
|
|
|
{
|
|
|
|
double electricityToUse = Math.min(getJoules(itemStack), joulesNeeded);
|
|
|
|
setJoules(getJoules(itemStack) - electricityToUse, itemStack);
|
|
|
|
return electricityToUse;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canReceiveElectricity()
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canProduceElectricity()
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
2012-11-28 16:33:34 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public String getItemNameIS(ItemStack itemstack)
|
|
|
|
{
|
|
|
|
return getItemName() + "." + getTier(itemstack).name;
|
|
|
|
}
|
|
|
|
|
|
|
|
@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);
|
|
|
|
|
|
|
|
if (place)
|
|
|
|
{
|
|
|
|
TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z);
|
|
|
|
tileEntity.tier = ((IEnergyCube)stack.getItem()).getTier(stack);
|
|
|
|
tileEntity.electricityStored = getJoules(stack);
|
|
|
|
}
|
|
|
|
|
|
|
|
return place;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2012-12-19 21:23:55 +01:00
|
|
|
public EnergyCubeTier getTier(ItemStack itemstack)
|
2012-11-28 16:33:34 +01:00
|
|
|
{
|
|
|
|
if(itemstack.stackTagCompound == null)
|
|
|
|
{
|
2012-12-19 21:23:55 +01:00
|
|
|
return EnergyCubeTier.BASIC;
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
if(itemstack.stackTagCompound.getString("tier") == null)
|
|
|
|
{
|
2012-12-19 21:23:55 +01:00
|
|
|
return EnergyCubeTier.BASIC;
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
|
|
|
|
2012-12-19 21:23:55 +01:00
|
|
|
return EnergyCubeTier.getFromName(itemstack.stackTagCompound.getString("tier"));
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2012-12-19 21:23:55 +01:00
|
|
|
public void setTier(ItemStack itemstack, EnergyCubeTier tier)
|
2012-11-28 16:33:34 +01:00
|
|
|
{
|
|
|
|
if (itemstack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
itemstack.setTagCompound(new NBTTagCompound());
|
|
|
|
}
|
|
|
|
|
|
|
|
itemstack.stackTagCompound.setString("tier", tier.name);
|
|
|
|
}
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|