From 65587e7db73677d8f025b3718a3df76eaf6c085e Mon Sep 17 00:00:00 2001 From: Bob Date: Fri, 25 Aug 2023 21:48:45 +0200 Subject: [PATCH] PWR breeder rods, rod recycling, creative stirling --- changelog | 4 + src/main/java/com/hbm/blocks/ModBlocks.java | 5 +- .../hbm/blocks/machine/MachineStirling.java | 33 ++++---- .../hbm/inventory/gui/GUIMachinePress.java | 7 +- .../java/com/hbm/inventory/gui/GUIPWR.java | 11 ++- .../inventory/recipes/CentrifugeRecipes.java | 79 +++++++++++++++++- .../com/hbm/items/machine/ItemPWRFuel.java | 34 ++++---- .../java/com/hbm/main/ResourceManager.java | 1 + .../hbm/render/tileentity/RenderStirling.java | 7 +- .../java/com/hbm/render/util/GaugeUtil.java | 34 ++++++++ .../machine/TileEntityPWRController.java | 4 +- .../machine/TileEntityStirling.java | 12 ++- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 47 +++++++++++ .../assets/hbm/textures/gui/gui_press.png | Bin 4875 -> 2102 bytes .../textures/items/pwr_fuel.bfb_am_mix.png | Bin 0 -> 449 bytes .../hbm/textures/items/pwr_fuel.bfb_pu241.png | Bin 0 -> 438 bytes .../models/machines/stirling_creative.png | Bin 0 -> 3877 bytes 18 files changed, 233 insertions(+), 47 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/pwr_fuel.bfb_am_mix.png create mode 100644 src/main/resources/assets/hbm/textures/items/pwr_fuel.bfb_pu241.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/stirling_creative.png diff --git a/changelog b/changelog index 3b57b26e4..9862d630b 100644 --- a/changelog +++ b/changelog @@ -14,6 +14,10 @@ * Valid PWR coolant * Has a high flux multiplication rate, boosting fuels * After cooling, the depleted salt has to be reprocessed using a chemical plant +* Creative stirling engine + * A stirling engine with 100% efficiency and no heat cap + * Still has the 10% delta-T heat transfer rate as the other stirlings + * Great for quickly benchmarking reactors without needing to set up a turbine cycle ## Changed * Bedrock fluorite ore now yields actual ore instead of fluorite directly diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index ecd81f4fd..72da33957 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -675,6 +675,7 @@ public class ModBlocks { public static Block furnace_combination; public static Block machine_stirling; public static Block machine_stirling_steel; + public static Block machine_stirling_creative; public static Block machine_sawmill; public static Block machine_crucible; public static Block machine_boiler; @@ -1835,6 +1836,7 @@ public class ModBlocks { furnace_combination = new FurnaceCombination().setBlockName("furnace_combination").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_light_alt"); machine_stirling = new MachineStirling().setBlockName("machine_stirling").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_stirling_steel = new MachineStirling().setBlockName("machine_stirling_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_stirling_creative = new MachineStirling().setBlockName("machine_stirling_creative").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_sawmill = new MachineSawmill().setBlockName("machine_sawmill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_crucible = new MachineCrucible().setBlockName("machine_crucible").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); machine_boiler = new MachineHeatBoiler().setBlockName("machine_boiler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper"); @@ -2056,7 +2058,7 @@ public class ModBlocks { pwr_casing = new BlockGenericPWR(Material.iron).setBlockName("pwr_casing").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing"); pwr_port = new BlockGenericPWR(Material.iron).setBlockName("pwr_port").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_port"); pwr_controller = new MachinePWRController(Material.iron).setBlockName("pwr_controller").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_casing_blank"); - pwr_block = new BlockPWR(Material.iron).setBlockName("pwr_block").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":pwr_block"); + pwr_block = new BlockPWR(Material.iron).setBlockName("pwr_block").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":pwr_block"); reactor_element = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_element_top", RefStrings.MODID + ":reactor_element_base").setBlockName("reactor_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_element_side"); reactor_control = new BlockPillar(Material.iron, RefStrings.MODID + ":reactor_control_top").setBlockName("reactor_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":reactor_control_side"); @@ -3099,6 +3101,7 @@ public class ModBlocks { register(furnace_combination); register(machine_stirling); register(machine_stirling_steel); + register(machine_stirling_creative); register(machine_sawmill); register(machine_crucible); register(machine_boiler); diff --git a/src/main/java/com/hbm/blocks/machine/MachineStirling.java b/src/main/java/com/hbm/blocks/machine/MachineStirling.java index 800b7f361..3cdfde1e7 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineStirling.java +++ b/src/main/java/com/hbm/blocks/machine/MachineStirling.java @@ -7,6 +7,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ITooltipProvider; +import com.hbm.blocks.ModBlocks; import com.hbm.items.ModItems; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityStirling; @@ -156,26 +157,28 @@ public class MachineStirling extends BlockDummyable implements ILookOverlay, ITo return; TileEntityStirling stirling = (TileEntityStirling) te; - int maxHeat = stirling.maxHeat(); List text = new ArrayList(); text.add(stirling.heat + "TU/t"); text.add((stirling.hasCog ? stirling.powerBuffer : 0) + "HE/t"); - double percent = (double) stirling.heat / (double) maxHeat; - int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8); - - if(percent > 1D) - color = 0xff0000; - - text.add("&[" + color + "&]" + ((stirling.heat * 1000 / maxHeat) / 10D) + "%"); - - if(stirling.heat > maxHeat) { - text.add("&[" + (BobMathUtil.getBlink() ? 0xff0000 : 0xffff00) + "&]! ! ! OVERSPEED ! ! !"); - } - - if(!stirling.hasCog) { - text.add("&[" + 0xff0000 + "&]Gear missing!"); + if(this != ModBlocks.machine_stirling_creative) { + int maxHeat = stirling.maxHeat(); + double percent = (double) stirling.heat / (double) maxHeat; + int color = ((int) (0xFF - 0xFF * percent)) << 16 | ((int)(0xFF * percent) << 8); + + if(percent > 1D) + color = 0xff0000; + + text.add("&[" + color + "&]" + ((stirling.heat * 1000 / maxHeat) / 10D) + "%"); + + if(stirling.heat > maxHeat) { + text.add("&[" + (BobMathUtil.getBlink() ? 0xff0000 : 0xffff00) + "&]! ! ! OVERSPEED ! ! !"); + } + + if(!stirling.hasCog) { + text.add("&[" + 0xff0000 + "&]Gear missing!"); + } } ILookOverlay.printGeneric(event, I18nUtil.resolveKey(getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java b/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java index 19d1e30fb..63e98642b 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachinePress.java @@ -4,6 +4,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerMachinePress; import com.hbm.lib.RefStrings; +import com.hbm.render.util.GaugeUtil; import com.hbm.tileentity.machine.TileEntityMachinePress; import net.minecraft.client.Minecraft; @@ -46,14 +47,14 @@ public class GUIMachinePress extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int i = press.speed * 12 / press.maxSpeed; - drawTexturedModalRect(guiLeft + 25, guiTop + 16, 176, 14 + 18 * i, 18, 18); - if(press.burnTime >= 20) { this.drawTexturedModalRect(guiLeft + 27, guiTop + 36, 176, 0, 14, 14); } int k = (int) (press.renderPress * 16 / press.maxPress); this.drawTexturedModalRect(guiLeft + 79, guiTop + 35, 194, 0, 18, k); + + double i = (double) press.speed / (double) press.maxSpeed; + GaugeUtil.drawSmoothGauge(guiLeft + 34, guiTop + 25, this.zLevel, i, 5, 2, 1, 0x7f0000); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIPWR.java b/src/main/java/com/hbm/inventory/gui/GUIPWR.java index 1b88a5084..d8549a9e4 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIPWR.java +++ b/src/main/java/com/hbm/inventory/gui/GUIPWR.java @@ -9,6 +9,7 @@ import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.packet.NBTControlPacket; import com.hbm.packet.PacketDispatcher; +import com.hbm.render.util.GaugeUtil; import com.hbm.tileentity.machine.TileEntityPWRController; import net.minecraft.client.Minecraft; @@ -16,7 +17,6 @@ import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.item.ItemStack; @@ -24,7 +24,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Vec3; public class GUIPWR extends GuiInfoContainer { @@ -121,8 +120,8 @@ public class GUIPWR extends GuiInfoContainer { //GaugeUtil.renderGauge(Gauge.ROUND_SMALL, guiLeft + 115, guiTop + 31, this.zLevel, (double) controller.coreHeat / (double) controller.coreHeatCapacity); //GaugeUtil.renderGauge(Gauge.ROUND_SMALL, guiLeft + 151, guiTop + 31, this.zLevel, (double) controller.hullHeat / (double) controller.hullHeatCapacity); - drawGauge(guiLeft + 124, guiTop + 40, (double) controller.coreHeat / (double) controller.coreHeatCapacity); - drawGauge(guiLeft + 160, guiTop + 40, (double) controller.hullHeat / (double) controller.hullHeatCapacity); + GaugeUtil.drawSmoothGauge(guiLeft + 124, guiTop + 40, this.zLevel, (double) controller.coreHeat / (double) controller.coreHeatCapacity, 5, 2, 1, 0x7F0000); + GaugeUtil.drawSmoothGauge(guiLeft + 160, guiTop + 40, this.zLevel, (double) controller.hullHeat / (double) controller.hullHeatCapacity, 5, 2, 1, 0x7F0000); if(controller.typeLoaded != -1 && controller.amountLoaded > 0) { ItemStack display = new ItemStack(ModItems.pwr_fuel, 1, controller.typeLoaded); @@ -139,7 +138,7 @@ public class GUIPWR extends GuiInfoContainer { this.field.drawTextBox(); } - private void drawGauge(int x, int y, double d) { + /*private void drawGauge(int x, int y, double d) { GL11.glDisable(GL11.GL_TEXTURE_2D); d = MathHelper.clamp_double(d, 0, 1); @@ -168,7 +167,7 @@ public class GUIPWR extends GuiInfoContainer { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glEnable(GL11.GL_TEXTURE_2D); - } + }*/ @Override protected void mouseClicked(int mouseX, int mouseY, int i) { diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index 4f2bfe922..ae66e0670 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -22,6 +22,7 @@ import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.recipes.loader.SerializableRecipe; import com.hbm.items.ItemEnums.EnumAshType; import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemPWRFuel.EnumPWRFuel; import com.hbm.items.machine.ItemWatzPellet.EnumWatzType; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.items.special.ItemByproduct.EnumByproduct; @@ -188,6 +189,82 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.nugget_polonium, 12), new ItemStack(ModItems.nugget_pu238, 6), new ItemStack(ModItems.nuclear_waste, 2) }); + + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEU)), new ItemStack[] { + new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_plutonium, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEU233)), new ItemStack[] { + new ItemStack(ModItems.nugget_u235, 3), + new ItemStack(ModItems.nugget_pu238, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEU235)), new ItemStack[] { + new ItemStack(ModItems.nugget_neptunium, 3), + new ItemStack(ModItems.nugget_pu238, 3), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEN)), new ItemStack[] { + new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_pu239, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEN237)), new ItemStack[] { + new ItemStack(ModItems.nugget_pu238, 2), + new ItemStack(ModItems.nugget_pu239, 4), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MOX)), new ItemStack[] { + new ItemStack(ModItems.nugget_u238, 3), + new ItemStack(ModItems.nugget_pu240, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEP)), new ItemStack[] { + new ItemStack(ModItems.nugget_lead, 2), + new ItemStack(ModItems.nugget_pu_mix, 4), + new ItemStack(ModItems.nugget_technetium, 2), + new ItemStack(ModItems.nuclear_waste_tiny, 3) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEP239)), new ItemStack[] { + new ItemStack(ModItems.nugget_pu_mix, 2), + new ItemStack(ModItems.nugget_pu240, 4), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 5) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEP241)), new ItemStack[] { + new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.MEA)), new ItemStack[] { + new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HEA242)), new ItemStack[] { + new ItemStack(ModItems.nugget_lead, 3), + new ItemStack(ModItems.nugget_zirconium, 2), + new ItemStack(ModItems.nugget_technetium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HES326)), new ItemStack[] { + new ItemStack(ModItems.nugget_solinium, 3), + new ItemStack(ModItems.nugget_lead, 2), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.HES327)), new ItemStack[] { + new ItemStack(ModItems.nugget_australium, 4), + new ItemStack(ModItems.nugget_lead, 1), + new ItemStack(ModItems.nugget_euphemium, 1), + new ItemStack(ModItems.nuclear_waste_tiny, 6) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_AM_MIX)), new ItemStack[] { + new ItemStack(ModItems.nugget_am_mix, 4), + new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste_tiny, 1) }); + recipes.put(new ComparableStack(DictFrame.fromOne(ModItems.pwr_fuel_depleted, EnumPWRFuel.BFB_PU241)), new ItemStack[] { + new ItemStack(ModItems.nugget_pu241, 4), + new ItemStack(ModItems.nugget_pu_mix, 1), + new ItemStack(ModItems.nugget_bismuth, 6), + new ItemStack(ModItems.nuclear_waste_tiny, 1) }); ArrayList naquadriaNuggets = OreDictionary.getOres("nuggetNaquadria"); if(naquadriaNuggets.size() != 0) { @@ -452,7 +529,7 @@ public class CentrifugeRecipes extends SerializableRecipe { recipes.put(new ComparableStack(ModItems.crystal_iron), new ItemStack[] { new ItemStack(ModItems.powder_iron, 2), new ItemStack(ModItems.powder_iron, 2), new ItemStack(ModItems.powder_titanium, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); recipes.put(new ComparableStack(ModItems.crystal_gold), new ItemStack[] { new ItemStack(ModItems.powder_gold, 2), new ItemStack(ModItems.powder_gold, 2), new ItemStack(ModItems.ingot_mercury, 1), new ItemStack(ModItems.powder_lithium_tiny, 1) }); recipes.put(new ComparableStack(ModItems.crystal_redstone), new ItemStack[] { new ItemStack(Items.redstone, 3), new ItemStack(Items.redstone, 3), new ItemStack(Items.redstone, 3), new ItemStack(ModItems.ingot_mercury, 3) }); - recipes.put(new ComparableStack(ModItems.crystal_lapis), new ItemStack[] { new ItemStack(ModItems.powder_lapis, 4), new ItemStack(ModItems.powder_lapis, 4), new ItemStack(ModItems.powder_cobalt, 1), new ItemStack(ModItems.gem_sodalite, 1) }); + recipes.put(new ComparableStack(ModItems.crystal_lapis), new ItemStack[] { new ItemStack(ModItems.powder_lapis, 4), new ItemStack(ModItems.powder_lapis, 4), new ItemStack(ModItems.powder_cobalt, 1), new ItemStack(ModItems.gem_sodalite, 2) }); recipes.put(new ComparableStack(ModItems.crystal_diamond), new ItemStack[] { new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1) }); recipes.put(new ComparableStack(ModItems.crystal_uranium), new ItemStack[] { new ItemStack(ModItems.powder_uranium, 2), new ItemStack(ModItems.powder_uranium, 2), new ItemStack(ModItems.nugget_ra226, 2), new ItemStack(ModItems.powder_lithium_tiny, 1) }); recipes.put(new ComparableStack(ModItems.crystal_thorium), new ItemStack[] { new ItemStack(ModItems.powder_thorium, 2), new ItemStack(ModItems.powder_thorium, 2), new ItemStack(ModItems.powder_uranium, 1), new ItemStack(ModItems.nugget_ra226, 1) }); diff --git a/src/main/java/com/hbm/items/machine/ItemPWRFuel.java b/src/main/java/com/hbm/items/machine/ItemPWRFuel.java index d60aca579..db802776a 100644 --- a/src/main/java/com/hbm/items/machine/ItemPWRFuel.java +++ b/src/main/java/com/hbm/items/machine/ItemPWRFuel.java @@ -19,28 +19,34 @@ public class ItemPWRFuel extends ItemEnumMulti { } public static enum EnumPWRFuel { - MEU( 05.0D, new FunctionLogarithmic(25)), - HEU233( 07.5D, new FunctionSqrt(25)), - HEU235( 07.5D, new FunctionSqrt(25)), - MEN( 07.5D, new FunctionLogarithmic(25)), - HEN237( 07.5D, new FunctionSqrt(25)), - MOX( 07.5D, new FunctionLogarithmic(25)), - MEP( 07.5D, new FunctionLogarithmic(25)), - HEP239( 10.0D, new FunctionSqrt(25)), - HEP241( 10.0D, new FunctionSqrt(25)), - MEA( 07.5D, new FunctionLogarithmic(25)), - HEA242( 10.0D, new FunctionSqrt(25)), - HES326( 15.0D, new FunctionSqrt(25)), - HES327( 15.0D, new FunctionSqrt(25)); + MEU( 05.0D, new FunctionLogarithmic(20 * 30).withDiv(2_500)), + HEU233( 07.5D, new FunctionSqrt(25)), + HEU235( 07.5D, new FunctionSqrt(22.5)), + MEN( 07.5D, new FunctionLogarithmic(22.5 * 30).withDiv(2_500)), + HEN237( 07.5D, new FunctionSqrt(27.5)), + MOX( 07.5D, new FunctionLogarithmic(20 * 30).withDiv(2_500)), + MEP( 07.5D, new FunctionLogarithmic(22.5 * 30).withDiv(2_500)), + HEP239( 10.0D, new FunctionSqrt(22.5)), + HEP241( 10.0D, new FunctionSqrt(25)), + MEA( 07.5D, new FunctionLogarithmic(25 * 30).withDiv(2_500)), + HEA242( 10.0D, new FunctionSqrt(25)), + HES326( 12.5D, new FunctionSqrt(27.5)), + HES327( 12.5D, new FunctionSqrt(30)), + BFB_AM_MIX( 2.5D, new FunctionSqrt(15), 250_000_000), + BFB_PU241( 2.5D, new FunctionSqrt(15), 250_000_000); public double yield = 1_000_000_000; public double heatEmission; public Function function; - private EnumPWRFuel(double heatEmission, Function function) { + private EnumPWRFuel(double heatEmission, Function function, double yield) { this.heatEmission = heatEmission; this.function = function; } + + private EnumPWRFuel(double heatEmission, Function function) { + this(heatEmission, function, 1_000_000_000); + } } @Override diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 5959f4f48..fcda9054a 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -398,6 +398,7 @@ public class ResourceManager { //Heat Engines public static final ResourceLocation stirling_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/stirling.png"); public static final ResourceLocation stirling_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/stirling_steel.png"); + public static final ResourceLocation stirling_creative_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/stirling_creative.png"); public static final ResourceLocation sawmill_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/sawmill.png"); public static final ResourceLocation crucible_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/crucible_heat.png"); public static final ResourceLocation boiler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/boiler.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderStirling.java b/src/main/java/com/hbm/render/tileentity/RenderStirling.java index d1544382d..3957f074e 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderStirling.java +++ b/src/main/java/com/hbm/render/tileentity/RenderStirling.java @@ -47,6 +47,8 @@ public class RenderStirling extends TileEntitySpecialRenderer implements IItemRe if(type == 0) bindTexture(ResourceManager.stirling_tex); + else if(type == 2) + bindTexture(ResourceManager.stirling_creative_tex); else bindTexture(ResourceManager.stirling_steel_tex); @@ -86,7 +88,8 @@ public class RenderStirling extends TileEntitySpecialRenderer implements IItemRe public Item[] getItemsForRenderer() { return new Item[] { Item.getItemFromBlock(ModBlocks.machine_stirling), - Item.getItemFromBlock(ModBlocks.machine_stirling_steel) + Item.getItemFromBlock(ModBlocks.machine_stirling_steel), + Item.getItemFromBlock(ModBlocks.machine_stirling_creative) }; } @@ -100,7 +103,7 @@ public class RenderStirling extends TileEntitySpecialRenderer implements IItemRe public void renderCommonWithStack(ItemStack item) { GL11.glRotatef(90, 0F, 1F, 0F); boolean cog = item.getItemDamage() != 1; - RenderStirling.this.renderCommon(cog ? System.currentTimeMillis() % 3600 * 0.1F : 0, cog, item.getItem() == Item.getItemFromBlock(ModBlocks.machine_stirling) ? 0 : 1); + RenderStirling.this.renderCommon(cog ? System.currentTimeMillis() % 3600 * 0.1F : 0, cog, item.getItem() == Item.getItemFromBlock(ModBlocks.machine_stirling) ? 0 : item.getItem() == Item.getItemFromBlock(ModBlocks.machine_stirling_creative) ? 2 : 1); }}; } diff --git a/src/main/java/com/hbm/render/util/GaugeUtil.java b/src/main/java/com/hbm/render/util/GaugeUtil.java index e31455bac..751edabdf 100644 --- a/src/main/java/com/hbm/render/util/GaugeUtil.java +++ b/src/main/java/com/hbm/render/util/GaugeUtil.java @@ -1,10 +1,14 @@ package com.hbm.render.util; +import org.lwjgl.opengl.GL11; + import com.hbm.lib.RefStrings; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; public class GaugeUtil { @@ -55,5 +59,35 @@ public class GaugeUtil { tess.addVertexWithUV(x, y, z, 0, frameOffset); tess.draw(); } + + public static void drawSmoothGauge(int x, int y, double z, double progress, double tipLength, double backLength, double backSide, int color) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + + progress = MathHelper.clamp_double(progress, 0, 1); + + float angle = (float) Math.toRadians(-progress * 270 - 45); + Vec3 tip = Vec3.createVectorHelper(0, tipLength, 0); + Vec3 left = Vec3.createVectorHelper(backSide, -backLength, 0); + Vec3 right = Vec3.createVectorHelper(-backSide, -backLength, 0); + tip.rotateAroundZ(angle); + left.rotateAroundZ(angle); + right.rotateAroundZ(angle); + + Tessellator tess = Tessellator.instance; + tess.startDrawing(GL11.GL_TRIANGLES); + tess.setColorOpaque_F(0F, 0F, 0F); + double mult = 1.5; + tess.addVertex(x + tip.xCoord * mult, y + tip.yCoord * mult, z); + tess.addVertex(x + left.xCoord * mult, y + left.yCoord * mult, z); + tess.addVertex(x + right.xCoord * mult, y + right.yCoord * mult, z); + tess.setColorOpaque_I(color); + tess.addVertex(x + tip.xCoord, y + tip.yCoord, z); + tess.addVertex(x + left.xCoord, y + left.yCoord, z); + tess.addVertex(x + right.xCoord, y + right.yCoord, z); + tess.draw(); + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java index 2e92c1ad9..0b488f113 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityPWRController.java @@ -131,13 +131,13 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG connections = connectionsDouble / 2; connectionsControlled = connectionsControlledDouble / 2; - System.out.println("Finalized nuclear reactor!"); + /*System.out.println("Finalized nuclear reactor!"); System.out.println("Rods: " + rodCount); System.out.println("Connections: " + connections); System.out.println("Controlled connections: " + connectionsControlled); System.out.println("Heatex: " + heatexCount); System.out.println("Channels: " + channelCount); - System.out.println("Sources: " + sourceCount); + System.out.println("Sources: " + sourceCount);*/ } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java b/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java index 19ecdf379..fc2560845 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityStirling.java @@ -48,12 +48,12 @@ public class TileEntityStirling extends TileEntityLoadedBase implements INBTPack if(hasCog) { tryPullHeat(); - this.powerBuffer = (long) (this.heat * this.efficiency); + this.powerBuffer = (long) (this.heat * (this.isCreative() ? 1 : this.efficiency)); if(warnCooldown > 0) warnCooldown--; - if(heat > maxHeat()) { + if(heat > maxHeat() && !isCreative()) { this.overspeed++; @@ -109,6 +109,8 @@ public class TileEntityStirling extends TileEntityLoadedBase implements INBTPack float momentum = powerBuffer * 50F / ((float) maxHeat()); + if(this.isCreative()) momentum = Math.min(momentum, 45F); + this.lastSpin = this.spin; this.spin += momentum; @@ -120,13 +122,17 @@ public class TileEntityStirling extends TileEntityLoadedBase implements INBTPack } public int getGeatMeta() { - return this.getBlockType() == ModBlocks.machine_stirling ? 0 : 1; + return this.getBlockType() == ModBlocks.machine_stirling ? 0 : this.getBlockType() == ModBlocks.machine_stirling_creative ? 2 : 1; } public int maxHeat() { return this.getBlockType() == ModBlocks.machine_stirling ? 300 : 1500; } + public boolean isCreative() { + return this.getBlockType() == ModBlocks.machine_stirling_creative; + } + protected DirPos[] getConPos() { return new DirPos[] { new DirPos(xCoord + 2, yCoord, zCoord, Library.POS_X), diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 960cb5e02..25ba97821 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4078,6 +4078,8 @@ tile.machine_steam_engine.name=Dampfmaschine tile.machine_steam_engine.desc=Effizienz: 85%% tile.machine_stirling.name=Stirlingmotor tile.machine_stirling.desc=Erzeugt Energie aus Wärme. Benötigt externe Hitzequelle.$Wärmestransferrate: T*0.1 TU/t$Maximalaufnahme: 300 TU/t$Effizienz: 50%% +tile.machine_stirling_creative.name=Kreativer Stirlingmotor +tile.machine_stirling_creative.desc=Erzeugt Energie aus Wärme. Benötigt externe Hitzequelle.$Wärmestransferrate: T*0.1 TU/t$Keine Maximalaufnahme/t$Effizienz: 100%% tile.machine_stirling_steel.name=Schwerer Stirlingmotor tile.machine_stirling_steel.desc=Erzeugt Energie aus Wärme. Benötigt externe Hitzequelle.$Verwendet ein schwereres Zahnrad und verträgt höhere Temparaturen.$Wärmestransferrate: T*0.1 TU/t$Maximalaufnahme: 1500 TU/t$Effizienz: 50%% tile.machine_storage_drum.name=Atommüll-Lagertrommel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e0c251500..87e424890 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3611,6 +3611,51 @@ item.primer_buckshot.name=Buckshot Primer (x12) item.protection_charm.name=Charm of Protection item.prototype_kit.name=Prototype Kit item.pudding.name=Pudding +item.pwr_fuel.bfb_am_mix.name=Fuel Grade Americium PWR ZFB Rod +item.pwr_fuel.bfb_pu241.name=Plutonium-241 PWR ZFB Rod +item.pwr_fuel.hea242.name=HEA-242 PWR Fuel Rod +item.pwr_fuel.hen237.name=HEN-237 PWR Fuel Rod +item.pwr_fuel.hep239.name=HEP-239 PWR Fuel Rod +item.pwr_fuel.hep241.name=HEP-241 PWR Fuel Rod +item.pwr_fuel.hes326.name=HES-326 PWR Fuel Rod +item.pwr_fuel.hes327.name=HES-327 PWR Fuel Rod +item.pwr_fuel.heu233.name=HEU-233 PWR Fuel Rod +item.pwr_fuel.heu235.name=HEU-235 PWR Fuel Rod +item.pwr_fuel.mea.name=MEA PWR Fuel Rod +item.pwr_fuel.men.name=MEN PWR Fuel Rod +item.pwr_fuel.mep.name=MEP PWR Fuel Rod +item.pwr_fuel.meu.name=MEU PWR Fuel Rod +item.pwr_fuel.mox.name=MOX PWR Fuel Rod +item.pwr_fuel_depleted.bfb_am_mix.name=Depleted Fuel Grade Americium PWR ZFB Rod +item.pwr_fuel_depleted.bfb_pu241.name=Depleted Plutonium-241 PWR ZFB Rod +item.pwr_fuel_depleted.hea242.name=Depleted HEA-242 PWR Fuel Rod +item.pwr_fuel_depleted.hen237.name=Depleted HEN-237 PWR Fuel Rod +item.pwr_fuel_depleted.hep239.name=Depleted HEP-239 PWR Fuel Rod +item.pwr_fuel_depleted.hep241.name=Depleted HEP-241 PWR Fuel Rod +item.pwr_fuel_depleted.hes326.name=Depleted HES-326 PWR Fuel Rod +item.pwr_fuel_depleted.hes327.name=Depleted HES-327 PWR Fuel Rod +item.pwr_fuel_depleted.heu233.name=Depleted HEU-233 PWR Fuel Rod +item.pwr_fuel_depleted.heu235.name=Depleted HEU-235 PWR Fuel Rod +item.pwr_fuel_depleted.mea.name=Depleted MEA PWR Fuel Rod +item.pwr_fuel_depleted.men.name=Depleted MEN PWR Fuel Rod +item.pwr_fuel_depleted.mep.name=Depleted MEP PWR Fuel Rod +item.pwr_fuel_depleted.meu.name=Depleted MEU PWR Fuel Rod +item.pwr_fuel_depleted.mox.name=Depleted MOX PWR Fuel Rod +item.pwr_fuel_hot.bfb_am_mix.name=Hot Fuel Grade Americium PWR ZFB Rod +item.pwr_fuel_hot.bfb_pu241.name=Hot Plutonium-241 PWR ZFB Rod +item.pwr_fuel_hot.hea242.name=Hot HEA-242 PWR Fuel Rod +item.pwr_fuel_hot.hen237.name=Hot HEN-237 PWR Fuel Rod +item.pwr_fuel_hot.hep239.name=Hot HEP-239 PWR Fuel Rod +item.pwr_fuel_hot.hep241.name=Hot HEP-241 PWR Fuel Rod +item.pwr_fuel_hot.hes326.name=Hot HES-326 PWR Fuel Rod +item.pwr_fuel_hot.hes327.name=Hot HES-327 PWR Fuel Rod +item.pwr_fuel_hot.heu233.name=Hot HEU-233 PWR Fuel Rod +item.pwr_fuel_hot.heu235.name=Hot HEU-235 PWR Fuel Rod +item.pwr_fuel_hot.mea.name=Hot MEA PWR Fuel Rod +item.pwr_fuel_hot.men.name=Hot MEN PWR Fuel Rod +item.pwr_fuel_hot.mep.name=Hot MEP PWR Fuel Rod +item.pwr_fuel_hot.meu.name=Hot MEU PWR Fuel Rod +item.pwr_fuel_hot.mox.name=Hot MOX PWR Fuel Rod item.quartz_plutonium.name=Plutonic Quartz item.radaway.name=RadAway item.radaway_flush.name=Elite RadAway @@ -5032,6 +5077,8 @@ tile.machine_steam_engine.name=Steam Engine tile.machine_steam_engine.desc=Efficiency: 85%% tile.machine_stirling.name=Stirling Engine tile.machine_stirling.desc=Turns heat into energy. Requires external heat source.$Heat transfer rate: T*0.1 TU/t$Max intake: 300 TU/t$Efficiency: 50%% +tile.machine_stirling_creative.name=Creative Stirling Engine +tile.machine_stirling_creative.desc=Turns heat into energy. Requires external heat source.$Heat transfer rate: T*0.1 TU/t$Infinite intake/t$Efficiency: 100%% tile.machine_stirling_steel.name=Heavy Stirling Engine tile.machine_stirling_steel.desc=Turns heat into energy. Requires external heat source.$Uses a much heavier gear to support higher temperatures.$Heat transfer rate: T*0.1 TU/t$Max intake: 1500 TU/t$Efficiency: 50%% tile.machine_storage_drum.name=Nuclear Waste Disposal Drum diff --git a/src/main/resources/assets/hbm/textures/gui/gui_press.png b/src/main/resources/assets/hbm/textures/gui/gui_press.png index 8c09adbe66983990eb89ef3693dd2d9ddb9c57d1..c1d48e76451b82913c370ba8b3525f9e63c80acb 100644 GIT binary patch literal 2102 zcmcIlSyYqP8a;`CG{{Y{j1py1so_FUsElQvF9Zq%87v_75~LU)41p3z(3KJa15{8{ zA}D20iii+U5C|ee!=y|yg~1e%Au=Ng!{2nRuDjZY-rJYEU%qqJIp5yj+56#KbHmz8 zBaR>d0Md>QHtqnxL`xWuln|Bk#L{3<5sR{N^pq5VEcp!`fP;KT8%xi)JU+L9pgf`^ zG3DCkPn}kNk`^d!=+bxFy)r0^wnQ^gBGjfWF~9*e%XF@4vqYL=;Ab{Yw{*N6n3Xp_ zRd7dSkpkJx@*HWg#skF#4q4fyDygWR_X)?S-rdNIlyRfwJR`lRXR;-Au)!w-P$8E< zT2B1vvb#*8Jlk+-S=7d0Fw&TBYsWNpDCJ)DecwkLGqdJbiJc#Mex}rO2?j4-JX%Su zygJx&ZkabhnoM6Bo^vrLZ<;X}j9G8yqd9DzXHscuZ2i&GvT$ZSKW=+rufurGh4i5& zZTN+gAdK7=cSC|xJQ&)#KG%B@k1tV zZ;1FftC^D2wu~(q8D@_;=CYiwJaBV#{b2uUwd1EG752Ol6#44Lju5m-0`%qABee#j zg8daf#qOM`&;HURgbu1gTLZUC4Z(YnA75FotPF zMT0G?X-hJBOAyHN$4{*~e69*gU-0Pkko{c){A|a?@H^y3dm z(u(xanG}rF)(~WBcmkAG_xn*ZdjI+DS;$y_(9ewghzbhcNx1Axmw^Q6O95}Y8W-_& zcj@6vHy_sMRLl&8lKL_G=i4T*`%cEBvB-^C7n|Lgy!abKQE~;Y!1=ARiTeh_QXQ zTcHx_A1YW|hN|U68<{s!S6C#>MW~(6@xMrW>gS-so)%gT7%WtdEV)1e*QR4W{*&I< zuiB@yhASTTaF7bze&1B*m(g%=?5f6I{MoyhAZXrez&u2pZ7P?fwK6Si&UrhCpbF6X zz>Bn4DY`njzrU=p-b7iqCPT9+dg}`+Uc6iU0NLl)GM%QisYxl5xLH?Uh1}~_Ca|4u zNW`qM-n)n#4r`>dNDZCIJL{AB4i8u4*$ad{r^WJy1f@-6**aIz;c+GiVfn7|RUnxJ zWDPH3PxT%uJkMxOWhfwa<-P7!KB0B=oH9Y;ijj8*Rkf^sQ>sD&Won!*Oc@-e)ZwPQ zEX`<}uxj7(5d9;SAC1-TV1o2&G#}SP(OPHoxAtQ<0`h!J`Eg3F);eDInbdMGtx%Tl z5@h&%4e23JST1%o@o($TOv7!Lvzb`Up~g`UG8NUaHxp_>uC8 z3j3;&^BckJ0eNF}Hym1cTuVzU2Rigiurph!ZXvu!?#+Bmbo7r=*Z(E>n(Eh;5lFmE z6Jz5@&L%6}f`2@x%Ui&$sE+c7fv683%ULgGw)8MQoig9< zTSRVR(I)eZvy`fuHcW^>QXNeuW9Ia})CNNNSdG{JHkpn;N>g(2^U+Ksq0L*IA`t}- z6s%|P<1gWX?)Fo*owx6CdgBr1;?D^EjY}pU^ew;Gy{B##Fw$f#Um{xq5*fm(lC`L; zzVqU_gTg#_!SgOFEUcK>J}B6KhTy@*GgIwy#jk793)?4#dTo!9ei}f>Ch>t_XA(&YF$(H2i2cJ++v3$#I!{Ot(Sd0Hf zt1y8uEz573;Bs*cVzEwpZ%J=&Q7^pf-CPBUM9L}5d)T@9YG&6^{4YoPt7+>aOsPJ5 zyDVb1wUM^1P3;)p&L&SOu9X}5R0ESHRZ2NB_iAHu}cT^JptDk=+`rT?fF?Z~I=Y=F4l#C>& zgKkm9ll@OFI!j{u=qE&uThDeWyNmHva*l_P7>(`C_`3=IL9r07C3>{3xt(}1F&$xQ zf`$DaIJ#(Z7k}0)jb0=Ip`N=nV|8Xvp53>$wq|7@_SpL1R9HGCnM(^3KcCM*iazQ8 c3)tEll+yON5vlF5vfl(8ZLv0wtpcz73L!X~8~^|S literal 4875 zcmbtYc|4Te`+jB&CQD-&5z55KR@u`_YG}e(T5O48LY5RsA^Q-L$WGa_B|@PE(`ZBX zea#@onnaN-Gru$SzTeMp`~LNP{+M|_=Q(qpb6@v;UH5e+^3(}EUM>+X2!eQt`UDdQ zf`MBYgyaBU=dL|+1YZbG9ikZ$T>eOh+YrS6mPpVx^GRPA(RLMe$!u84qIjMhcF*<{ zF4)5zH=UTwwtKcbG@;`!+1uL?Q;K|rp32Tj+XVI+>V#O5NvS0xFT%s!ZUq>4+o=SU zALP4#MC$9Y8JqR7T5{%Np;%{BexaGU#YefbvPGHefps{!B>9VlnL%1BW?DyEi^}A& zqEjul8W|_NmpVs(%#ScNmeNAz_bVv0vyaYS*T|WmTJDRfl;q^(%<1o3XsiB3%NlWe zA^&=<>1~RHbn(d}Oq-~Cj2#-~oD|07_r;ZEdNXPu{h5;ur5@#Qys$eCetc{!H|EH% z&5aI?P#bao9-{qEWx9GNd*=aOMb`(d1*PX}3KkX?N_#YigEpSp9JHDH{2_{FkaDE& zvlH1clr|qFc}{NfqyIPdXz{ZctzpBiH*eIXSGo9PA^hI+>y}-oo#S@0&DeeyC#D>6 z|2pSjkTMSyIGL7tCD2K8hRj=r+{|aKfvz-zQ%e85*v!_j; zzzefOgMF@(qm1!;3@G~yrfqJzJ#e~gikD+|*d4eG)L1J?G+7vBejiwNXMWRTns=T( z;hv&=3oN+ttHMSSwf!4=+wz;?5ZXFbU>(e_WJuQOHPDKC8E79mMZDGwVuyB4doP4~ z!@NdU8P|Fi1%J?v1{U!RSUjBxir!qjx1?1uIgk*HPZsm<>1@_L))j=Z-0@~>8|_Jb5hl3XZ1${ak=corttzYNuS`U0z4+y|f=rH^ew;4~ zTWWyPNz&z?GU-xu3T*J$tQUXbW|QwLM6ygu##DRd8c1&Qv>Vi_kt!Np3v~*#&$Z~C z^IY8CV{>QYP?X6c?7cZnySb=K|7|)cq<^!sUV&KL?q0N6kT_M^T4Lr0b;@1g5vj^I zu*bAIn$FM94^gDgKmIcRt^Q%&TD`4%WuE>QdZnQ}3|V*|U3GA3A{* zI|dtnaD{L_YUTX$Xm7yO^IzT~E%y|iHg$5Y?n6JKImfAW9z$UxF7JaEY*4SdpYC`6 zw9>xjV9b-UE{y-QbN}qMyY0{G-S>U6=ApyhUxdf1b*fkGt|M}eXOrI^7J2cse(URH z*UdL)3(lN7v&dw)InVH%6}X_{AsQQ=xqVn9DA8pT1m|{1D_FZfrxS)ZifN6`Dv4am zw}Ill7M!-~b`_ptr%Fd>x%UM{B;fnr`#8=W2#(I}?oKWol?EuVCT1$ha!oW(EVd?> zL{=Kn`AMHH3ZJJ11>xY)js*u`&tw*Puk^(t6OArqZTGiIFuIq4u?{LNkwDA5>hXmN zjZ-qN`+mtASogfh8;PH|AIV7$?#7~>{qMrC7CTJuQ3%=34*J&YN*CD|hr}F*;Y;@A z?bZ_@AG~BPyBDoLx58s)PU-A=?dEcF=>^aCU_;2#en1S8P3Iyg)Ez@X7BUNoH+*~^ z&BxKhbhP8I`}oW#6sud|;47yflAr*BfAUbt_wd=&hUL02PT-!YAQxML<2A zD4lP*asE8jLp>3~90zE@f&~pUFD7|4X#_E9GqnOf3x)XR-ni^VqI8=4GA2?N_Zhpm zJ8`B!<+_UWhL)`|b*pP)(mkRw7_L8fva7HkdVq8|!d;gKV?U;i<0rpF1gnKh!S9DF zfb0=q_yQ>+0tno;NIV(?S%wj^9faBNQ*lVu*E#GY6Y(HQMa4U>fwqC+o%D(BwAO+< zAM7sk>0_ctJ?&5={{Q~GDkmP9CUDC zBYfWup-RhhGg9y?>(Qfzh~+8v#C`*-fIvgP_UC5%b`-vvH`N0vJlCIu3tAnWh)_RP zgvY_dP6G^c4%cNo%VNj6kg$!qPaad6)8wc*LfF#~39Z68mM4LYLpp#huqPm|PnX$n zmCM4zbjXD4J)ov^Rp|{55J7;<@g(icCyrZ!0FCpne65|@(wCy@`far&(2pW^LnY`G zB!*|3T67ixi(-fF>q>OYf)$fq60j<}@e-#7I+TKm0h?;W7c|BBL3O1i^elMQ#K*KJ z?M2^SXnE`PFcR;`-@dx~Tq7ffx~Uq8Z*Fe(ETj$cNU)x7dg&w9ufF6(76V*(04@?} zXVt$G05-`1AOyjLkt90oJhZz)0=3psK=Q)JwXqI1iUQfS7R#axI}Z?&KnGi}`A||o zQh(F65g`rFDI*zPeZb{AyCLQM50I69UWTB}F=rN&ieDU?Pe5XHVZmw-Js~5x4(t#3 zVera550JQ<0>Ks*7NDj>K&Ia3Z}M23kcf?dL-L??`fjD1Y2erb{H6qK9K>vUe!6(B zciEL<6_~N=)+WaF8!Csc;Fe%)BtGC12cdwy0y<#6+IwV~i~MTZJ+%hDqH9<@t&dQi zfz`={@{^4wQuGmb{>I^ijzq_rKEh5@g}RHMd_;_&JkZwS9zn=PMQG!H7bL&~Ae@`? zFRrQqR>y$NAq2>{1V(q?_;?O=dnCSL3CpLf0HRr$+G2jrSUBG=g_hv}*e>yt4W2H7 z*z2YKfO5LnAnqol4S-qwpJD~_t~6sxp6KBI25=Q@F&hJ>rwIZ0)X?`t-Rf~MuEFES z+OLCf4GWGns&ei{d~+TB@#Pccd#@jwhn-v8CA z)($vcPI35t*aE?n9I*#2v(tn;2!M0yant-QRgnC9DL8R!njsX$eQjje_ve&WBwmX} zJ<((&#%;5dM!9)X;uNr`7Lj}5T7f<)s#>XF3kP7aF1a}PeWLc%F&!de4#?&|+y%;Q zJ|sKeW=lox2T~)4;mWy(WZh6@XMbkoS9*I+0gABpYR>~%2qz*jlvQ>8KTCjIg}C5P z{~iAapg^kGBupw$Ka3V+DfIw}SzxfL69wJZ0|f!l15MV4Mc$np@i&7PzNk& ziREhXatzd*07{~o2bc8xY(maY5Fmd&x~5#o8)` zD^_J9@qX0Hmw*=otYUh(WfHP8NA(}1rKQb#Y3!;dG#*w!KPri)4cII4&a6k*m<|;W z3W}}G*wlDkxugllJ*80g6Fr3voSWHgh!Ck$4OG!Ar#XjBv9+|e(gXRfy7~FlXjW;# z;{WO+4JU1p@4@s$sRW5w^e(p4iKw!>{$c3=l*^j{1tsKdqmA(h@l88E<6lZF3mMbO zh5NJBp)hWtYLi1~nL`6VKY!o`yw3(nNF`teIFx0!8v%CT24@i0gK5>wF~fz-5tEu{ zWrljLkJYUL(YL{8JfIo?%RmwB+%cF%$S$|fEy5>X*T^WvWO6D#9veJbmOy4949YB` z=3iRyR+q=B z>hW*|;$k1I@VRZpU7!Q0MRnew?a|dMm`3l^ZwAxVZDblJnr9d1_knms_R^(=ktQ;j zKl1ilHOi1LOEs?=1rxH5e1+GEOey2W^R{*m}TEE?Iklb;+cCW)T84*IZp zEz3$>qRo%>kczU9h?57h0zfgjY85-Db4El3ZXZY^%_h4XSF;(81bzQz(A zmEKTlBG^3fpPtrt`QQ!ao0K7~ntZQ|wka`vo47IU7Qa8UhpQC z0D(@REx{M7f`h~UVztYw+aOkVGx{CYXMS?&=*!|VsxM|E0KCD6pRezB8%#KvWeeX) zK_z@f2;Ys>C*qKuBa^)XJ|CStC->0O)MAaopIA+bnIa&uu8>E4A%e7v10Ss$_d4TmkcFa@R7 zFIJZxMWg!;wlpgsYnbsRkDl#$WIw_ zdCrn&4cHy=pv}`J%q|kpv0{3^Z`G#8%2v7>XyuXz(2Y14(FSb^ToheBAM=x^juRcQ zz3wnK>FWk3b!vLLhMSvvna{DSvNo5km03N2Ae*-#dE@^MVfc%hJqn{r0gZ^CoL%Isbc|f`f(!!pOijHUCQFsRmYN~w!I%?j4 z-U1U6Ag8%oZej8GE7rnbAT9*8agxa<^YhJQb_V{NILDkq2or`OQc9$hv|6o$@dq7^ zM#FSE9kkY8S}vDqx7$aH?@7I0H>Fa^0DJ1XuBlWi#+GwtGy1+ytycSHuU4yQt*ylq zHsix%fzfD$5Q5zq_4|F+jD3$Uk7V-=R1C&xIrI=2qT)3AcR~M&)(&-d;H`f#k zIfmm`hGU=M_#7EcNzUWbK>*oo2KVZc<$A+BUZC_li}mJExP91L$>;CMW;3MIDQ<6X zj)mGmlSybvj1a={JkJyhIf6hEMG8IBtmaF4y`Gh{_iN@EvxPOAO~>;*v%5##Zuj_|Z9Ce& gzmcyQ{RIN>0r{-C{pe9gng9R*07*qoM6N<$f_;s^sQ>@~ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/stirling_creative.png b/src/main/resources/assets/hbm/textures/models/machines/stirling_creative.png new file mode 100644 index 0000000000000000000000000000000000000000..9ba16b6a329276bda09ce0f338dbce939afd6b4e GIT binary patch literal 3877 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 literal 0 HcmV?d00001