blob: 2dfa092cf12c89849c1a9dded8786a812a8b9ebd [file] [log] [blame] [raw]
package mekanism.common.item;
import java.util.ArrayList;
import java.util.List;
import mekanism.api.Coord4D;
import mekanism.api.EnumColor;
import mekanism.api.Range4D;
import mekanism.api.transmitters.TransmissionType;
import mekanism.client.MekKeyHandler;
import mekanism.client.MekanismKeyHandler;
import mekanism.common.Mekanism;
import mekanism.common.Tier;
import mekanism.common.Tier.BaseTier;
import mekanism.common.base.ITierItem;
import mekanism.common.block.states.BlockStateTransmitter;
import mekanism.common.block.states.BlockStateTransmitter.TransmitterType;
import mekanism.common.network.PacketTileEntity.TileEntityMessage;
import mekanism.common.tile.transmitter.TileEntitySidedPipe;
import mekanism.common.util.LangUtils;
import mekanism.common.util.MekanismUtils;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.settings.GameSettings;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class ItemBlockTransmitter extends ItemBlock implements ITierItem
{
public Block metaBlock;
public ItemBlockTransmitter(Block block)
{
super(block);
metaBlock = block;
setHasSubtypes(true);
setCreativeTab(Mekanism.tabMekanism);
}
@Override
public int getMetadata(int i)
{
return i;
}
@Override
public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState state)
{
boolean place = super.placeBlockAt(stack, player, world, pos, side, hitX, hitY, hitZ, state);
if(place)
{
TileEntitySidedPipe tileEntity = (TileEntitySidedPipe)world.getTileEntity(pos);
tileEntity.setBaseTier(getBaseTier(stack));
if(!world.isRemote)
{
Mekanism.packetHandler.sendToReceivers(new TileEntityMessage(Coord4D.get(tileEntity), tileEntity.getNetworkedData(new ArrayList())), new Range4D(Coord4D.get(tileEntity)));
}
}
return place;
}
@Override
@SideOnly(Side.CLIENT)
public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List<String> list, boolean flag)
{
if(!MekKeyHandler.getIsKeyPressed(MekanismKeyHandler.sneakKey))
{
TransmissionType transmission = TransmitterType.values()[itemstack.getItemDamage()].getTransmission();
BaseTier tier = getBaseTier(itemstack);
if(transmission == TransmissionType.ENERGY)
{
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.capacity") + ": " + EnumColor.GREY + MekanismUtils.getEnergyDisplay(Tier.CableTier.get(tier).cableCapacity) + "/t");
}
else if(transmission == TransmissionType.FLUID)
{
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.capacity") + ": " + EnumColor.GREY + Tier.PipeTier.get(tier).pipeCapacity + "mB/t");
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.pumpRate") + ": " + EnumColor.GREY + Tier.PipeTier.get(tier).pipePullAmount + "mB/t");
}
else if(transmission == TransmissionType.GAS)
{
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.capacity") + ": " + EnumColor.GREY + Tier.TubeTier.get(tier).tubeCapacity + "mB/t");
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.pumpRate") + ": " + EnumColor.GREY + Tier.TubeTier.get(tier).tubePullAmount + "mB/t");
}
else if(transmission == TransmissionType.ITEM)
{
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.speed") + ": " + EnumColor.GREY + (Tier.TransporterTier.get(tier).speed/(100/20)) + " m/s");
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.pumpRate") + ": " + EnumColor.GREY + Tier.TransporterTier.get(tier).pullAmount*2 + "/s");
}
else if(transmission == TransmissionType.HEAT)
{
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.conduction") + ": " + EnumColor.GREY + Tier.ConductorTier.get(tier).inverseConduction);
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.insulation") + ": " + EnumColor.GREY + Tier.ConductorTier.get(tier).inverseConductionInsulation);
list.add(EnumColor.INDIGO + LangUtils.localize("tooltip.heatCapacity") + ": " + EnumColor.GREY + Tier.ConductorTier.get(tier).inverseHeatCapacity);
}
list.add(LangUtils.localize("tooltip.hold") + " " + EnumColor.AQUA + GameSettings.getKeyDisplayString(MekanismKeyHandler.sneakKey.getKeyCode()) + EnumColor.GREY + " " + LangUtils.localize("tooltip.forDetails"));
}
else {
TransmitterType type = TransmitterType.values()[itemstack.getItemDamage()];
switch(type)
{
case UNIVERSAL_CABLE:
{
list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":");
list.add("- " + EnumColor.PURPLE + "RF " + EnumColor.GREY + "(ThermalExpansion)");
list.add("- " + EnumColor.PURPLE + "EU " + EnumColor.GREY + "(IndustrialCraft)");
list.add("- " + EnumColor.PURPLE + "Joules " + EnumColor.GREY + "(Mekanism)");
break;
}
case MECHANICAL_PIPE:
{
list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.fluids") + " " + EnumColor.GREY + "(MinecraftForge)");
break;
}
case PRESSURIZED_TUBE:
{
list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.gasses") + " (Mekanism)");
break;
}
case LOGISTICAL_TRANSPORTER:
{
list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.items") + " (" + LangUtils.localize("tooltip.universal") + ")");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.blocks") + " (" + LangUtils.localize("tooltip.universal") + ")");
break;
}
case RESTRICTIVE_TRANSPORTER:
{
list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.items") + " (" + LangUtils.localize("tooltip.universal") + ")");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.blocks") + " (" + LangUtils.localize("tooltip.universal") + ")");
list.add("- " + EnumColor.DARK_RED + LangUtils.localize("tooltip.restrictiveDesc"));
break;
}
case DIVERSION_TRANSPORTER:
{
list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.items") + " (" + LangUtils.localize("tooltip.universal") + ")");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.blocks") + " (" + LangUtils.localize("tooltip.universal") + ")");
list.add("- " + EnumColor.DARK_RED + LangUtils.localize("tooltip.diversionDesc"));
break;
}
case THERMODYNAMIC_CONDUCTOR:
{
list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":");
list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.heat") + " (Mekanism)");
break;
}
}
}
}
@Override
public String getUnlocalizedName(ItemStack stack)
{
TransmitterType type = TransmitterType.get(stack.getItemDamage());
String name = type.getUnlocalizedName();
if(type.hasTiers())
{
BaseTier tier = getBaseTier(stack);
name = tier.getSimpleName() + name;
}
return getUnlocalizedName() + "." + name;
}
@Override
public BaseTier getBaseTier(ItemStack itemstack)
{
if(!itemstack.hasTagCompound())
{
return BaseTier.BASIC;
}
return BaseTier.values()[itemstack.getTagCompound().getInteger("tier")];
}
@Override
public void setBaseTier(ItemStack itemstack, BaseTier tier)
{
if(!itemstack.hasTagCompound())
{
itemstack.setTagCompound(new NBTTagCompound());
}
itemstack.getTagCompound().setInteger("tier", tier.ordinal());
}
}