2012-11-25 16:45:00 +01:00
|
|
|
package mekanism.common;
|
|
|
|
|
2013-02-01 01:43:39 +01:00
|
|
|
import ic2.api.ICustomElectricItem;
|
|
|
|
|
2013-02-27 02:21:30 +01:00
|
|
|
import java.util.ArrayList;
|
2012-11-25 16:45:00 +01:00
|
|
|
import java.util.List;
|
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
import org.lwjgl.input.Keyboard;
|
|
|
|
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
|
2013-03-18 17:23:57 +01:00
|
|
|
import universalelectricity.core.electricity.ElectricityDisplay;
|
|
|
|
import universalelectricity.core.electricity.ElectricityPack;
|
|
|
|
import universalelectricity.core.electricity.ElectricityDisplay.ElectricUnit;
|
|
|
|
import universalelectricity.core.item.IItemElectric;
|
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
import mekanism.api.EnumColor;
|
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.player.EntityPlayer;
|
|
|
|
import net.minecraft.item.ItemBlock;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
|
|
import net.minecraft.nbt.NBTTagFloat;
|
2013-03-31 00:13:59 +01:00
|
|
|
import net.minecraft.nbt.NBTTagList;
|
2012-12-20 22:53:39 +01:00
|
|
|
import net.minecraft.world.World;
|
2012-11-25 16:45:00 +01:00
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
public class ItemBlockEnergyCube extends ItemBlock implements IItemElectric, IEnergyCube, ICustomElectricItem, ISustainedInventory
|
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
|
2013-03-31 00:13:59 +01:00
|
|
|
@SideOnly(Side.CLIENT)
|
2012-11-25 16:45:00 +01:00
|
|
|
public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag)
|
|
|
|
{
|
2013-03-31 00:13:59 +01:00
|
|
|
if(!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))
|
|
|
|
{
|
|
|
|
list.add("Hold " + EnumColor.AQUA + "shift" + EnumColor.GREY + " for more details.");
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
list.add(EnumColor.BRIGHT_GREEN + "Stored Energy: " + EnumColor.GREY + ElectricityDisplay.getDisplayShort(getJoules(itemstack), ElectricUnit.JOULES));
|
|
|
|
list.add(EnumColor.BRIGHT_GREEN + "Voltage: " + EnumColor.GREY + getVoltage(itemstack) + "v");
|
|
|
|
list.add(EnumColor.AQUA + "Inventory: " + EnumColor.GREY + (getInventory(itemstack) != null && getInventory(itemstack).tagList != null && !getInventory(itemstack).tagList.isEmpty()));
|
|
|
|
}
|
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);
|
2013-03-31 00:13:59 +01:00
|
|
|
setEnergyCubeTier(charged, tier);
|
2012-11-25 16:45:00 +01:00
|
|
|
charged.setItemDamage(100);
|
|
|
|
return charged;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public double getJoules(ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-31 00:13:59 +01:00
|
|
|
if(itemStack.stackTagCompound == null)
|
2013-03-18 17:23:57 +01:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
double electricityStored = 0;
|
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
if(itemStack.stackTagCompound.getTag("electricity") instanceof NBTTagFloat)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
electricityStored = itemStack.stackTagCompound.getFloat("electricity");
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
2013-03-31 00:13:59 +01:00
|
|
|
else {
|
2013-03-18 17:23:57 +01:00
|
|
|
electricityStored = itemStack.stackTagCompound.getDouble("electricity");
|
|
|
|
}
|
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
itemStack.setItemDamage((int)(Math.abs(((electricityStored/getEnergyCubeTier(itemStack).MAX_ELECTRICITY)*100)-100)));
|
2013-03-18 17:23:57 +01:00
|
|
|
return electricityStored;
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public void setJoules(double wattHours, ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
if(itemStack.stackTagCompound == null)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
itemStack.setTagCompound(new NBTTagCompound());
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
2013-03-18 17:23:57 +01:00
|
|
|
|
|
|
|
double electricityStored = Math.max(Math.min(wattHours, getMaxJoules(itemStack)), 0);
|
|
|
|
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
|
2013-03-31 00:13:59 +01:00
|
|
|
itemStack.setItemDamage((int)(Math.abs(((electricityStored/getEnergyCubeTier(itemStack).MAX_ELECTRICITY)*100)-100)));
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public double getMaxJoules(ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-31 00:13:59 +01:00
|
|
|
return getEnergyCubeTier(itemStack).MAX_ELECTRICITY;
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public double getVoltage(ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-31 00:13:59 +01:00
|
|
|
return getEnergyCubeTier(itemStack).VOLTAGE;
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public ElectricityPack onReceive(ElectricityPack electricityPack, ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
double rejectedElectricity = Math.max((getJoules(itemStack) + electricityPack.getWatts()) - getMaxJoules(itemStack), 0);
|
|
|
|
double joulesToStore = electricityPack.getWatts() - rejectedElectricity;
|
2013-03-31 00:13:59 +01:00
|
|
|
setJoules(getJoules(itemStack) + joulesToStore, itemStack);
|
2013-03-18 17:23:57 +01:00
|
|
|
return ElectricityPack.getFromWatts(joulesToStore, getVoltage(itemStack));
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public ElectricityPack onProvide(ElectricityPack electricityPack, ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
double electricityToUse = Math.min(getJoules(itemStack), electricityPack.getWatts());
|
2012-11-25 16:45:00 +01:00
|
|
|
setJoules(getJoules(itemStack) - electricityToUse, itemStack);
|
2013-03-18 17:23:57 +01:00
|
|
|
return ElectricityPack.getFromWatts(electricityToUse, getVoltage(itemStack));
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public ElectricityPack getReceiveRequest(ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
return ElectricityPack.getFromWatts(Math.min(getMaxJoules(itemStack) - getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack));
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public ElectricityPack getProvideRequest(ItemStack itemStack)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
return ElectricityPack.getFromWatts(Math.min(getJoules(itemStack), getTransferRate(itemStack)), getVoltage(itemStack));
|
|
|
|
}
|
|
|
|
|
|
|
|
public double getTransferRate(ItemStack itemStack)
|
|
|
|
{
|
|
|
|
return getMaxJoules(itemStack)*0.01;
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
2012-11-28 16:33:34 +01:00
|
|
|
|
|
|
|
@Override
|
2013-03-18 17:23:57 +01:00
|
|
|
public String getUnlocalizedName(ItemStack itemstack)
|
2012-11-28 16:33:34 +01:00
|
|
|
{
|
2013-03-31 00:13:59 +01:00
|
|
|
return getUnlocalizedName() + "." + getEnergyCubeTier(itemstack).name;
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@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);
|
|
|
|
|
2013-03-18 17:23:57 +01:00
|
|
|
if(place)
|
2012-11-28 16:33:34 +01:00
|
|
|
{
|
|
|
|
TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getBlockTileEntity(x, y, z);
|
2013-03-31 00:13:59 +01:00
|
|
|
tileEntity.tier = ((IEnergyCube)stack.getItem()).getEnergyCubeTier(stack);
|
2012-11-28 16:33:34 +01:00
|
|
|
tileEntity.electricityStored = getJoules(stack);
|
2013-02-01 01:43:39 +01:00
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
((ISustainedInventory)tileEntity).setInventory(getInventory(stack));
|
|
|
|
|
2013-02-01 01:43:39 +01:00
|
|
|
if(tileEntity.powerProvider != null)
|
|
|
|
{
|
|
|
|
tileEntity.powerProvider.configure(0, 0, 100, 0, (int)(tileEntity.tier.MAX_ELECTRICITY*Mekanism.TO_BC));
|
|
|
|
}
|
2013-02-27 02:21:30 +01:00
|
|
|
|
|
|
|
if(!world.isRemote)
|
|
|
|
{
|
|
|
|
PacketHandler.sendTileEntityPacketToClients(tileEntity, 0, tileEntity.getNetworkedData(new ArrayList()));
|
|
|
|
}
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
return place;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-31 00:13:59 +01:00
|
|
|
public EnergyCubeTier getEnergyCubeTier(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
|
2013-03-31 00:13:59 +01:00
|
|
|
public void setEnergyCubeTier(ItemStack itemstack, EnergyCubeTier tier)
|
2012-11-28 16:33:34 +01:00
|
|
|
{
|
2013-03-31 00:13:59 +01:00
|
|
|
if(itemstack.stackTagCompound == null)
|
2012-11-28 16:33:34 +01:00
|
|
|
{
|
|
|
|
itemstack.setTagCompound(new NBTTagCompound());
|
|
|
|
}
|
|
|
|
|
|
|
|
itemstack.stackTagCompound.setString("tier", tier.name);
|
|
|
|
}
|
2013-02-01 01:43:39 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public int charge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
|
|
|
|
{
|
|
|
|
double givenEnergy = amount*Mekanism.FROM_IC2;
|
2013-03-31 00:13:59 +01:00
|
|
|
double energyNeeded = getEnergyCubeTier(itemStack).MAX_ELECTRICITY-getJoules(itemStack);
|
|
|
|
double energyToStore = Math.min(Math.min(amount, getEnergyCubeTier(itemStack).MAX_ELECTRICITY*0.01), energyNeeded);
|
2013-02-01 01:43:39 +01:00
|
|
|
|
|
|
|
if(!simulate)
|
|
|
|
{
|
|
|
|
setJoules(getJoules(itemStack) + energyToStore, itemStack);
|
|
|
|
}
|
2013-03-31 00:13:59 +01:00
|
|
|
|
|
|
|
if(energyToStore < 1)
|
|
|
|
{
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2013-02-01 01:43:39 +01:00
|
|
|
return (int)(energyToStore*Mekanism.TO_IC2);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int discharge(ItemStack itemStack, int amount, int tier, boolean ignoreTransferLimit, boolean simulate)
|
|
|
|
{
|
|
|
|
double energyWanted = amount*Mekanism.FROM_IC2;
|
2013-03-31 00:13:59 +01:00
|
|
|
double energyToGive = Math.min(Math.min(energyWanted, getEnergyCubeTier(itemStack).MAX_ELECTRICITY*0.01), getJoules(itemStack));
|
2013-02-01 01:43:39 +01:00
|
|
|
|
|
|
|
if(!simulate)
|
|
|
|
{
|
|
|
|
setJoules(getJoules(itemStack) - energyToGive, itemStack);
|
|
|
|
}
|
2013-03-31 00:13:59 +01:00
|
|
|
|
|
|
|
if(energyWanted < 1)
|
|
|
|
{
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2013-02-01 01:43:39 +01:00
|
|
|
return (int)(energyToGive*Mekanism.TO_IC2);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canUse(ItemStack itemStack, int amount)
|
|
|
|
{
|
|
|
|
return getJoules(itemStack) >= amount*Mekanism.FROM_IC2;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canShowChargeToolTip(ItemStack itemStack)
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-31 00:13:59 +01:00
|
|
|
public boolean canProvideEnergy(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
return true;
|
2013-02-01 01:43:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-31 00:13:59 +01:00
|
|
|
public int getChargedItemId(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
|
|
|
return itemID;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-31 00:13:59 +01:00
|
|
|
public int getEmptyItemId(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
|
|
|
return itemID;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-31 00:13:59 +01:00
|
|
|
public int getMaxCharge(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-31 00:13:59 +01:00
|
|
|
public int getTier(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
|
|
|
return 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-03-31 00:13:59 +01:00
|
|
|
public int getTransferLimit(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
2013-03-18 17:23:57 +01:00
|
|
|
return 0;
|
2013-02-01 01:43:39 +01:00
|
|
|
}
|
2013-03-31 00:13:59 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setInventory(NBTTagList nbtTags, Object... data)
|
|
|
|
{
|
|
|
|
if(data[0] instanceof ItemStack)
|
|
|
|
{
|
|
|
|
ItemStack itemStack = (ItemStack)data[0];
|
|
|
|
|
|
|
|
if(itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
itemStack.setTagCompound(new NBTTagCompound());
|
|
|
|
}
|
|
|
|
|
|
|
|
itemStack.stackTagCompound.setTag("Items", nbtTags);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public NBTTagList getInventory(Object... data)
|
|
|
|
{
|
|
|
|
if(data[0] instanceof ItemStack)
|
|
|
|
{
|
|
|
|
ItemStack itemStack = (ItemStack)data[0];
|
|
|
|
|
|
|
|
if(itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
return itemStack.stackTagCompound.getTagList("Items");
|
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
|
|
|
}
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|