diff --git a/src/main/java/mekanism/client/render/RenderPartTransmitter.java b/src/main/java/mekanism/client/render/RenderPartTransmitter.java index aa2f6cb33..cc914ef5b 100644 --- a/src/main/java/mekanism/client/render/RenderPartTransmitter.java +++ b/src/main/java/mekanism/client/render/RenderPartTransmitter.java @@ -10,14 +10,13 @@ import mekanism.client.render.MekanismRenderer.DisplayInteger; import mekanism.client.render.MekanismRenderer.Model3D; import mekanism.common.content.transporter.TransporterStack; import mekanism.common.item.ItemConfigurator; -import mekanism.common.multipart.MultipartTransporter; import mekanism.common.multipart.PartDiversionTransporter; -import mekanism.common.multipart.PartHeatTransmitter; import mekanism.common.multipart.PartLogisticalTransporter; import mekanism.common.multipart.PartMechanicalPipe; import mekanism.common.multipart.PartPressurizedTube; import mekanism.common.multipart.PartSidedPipe; import mekanism.common.multipart.PartSidedPipe.ConnectionType; +import mekanism.common.multipart.PartThermodynamicConductor; import mekanism.common.multipart.PartUniversalCable; import mekanism.common.multipart.TransmitterType; import mekanism.common.multipart.TransmitterType.Size; @@ -271,7 +270,7 @@ public class RenderPartTransmitter implements IIconSelfRegister pop(); } - public void renderContents(PartHeatTransmitter transmitter, Vector3 pos) + public void renderContents(PartThermodynamicConductor transmitter, Vector3 pos) { push(); CCRenderState.reset(); @@ -602,10 +601,10 @@ public class RenderPartTransmitter implements IIconSelfRegister renderTransparency(MekanismRenderer.energyIcon, cable.getModelForSide(side, true), new ColourRGBA(1.0, 1.0, 1.0, cable.currentPower)); } - public void renderHeatSide(ForgeDirection side, PartHeatTransmitter cable) + public void renderHeatSide(ForgeDirection side, PartThermodynamicConductor cable) { CCRenderState.changeTexture(MekanismRenderer.getBlocksTexture()); - renderTransparency(MekanismRenderer.heatIcon, cable.getModelForSide(side, true), ColourTemperature.fromTemperature(cable.getTransmitter().temperature, cable.getBaseColour())); + renderTransparency(MekanismRenderer.heatIcon, cable.getModelForSide(side, true), ColourTemperature.fromTemperature(cable.temperature, cable.getBaseColour())); } public void renderFluidInOut(ForgeDirection side, PartMechanicalPipe pipe) @@ -664,7 +663,7 @@ public class RenderPartTransmitter implements IIconSelfRegister PartMechanicalPipe.registerIcons(register); PartPressurizedTube.registerIcons(register); PartLogisticalTransporter.registerIcons(register); - PartHeatTransmitter.registerIcons(register); + PartThermodynamicConductor.registerIcons(register); } @Override diff --git a/src/main/java/mekanism/common/HeatNetwork.java b/src/main/java/mekanism/common/HeatNetwork.java index 1621721fc..939178463 100644 --- a/src/main/java/mekanism/common/HeatNetwork.java +++ b/src/main/java/mekanism/common/HeatNetwork.java @@ -1,15 +1,11 @@ package mekanism.common; -import java.util.Arrays; import java.util.Collection; -import java.util.Iterator; import java.util.Set; import mekanism.api.IHeatTransfer; import mekanism.api.transmitters.DynamicNetwork; import mekanism.api.transmitters.IGridTransmitter; -import mekanism.api.transmitters.TransmissionType; - import cpw.mods.fml.common.FMLCommonHandler; public class HeatNetwork extends DynamicNetwork diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index fcd3812c6..c7359e5de 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -627,6 +627,18 @@ public class Mekanism CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 2, 17), new Object[] { "RRR", "SBS", "RRR", Character.valueOf('R'), "dustRedstone", Character.valueOf('S'), "ingotSteel", Character.valueOf('B'), Blocks.iron_bars })); + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 18), new Object[] { + "SCS", Character.valueOf('S'), "ingotSteel", Character.valueOf('C'), "ingotCopper" + })); + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 19), new Object[] { + "TTT", "TET", "TTT", Character.valueOf('E'), "alloyAdvanced", Character.valueOf('T'), new ItemStack(MekanismItems.PartTransmitter, 1, 18) + })); + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 20), new Object[] { + "TTT", "TRT", "TTT", Character.valueOf('R'), "alloyElite", Character.valueOf('T'), new ItemStack(MekanismItems.PartTransmitter, 1, 19) + })); + CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(new ItemStack(MekanismItems.PartTransmitter, 8, 21), new Object[] { + "TTT", "TAT", "TTT", Character.valueOf('A'), "alloyUltimate", Character.valueOf('T'), new ItemStack(MekanismItems.PartTransmitter, 1, 20) + })); //Plastic stuff CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(new ItemStack(MekanismItems.Polyethene, 1, 1), new Object[] { diff --git a/src/main/java/mekanism/common/Tier.java b/src/main/java/mekanism/common/Tier.java index a25073570..9ccad9cb2 100644 --- a/src/main/java/mekanism/common/Tier.java +++ b/src/main/java/mekanism/common/Tier.java @@ -5,6 +5,7 @@ import mekanism.api.EnumColor; import mekanism.common.multipart.TransmitterType; import mekanism.common.util.LangUtils; import net.minecraft.util.ResourceLocation; +import codechicken.lib.colour.ColourRGBA; /** * Tier information for Mekanism. This currently includes tiers for Energy Cubes and Smelting Factories. @@ -481,6 +482,77 @@ public final class Tier } } + public static enum ConductorTier + { + BASIC(5, 1, 0, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_BASIC), + ADVANCED(5, 1, 0, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_ADVANCED), + ELITE(5, 1, 0, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_ELITE), + ULTIMATE(5, 1, 0, new ColourRGBA(0.2, 0.2, 0.2, 1), TransmitterType.THERMODYNAMIC_CONDUCTOR_ULTIMATE); + + public BaseTier getBaseTier() + { + return BaseTier.values()[ordinal()]; + } + + public double inverseConduction; + private double baseConduction; + + public double inverseHeatCapacity; + private double baseHeatCapacity; + + public double inverseConductionInsulation; + private double baseConductionInsulation; + + public ColourRGBA baseColour; + + public TransmitterType type; + + private ConductorTier(double inversek, double inverseC, double insulationInversek, ColourRGBA colour, TransmitterType transmitterType) + { + baseConduction = inverseConduction = inversek; + baseHeatCapacity = inverseHeatCapacity = inverseC; + baseConductionInsulation = inverseConductionInsulation = insulationInversek; + + baseColour = colour; + + type = transmitterType; + } + + protected void loadConfig() + { + inverseConduction = Mekanism.configuration.get("tier", getBaseTier().getName() + "ConductorInverseConduction", baseConduction).getDouble(); + inverseHeatCapacity = Mekanism.configuration.get("tier", getBaseTier().getName() + "ConductorHeatCapacity", baseHeatCapacity).getDouble(); + inverseConductionInsulation = Mekanism.configuration.get("tier", getBaseTier().getName() + "ConductorConductionInsulation", baseConductionInsulation).getDouble(); + } + + protected void readConfig(ByteBuf dataStream) + { + inverseConduction = dataStream.readDouble(); + inverseHeatCapacity = dataStream.readDouble(); + inverseConductionInsulation = dataStream.readDouble(); + } + + protected void writeConfig(ByteBuf dataStream) + { + dataStream.writeDouble(inverseConduction); + dataStream.writeDouble(inverseHeatCapacity); + dataStream.writeDouble(inverseConductionInsulation); + } + + public static ConductorTier get(BaseTier tier) + { + for(ConductorTier transmitter : values()) + { + if(transmitter.getBaseTier() == tier) + { + return transmitter; + } + } + + return BASIC; + } + } + public static void loadConfig() { for(CableTier tier : CableTier.values()) @@ -517,6 +589,11 @@ public final class Tier { tier.loadConfig(); } + + for(ConductorTier tier : ConductorTier.values()) + { + tier.loadConfig(); + } } public static void readConfig(ByteBuf dataStream) @@ -555,6 +632,11 @@ public final class Tier { tier.readConfig(dataStream); } + + for(ConductorTier tier : ConductorTier.values()) + { + tier.readConfig(dataStream); + } } public static void writeConfig(ByteBuf dataStream) @@ -593,5 +675,10 @@ public final class Tier { tier.writeConfig(dataStream); } + + for(ConductorTier tier : ConductorTier.values()) + { + tier.writeConfig(dataStream); + } } } diff --git a/src/main/java/mekanism/common/frequency/FrequencyManager.java b/src/main/java/mekanism/common/frequency/FrequencyManager.java index fdf39b848..3e0c05231 100644 --- a/src/main/java/mekanism/common/frequency/FrequencyManager.java +++ b/src/main/java/mekanism/common/frequency/FrequencyManager.java @@ -9,7 +9,6 @@ import java.util.Iterator; import java.util.Set; import mekanism.api.Coord4D; -import mekanism.common.tile.TileEntityTeleporter; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; @@ -247,12 +246,12 @@ public class FrequencyManager else { TileEntity tile = coord.getTileEntity(world); - if(!(tile instanceof TileEntityTeleporter)) + if(!(tile instanceof IFrequencyHandler)) { iter.remove(); } else { - Frequency freq = ((TileEntityTeleporter)tile).frequency; + Frequency freq = ((IFrequencyHandler)tile).getFrequency(); if(freq == null || !freq.equals(iterFreq)) { diff --git a/src/main/java/mekanism/common/frequency/IFrequencyHandler.java b/src/main/java/mekanism/common/frequency/IFrequencyHandler.java new file mode 100644 index 000000000..753e99d8f --- /dev/null +++ b/src/main/java/mekanism/common/frequency/IFrequencyHandler.java @@ -0,0 +1,6 @@ +package mekanism.common.frequency; + +public interface IFrequencyHandler +{ + public Frequency getFrequency(); +} diff --git a/src/main/java/mekanism/common/multipart/ItemPartTransmitter.java b/src/main/java/mekanism/common/multipart/ItemPartTransmitter.java index 9c6640398..42edc32c8 100644 --- a/src/main/java/mekanism/common/multipart/ItemPartTransmitter.java +++ b/src/main/java/mekanism/common/multipart/ItemPartTransmitter.java @@ -152,6 +152,12 @@ public class ItemPartTransmitter extends JItemMultiPart list.add("- " + EnumColor.DARK_RED + LangUtils.localize("tooltip.diversionDesc")); break; } + case 18: case 19: case 20: case 21: + { + list.add(EnumColor.DARK_GREY + LangUtils.localize("tooltip.capableTrans") + ":"); + list.add("- " + EnumColor.PURPLE + LangUtils.localize("tooltip.heat") + " (Mekanism)"); + break; + } } } } @@ -161,7 +167,6 @@ public class ItemPartTransmitter extends JItemMultiPart { for(TransmitterType type : TransmitterType.values()) { - if(type == TransmitterType.HEAT_TRANSMITTER) continue; //TODO listToAddTo.add(new ItemStack(item, 1, type.ordinal())); } } diff --git a/src/main/java/mekanism/common/multipart/MultipartHeatTransmitter.java b/src/main/java/mekanism/common/multipart/MultipartHeatTransmitter.java deleted file mode 100644 index 7cf30dd9a..000000000 --- a/src/main/java/mekanism/common/multipart/MultipartHeatTransmitter.java +++ /dev/null @@ -1,116 +0,0 @@ -package mekanism.common.multipart; - -import mekanism.api.IHeatTransfer; -import mekanism.common.HeatNetwork; -import mekanism.common.util.HeatUtils; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import codechicken.lib.colour.ColourRGBA; - -/** - * Created by ben on 01/04/15. - */ -public class MultipartHeatTransmitter extends MultipartTransmitter implements IHeatTransfer -{ - public double temperature = 0; - public double clientTemperature = 0; - public double heatToAbsorb = 0; - - public HeatMaterial material = HeatMaterial.DEFAULT; - - public MultipartHeatTransmitter(PartHeatTransmitter multiPart) - { - super(multiPart); - } - - @Override - public double getTemp() - { - return temperature; - } - - @Override - public double getInverseConductionCoefficient() - { - return material.inverseConduction; - } - - @Override - public double getInsulationCoefficient(ForgeDirection side) - { - return material.inverseConductionInsulation; - } - - @Override - public void transferHeatTo(double heat) - { - heatToAbsorb += heat; - } - - @Override - public double[] simulateHeat() - { - return HeatUtils.simulate(this); - } - - @Override - public double applyTemperatureChange() - { - temperature += material.inverseHeatCapacity * heatToAbsorb; - heatToAbsorb = 0; - - if(Math.abs(temperature - clientTemperature) > (temperature / 100)) - { - clientTemperature = temperature; - getPart().sendTemp(); - } - - return temperature; - } - - @Override - public boolean canConnectHeat(ForgeDirection side) - { - return true; - } - - @Override - public IHeatTransfer getAdjacent(ForgeDirection side) - { - if(getPart().connectionMapContainsSide(getPart().getAllCurrentConnections(), side)) - { - TileEntity adj = coord().getFromSide(side).getTileEntity(world()); - - if(adj instanceof IHeatTransfer) - { - return (IHeatTransfer)adj; - } - } - - return null; - } - - @Override - public PartHeatTransmitter getPart() - { - return (PartHeatTransmitter)containingPart; - } - - public static enum HeatMaterial - { - DEFAULT(5, 1, 0, new ColourRGBA(0.2, 0.2, 0.2, 1)); - - double inverseConduction; - double inverseHeatCapacity; - double inverseConductionInsulation; - ColourRGBA baseColour; - - private HeatMaterial(double inversek, double inverseC, double insulationInversek, ColourRGBA colour) - { - inverseConduction = inversek; - inverseHeatCapacity = inverseC; - inverseConductionInsulation = insulationInversek; - baseColour = colour; - } - } -} diff --git a/src/main/java/mekanism/common/multipart/MultipartMekanism.java b/src/main/java/mekanism/common/multipart/MultipartMekanism.java index 6171cfc34..163c151df 100644 --- a/src/main/java/mekanism/common/multipart/MultipartMekanism.java +++ b/src/main/java/mekanism/common/multipart/MultipartMekanism.java @@ -1,21 +1,18 @@ package mekanism.common.multipart; +import static mekanism.common.block.BlockMachine.MachineBlock.MACHINE_BLOCK_1; +import static mekanism.common.block.BlockMachine.MachineBlock.MACHINE_BLOCK_2; import mekanism.common.MekanismBlocks; import mekanism.common.Tier; import mekanism.common.block.BlockMachine.MachineType; - import net.minecraft.item.ItemStack; -import cpw.mods.fml.common.event.FMLInterModComms; - import codechicken.microblock.BlockMicroMaterial; import codechicken.microblock.MicroMaterialRegistry; import codechicken.multipart.MultiPartRegistry; import codechicken.multipart.MultiPartRegistry.IPartFactory; import codechicken.multipart.MultipartGenerator; import codechicken.multipart.TMultiPart; - -import static mekanism.common.block.BlockMachine.MachineBlock.MACHINE_BLOCK_1; -import static mekanism.common.block.BlockMachine.MachineBlock.MACHINE_BLOCK_2; +import cpw.mods.fml.common.event.FMLInterModComms; public class MultipartMekanism implements IPartFactory { @@ -36,7 +33,9 @@ public class MultipartMekanism implements IPartFactory "mekanism:logistical_transporter_basic", "mekanism:logistical_transporter_advanced", "mekanism:logistical_transporter_elite", "mekanism:logistical_transporter_ultimate", "mekanism:restrictive_transporter", "mekanism:diversion_transporter", - "mekanism:heat_transmitter", "mekanism:glow_panel"}); + "mekanism:thermodynamic_conductor_basic", "mekanism:thermodynamic_conductor_advanced", + "mekanism:thermodynamic_conductor_elite", "mekanism:thermodynamic_conductor_ultimate", + "mekanism:glow_panel"}); MultipartGenerator.registerPassThroughInterface("mekanism.api.IConfigurable"); MultipartGenerator.registerPassThroughInterface("mekanism.api.energy.IStrictEnergyAcceptor"); @@ -136,9 +135,21 @@ public class MultipartMekanism implements IPartFactory { return new PartDiversionTransporter(); } - else if(name.equals("mekanism:heat_transmitter")) + else if(name.equals("mekanism:thermodynamic_conductor_basic")) { - return new PartHeatTransmitter(); + return new PartThermodynamicConductor(Tier.ConductorTier.BASIC); + } + else if(name.equals("mekanism:thermodynamic_conductor_advanced")) + { + return new PartThermodynamicConductor(Tier.ConductorTier.ADVANCED); + } + else if(name.equals("mekanism:thermodynamic_conductor_elite")) + { + return new PartThermodynamicConductor(Tier.ConductorTier.ELITE); + } + else if(name.equals("mekanism:thermodynamic_conductor_ultimate")) + { + return new PartThermodynamicConductor(Tier.ConductorTier.ULTIMATE); } else if(name.equals("mekanism:glow_panel")) { diff --git a/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java b/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java deleted file mode 100644 index 8ca7678ff..000000000 --- a/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java +++ /dev/null @@ -1,179 +0,0 @@ -package mekanism.common.multipart; - -import codechicken.lib.colour.ColourRGBA; -import codechicken.lib.data.MCDataInput; -import codechicken.lib.data.MCDataOutput; -import codechicken.lib.vec.Vector3; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import mekanism.api.IHeatTransfer; -import mekanism.api.transmitters.TransmissionType; -import mekanism.client.render.RenderPartTransmitter; -import mekanism.common.HeatNetwork; -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 java.util.Collection; - -public class PartHeatTransmitter extends PartTransmitter -{ - 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() {} - - @Override - public void updateShare() {} - - public static void registerIcons(IIconRegister register) - { - heatIcons.registerCenterIcons(register, new String[] {"HeatTransmitter"}); - heatIcons.registerSideIcons(register, new String[] {"SmallTransmitterVerticalBasic", "SmallTransmitterHorizontalBasic"}); - //TODO tiers - } - - @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; - } -} diff --git a/src/main/java/mekanism/common/multipart/PartSidedPipe.java b/src/main/java/mekanism/common/multipart/PartSidedPipe.java index d4d86bfb2..1f49eac4e 100644 --- a/src/main/java/mekanism/common/multipart/PartSidedPipe.java +++ b/src/main/java/mekanism/common/multipart/PartSidedPipe.java @@ -131,8 +131,14 @@ public abstract class PartSidedPipe extends TMultiPart implements TSlottedPart, return new PartRestrictiveTransporter(); case DIVERSION_TRANSPORTER: return new PartDiversionTransporter(); - case HEAT_TRANSMITTER: - return new PartHeatTransmitter(); + case THERMODYNAMIC_CONDUCTOR_BASIC: + return new PartThermodynamicConductor(Tier.ConductorTier.BASIC); + case THERMODYNAMIC_CONDUCTOR_ADVANCED: + return new PartThermodynamicConductor(Tier.ConductorTier.ADVANCED); + case THERMODYNAMIC_CONDUCTOR_ELITE: + return new PartThermodynamicConductor(Tier.ConductorTier.ELITE); + case THERMODYNAMIC_CONDUCTOR_ULTIMATE: + return new PartThermodynamicConductor(Tier.ConductorTier.ULTIMATE); default: return null; } diff --git a/src/main/java/mekanism/common/multipart/PartThermodynamicConductor.java b/src/main/java/mekanism/common/multipart/PartThermodynamicConductor.java new file mode 100644 index 000000000..bba2e1d22 --- /dev/null +++ b/src/main/java/mekanism/common/multipart/PartThermodynamicConductor.java @@ -0,0 +1,274 @@ +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.Tier; +import mekanism.common.Tier.BaseTier; +import mekanism.common.Tier.ConductorTier; +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 codechicken.lib.colour.ColourRGBA; +import codechicken.lib.data.MCDataInput; +import codechicken.lib.data.MCDataOutput; +import codechicken.lib.vec.Vector3; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class PartThermodynamicConductor extends PartTransmitter implements IHeatTransfer +{ + public Tier.ConductorTier tier; + + public static TransmitterIcons conductorIcons = new TransmitterIcons(4, 8); + + public double temperature = 0; + public double clientTemperature = 0; + public double heatToAbsorb = 0; + + public PartThermodynamicConductor(Tier.ConductorTier conductorTier) + { + super(); + tier = conductorTier; + } + + @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() {} + + @Override + public void updateShare() {} + + public static void registerIcons(IIconRegister register) + { + conductorIcons.registerCenterIcons(register, new String[] {"ThermodynamicConductorBasic", "ThermodynamicConductorAdvanced", + "ThermodynamicConductorElite", "ThermodynamicConductorUltimate"}); + conductorIcons.registerSideIcons(register, new String[] {"SmallTransmitterVerticalBasic", "SmallTransmitterVerticalAdvanced", "SmallTransmitterVerticalElite", "SmallTransmitterVerticalUltimate", + "SmallTransmitterHorizontalBasic", "SmallTransmitterHorizontalAdvanced", "SmallTransmitterHorizontalElite", "SmallTransmitterHorizontalUltimate"}); + } + + @Override + public IIcon getCenterIcon(boolean opaque) + { + return conductorIcons.getCenterIcon(tier.ordinal()); + } + + @Override + public IIcon getSideIcon(boolean opaque) + { + return conductorIcons.getSideIcon(tier.ordinal()); + } + + @Override + public IIcon getSideIconRotated(boolean opaque) + { + return conductorIcons.getSideIcon(4+tier.ordinal()); + } + + @Override + public TransmitterType getTransmitterType() + { + return tier.type; + } + + @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:thermodynamic_conductor_" + tier.name().toLowerCase(); + } + + @Override + protected boolean onConfigure(EntityPlayer player, int part, int side) + { + 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); + + temperature = nbtTags.getDouble("temperature"); + } + + @Override + public void save(NBTTagCompound nbtTags) + { + super.save(nbtTags); + + nbtTags.setDouble("temperature", temperature); + } + + public void sendTemp() + { + MCDataOutput packet = getWriteStream(); + packet.writeBoolean(true); + packet.writeDouble(temperature); + } + + @Override + public void writeDesc(MCDataOutput packet) + { + packet.writeBoolean(false); + + super.writeDesc(packet); + + packet.writeInt(tier.ordinal()); + } + + @Override + public void readDesc(MCDataInput packet) + { + if(packet.readBoolean()) + { + temperature = packet.readDouble(); + } + else { + super.readDesc(packet); + + tier = ConductorTier.values()[packet.readInt()]; + } + } + + public ColourRGBA getBaseColour() + { + return tier.baseColour; + } + + @Override + public double getTemp() + { + return temperature; + } + + @Override + public double getInverseConductionCoefficient() + { + return tier.inverseConduction; + } + + @Override + public double getInsulationCoefficient(ForgeDirection side) + { + return tier.inverseConductionInsulation; + } + + @Override + public void transferHeatTo(double heat) + { + heatToAbsorb += heat; + } + + @Override + public double[] simulateHeat() + { + return HeatUtils.simulate(this); + } + + @Override + public double applyTemperatureChange() + { + temperature += tier.inverseHeatCapacity * heatToAbsorb; + heatToAbsorb = 0; + + if(Math.abs(temperature - clientTemperature) > (temperature / 100)) + { + clientTemperature = temperature; + sendTemp(); + } + + return temperature; + } + + @Override + public boolean canConnectHeat(ForgeDirection side) + { + return true; + } + + @Override + public IHeatTransfer getAdjacent(ForgeDirection side) + { + if(connectionMapContainsSide(getAllCurrentConnections(), side)) + { + TileEntity adj = Coord4D.get(tile()).getFromSide(side).getTileEntity(world()); + + if(adj instanceof IHeatTransfer) + { + return (IHeatTransfer)adj; + } + } + + return null; + } + + @Override + public boolean upgrade(int tierOrdinal) + { + if(tier.ordinal() < BaseTier.ULTIMATE.ordinal() && tierOrdinal == tier.ordinal()+1) + { + tier = ConductorTier.values()[tier.ordinal()+1]; + + markDirtyTransmitters(); + sendDesc = true; + + return true; + } + + return false; + } +} diff --git a/src/main/java/mekanism/common/multipart/TransmitterType.java b/src/main/java/mekanism/common/multipart/TransmitterType.java index d0c037a9c..ab01b58ea 100644 --- a/src/main/java/mekanism/common/multipart/TransmitterType.java +++ b/src/main/java/mekanism/common/multipart/TransmitterType.java @@ -24,7 +24,10 @@ public enum TransmitterType LOGISTICAL_TRANSPORTER_ULTIMATE("UltimateLogisticalTransporter", BaseTier.ULTIMATE, Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 3, 3, 6, 10), RESTRICTIVE_TRANSPORTER("RestrictiveTransporter", BaseTier.BASIC, Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, false, 4, 8), DIVERSION_TRANSPORTER("DiversionTransporter", BaseTier.BASIC, Size.LARGE, TransmissionType.ITEM, PartLogisticalTransporter.transporterIcons, true, 5, 14, 6, 10), - HEAT_TRANSMITTER("HeatTransmitter", BaseTier.BASIC, Size.SMALL, TransmissionType.HEAT, PartHeatTransmitter.heatIcons, false, 0, 0); + THERMODYNAMIC_CONDUCTOR_BASIC("BasicThermodynamicConductor", BaseTier.BASIC, Size.SMALL, TransmissionType.HEAT, PartThermodynamicConductor.conductorIcons, false, 0, 0), + THERMODYNAMIC_CONDUCTOR_ADVANCED("AdvancedThermodynamicConductor", BaseTier.ADVANCED, Size.SMALL, TransmissionType.HEAT, PartThermodynamicConductor.conductorIcons, false, 1, 1), + THERMODYNAMIC_CONDUCTOR_ELITE("EliteThermodynamicConductor", BaseTier.ELITE, Size.SMALL, TransmissionType.HEAT, PartThermodynamicConductor.conductorIcons, false, 2, 2), + THERMODYNAMIC_CONDUCTOR_ULTIMATE("UltimateThermodynamicConductor", BaseTier.ULTIMATE, Size.SMALL, TransmissionType.HEAT, PartThermodynamicConductor.conductorIcons, false, 3, 3); private String unlocalizedName; private Size size; diff --git a/src/main/java/mekanism/common/tile/TileEntitySolarEvaporationController.java b/src/main/java/mekanism/common/tile/TileEntitySolarEvaporationController.java index bc29e4462..4a3a7383d 100644 --- a/src/main/java/mekanism/common/tile/TileEntitySolarEvaporationController.java +++ b/src/main/java/mekanism/common/tile/TileEntitySolarEvaporationController.java @@ -53,7 +53,7 @@ public class TileEntitySolarEvaporationController extends TileEntitySolarEvapora public float biomeTemp = 0; public float temperature = 0; - public float tempToAdd = 0; + public float heatToAbsorb = 0; public float lastGain = 0; @@ -328,8 +328,8 @@ public class TileEntitySolarEvaporationController extends TileEntitySolarEvapora temperatureSet = true; } - tempToAdd += getActiveSolars()*general.evaporationSolarMultiplier; - temperature += tempToAdd/(float)height; + heatToAbsorb += getActiveSolars()*general.evaporationSolarMultiplier; + temperature += heatToAbsorb/(float)height; float biome = biomeTemp-0.5F; float base = biome > 0 ? biome*20 : biomeTemp*40; @@ -342,7 +342,7 @@ public class TileEntitySolarEvaporationController extends TileEntitySolarEvapora temperature = (float)Math.min(general.evaporationMaxTemp, temperature + incr/(float)height); - tempToAdd = 0; + heatToAbsorb = 0; MekanismUtils.saveChunk(this); } diff --git a/src/main/java/mekanism/common/tile/TileEntityTeleporter.java b/src/main/java/mekanism/common/tile/TileEntityTeleporter.java index 352d0db8a..10168af77 100644 --- a/src/main/java/mekanism/common/tile/TileEntityTeleporter.java +++ b/src/main/java/mekanism/common/tile/TileEntityTeleporter.java @@ -1,9 +1,13 @@ package mekanism.common.tile; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + import mekanism.api.Chunk3D; import mekanism.api.Coord4D; import mekanism.common.Mekanism; @@ -13,6 +17,7 @@ import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.chunkloading.IChunkLoader; import mekanism.common.frequency.Frequency; import mekanism.common.frequency.FrequencyManager; +import mekanism.common.frequency.IFrequencyHandler; import mekanism.common.integration.IComputerIntegration; import mekanism.common.network.PacketPortalFX.PortalFXMessage; import mekanism.common.network.PacketTileEntity.TileEntityMessage; @@ -35,10 +40,11 @@ import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.ForgeChunkManager.Ticket; import net.minecraftforge.common.ForgeChunkManager.Type; import net.minecraftforge.common.util.ForgeDirection; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; -import java.util.*; - -public class TileEntityTeleporter extends TileEntityElectricBlock implements IComputerIntegration, IChunkLoader +public class TileEntityTeleporter extends TileEntityElectricBlock implements IComputerIntegration, IChunkLoader, IFrequencyHandler { private MinecraftServer server = MinecraftServer.getServer(); @@ -141,6 +147,12 @@ public class TileEntityTeleporter extends TileEntityElectricBlock implements ICo ChargeUtils.discharge(0, this); } + @Override + public Frequency getFrequency() + { + return frequency; + } + public Coord4D getClosest() { if(frequency != null) diff --git a/src/main/resources/assets/mekanism/lang/en_US.lang b/src/main/resources/assets/mekanism/lang/en_US.lang index 18f089554..32902aa36 100644 --- a/src/main/resources/assets/mekanism/lang/en_US.lang +++ b/src/main/resources/assets/mekanism/lang/en_US.lang @@ -180,6 +180,10 @@ item.MultipartTransmitter.EliteLogisticalTransporter.name=Elite Logistical Trans item.MultipartTransmitter.UltimateLogisticalTransporter.name=Ultimate Logistical Transporter item.MultipartTransmitter.RestrictiveTransporter.name=Restrictive Transporter item.MultipartTransmitter.DiversionTransporter.name=Diversion Transporter +item.MultipartTransmitter.BasicThermodynamicConductor.name=Basic Thermodynamic Conductor +item.MultipartTransmitter.AdvancedThermodynamicConductor.name=Advanced Thermodynamic Conductor +item.MultipartTransmitter.EliteThermodynamicConductor.name=Elite Thermodynamic Conductor +item.MultipartTransmitter.UltimateThermodynamicConductor.name=Ultimate Thermodynamic Conductor //Glow Panel item.GlowPanel.name=Glow Panel @@ -684,6 +688,7 @@ tooltip.insufficientFuel=Insufficient Fuel tooltip.readyForReaction=Ready for Reaction tooltip.speed=Speed tooltip.and=and +tooltip.heat=Heat tooltip.portableTank.bucketMode=Bucket Mode diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/HeatTransmitter.png b/src/main/resources/assets/mekanism/textures/blocks/models/HeatTransmitter.png deleted file mode 100644 index cc7b6cddb..000000000 Binary files a/src/main/resources/assets/mekanism/textures/blocks/models/HeatTransmitter.png and /dev/null differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorAdvanced.png b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorAdvanced.png new file mode 100644 index 000000000..a9b5da27f Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorAdvanced.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorBasic.png b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorBasic.png new file mode 100644 index 000000000..357fa8a9f Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorBasic.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorElite.png b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorElite.png new file mode 100644 index 000000000..cbc8656a9 Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorElite.png differ diff --git a/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorUltimate.png b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorUltimate.png new file mode 100644 index 000000000..b6d1157e7 Binary files /dev/null and b/src/main/resources/assets/mekanism/textures/blocks/models/ThermodynamicConductorUltimate.png differ