package mekanism.common.multipart; import java.util.Collection; import mekanism.api.Coord4D; import mekanism.api.IHeatTransfer; import mekanism.api.transmitters.TransmissionType; import mekanism.client.render.RenderPartTransmitter; import mekanism.common.HeatNetwork; import mekanism.common.util.HeatUtils; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.IIcon; import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import codechicken.lib.colour.ColourRGBA; import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; import codechicken.lib.vec.Vector3; public class PartHeatTransmitter extends PartTransmitter<IHeatTransfer, HeatNetwork> { public static TransmitterIcons heatIcons = new TransmitterIcons(1, 2); public PartHeatTransmitter() { transmitterDelegate = new MultipartHeatTransmitter(this); } @Override public HeatNetwork createNewNetwork() { return new HeatNetwork(); } @Override public HeatNetwork createNetworkByMerging(Collection networks) { return new HeatNetwork(networks); } @Override public int getCapacity() { return 0; } @Override public Object getBuffer() { return null; } @Override public void takeShare() {} public static void registerIcons(IIconRegister register) { heatIcons.registerCenterIcons(register, new String[] {"HeatTransmitter"}); heatIcons.registerSideIcons(register, new String[] {"SmallTransmitterVertical", "SmallTransmitterHorizontal"}); } @Override public IIcon getCenterIcon(boolean opaque) { return heatIcons.getCenterIcon(0); } @Override public IIcon getSideIcon(boolean opaque) { return heatIcons.getSideIcon(0); } @Override public IIcon getSideIconRotated(boolean opaque) { return heatIcons.getSideIcon(1); } @Override public TransmitterType getTransmitterType() { return TransmitterType.HEAT_TRANSMITTER; } @Override public boolean isValidAcceptor(TileEntity tile, ForgeDirection side) { return tile instanceof IHeatTransfer && ((IHeatTransfer)tile).canConnectHeat(side.getOpposite()); } @Override public TransmissionType getTransmissionType() { return TransmissionType.HEAT; } @Override public String getType() { return "mekanism:heat_transmitter"; } @Override protected boolean onConfigure(EntityPlayer player, int part, int side) { getTransmitter().temperature += 10000; return true; } @Override @SideOnly(Side.CLIENT) public void renderDynamic(Vector3 pos, float f, int pass) { if(pass == 0) { RenderPartTransmitter.getInstance().renderContents(this, pos); } } @Override public void load(NBTTagCompound nbtTags) { super.load(nbtTags); getTransmitter().temperature = nbtTags.getDouble("temperature"); } @Override public void save(NBTTagCompound nbtTags) { super.save(nbtTags); nbtTags.setDouble("temperature", getTransmitter().temperature); } public void sendTemp() { MCDataOutput packet = getWriteStream(); packet.writeBoolean(true); packet.writeDouble(getTransmitter().temperature); } @Override public void writeDesc(MCDataOutput packet) { packet.writeBoolean(false); super.writeDesc(packet); } @Override public void readDesc(MCDataInput packet) { if(packet.readBoolean()) { getTransmitter().temperature = packet.readDouble(); } else { super.readDesc(packet); } } public ColourRGBA getBaseColour() { return getTransmitter().material.baseColour; } public MultipartHeatTransmitter getTransmitter() { return (MultipartHeatTransmitter)transmitterDelegate; } }