From bc4de91b5bcfb6740a8da44517886a997ebe67a1 Mon Sep 17 00:00:00 2001 From: RecursivePineapple Date: Sun, 13 Oct 2024 10:23:08 -0400 Subject: [PATCH] Added new coolant and components - Added pseudo-crystalline naquadah, which is a better coolant - Added coolant heat exchangers, which are heat vents that only work in fluid reactors - Added cells for all four fluids - Added scanner info to reactors & access hatches - Added better heat plate --- .../nuclear_horizons/ClientProxy.java | 3 + .../nuclear_horizons/CommonProxy.java | 10 +- .../nuclear_horizons/Config.java | 2 + .../reactors/blocks/BlockList.java | 27 ----- .../reactors/blocks/ReactorAccessHatch.java | 17 ++- .../reactors/blocks/ReactorChamber.java | 16 ++- .../reactors/blocks/ReactorCore.java | 17 ++- .../components/adapters/HeatMoverAdapter.java | 34 ++++-- .../reactors/fluids/FluidList.java | 98 +++++++++-------- .../reactors/fluids/IconLoader.java | 38 +++++++ .../reactors/items/ItemList.java | 43 ++++++++ .../reactors/items/MetaCellItem.java | 80 ++++++++++++++ .../items/basic/BasicHeatVentCoolantItem.java | 104 ++++++++++++++++++ .../reactors/items/basic/ReactorItem.java | 10 +- .../reactors/tile/TileAccessHatch.java | 27 ++++- .../reactors/tile/TileReactorChamber.java | 19 +++- .../reactors/tile/TileReactorCore.java | 80 ++++++++++++-- .../assets/nuclear_horizons/lang/en_US.lang | 25 +++++ .../textures/blocks/cold_pnaq_flow.png | Bin 0 -> 4928 bytes .../textures/blocks/cold_pnaq_flow.png.mcmeta | 3 + .../textures/blocks/cold_pnaq_still.png | Bin 0 -> 9629 bytes .../blocks/cold_pnaq_still.png.mcmeta | 5 + .../textures/blocks/hot_pnaq_flow.png | Bin 0 -> 8534 bytes .../textures/blocks/hot_pnaq_flow.png.mcmeta | 3 + .../textures/blocks/hot_pnaq_still.png | Bin 0 -> 6475 bytes .../textures/blocks/hot_pnaq_still.png.mcmeta | 5 + .../textures/items/cellCoolant.png | Bin 0 -> 756 bytes .../textures/items/cellHotCoolant.png | Bin 0 -> 762 bytes .../items/cellHotPseudoLiquidNaquadah.png | Bin 0 -> 806 bytes .../items/cellPseudoLiquidNaquadah.png | Bin 0 -> 771 bytes .../textures/items/reactorPlatingHeat2.png | Bin 0 -> 910 bytes .../textures/items/reactorVentCoolant1.png | Bin 0 -> 856 bytes .../textures/items/reactorVentCoolant2.png | Bin 0 -> 859 bytes .../textures/items/reactorVentCoolant3.png | Bin 0 -> 831 bytes 34 files changed, 563 insertions(+), 103 deletions(-) create mode 100644 src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java create mode 100644 src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java create mode 100644 src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/BasicHeatVentCoolantItem.java create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_flow.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_flow.png.mcmeta create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_still.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_still.png.mcmeta create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_flow.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_flow.png.mcmeta create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_still.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_still.png.mcmeta create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/cellCoolant.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/cellHotCoolant.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/cellHotPseudoLiquidNaquadah.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/cellPseudoLiquidNaquadah.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/reactorPlatingHeat2.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/reactorVentCoolant1.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/reactorVentCoolant2.png create mode 100644 src/main/resources/assets/nuclear_horizons/textures/items/reactorVentCoolant3.png diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/ClientProxy.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/ClientProxy.java index d64d70c..6260c37 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/ClientProxy.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/ClientProxy.java @@ -2,6 +2,7 @@ import com.gtnewhorizons.modularui.common.peripheral.ModularUIPeripheralInputHandler; import com.gtnewhorizons.modularui.integration.nei.ModularUIContainerObjectHandler; +import com.recursive_pineapple.nuclear_horizons.reactors.fluids.IconLoader; import codechicken.nei.guihook.GuiContainerManager; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -18,6 +19,8 @@ public Side getSide() { public void preInit(FMLPreInitializationEvent event) { super.preInit(event); + IconLoader.INSTANCE.register(); + GuiContainerManager.addInputHandler(new ModularUIPeripheralInputHandler()); GuiContainerManager.addObjectHandler(new ModularUIContainerObjectHandler()); // NetworkRegistry.INSTANCE.registerGuiHandler(NuclearHorizons.instance, new GuiHandler()); diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/CommonProxy.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/CommonProxy.java index 8528040..01b7761 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/CommonProxy.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/CommonProxy.java @@ -24,9 +24,9 @@ public void preInit(FMLPreInitializationEvent event) { Config.synchronizeConfiguration(event.getSuggestedConfigurationFile()); - FluidList.registerFluids(); - BlockList.registerBlocks(); ItemList.registerItems(); + BlockList.registerBlocks(); + FluidList.registerFluids(); } // load "Do your mod setup. Build whatever data structures you care about. Register recipes." (Remove if not needed) @@ -36,12 +36,14 @@ public void init(FMLInitializationEvent event) { // postInit "Handle interaction with other mods, complete your setup based on this." (Remove if not needed) public void postInit(FMLPostInitializationEvent event) { + FluidList.registerContainers(); FluidList.registerCoolants(); + SimulationItems.registerSimulationItems(); + ForeignItems.registerForeignReactorItems(); } // register server commands in this event handler (Remove if not needed) public void serverStarting(FMLServerStartingEvent event) { - SimulationItems.registerSimulationItems(); - ForeignItems.registerForeignReactorItems(); + } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java index 8f288fa..c4310ad 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/Config.java @@ -11,6 +11,8 @@ public class Config { public static double MOX_EU_COEFFICIENT = 4; public static int REACTOR_EU_MULTIPLIER = 100; public static int FLUID_NUKE_HU_MULTIPLIER = 2; + public static int COOLANT_SPECIFIC_HEAT = 1; + public static int NAQ_COOLANT_SPECIFIC_HEAT = 8; public static void synchronizeConfiguration(File configFile) { Configuration configuration = new Configuration(configFile); diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/BlockList.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/BlockList.java index 0fc4d39..43fc3f1 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/BlockList.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/BlockList.java @@ -3,10 +3,6 @@ import static cpw.mods.fml.common.registry.GameRegistry.registerBlock; import static cpw.mods.fml.common.registry.GameRegistry.registerTileEntity; -import net.minecraft.block.material.Material; - -import com.recursive_pineapple.nuclear_horizons.NuclearHorizons; -import com.recursive_pineapple.nuclear_horizons.reactors.fluids.FluidList; import com.recursive_pineapple.nuclear_horizons.reactors.tile.TileAccessHatch; import com.recursive_pineapple.nuclear_horizons.reactors.tile.TileFluidPort; import com.recursive_pineapple.nuclear_horizons.reactors.tile.TileReactorChamber; @@ -25,8 +21,6 @@ public class BlockList { public static final String REACTOR_REDSTONE_PORT_NAME = "reactor_redstone_port"; public static final String REACTOR_THERMAL_SENSOR_NAME = "reactor_thermal_sensor"; public static final String REACTOR_SIMULATOR_NAME = "reactor_simulator"; - public static final String COOLANT_BLOCK_NAME = "nh_coolant"; - public static final String HOT_COOLANT_BLOCK_NAME = "nh_hot_coolant"; public static ReactorCore REACTOR_CORE; public static ReactorChamber REACTOR_CHAMBER; @@ -37,9 +31,6 @@ public class BlockList { public static ReactorThermalSensor REACTOR_THERMAL_SENSOR; public static ReactorSimulator REACTOR_SIMULATOR; - public static FluidBlock COOLANT_BLOCK; - public static FluidBlock HOT_COOLANT_BLOCK; - public static void registerBlocks() { REACTOR_CORE = new ReactorCore(); REACTOR_CHAMBER = new ReactorChamber(); @@ -50,21 +41,6 @@ public static void registerBlocks() { REACTOR_THERMAL_SENSOR = new ReactorThermalSensor(); REACTOR_SIMULATOR = new ReactorSimulator(); - COOLANT_BLOCK = new FluidBlock( - FluidList.COOLANT, - Material.water, - NuclearHorizons.MODID + ":coolant_still", - NuclearHorizons.MODID + ":coolant_flow"); - COOLANT_BLOCK.setBlockName(COOLANT_BLOCK_NAME); - - HOT_COOLANT_BLOCK = new FluidBlock( - FluidList.HOT_COOLANT, - Material.water, - NuclearHorizons.MODID + ":hot_coolant_still", - NuclearHorizons.MODID + ":hot_coolant_flow"); - HOT_COOLANT_BLOCK.setBurnsEntities(true); - HOT_COOLANT_BLOCK.setBlockName(HOT_COOLANT_BLOCK_NAME); - registerBlock(REACTOR_CORE, REACTOR_CORE_NAME); registerTileEntity(TileReactorCore.class, REACTOR_CORE_NAME); @@ -87,8 +63,5 @@ public static void registerBlocks() { registerBlock(REACTOR_SIMULATOR, REACTOR_SIMULATOR_NAME); registerTileEntity(TileReactorSimulator.class, REACTOR_SIMULATOR_NAME); - - registerBlock(COOLANT_BLOCK, COOLANT_BLOCK_NAME); - registerBlock(HOT_COOLANT_BLOCK, HOT_COOLANT_BLOCK_NAME); } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorAccessHatch.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorAccessHatch.java index cb675a0..40ae28f 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorAccessHatch.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorAccessHatch.java @@ -1,5 +1,7 @@ package com.recursive_pineapple.nuclear_horizons.reactors.blocks; +import java.util.ArrayList; + import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -9,7 +11,10 @@ import com.gtnewhorizons.modularui.api.UIInfos; import com.recursive_pineapple.nuclear_horizons.reactors.tile.TileAccessHatch; -public class ReactorAccessHatch extends BlockContainer { +import gregtech.api.interfaces.IDebugableBlock; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; + +public class ReactorAccessHatch extends BlockContainer implements IDebugableBlock { public ReactorAccessHatch() { super(Material.rock); @@ -39,4 +44,14 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer return false; } } + + @Override + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) { + if (aPlayer.getEntityWorld() + .getTileEntity(aX, aY, aZ) instanceof IDebugableTileEntity te) { + return te.getDebugInfo(aPlayer, aLogLevel); + } else { + return new ArrayList<>(); + } + } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorChamber.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorChamber.java index c291002..d999a5b 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorChamber.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorChamber.java @@ -1,5 +1,7 @@ package com.recursive_pineapple.nuclear_horizons.reactors.blocks; +import java.util.ArrayList; + import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; @@ -18,7 +20,10 @@ import com.recursive_pineapple.nuclear_horizons.reactors.tile.TileReactorCore; import com.recursive_pineapple.nuclear_horizons.utils.DirectionUtil; -public class ReactorChamber extends BlockContainer { +import gregtech.api.interfaces.IDebugableBlock; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; + +public class ReactorChamber extends BlockContainer implements IDebugableBlock { private IIcon iconTop, iconSide; @@ -115,4 +120,13 @@ private static int getAttachedReactors(World worldIn, int x, int y, int z) { return reactorCount; } + @Override + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) { + if (aPlayer.getEntityWorld() + .getTileEntity(aX, aY, aZ) instanceof IDebugableTileEntity te) { + return te.getDebugInfo(aPlayer, aLogLevel); + } else { + return new ArrayList<>(); + } + } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorCore.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorCore.java index b60fb0d..d96ce0c 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorCore.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/blocks/ReactorCore.java @@ -1,5 +1,7 @@ package com.recursive_pineapple.nuclear_horizons.reactors.blocks; +import java.util.ArrayList; + import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; @@ -11,7 +13,10 @@ import com.gtnewhorizons.modularui.api.UIInfos; import com.recursive_pineapple.nuclear_horizons.reactors.tile.TileReactorCore; -public class ReactorCore extends BlockContainer { +import gregtech.api.interfaces.IDebugableBlock; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; + +public class ReactorCore extends BlockContainer implements IDebugableBlock { private IIcon iconTop, iconSideInactive, iconSideActive, iconBottom; @@ -67,4 +72,14 @@ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer public void onBlockPreDestroy(World worldIn, int x, int y, int z, int meta) { ((TileReactorCore) worldIn.getTileEntity(x, y, z)).dropInventory(); } + + @Override + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) { + if (aPlayer.getEntityWorld() + .getTileEntity(aX, aY, aZ) instanceof IDebugableTileEntity te) { + return te.getDebugInfo(aPlayer, aLogLevel); + } else { + return new ArrayList<>(); + } + } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/components/adapters/HeatMoverAdapter.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/components/adapters/HeatMoverAdapter.java index 88baba0..5ab4543 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/components/adapters/HeatMoverAdapter.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/components/adapters/HeatMoverAdapter.java @@ -11,12 +11,12 @@ public class HeatMoverAdapter implements IComponentAdapter { - private final IReactorGrid reactor; - private final int x, y; - private final ItemStack itemStack; - private final IHeatMover heatMover; + protected final IReactorGrid reactor; + protected final int x, y; + protected final ItemStack itemStack; + protected final IHeatMover heatMover; - private SimulationComponentResult simResult; + protected SimulationComponentResult simResult; public HeatMoverAdapter(IReactorGrid reactor, int x, int y, ItemStack itemStack, IHeatMover heatMover) { this.reactor = reactor; @@ -67,16 +67,32 @@ public void onSimulationFinished(SimulationResult result, int componentIndex) { } + protected int getTransferFromReactor() { + return this.heatMover.getTransferFromReactor(itemStack, reactor); + } + + protected int getTransferToAir() { + return this.heatMover.getTransferToAir(itemStack, reactor); + } + + protected int getTransferNeighbourToAir(IComponentAdapter neighbour) { + return this.heatMover.getTransferNeighbourToAir(itemStack, reactor, neighbour); + } + + protected int getTransferFromNeighbour(IComponentAdapter neighbour) { + return this.heatMover.getTransferFromNeighbour(itemStack, reactor, neighbour); + } + @Override public void onHeatTick() { - int fromReactor = this.heatMover.getTransferFromReactor(itemStack, reactor); + int fromReactor = getTransferFromReactor(); if (fromReactor != 0) { this.reactor.addHullHeat(-fromReactor); this.addHeat(fromReactor); } - int toAir = this.heatMover.getTransferToAir(itemStack, reactor); + int toAir = getTransferToAir(); if (toAir != 0) { this.addHeat(-toAir); @@ -98,7 +114,7 @@ public void onHeatTick() { var neighbour = reactor.getComponent(x2, y2); if (neighbour != null && neighbour.containsHeat()) { - int fromNeighbourToAir = this.heatMover.getTransferNeighbourToAir(itemStack, reactor, neighbour); + int fromNeighbourToAir = getTransferNeighbourToAir(neighbour); if (fromNeighbourToAir != 0) { neighbour.addHeat(-fromNeighbourToAir); @@ -109,7 +125,7 @@ public void onHeatTick() { } } - int fromNeighbour = this.heatMover.getTransferFromNeighbour(itemStack, reactor, neighbour); + int fromNeighbour = getTransferFromNeighbour(neighbour); if (fromNeighbour != 0) { neighbour.addHeat(-fromNeighbour); diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java index 03200f8..dd23c28 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/FluidList.java @@ -1,70 +1,80 @@ package com.recursive_pineapple.nuclear_horizons.reactors.fluids; +import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; -import com.recursive_pineapple.nuclear_horizons.reactors.blocks.BlockList; +import com.recursive_pineapple.nuclear_horizons.Config; +import com.recursive_pineapple.nuclear_horizons.reactors.items.ItemList; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.registries.LHECoolantRegistry; public class FluidList { public static final String COOLANT_NAME = "nh_coolant"; public static final String HOT_COOLANT_NAME = "nh_hot_coolant"; - public static final String HOT_SUPER_COOLANT_NAME = "nh_hot_super_coolant"; + public static final String PSEUDO_LIQUID_NAQUADAH_NAME = "pseudo_liquid_naquadah"; + public static final String HOT_PSEUDO_LIQUID_NAQUADAH_NAME = "hot_pseudo_liquid_naquadah"; - public static Fluid COOLANT; - public static Fluid HOT_COOLANT; - public static Fluid HOT_SUPER_COOLANT; + public static final Fluid COOLANT = new Fluid(COOLANT_NAME); + public static final Fluid HOT_COOLANT = new Fluid(HOT_COOLANT_NAME); + public static final Fluid PSEUDO_LIQUID_NAQUADAH = new Fluid(PSEUDO_LIQUID_NAQUADAH_NAME); + public static final Fluid HOT_PSEUDO_LIQUID_NAQUADAH = new Fluid(HOT_PSEUDO_LIQUID_NAQUADAH_NAME); public static void registerFluids() { - COOLANT = new Fluid(COOLANT_NAME) { - - public net.minecraft.util.IIcon getStillIcon() { - return BlockList.COOLANT_BLOCK.stillIcon; - }; - - public net.minecraft.util.IIcon getFlowingIcon() { - return BlockList.COOLANT_BLOCK.flowingIcon; - }; - }; - - HOT_COOLANT = new Fluid(HOT_COOLANT_NAME) { - - public net.minecraft.util.IIcon getStillIcon() { - return BlockList.HOT_COOLANT_BLOCK.stillIcon; - }; - - public net.minecraft.util.IIcon getFlowingIcon() { - return BlockList.HOT_COOLANT_BLOCK.flowingIcon; - }; - }; + FluidRegistry.registerFluid(COOLANT); - // Temporary, will probably be removed - HOT_SUPER_COOLANT = new Fluid(HOT_SUPER_COOLANT_NAME) { + HOT_COOLANT.setTemperature(273 + 200); + FluidRegistry.registerFluid(HOT_COOLANT); - public net.minecraft.util.IIcon getStillIcon() { - return BlockList.COOLANT_BLOCK.stillIcon; - }; + PSEUDO_LIQUID_NAQUADAH.setTemperature(273 + 90); + FluidRegistry.registerFluid(PSEUDO_LIQUID_NAQUADAH); - public net.minecraft.util.IIcon getFlowingIcon() { - return BlockList.COOLANT_BLOCK.flowingIcon; - }; - }; + HOT_PSEUDO_LIQUID_NAQUADAH.setTemperature(273 + 500); + FluidRegistry.registerFluid(HOT_PSEUDO_LIQUID_NAQUADAH); + } - FluidRegistry.registerFluid(COOLANT); + public static void registerContainers() { + registerCell(COOLANT, 0); + registerCell(HOT_COOLANT, 1); + registerCell(PSEUDO_LIQUID_NAQUADAH, 2); + registerCell(HOT_PSEUDO_LIQUID_NAQUADAH, 3); + } - HOT_COOLANT.setTemperature(273 + 500); - FluidRegistry.registerFluid(HOT_COOLANT); + private static void registerCell(Fluid fluid, int metadata) { + ItemStack empty = new ItemStack(GameRegistry.findItem("IC2", "itemCellEmpty")); - HOT_SUPER_COOLANT.setTemperature(273 + 1000); - FluidRegistry.registerFluid(HOT_SUPER_COOLANT); + FluidContainerRegistry.registerFluidContainer( + new FluidContainerData(new FluidStack(fluid, 1000), new ItemStack(ItemList.CELLS, 1, metadata), empty)); } public static void registerCoolants() { - CoolantRegistry.registerCoolant(COOLANT, HOT_COOLANT, 1); + CoolantRegistry.registerCoolant(COOLANT, HOT_COOLANT, Config.COOLANT_SPECIFIC_HEAT); + CoolantRegistry.registerCoolant( + FluidRegistry.getFluid("ic2coolant"), + FluidRegistry.getFluid("ic2hotcoolant"), + Config.COOLANT_SPECIFIC_HEAT); CoolantRegistry - .registerCoolant(FluidRegistry.getFluid("ic2coolant"), FluidRegistry.getFluid("ic2hotcoolant"), 1); - - // CoolantRegistry.registerCoolant(Materials.Lead.mStandardMoltenFluid, HOT_SUPER_COOLANT, 10); + .registerCoolant(PSEUDO_LIQUID_NAQUADAH, HOT_PSEUDO_LIQUID_NAQUADAH, Config.NAQ_COOLANT_SPECIFIC_HEAT); + + double baseMultiplier = 0.5; + double baseThreshold = 0.2; + + LHECoolantRegistry.registerCoolant( + COOLANT_NAME, + HOT_COOLANT_NAME, + baseMultiplier * Config.COOLANT_SPECIFIC_HEAT, + baseThreshold / Config.COOLANT_SPECIFIC_HEAT); + + LHECoolantRegistry.registerCoolant( + PSEUDO_LIQUID_NAQUADAH_NAME, + HOT_PSEUDO_LIQUID_NAQUADAH_NAME, + baseMultiplier * Config.NAQ_COOLANT_SPECIFIC_HEAT, + baseThreshold / Config.NAQ_COOLANT_SPECIFIC_HEAT); } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java new file mode 100644 index 0000000..c792a4f --- /dev/null +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/fluids/IconLoader.java @@ -0,0 +1,38 @@ +package com.recursive_pineapple.nuclear_horizons.reactors.fluids; + +import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.common.MinecraftForge; + +import com.recursive_pineapple.nuclear_horizons.NuclearHorizons; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; + +public class IconLoader { + + public static final IconLoader INSTANCE = new IconLoader(); + + public void register() { + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void registerIcons(TextureStitchEvent.Pre event) { + if (event.map.getTextureType() == 0) { + FluidList.COOLANT.setIcons( + event.map.registerIcon(NuclearHorizons.MODID + ":coolant_still"), + event.map.registerIcon(NuclearHorizons.MODID + ":coolant_flow")); + + FluidList.HOT_COOLANT.setIcons( + event.map.registerIcon(NuclearHorizons.MODID + ":hot_coolant_still"), + event.map.registerIcon(NuclearHorizons.MODID + ":hot_coolant_flow")); + + FluidList.PSEUDO_LIQUID_NAQUADAH.setIcons( + event.map.registerIcon(NuclearHorizons.MODID + ":cold_pnaq_still"), + event.map.registerIcon(NuclearHorizons.MODID + ":cold_pnaq_flow")); + + FluidList.HOT_PSEUDO_LIQUID_NAQUADAH.setIcons( + event.map.registerIcon(NuclearHorizons.MODID + ":hot_pnaq_still"), + event.map.registerIcon(NuclearHorizons.MODID + ":hot_pnaq_flow")); + } + } +} diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/ItemList.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/ItemList.java index 847a51d..dfe27d8 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/ItemList.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/ItemList.java @@ -3,6 +3,7 @@ import com.recursive_pineapple.nuclear_horizons.reactors.items.basic.BasicFuelRodItem; import com.recursive_pineapple.nuclear_horizons.reactors.items.basic.BasicHeatAbsorberItem; import com.recursive_pineapple.nuclear_horizons.reactors.items.basic.BasicHeatExchangerItem; +import com.recursive_pineapple.nuclear_horizons.reactors.items.basic.BasicHeatVentCoolantItem; import com.recursive_pineapple.nuclear_horizons.reactors.items.basic.BasicHeatVentItem; import com.recursive_pineapple.nuclear_horizons.reactors.items.basic.BasicNeutronReflectorItem; import com.recursive_pineapple.nuclear_horizons.reactors.items.basic.BasicReactorPlatingItem; @@ -96,6 +97,28 @@ public class ItemList { 20, 1000); + public static final BasicHeatVentCoolantItem COOLANT_HEAT_EXCHANGER_1 = new BasicHeatVentCoolantItem( + "reactorVentCoolant1", + "reactorVentCoolant1", + 40, + 0, + 30, + 750); + public static final BasicHeatVentCoolantItem COOLANT_HEAT_EXCHANGER_2 = new BasicHeatVentCoolantItem( + "reactorVentCoolant2", + "reactorVentCoolant2", + 120, + 0, + 90, + 2250); + public static final BasicHeatVentCoolantItem COOLANT_HEAT_EXCHANGER_3 = new BasicHeatVentCoolantItem( + "reactorVentCoolant3", + "reactorVentCoolant3", + 360, + 0, + 270, + 6750); + public static final BasicHeatExchangerItem BASIC_HEAT_EXCHANGER = new BasicHeatExchangerItem( "heatExchanger", "reactorHeatSwitch", @@ -166,6 +189,11 @@ public class ItemList { "reactorPlatingHeat", 0.99, 1700); + public static final BasicReactorPlatingItem REACTOR_PLATING_HEAT_2 = new BasicReactorPlatingItem( + "reactorPlatingHeat2", + "reactorPlatingHeat2", + 0.95, + 6800); public static final BasicReactorPlatingItem REACTOR_PLATING_EXPLOSIVE = new BasicReactorPlatingItem( "reactorPlatingExplosive", "reactorPlatingExplosive", @@ -175,6 +203,13 @@ public class ItemList { public static final DebugHeatAbsorber DEBUG_HEAT_ABSORBER = new DebugHeatAbsorber( "debugHeatAbsorber", "debugHeatAbsorber"); + public static final BasicReactorPlatingItem REACTOR_PLATING_HEAT_DEBUG = new BasicReactorPlatingItem( + "reactorPlatingHeatDebug", + "reactorPlatingHeatDebug", + 0.0, + 2_000_000_000); + + public static final MetaCellItem CELLS = new MetaCellItem(); public static void registerItems() { URANIUM_1X_ROD.register(); @@ -191,6 +226,10 @@ public static void registerItems() { COMPONENT_HEAT_VENT.register(); OVERCLOCKED_HEAT_VENT.register(); + COOLANT_HEAT_EXCHANGER_1.register(); + COOLANT_HEAT_EXCHANGER_2.register(); + COOLANT_HEAT_EXCHANGER_3.register(); + BASIC_HEAT_EXCHANGER.register(); ADVANCED_HEAT_EXCHANGER.register(); REACTOR_HEAT_EXCHANGER.register(); @@ -207,8 +246,12 @@ public static void registerItems() { REACTOR_PLATING.register(); REACTOR_PLATING_HEAT.register(); + REACTOR_PLATING_HEAT_2.register(); REACTOR_PLATING_EXPLOSIVE.register(); DEBUG_HEAT_ABSORBER.register(); + REACTOR_PLATING_HEAT_DEBUG.register(); + + CELLS.register(); } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java new file mode 100644 index 0000000..9d50dc7 --- /dev/null +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/MetaCellItem.java @@ -0,0 +1,80 @@ +package com.recursive_pineapple.nuclear_horizons.reactors.items; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.resources.I18n; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import com.recursive_pineapple.nuclear_horizons.Config; +import com.recursive_pineapple.nuclear_horizons.NuclearHorizons; + +import cpw.mods.fml.common.registry.GameRegistry; + +public class MetaCellItem extends Item { + + private IIcon[] icons = new IIcon[4]; + + public MetaCellItem() { + setUnlocalizedName("metacell"); + setHasSubtypes(true); + } + + public void register() { + GameRegistry.registerItem(this, "metacell"); + } + + @Override + public void registerIcons(IIconRegister register) { + icons[0] = register.registerIcon(NuclearHorizons.MODID + ":cellCoolant"); + icons[1] = register.registerIcon(NuclearHorizons.MODID + ":cellHotCoolant"); + icons[2] = register.registerIcon(NuclearHorizons.MODID + ":cellPseudoLiquidNaquadah"); + icons[3] = register.registerIcon(NuclearHorizons.MODID + ":cellHotPseudoLiquidNaquadah"); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage < 0 || damage >= icons.length) { + return icons[0]; + } else { + return icons[damage]; + } + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return switch (Items.feather.getDamage(stack)) { + case 0 -> "item.cell_coolant"; + case 1 -> "item.cell_hot_coolant"; + case 2 -> "item.cell_pseudo_liquid_naquadah"; + case 3 -> "item.cell_hot_pseudo_liquid_naquadah"; + default -> "item.invalid_cell"; + }; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { + super.addInformation(stack, player, lines, advancedTooltips); + + lines.add(switch (Items.feather.getDamage(stack)) { + case 0 -> I18n.format("item.cell_coolant.tooltip", Config.COOLANT_SPECIFIC_HEAT); + case 1 -> I18n.format("item.cell_hot_coolant.tooltip"); + case 2 -> I18n.format("item.cell_pseudo_liquid_naquadah.tooltip", Config.NAQ_COOLANT_SPECIFIC_HEAT); + case 3 -> I18n.format("item.cell_hot_pseudo_liquid_naquadah.tooltip"); + default -> ""; + }); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List subItems) { + subItems.add(new ItemStack(this, 1, 0)); + subItems.add(new ItemStack(this, 1, 1)); + subItems.add(new ItemStack(this, 1, 2)); + subItems.add(new ItemStack(this, 1, 3)); + } +} diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/BasicHeatVentCoolantItem.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/BasicHeatVentCoolantItem.java new file mode 100644 index 0000000..e048798 --- /dev/null +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/BasicHeatVentCoolantItem.java @@ -0,0 +1,104 @@ +package com.recursive_pineapple.nuclear_horizons.reactors.items.basic; + +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import com.recursive_pineapple.nuclear_horizons.Config; +import com.recursive_pineapple.nuclear_horizons.reactors.components.IComponentAdapter; +import com.recursive_pineapple.nuclear_horizons.reactors.components.IReactorGrid; +import com.recursive_pineapple.nuclear_horizons.reactors.components.adapters.HeatMoverAdapter; +import com.recursive_pineapple.nuclear_horizons.reactors.items.interfaces.IHeatMover; + +public class BasicHeatVentCoolantItem extends ReactorItem implements IHeatMover { + + private final int maxHeatFromReactor; + private final int maxNeighbourToAir; + private final int maxHeatToAir; + + public BasicHeatVentCoolantItem(String name, String textureName, int maxHeatFromReactor, int maxNeighbourToAir, + int maxHeatToAir, int maxHeat) { + super(name, textureName, "heat", maxHeat); + + this.maxHeatFromReactor = maxHeatFromReactor; + this.maxNeighbourToAir = maxNeighbourToAir; + this.maxHeatToAir = maxHeatToAir; + } + + @Override + public int getTransferFromReactor(@Nonnull ItemStack itemStack, @Nonnull IReactorGrid reactor) { + return Math.min(this.maxHeatFromReactor, reactor.getHullHeat()); + } + + @Override + public int getTransferFromNeighbour(@Nonnull ItemStack itemStack, @Nonnull IReactorGrid reactor, + @Nonnull IComponentAdapter neighbour) { + return 0; + } + + @Override + public int getTransferNeighbourToAir(@Nonnull ItemStack itemStack, @Nonnull IReactorGrid reactor, + @Nonnull IComponentAdapter neighbour) { + return Math.min(this.maxNeighbourToAir, neighbour.getStoredHeat()); + } + + @Override + public int getTransferToAir(@Nonnull ItemStack itemStack, @Nonnull IReactorGrid reactor) { + return Math.min(this.maxHeatToAir, this.getStoredHeat(itemStack)); + } + + @Override + public @Nonnull IComponentAdapter getAdapter(@Nonnull ItemStack itemStack, @Nonnull IReactorGrid reactor, int x, + int y) { + return new CoolantHeatMoverAdapter(reactor, x, y, itemStack, this); + } + + private static class CoolantHeatMoverAdapter extends HeatMoverAdapter { + + public CoolantHeatMoverAdapter(IReactorGrid reactor, int x, int y, ItemStack itemStack, IHeatMover heatMover) { + super(reactor, x, y, itemStack, heatMover); + } + + @Override + protected int getTransferToAir() { + return reactor.isFluid() ? super.getTransferToAir() : 0; + } + + @Override + protected int getTransferNeighbourToAir(IComponentAdapter neighbour) { + return reactor.isFluid() ? super.getTransferNeighbourToAir(neighbour) : 0; + } + } + + @Override + protected String getDurabilityTooltip(ItemStack itemStack) { + return I18n.format("nh_tooltip.stored_heat", itemStack.getItemDamage(), itemStack.getMaxDamage()); + } + + @Override + public void addReactorItemInfo(ItemStack itemStack, EntityPlayer player, List chunks) { + chunks.add(I18n.format("nh_tooltip.prelude")); + + if (this.maxHeatFromReactor > 0) { + chunks.add(I18n.format("nh_tooltip.mover.reactor_xfer", this.maxHeatFromReactor)); + } + + if (this.maxHeatToAir > 0) { + chunks.add(I18n.format("nh_tooltip.vent.void_self", this.maxHeatToAir)); + } + + if (this.maxNeighbourToAir > 0) { + chunks.add(I18n.format("nh_tooltip.vent.void_adj", this.maxNeighbourToAir)); + } + + if (this.maxHeatToAir > 0) { + chunks.add(I18n.format("nh_tooltip.vent.fluid_disclaimer", Config.FLUID_NUKE_HU_MULTIPLIER)); + } + + chunks.add(I18n.format("nh_tooltip.vent.fluid_only")); + } +} diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/ReactorItem.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/ReactorItem.java index 94009cc..baf0a05 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/ReactorItem.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/items/basic/ReactorItem.java @@ -94,12 +94,10 @@ public final void addInformation(ItemStack itemStack, EntityPlayer player, List< ArrayList chunks = new ArrayList<>(); - if (!advancedItemTooltips) { - if (itemStack.isItemStackDamageable()) { - chunks.add(getDurabilityTooltip(itemStack)); - } else if (itemStack.getMaxDamage() == -1) { - chunks.add(I18n.format("nh_tooltip.undestructable")); - } + if (itemStack.isItemStackDamageable()) { + chunks.add(getDurabilityTooltip(itemStack)); + } else if (itemStack.getMaxDamage() == -1) { + chunks.add(I18n.format("nh_tooltip.undestructable")); } if (hasMoreInfo(itemStack)) { diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileAccessHatch.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileAccessHatch.java index 4450722..6e96aae 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileAccessHatch.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileAccessHatch.java @@ -1,5 +1,7 @@ package com.recursive_pineapple.nuclear_horizons.reactors.tile; +import java.util.ArrayList; + import javax.annotation.Nullable; import net.minecraft.entity.player.EntityPlayer; @@ -13,7 +15,9 @@ import com.recursive_pineapple.nuclear_horizons.reactors.blocks.BlockList; -public class TileAccessHatch extends TileEntity implements IInventory, IReactorBlock { +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; + +public class TileAccessHatch extends TileEntity implements IInventory, IReactorBlock, IDebugableTileEntity { public int reactorRelX, reactorRelY, reactorRelZ; @@ -197,4 +201,25 @@ public boolean isItemValidForSlot(int index, ItemStack stack) { return false; } } + + @Override + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel) { + ArrayList info = new ArrayList<>(); + + var reactor = getReactor(); + + if (reactor == null) { + info.add("§cNot connected to a reactor§r"); + } else { + info.add( + String.format( + "Connected to reactor at X=§9%d§r Y=§9%d§r Z=§9%d§r", + reactor.xCoord, + reactor.yCoord, + reactor.zCoord)); + info.addAll(reactor.getDebugInfo(aPlayer, aLogLevel)); + } + + return info; + } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorChamber.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorChamber.java index 9e811a7..17f1d82 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorChamber.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorChamber.java @@ -1,5 +1,7 @@ package com.recursive_pineapple.nuclear_horizons.reactors.tile; +import java.util.ArrayList; + import javax.annotation.Nullable; import net.minecraft.entity.player.EntityPlayer; @@ -14,9 +16,11 @@ import com.recursive_pineapple.nuclear_horizons.reactors.blocks.BlockList; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IEnergyConnected; -public class TileReactorChamber extends TileEntity implements IReactorBlock, IInventory, IEnergyConnected { +public class TileReactorChamber extends TileEntity + implements IReactorBlock, IInventory, IEnergyConnected, IDebugableTileEntity { public int reactorRelX, reactorRelY, reactorRelZ; @@ -225,4 +229,17 @@ public boolean isItemValidForSlot(int index, ItemStack stack) { return false; } } + + @Override + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel) { + ArrayList info = new ArrayList<>(); + + var reactor = getReactor(); + + if (reactor != null) { + info.addAll(reactor.getDebugInfo(aPlayer, aLogLevel)); + } + + return info; + } } diff --git a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java index aad704a..26714ee 100644 --- a/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java +++ b/src/main/java/com/recursive_pineapple/nuclear_horizons/reactors/tile/TileReactorCore.java @@ -56,13 +56,15 @@ import cofh.api.energy.IEnergyReceiver; import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IEnergyConnected; import gregtech.api.logic.PowerLogic; import gregtech.api.logic.interfaces.PowerLogicHost; import gregtech.api.util.GTUtility; public class TileReactorCore extends TileEntity - implements IInventory, IReactorGrid, ITileWithModularUI, IEnergyConnected { + implements IInventory, IReactorGrid, ITileWithModularUI, IEnergyConnected, IDebugableTileEntity { public static final int ROW_COUNT = 6; public static final int COL_COUNT = 9; @@ -708,15 +710,26 @@ private void doEUTick() { reactorBlock.onEnergyTick(this); } - if (this.storedEU > this.maxStoredEU) { - this.storedEU = this.maxStoredEU; + if (isFluid) { + addedEU = 0; + storedEU = 0; + maxStoredEU = 0; + voltage = 32; } - int perTick = this.addedEU / 20; + if (this.addedEU > 0) { + int perTick = this.addedEU / 20; + + int voltageTier = (int) (Math.ceil(Math.log(perTick / 8) / Math.log(4))); - int voltageTier = (int) (Math.ceil(Math.log(perTick / 8) / Math.log(4))); + this.voltage = (int) (Math.pow(4, voltageTier) * 8); + + this.maxStoredEU = voltage * 20 * 30; + } - this.voltage = (int) (Math.pow(4, voltageTier) * 8); + if (this.storedEU > this.maxStoredEU) { + this.storedEU = this.maxStoredEU; + } } private static final DamageSource RADIATION_DAMAGE = new DamageSource("nh_radiation"); @@ -817,6 +830,55 @@ private void doHeatDamage() { } } + @Override + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel) { + ArrayList info = new ArrayList<>(); + + info.add(isActive ? "§aActive§r" : "§cInactive§r"); + info.add(isFluid ? "Fluid: §atrue§r" : "Fluid: §cfalse§r"); + + String heatColour = "§a"; + + if (heatRatio >= 0.4) heatColour = "§e"; + if (heatRatio >= 0.6) heatColour = "§6"; + if (heatRatio >= 0.8) heatColour = "§c"; + + info.add(String.format("§rStored Heat: %s%,d HU§r / §e%,d HU§r", heatColour, storedHeat, getMaxHullHeat())); + info.add(String.format("§rHeat Generation Rate: §e%,d HU/s§r", addedHeat)); + if (coolantTank.getFluidAmount() > 0 && coolantTank.getFluid() != null + && coolantTank.getFluid() + .getFluid() != null) { + info.add( + String.format( + "§rStored Coolant: §a%,d L§r / §e%,d L§r §7%s§r", + coolantTank.getFluidAmount(), + coolantTank.getCapacity(), + coolantTank.getFluid() + .getLocalizedName())); + } else { + info.add(String.format("Stored Coolant: §eEmpty§r")); + } + if (hotCoolantTank.getFluidAmount() > 0 && hotCoolantTank.getFluid() != null + && hotCoolantTank.getFluid() + .getFluid() != null) { + info.add( + String.format( + "§rStored Hot Coolant: §a%,d L§r / §e%,d L§r §7%s§r", + hotCoolantTank.getFluidAmount(), + hotCoolantTank.getCapacity(), + hotCoolantTank.getFluid() + .getLocalizedName())); + } else { + info.add(String.format("Stored Hot Coolant: §eEmpty§r")); + } + info.add(String.format("§rStored Energy: §a%,d§r EU / §e%,d§r EU", storedEU, maxStoredEU)); + info.add(String.format("§rEnergy Generation Rate: §e%,d§r EU/t", addedEU / 20)); + info.add( + String.format("§rMax Out: §c%,d EU/t (%s)§r at §c1§r A", voltage, GTValues.VN[GTUtility.getTier(voltage)])); + + return info; + } + @Override public int getWidth() { return COL_COUNT; @@ -993,8 +1055,10 @@ public int addAirHeat(int airHeat) { @Override public void addEU(double eu) { - this.storedEU += eu * Config.REACTOR_EU_MULTIPLIER; - this.addedEU += eu * Config.REACTOR_EU_MULTIPLIER; + if (!isFluid) { + this.storedEU += eu * Config.REACTOR_EU_MULTIPLIER; + this.addedEU += eu * Config.REACTOR_EU_MULTIPLIER; + } } @Override diff --git a/src/main/resources/assets/nuclear_horizons/lang/en_US.lang b/src/main/resources/assets/nuclear_horizons/lang/en_US.lang index f345991..1f00384 100644 --- a/src/main/resources/assets/nuclear_horizons/lang/en_US.lang +++ b/src/main/resources/assets/nuclear_horizons/lang/en_US.lang @@ -5,6 +5,13 @@ tile.reactor_fluid_port.name=Reactor Fluid Port tile.reactor_access_hatch.name=Reactor Access Hatch tile.reactor_redstone_port.name=Reactor Redstone Port tile.reactor_thermal_sensor.name=Reactor Thermal Sensor +tile.reactor_simulator.name=Reactor Simulator + +tile.nh_coolant.name=Coolant +tile.nh_hot_coolant.name=Hot Coolant + +tile.nh_coolant.name=Coolant +tile.nh_hot_coolant.name=Hot Coolant gui.reactor.name=Nuclear Reactor @@ -19,6 +26,9 @@ item.advancedHeatVent.name=Advanced Heat Vent item.reactorHeatVent.name=Reactor Heat Vent item.componentHeatVent.name=Component Heat Vent item.overclockedHeatVent.name=Overclocked Heat Vent +item.reactorVentCoolant1.name=Copper Coolant Heat Exchanger +item.reactorVentCoolant2.name=Tungstensteel Coolant Heat Exchanger +item.reactorVentCoolant3.name=Naquadria Coolant Heat Exchanger item.heatExchanger.name=Heat Exchanger item.advancedHeatExchanger.name=Advanced Heat Exchanger item.coreHeatExchanger.name=Reactor Heat Exchanger @@ -33,11 +43,25 @@ item.thickNeutronReflector.name=Thick Neutron Reflector item.iridiumNeutronReflector.name=Iridium Neutron Reflector item.reactorPlating.name=Reactor Plating item.reactorPlatingHeat.name=Heat-Capacity Reactor Plating +item.reactorPlatingHeat2.name=Naquadah Reactor Plating item.reactorPlatingExplosive.name=Containment Reactor Plating item.debugHeatAbsorber.name=Creative Heat Absorber +item.reactorPlatingHeatDebug.name=Creative Reactor Plating + +item.cell_coolant.name=Coolant Cell +item.cell_hot_coolant.name=Hot Coolant Cell +item.cell_pseudo_liquid_naquadah.name=Pseudo-Crystalline Naquadah Cell +item.cell_hot_pseudo_liquid_naquadah.name=Hot Pseudo-Crystalline Naquadah Cell + +item.cell_coolant.tooltip=Can be used as coolant in a fluid reactor. Stores %1$,d HU per L. +item.cell_hot_coolant.tooltip=Cool down in a large heat exchanger. +item.cell_pseudo_liquid_naquadah.tooltip=Can be used as coolant in a fluid reactor. Stores %1$,d HU per L. +item.cell_hot_pseudo_liquid_naquadah.tooltip=Cool down in a large heat exchanger. fluid.nh_coolant=Coolant fluid.nh_hot_coolant=Hot Coolant +fluid.pseudo_liquid_naquadah=Pseudo-Crystalline Naquadah +fluid.hot_pseudo_liquid_naquadah=Hot Pseudo-Crystalline Naquadah death.attack.nh_hot_fluid.player=%1$s was fried to crisp death.attack.nh_radiation.player=%1$s was irradiated to death @@ -59,6 +83,7 @@ nh_tooltip.vent.void_adj=Dissipate up to %d HU from its neighbours. nh_tooltip.vent.fluid_disclaimer=Note: In a fluid reactor, each HU vented is converted to %1$,d HU (%1$,dmB) of hot coolant. nh_tooltip.plating_explosion=Decreases the reactor's explosion radius by %,d %% (multiplicative). nh_tooltip.plating_heat=Increases the reactor's maximum temperature by %,d HU. +nh_tooltip.vent.fluid_only=Coolant heat exchangers only work in fluid reactors. nh_tooltip.results.title=Simulation Results: nh_tooltip.sim.results.avg_temp=Avg Temp: %s diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_flow.png b/src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_flow.png new file mode 100644 index 0000000000000000000000000000000000000000..532c8aa593eab0392a600032a6f76fb3c0f5fde0 GIT binary patch literal 4928 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 PTLGbU47DpX?IZpTaB3{2 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_flow.png.mcmeta b/src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_flow.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_still.png b/src/main/resources/assets/nuclear_horizons/textures/blocks/cold_pnaq_still.png new file mode 100644 index 0000000000000000000000000000000000000000..66e867f3f3d895b5cbce31ba9d46d96ed505db3f GIT binary patch literal 9629 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_flow.png.mcmeta b/src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_flow.png.mcmeta new file mode 100644 index 0000000..4f0718a --- /dev/null +++ b/src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_flow.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_still.png b/src/main/resources/assets/nuclear_horizons/textures/blocks/hot_pnaq_still.png new file mode 100644 index 0000000000000000000000000000000000000000..6c50979fbe99f1a75bcf9f02010840edb3114fe6 GIT binary patch literal 6475 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuclear_horizons/textures/items/cellHotPseudoLiquidNaquadah.png b/src/main/resources/assets/nuclear_horizons/textures/items/cellHotPseudoLiquidNaquadah.png new file mode 100644 index 0000000000000000000000000000000000000000..f5dcd8fd44a388b48d2257c21d50d5256d6c6a47 GIT binary patch literal 806 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuclear_horizons/textures/items/reactorVentCoolant1.png b/src/main/resources/assets/nuclear_horizons/textures/items/reactorVentCoolant1.png new file mode 100644 index 0000000000000000000000000000000000000000..1eb72b8995f59cab5c1bebf08f9393d643a7c02a GIT binary patch literal 856 zcmV-e1E>6nP)EX>4Tx04R}tkv&MmKpe$i(@LdO9PA+C5TQC*1Ql_tRVYG*P%E_RU~>J0CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Wm)eOV|RkMtA zG9hMjt77mKA%qdY2qt7^>T{Bmg6H_UhmWs!F`ngp?$6PeFPIGQiNtZH8y4{f@yw>B zbKWP8u(F&dJ|`YG=z_$LTvuFv<6LrB;F%F4lb$Dz5R0WQR=Sv#4V8GBIGR^A$``UO z=Q(e2R;zW^z9)ZSxS*{pbDicel32tNB#2N@M+H?_h|#K%Vj@lZ2@n5}t;i~_-3pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jM^pBI%N=0wNtX@Tk^D4;Vi9;hqi@Oq1GhkE&F!tdkJASrLtUkAfP+I| ztVG%C9`Ek$?(N?*?f!lMrdM*i+B|mU00006VoOIv0R8~{0R3^5QC0u|010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=n4!4Dms}7LnieSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00A&bL_t(I%hi%iO9D|8hM#+9?)Wtd(O;-_5rjfurBoZM z-_*YU(b`2(QAW6tf@t4=Fr887dv2Qwbt2tGXLUI5IS((K7yi1$S95l}qnAB$M`O+( zUIlI3uicBjnT}$oCnypjcr$Oss~6Q z(J-ksF_pqpR>n;RQ0`r$EQMv|NcK+<%~O=27!KYkJarZWyhsyVUJynh@m(9U(EX>4Tx04R}tkv&MmKpe$i(@LdO9PA+C5TQC*1Ql_tRVYG*P%E_RU~>J0CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Wm)eOV|RkMtA zG9hMjt77mKA%qdY2qt7^>T{Bmg6H_UhmWs!F`ngp?$6PeFPIGQiNtZH8y4{f@yw>B zbKWP8u(F&dJ|`YG=z_$LTvuFv<6LrB;F%F4lb$Dz5R0WQR=Sv#4V8GBIGR^A$``UO z=Q(e2R;zW^z9)ZSxS*{pbDicel32tNB#2N@M+H?_h|#K%Vj@lZ2@n5}t;i~_-3pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jM^pBI%N=0wNtX@Tk^D4;Vi9;hqi@Oq1GhkE&F!tdkJASrLtUkAfP+I| ztVG%C9`Ek$?(N?*?f!lMrdM*i+B|mU00006VoOIv0R8~{0R3^5QC0u|010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=n4!3J0{-~R!;x`02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00A>eL_t(I%hi%QP6AOBhQBk+9RlMDY)mMXhk``VRk#4P zaAmH+#!3?l66B!+>LN%i92p#Exc6EZBM%ekjDK}<9$)^G{P5S3@8bOU%C37fdKqzf zdny3#>>!#%YXPG7pFMYR=xtn(%jbC-Hc8V2Z43?$^+v#37?O<7=JuUMfbaYGd7tfK z3u7%9Lut2-n{iP}ExB0&JoM`*rSQBgjmD7X(KE_bgyAd0ps^aDjppXMz;v3@?d;L( zRIykFg99WZs{saswU(^sp|u795kW+-Mz01q2<37cafIrApPgb00h))8SXskCwbmz> z_eqkJ?p=jmx589wCeeg)sl6Hy$1zFr!F{iW<79AEmLRB;rs>y93tGxS9G(yZTbuL! lWL)?)RPJm%XA|~+^a;g-b?2P}9H9UJ002ovPDHLkV1gP3egFUf literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/nuclear_horizons/textures/items/reactorVentCoolant3.png b/src/main/resources/assets/nuclear_horizons/textures/items/reactorVentCoolant3.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1a4a822291b6500765c3eac17ddfbc2b057383 GIT binary patch literal 831 zcmV-F1Hk-=P)EX>4Tx04R}tkv&MmKpe$i(@LdO9PA+C5TQC*1Ql_tRVYG*P%E_RU~>J0CJjl7 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY7Wm)eOV|RkMtA zG9hMjt77mKA%qdY2qt7^>T{Bmg6H_UhmWs!F`ngp?$6PeFPIGQiNtZH8y4{f@yw>B zbKWP8u(F&dJ|`YG=z_$LTvuFv<6LrB;F%F4lb$Dz5R0WQR=Sv#4V8GBIGR^A$``UO z=Q(e2R;zW^z9)ZSxS*{pbDicel32tNB#2N@M+H?_h|#K%Vj@lZ2@n5}t;i~_-3pw+PL?_=9;odEu4;7aTGYfWJGlk`SM ziyi^}+rY(jM^pBI%N=0wNtX@Tk^D4;Vi9;hqi@Oq1GhkE&F!tdkJASrLtUkAfP+I| ztVG%C9`Ek$?(N?*?f!lMrdM*i+B|mU00006VoOIv0R8~{0R3^5QC0u|010qNS#tmY zE+YT{E+YYWr9XB6000McNliru=n4!3I}LNMuMYqK02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{009?CL_t(I%gvHYOT$nQg})@Xk=!;Eq3&FX3z0yvrXtvl zf7_+_C=#n;aV3TN*j1%Am^L>_U0ItZrP=AMhBGrCmvayNb!k7%&i3)N=ut2Z=)bfz z05Ly^B2@@5zb6)lTbl~YvS{CYr1VyEgOTskdrqI|i-59}NK4YJS7%zou`zT($uKgn z$p9`o?+7604(e6*oeDb8YSxMY4)@lPvP`IAuI`3hcYUHbAqd8}PGvP