2013-08-27 00:49:32 +02:00
|
|
|
package mekanism.common.item;
|
2012-11-25 16:45:00 +01:00
|
|
|
|
2015-03-26 15:17:06 +01:00
|
|
|
import ic2.api.item.IElectricItemManager;
|
|
|
|
import ic2.api.item.ISpecialElectricItem;
|
|
|
|
|
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-12-20 22:09:09 +01:00
|
|
|
import mekanism.api.Coord4D;
|
2013-12-21 18:51:55 +01:00
|
|
|
import mekanism.api.EnumColor;
|
2014-08-01 01:58:12 +02:00
|
|
|
import mekanism.api.MekanismConfig.general;
|
2014-08-08 04:48:35 +02:00
|
|
|
import mekanism.api.Range4D;
|
2013-08-27 00:49:32 +02:00
|
|
|
import mekanism.api.energy.IEnergizedItem;
|
2014-09-14 06:18:35 +02:00
|
|
|
import mekanism.client.MekKeyHandler;
|
|
|
|
import mekanism.client.MekanismKeyHandler;
|
2013-08-27 00:49:32 +02:00
|
|
|
import mekanism.common.Mekanism;
|
2013-04-01 01:12:10 +02:00
|
|
|
import mekanism.common.Tier.EnergyCubeTier;
|
2014-08-10 04:20:49 +02:00
|
|
|
import mekanism.common.base.IEnergyCube;
|
|
|
|
import mekanism.common.base.ISustainedInventory;
|
2013-10-13 07:01:30 +02:00
|
|
|
import mekanism.common.integration.IC2ItemManager;
|
2014-06-11 11:57:49 +02:00
|
|
|
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
|
2014-01-08 02:55:50 +01:00
|
|
|
import mekanism.common.tile.TileEntityEnergyCube;
|
2014-06-10 11:35:54 +02:00
|
|
|
import mekanism.common.util.LangUtils;
|
2013-11-23 02:58:49 +01:00
|
|
|
import mekanism.common.util.MekanismUtils;
|
2012-12-20 22:53:39 +01:00
|
|
|
import net.minecraft.block.Block;
|
2014-09-14 06:18:35 +02:00
|
|
|
import net.minecraft.client.settings.GameSettings;
|
2012-12-20 22:53:39 +01:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2014-05-30 23:10:05 +02:00
|
|
|
import net.minecraft.item.Item;
|
2012-12-20 22:53:39 +01:00
|
|
|
import net.minecraft.item.ItemBlock;
|
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
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;
|
2014-05-30 23:10:05 +02:00
|
|
|
import net.minecraftforge.common.util.Constants.NBT;
|
2015-03-26 15:17:06 +01:00
|
|
|
import cofh.api.energy.IEnergyContainerItem;
|
2014-06-26 02:10:53 +02:00
|
|
|
import cpw.mods.fml.common.Optional.Interface;
|
|
|
|
import cpw.mods.fml.common.Optional.InterfaceList;
|
|
|
|
import cpw.mods.fml.common.Optional.Method;
|
2013-05-03 02:12:51 +02:00
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
|
|
|
2014-06-26 02:10:53 +02:00
|
|
|
@InterfaceList({
|
2015-03-16 16:47:18 +01:00
|
|
|
@Interface(iface = "cofh.api.energy.IEnergyContainerItem", modid = "CoFHCore"),
|
|
|
|
@Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2")
|
2014-06-26 02:10:53 +02:00
|
|
|
})
|
2013-12-21 18:51:55 +01:00
|
|
|
public class ItemBlockEnergyCube extends ItemBlock implements IEnergizedItem, IEnergyCube, ISpecialElectricItem, ISustainedInventory, IEnergyContainerItem
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2012-11-28 16:33:34 +01:00
|
|
|
public Block metaBlock;
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2014-05-30 23:10:05 +02:00
|
|
|
public ItemBlockEnergyCube(Block block)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2014-05-30 23:10:05 +02:00
|
|
|
super(block);
|
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);
|
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2012-11-25 16:45:00 +01:00
|
|
|
@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)
|
|
|
|
{
|
2014-09-11 05:05:45 +02:00
|
|
|
if(!MekKeyHandler.getIsKeyPressed(MekanismKeyHandler.sneakKey))
|
2013-03-31 00:13:59 +01:00
|
|
|
{
|
2014-09-11 05:05:45 +02:00
|
|
|
list.add(MekanismUtils.localize("tooltip.hold") + " " + EnumColor.AQUA + GameSettings.getKeyDisplayString(MekanismKeyHandler.sneakKey.getKeyCode()) + EnumColor.GREY + " " + MekanismUtils.localize("tooltip.forDetails"));
|
2013-03-31 00:13:59 +01:00
|
|
|
}
|
|
|
|
else {
|
2014-06-10 11:35:54 +02:00
|
|
|
list.add(EnumColor.BRIGHT_GREEN + MekanismUtils.localize("tooltip.storedEnergy") + ": " + EnumColor.GREY + MekanismUtils.getEnergyDisplay(getEnergy(itemstack)));
|
|
|
|
list.add(EnumColor.AQUA + MekanismUtils.localize("tooltip.inventory") + ": " + EnumColor.GREY + LangUtils.transYesNo(getInventory(itemstack) != null && getInventory(itemstack).tagCount() != 0));
|
2013-03-31 00:13:59 +01:00
|
|
|
}
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2012-12-19 21:23:55 +01:00
|
|
|
public ItemStack getUnchargedItem(EnergyCubeTier tier)
|
2012-11-25 16:45:00 +01:00
|
|
|
{
|
2015-03-05 02:54:03 +01:00
|
|
|
ItemStack stack = new ItemStack(this);
|
|
|
|
setEnergyCubeTier(stack, tier);
|
|
|
|
stack.setItemDamage(100);
|
|
|
|
return stack;
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|
2015-03-26 15:17:06 +01:00
|
|
|
|
2012-11-28 16:33:34 +01:00
|
|
|
@Override
|
2015-03-26 15:17:06 +01:00
|
|
|
public String getItemStackDisplayName(ItemStack itemstack)
|
2012-11-28 16:33:34 +01:00
|
|
|
{
|
2015-03-29 17:01:54 +02:00
|
|
|
return MekanismUtils.localize("tile.EnergyCube" + getEnergyCubeTier(itemstack).getBaseTier().getName() + ".name");
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
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)
|
2014-03-08 02:00:25 +01:00
|
|
|
{
|
|
|
|
boolean place = super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata);
|
|
|
|
|
|
|
|
if(place)
|
|
|
|
{
|
2014-04-20 05:34:19 +02:00
|
|
|
TileEntityEnergyCube tileEntity = (TileEntityEnergyCube)world.getTileEntity(x, y, z);
|
2014-03-08 02:00:25 +01:00
|
|
|
tileEntity.tier = ((IEnergyCube)stack.getItem()).getEnergyCubeTier(stack);
|
|
|
|
tileEntity.electricityStored = getEnergy(stack);
|
|
|
|
|
|
|
|
((ISustainedInventory)tileEntity).setInventory(getInventory(stack));
|
|
|
|
|
|
|
|
if(!world.isRemote)
|
|
|
|
{
|
2014-08-08 04:48:35 +02:00
|
|
|
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(tileEntity), tileEntity.getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(tileEntity)));
|
2014-03-08 02:00:25 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return place;
|
|
|
|
}
|
2012-11-28 16:33:34 +01:00
|
|
|
|
|
|
|
@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)
|
2014-03-08 02:00:25 +01:00
|
|
|
{
|
|
|
|
return EnergyCubeTier.BASIC;
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
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
|
|
|
}
|
2014-03-08 02:00:25 +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
|
2014-03-08 02:00:25 +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());
|
|
|
|
}
|
|
|
|
|
2015-02-28 20:08:17 +01:00
|
|
|
itemstack.stackTagCompound.setString("tier", tier.getBaseTier().getName());
|
2012-11-28 16:33:34 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-02-01 01:43:39 +01:00
|
|
|
@Override
|
2015-03-16 16:47:18 +01:00
|
|
|
@Method(modid = "IC2")
|
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
|
2015-03-16 16:47:18 +01:00
|
|
|
@Method(modid = "IC2")
|
2014-07-08 03:48:18 +02:00
|
|
|
public double getMaxCharge(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2015-03-16 16:47:18 +01:00
|
|
|
@Method(modid = "IC2")
|
2013-03-31 00:13:59 +01:00
|
|
|
public int getTier(ItemStack itemStack)
|
2013-02-01 01:43:39 +01:00
|
|
|
{
|
2013-11-28 16:27:26 +01:00
|
|
|
return 4;
|
2013-02-01 01:43:39 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2015-03-16 16:47:18 +01:00
|
|
|
@Method(modid = "IC2")
|
2014-07-08 03:48:18 +02:00
|
|
|
public double 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
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public void setInventory(NBTTagList nbtTags, Object... data)
|
2013-03-31 00:13:59 +01:00
|
|
|
{
|
|
|
|
if(data[0] instanceof ItemStack)
|
|
|
|
{
|
|
|
|
ItemStack itemStack = (ItemStack)data[0];
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
if(itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
itemStack.setTagCompound(new NBTTagCompound());
|
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
itemStack.stackTagCompound.setTag("Items", nbtTags);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public NBTTagList getInventory(Object... data)
|
2013-03-31 00:13:59 +01:00
|
|
|
{
|
|
|
|
if(data[0] instanceof ItemStack)
|
|
|
|
{
|
|
|
|
ItemStack itemStack = (ItemStack)data[0];
|
2014-03-08 02:00:25 +01:00
|
|
|
|
|
|
|
if(itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
return null;
|
2013-03-31 00:13:59 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2014-05-30 23:49:24 +02:00
|
|
|
return itemStack.stackTagCompound.getTagList("Items", NBT.TAG_COMPOUND);
|
2013-03-31 00:13:59 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-03-31 00:13:59 +01:00
|
|
|
return null;
|
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-04-23 21:36:43 +02:00
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public double getEnergy(ItemStack itemStack)
|
2013-04-23 21:36:43 +02:00
|
|
|
{
|
2014-03-08 02:00:25 +01:00
|
|
|
if(itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
return 0;
|
2013-04-23 21:36:43 +02:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-04-23 21:36:43 +02:00
|
|
|
double electricityStored = itemStack.stackTagCompound.getDouble("electricity");
|
|
|
|
itemStack.setItemDamage((int)Math.max(1, (Math.abs(((electricityStored/getMaxEnergy(itemStack))*100)-100))));
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-04-23 21:36:43 +02:00
|
|
|
return electricityStored;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public void setEnergy(ItemStack itemStack, double amount)
|
2013-04-23 21:36:43 +02:00
|
|
|
{
|
2014-08-03 21:06:36 +02:00
|
|
|
if(getEnergyCubeTier(itemStack) == EnergyCubeTier.CREATIVE && amount != Integer.MAX_VALUE)
|
2014-08-01 01:29:49 +02:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2013-04-23 21:36:43 +02:00
|
|
|
if(itemStack.stackTagCompound == null)
|
|
|
|
{
|
|
|
|
itemStack.setTagCompound(new NBTTagCompound());
|
|
|
|
}
|
|
|
|
|
2013-07-27 00:16:21 +02:00
|
|
|
double electricityStored = Math.max(Math.min(amount, getMaxEnergy(itemStack)), 0);
|
2013-04-23 21:36:43 +02:00
|
|
|
itemStack.stackTagCompound.setDouble("electricity", electricityStored);
|
|
|
|
itemStack.setItemDamage((int)Math.max(1, (Math.abs(((electricityStored/getMaxEnergy(itemStack))*100)-100))));
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public double getMaxEnergy(ItemStack itemStack)
|
2013-04-23 21:36:43 +02:00
|
|
|
{
|
|
|
|
return getEnergyCubeTier(itemStack).MAX_ELECTRICITY;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public double getMaxTransfer(ItemStack itemStack)
|
2013-04-23 21:36:43 +02:00
|
|
|
{
|
|
|
|
return getMaxEnergy(itemStack)*0.005;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public boolean canReceive(ItemStack itemStack)
|
2013-04-23 21:36:43 +02:00
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public boolean canSend(ItemStack itemStack)
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-05-07 22:45:34 +02:00
|
|
|
@Override
|
2013-11-30 07:02:44 +01:00
|
|
|
public int receiveEnergy(ItemStack theItem, int energy, boolean simulate)
|
2013-05-07 22:45:34 +02:00
|
|
|
{
|
2013-11-30 07:02:44 +01:00
|
|
|
if(canReceive(theItem))
|
|
|
|
{
|
|
|
|
double energyNeeded = getMaxEnergy(theItem)-getEnergy(theItem);
|
2014-08-01 01:58:12 +02:00
|
|
|
double toReceive = Math.min(energy* general.FROM_TE, energyNeeded);
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-11-30 07:02:44 +01:00
|
|
|
if(!simulate)
|
|
|
|
{
|
|
|
|
setEnergy(theItem, getEnergy(theItem) + toReceive);
|
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2014-08-01 01:58:12 +02:00
|
|
|
return (int)Math.round(toReceive* general.TO_TE);
|
2013-11-30 07:02:44 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-11-30 07:02:44 +01:00
|
|
|
return 0;
|
2013-05-07 22:45:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-03-08 02:00:25 +01:00
|
|
|
public int extractEnergy(ItemStack theItem, int energy, boolean simulate)
|
2013-05-07 22:45:34 +02:00
|
|
|
{
|
2013-11-30 07:02:44 +01:00
|
|
|
if(canSend(theItem))
|
|
|
|
{
|
|
|
|
double energyRemaining = getEnergy(theItem);
|
2014-08-01 01:58:12 +02:00
|
|
|
double toSend = Math.min((energy* general.FROM_TE), energyRemaining);
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-11-30 07:02:44 +01:00
|
|
|
if(!simulate)
|
|
|
|
{
|
|
|
|
setEnergy(theItem, getEnergy(theItem) - toSend);
|
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2014-08-01 01:58:12 +02:00
|
|
|
return (int)Math.round(toSend* general.TO_TE);
|
2013-11-30 07:02:44 +01:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-11-30 07:02:44 +01:00
|
|
|
return 0;
|
2013-05-07 22:45:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-11-15 03:58:32 +01:00
|
|
|
public int getEnergyStored(ItemStack theItem)
|
2013-05-07 22:45:34 +02:00
|
|
|
{
|
2014-08-01 01:58:12 +02:00
|
|
|
return (int)(getEnergy(theItem)* general.TO_TE);
|
2013-05-07 22:45:34 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2013-11-15 03:58:32 +01:00
|
|
|
public int getMaxEnergyStored(ItemStack theItem)
|
2013-05-07 22:45:34 +02:00
|
|
|
{
|
2014-08-01 01:58:12 +02:00
|
|
|
return (int)(getMaxEnergy(theItem)* general.TO_TE);
|
2013-05-07 22:45:34 +02:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-06-07 17:16:47 +02:00
|
|
|
@Override
|
2014-07-09 23:05:33 +02:00
|
|
|
public boolean isMetadataSpecific(ItemStack itemStack)
|
2013-06-07 17:16:47 +02:00
|
|
|
{
|
2013-06-15 17:05:14 +02:00
|
|
|
return false;
|
2013-06-07 17:16:47 +02:00
|
|
|
}
|
2014-03-08 02:00:25 +01:00
|
|
|
|
2013-10-13 07:01:30 +02:00
|
|
|
@Override
|
2015-03-16 16:47:18 +01:00
|
|
|
@Method(modid = "IC2")
|
2014-03-08 02:00:25 +01:00
|
|
|
public IElectricItemManager getManager(ItemStack itemStack)
|
2013-10-13 07:01:30 +02:00
|
|
|
{
|
|
|
|
return IC2ItemManager.getManager(this);
|
|
|
|
}
|
2014-05-30 23:10:05 +02:00
|
|
|
|
|
|
|
@Override
|
2015-03-16 16:47:18 +01:00
|
|
|
@Method(modid = "IC2")
|
2014-05-30 23:10:05 +02:00
|
|
|
public Item getChargedItem(ItemStack itemStack)
|
|
|
|
{
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2015-03-16 16:47:18 +01:00
|
|
|
@Method(modid = "IC2")
|
2014-05-30 23:10:05 +02:00
|
|
|
public Item getEmptyItem(ItemStack itemStack)
|
|
|
|
{
|
|
|
|
return this;
|
|
|
|
}
|
2012-11-25 16:45:00 +01:00
|
|
|
}
|