From 0c0ca15dbf7ae8aadffeb987617bec95542c26ec Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 20 Jul 2022 22:41:48 +0200 Subject: [PATCH] iron furnace, but it's made from steel and works completely different --- .../java/com/hbm/blocks/BlockDummyable.java | 38 +- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../com/hbm/blocks/machine/FurnaceSteel.java | 38 + .../com/hbm/blocks/machine/HeaterFirebox.java | 5 + .../blocks/machine/MachineLiquefactor.java | 7 +- .../hbm/blocks/machine/MachineSolidifier.java | 5 +- .../entity/projectile/EntityBulletBase.java | 2 +- .../container/ContainerFurnaceSteel.java | 73 ++ .../com/hbm/inventory/gui/GUIFurnaceIron.java | 18 +- .../hbm/inventory/gui/GUIFurnaceSteel.java | 67 ++ .../hbm/inventory/recipes/SILEXRecipes.java | 4 +- src/main/java/com/hbm/main/ClientProxy.java | 12 + .../java/com/hbm/main/ResourceManager.java | 4 +- .../hbm/render/item/ItemRenderLibrary.java | 12 + .../com/hbm/render/model/ModelT45Chest.java | 5 + .../tileentity/IItemRendererProvider.java | 10 + .../render/tileentity/RenderFurnaceSteel.java | 57 ++ .../hbm/tileentity/TileEntityProxyCombo.java | 48 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityFurnaceSteel.java | 268 ++++++ .../machine/TileEntityHeaterFirebox.java | 9 +- .../TileEntityMachineElectricFurnace.java | 3 +- src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../hbm/models/machines/furnace_steel.obj | 788 ++++++++++++++++++ .../gui/processing/gui_furnace_steel.png | Bin 0 -> 2100 bytes .../models/machines/furnace_steel.png | Bin 0 -> 7428 bytes 26 files changed, 1453 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/FurnaceSteel.java create mode 100644 src/main/java/com/hbm/inventory/container/ContainerFurnaceSteel.java create mode 100644 src/main/java/com/hbm/inventory/gui/GUIFurnaceSteel.java create mode 100644 src/main/java/com/hbm/render/tileentity/IItemRendererProvider.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderFurnaceSteel.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java create mode 100644 src/main/resources/assets/hbm/models/machines/furnace_steel.obj create mode 100644 src/main/resources/assets/hbm/textures/gui/processing/gui_furnace_steel.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/furnace_steel.png diff --git a/src/main/java/com/hbm/blocks/BlockDummyable.java b/src/main/java/com/hbm/blocks/BlockDummyable.java index dd4550db6..62ddd9040 100644 --- a/src/main/java/com/hbm/blocks/BlockDummyable.java +++ b/src/main/java/com/hbm/blocks/BlockDummyable.java @@ -7,6 +7,7 @@ import java.util.Random; import com.hbm.handler.MultiblockHandlerXR; import com.hbm.handler.ThreeInts; import com.hbm.main.MainRegistry; +import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import net.minecraft.block.Block; @@ -41,8 +42,36 @@ public abstract class BlockDummyable extends BlockContainer { public static final int offset = 10; // meta offset from dummy to extra rotation public static final int extra = 6; + + /* + * An extra integer that can be set before block set operations (such as makeExtra) and intercepted in createNewTileEntity. + * This way we can inelegantly add variation to the tiles created even if the metadata would be the same. + * Why createNewTileEntity only takes two args or why it is used by the chunk's setBlock implementation is beyond me but any + * other solution feels like putting in way too much effort to achieve the same thing, really. + */ + public static int overrideTileMeta = 0; + /* + * Set as the meta for the core is decided, before any of the dummies are placed. This way we can somewhat easily add variation + * to our tile entities in createNewTileEntity using the relative position to the core, as well as pull information from the core + * block itself, if required. + */ + public static BlockPos lastCore = new BlockPos(0, 0, 0); + /* + * Because createNewTileEntity has no knowledge of where the tile ends up being beforehand, we just set a reference beforehand when + * the block was initially placed. Why does this have to be such a pain in the ass. + * BEWARE: This information is server-side only! Keep that in mind when expecting any of this affecting the client as well. + */ + public static BlockPos lastBlockSet = new BlockPos(0, 0, 0); public static boolean safeRem = false; + + public static void setOverride(int i) { + overrideTileMeta = i; + } + + public static void resetOverride() { + overrideTileMeta = 0; + } public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { @@ -62,8 +91,6 @@ public abstract class BlockDummyable extends BlockContainer { if(b != this) { world.setBlockToAir(x, y, z); - // world.setBlock(x, y, z, ModBlocks.dfc_injector, dir.ordinal(), - // 3); } } @@ -182,6 +209,7 @@ public abstract class BlockDummyable extends BlockContainer { if(!world.isRemote) { //this is separate because the multiblock rotation and the final meta might not be the same int meta = getMetaForCore(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, (EntityPlayer) player, dir.ordinal() + offset); + lastCore = new BlockPos(x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o); world.setBlock(x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, this, meta, 3); fillSpace(world, x, y, z, dir, o); } @@ -191,6 +219,12 @@ public abstract class BlockDummyable extends BlockContainer { super.onBlockPlacedBy(world, x, y, z, player, itemStack); } + + // this fucking sucks, why are you making me do this + @Override + public void onBlockAdded(World world, int x, int y, int z) { + lastBlockSet = new BlockPos(x, y, z); + } /** * A bit more advanced than the dir modifier, but it is important that the resulting direction meta is in the core range. diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 4e78c0c64..b2e613f01 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -627,6 +627,7 @@ public class ModBlocks { public static Block heater_firebox; public static Block furnace_iron; + public static Block furnace_steel; public static Block machine_difurnace_off; public static Block machine_difurnace_on; @@ -1793,6 +1794,7 @@ public class ModBlocks { heater_firebox = new HeaterFirebox().setBlockName("heater_firebox").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); furnace_iron = new FurnaceIron().setBlockName("furnace_iron").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_aluminium"); + furnace_steel = new FurnaceSteel().setBlockName("furnace_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_difurnace_off = new MachineDiFurnace(false).setBlockName("machine_difurnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); machine_difurnace_on = new MachineDiFurnace(true).setBlockName("machine_difurnace_on").setHardness(5.0F).setLightLevel(1.0F).setResistance(10.0F); @@ -2965,6 +2967,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_epress, machine_epress.getUnlocalizedName()); GameRegistry.registerBlock(heater_firebox, heater_firebox.getUnlocalizedName()); GameRegistry.registerBlock(furnace_iron, furnace_iron.getUnlocalizedName()); + GameRegistry.registerBlock(furnace_steel, furnace_steel.getUnlocalizedName()); GameRegistry.registerBlock(machine_difurnace_off, machine_difurnace_off.getUnlocalizedName()); GameRegistry.registerBlock(machine_difurnace_on, machine_difurnace_on.getUnlocalizedName()); GameRegistry.registerBlock(machine_difurnace_rtg_off, machine_difurnace_rtg_off.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/FurnaceSteel.java b/src/main/java/com/hbm/blocks/machine/FurnaceSteel.java new file mode 100644 index 000000000..0aa5c2af0 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/FurnaceSteel.java @@ -0,0 +1,38 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityFurnaceSteel; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class FurnaceSteel extends BlockDummyable { + + public FurnaceSteel() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityFurnaceSteel(); + return new TileEntityProxyCombo(true, false, false); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override + public int[] getDimensions() { + return new int[] {1, 0, 1, 1, 1, 1}; + } + + @Override + public int getOffset() { + return 1; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/HeaterFirebox.java b/src/main/java/com/hbm/blocks/machine/HeaterFirebox.java index fc85049c1..762b291c3 100644 --- a/src/main/java/com/hbm/blocks/machine/HeaterFirebox.java +++ b/src/main/java/com/hbm/blocks/machine/HeaterFirebox.java @@ -20,6 +20,11 @@ public class HeaterFirebox extends BlockDummyable { if(meta >= 12) return new TileEntityHeaterFirebox(); + + //the firebox is only 1 block tall, why did i write this? + /*if(lastCore.getX() == lastBlockSet.getX() && lastCore.getY() + 1 == lastBlockSet.getY() && lastCore.getZ() == lastBlockSet.getZ()) + return new TileEntityProxyCombo().inventory().heatSource();*/ + return new TileEntityProxyCombo(true, false, false); } diff --git a/src/main/java/com/hbm/blocks/machine/MachineLiquefactor.java b/src/main/java/com/hbm/blocks/machine/MachineLiquefactor.java index c232fea2e..00009050b 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineLiquefactor.java +++ b/src/main/java/com/hbm/blocks/machine/MachineLiquefactor.java @@ -8,6 +8,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineLiquefactor; +import com.hbm.util.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -68,10 +69,8 @@ public class MachineLiquefactor extends BlockDummyable implements ITooltipProvid @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { - if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { //TODO: just slap some fuckin I18n support in there idfk - list.add(EnumChatFormatting.YELLOW + "Powerful universal machine to turn items into fluids."); - list.add(EnumChatFormatting.YELLOW + "Comes with versatile catalytic components, heating elements"); - list.add(EnumChatFormatting.YELLOW + "and a built-in hydrator for petrochemical liquefaction."); + if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + for(String s : I18nUtil.resolveKeyArray(this.getUnlocalizedName() + ".desc")) list.add(EnumChatFormatting.YELLOW + s); } else { list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC +"Hold <" + EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" + diff --git a/src/main/java/com/hbm/blocks/machine/MachineSolidifier.java b/src/main/java/com/hbm/blocks/machine/MachineSolidifier.java index b743f795e..33bb6db37 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineSolidifier.java +++ b/src/main/java/com/hbm/blocks/machine/MachineSolidifier.java @@ -8,6 +8,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ITooltipProvider; import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.oil.TileEntityMachineSolidifier; +import com.hbm.util.I18nUtil; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; @@ -69,9 +70,7 @@ public class MachineSolidifier extends BlockDummyable implements ITooltipProvide public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { - list.add(EnumChatFormatting.YELLOW + "A universal machine fitted with cooling systems and other"); - list.add(EnumChatFormatting.YELLOW + "versatile tools for turning fluids solid using various"); - list.add(EnumChatFormatting.YELLOW + "processes such as freezing and petrochemical polymerization."); + for(String s : I18nUtil.resolveKeyArray(this.getUnlocalizedName() + ".desc")) list.add(EnumChatFormatting.YELLOW + s); } else { list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC +"Hold <" + EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" + diff --git a/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java b/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java index 2cd1bd70f..941596012 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBulletBase.java @@ -315,7 +315,7 @@ public class EntityBulletBase extends Entity implements IProjectile { boolean headshot = false; - if(victim instanceof EntityLivingBase) { + if(victim instanceof EntityLivingBase && this.config.headshotMult > 1F) { EntityLivingBase living = (EntityLivingBase) victim; double head = living.height - living.getEyeHeight(); diff --git a/src/main/java/com/hbm/inventory/container/ContainerFurnaceSteel.java b/src/main/java/com/hbm/inventory/container/ContainerFurnaceSteel.java new file mode 100644 index 000000000..9c62bc808 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerFurnaceSteel.java @@ -0,0 +1,73 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotSmelting; +import com.hbm.tileentity.machine.TileEntityFurnaceSteel; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerFurnaceSteel extends Container { + + protected TileEntityFurnaceSteel furnace; + + public ContainerFurnaceSteel(InventoryPlayer invPlayer, TileEntityFurnaceSteel furnace) { + this.furnace = furnace; + + //input + this.addSlotToContainer(new Slot(furnace, 0, 35, 17)); + this.addSlotToContainer(new Slot(furnace, 1, 35, 35)); + this.addSlotToContainer(new Slot(furnace, 2, 35, 53)); + //output + this.addSlotToContainer(new SlotSmelting(invPlayer.player, furnace, 3, 125, 17)); + this.addSlotToContainer(new SlotSmelting(invPlayer.player, furnace, 4, 125, 35)); + this.addSlotToContainer(new SlotSmelting(invPlayer.player, furnace, 5, 125, 53)); + + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 9; j++) { + this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 84 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 142)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack originalStack = slot.getStack(); + stack = originalStack.copy(); + + if(index <= 5) { + if(!this.mergeItemStack(originalStack, 6, this.inventorySlots.size(), true)) { + return null; + } + + slot.onSlotChange(originalStack, stack); + + } else if(!this.mergeItemStack(originalStack, 0, 3, false)) { + return null; + } + + if(originalStack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return furnace.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java b/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java index cc3379b1d..ea4feeb06 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java @@ -17,11 +17,11 @@ import net.minecraft.util.ResourceLocation; public class GUIFurnaceIron extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_furnace_iron.png"); - private TileEntityFurnaceIron diFurnace; + private TileEntityFurnaceIron furnace; public GUIFurnaceIron(InventoryPlayer invPlayer, TileEntityFurnaceIron tedf) { super(new ContainerFurnaceIron(invPlayer, tedf)); - diFurnace = tedf; + furnace = tedf; this.xSize = 176; this.ySize = 166; @@ -38,7 +38,7 @@ public class GUIFurnaceIron extends GuiInfoContainer { if(this.isMouseOverSlot(slot, x, y) && !slot.getHasStack()) { - List bonuses = this.diFurnace.burnModule.getTimeDesc(); + List bonuses = this.furnace.burnModule.getTimeDesc(); if(!bonuses.isEmpty()) { this.func_146283_a(bonuses, x, y); @@ -47,13 +47,13 @@ public class GUIFurnaceIron extends GuiInfoContainer { } } - this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 35, 71, 7, x, y, new String[] { (diFurnace.progress * 100 / Math.max(diFurnace.processingTime, 1)) + "%" }); - this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 44, 71, 7, x, y, new String[] { (diFurnace.burnTime / 20) + "s" }); + this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 35, 71, 7, x, y, new String[] { (furnace.progress * 100 / Math.max(furnace.processingTime, 1)) + "%" }); + this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 44, 71, 7, x, y, new String[] { (furnace.burnTime / 20) + "s" }); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.getInventoryName()); + String name = this.furnace.hasCustomInventoryName() ? this.furnace.getInventoryName() : I18n.format(this.furnace.getInventoryName()); this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); @@ -65,13 +65,13 @@ public class GUIFurnaceIron extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - int i = diFurnace.progress * 70 / Math.max(diFurnace.processingTime, 1); + int i = furnace.progress * 70 / Math.max(furnace.processingTime, 1); drawTexturedModalRect(guiLeft + 53, guiTop + 36, 176, 18, i, 5); - int j = diFurnace.burnTime * 70 / Math.max(diFurnace.maxBurnTime, 1); + int j = furnace.burnTime * 70 / Math.max(furnace.maxBurnTime, 1); drawTexturedModalRect(guiLeft + 53, guiTop + 45, 176, 23, j, 5); - if(diFurnace.canSmelt()) + if(furnace.canSmelt()) drawTexturedModalRect(guiLeft + 70, guiTop + 16, 176, 0, 18, 18); } } diff --git a/src/main/java/com/hbm/inventory/gui/GUIFurnaceSteel.java b/src/main/java/com/hbm/inventory/gui/GUIFurnaceSteel.java new file mode 100644 index 000000000..cad0be5e6 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIFurnaceSteel.java @@ -0,0 +1,67 @@ +package com.hbm.inventory.gui; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerFurnaceSteel; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityFurnaceSteel; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +public class GUIFurnaceSteel extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_furnace_steel.png"); + private TileEntityFurnaceSteel furnace; + + public GUIFurnaceSteel(InventoryPlayer invPlayer, TileEntityFurnaceSteel tedf) { + super(new ContainerFurnaceSteel(invPlayer, tedf)); + furnace = tedf; + + this.xSize = 176; + this.ySize = 166; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + for(int i = 0; i < 3; i++) { + this.drawCustomInfoStat(x, y, guiLeft + 53, guiTop + 17 + 18 * i, 70, 7, x, y, new String[] { String.format("%,d", furnace.progress[i]) + " / " + String.format("%,d", furnace.processTime) + "TU" }); + this.drawCustomInfoStat(x, y, guiLeft + 53, guiTop + 26 + 18 * i, 70, 7, x, y, new String[] { "Bonus: " + furnace.bonus[i] + "%" }); + } + //this.drawCustomInfoStat(x, y, guiLeft + 52, guiTop + 44, 71, 7, x, y, new String[] { (furnace.burnTime / 20) + "s" }); + + this.drawCustomInfoStat(x, y, guiLeft + 151, guiTop + 18, 9, 50, x, y, new String[] { String.format("%,d", furnace.heat) + " / " + String.format("%,d", furnace.maxHeat) + "TU" }); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.furnace.hasCustomInventoryName() ? this.furnace.getInventoryName() : I18n.format(this.furnace.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + @Override + protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Minecraft.getMinecraft().getTextureManager().bindTexture(texture); + drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); + + int h = furnace.heat * 48 / furnace.maxHeat; + drawTexturedModalRect(guiLeft + 152, guiTop + 67 - h, 176, 76 - h, 7, h); + + for(int i = 0; i < 3; i++) { + int p = furnace.progress[i] * 69 / furnace.processTime; + drawTexturedModalRect(guiLeft + 54, guiTop + 18 + 18 * i, 176, 18, p, 5); + int b = furnace.bonus[i] * 69 / 100; + drawTexturedModalRect(guiLeft + 54, guiTop + 27 + 18 * i, 176, 23, b, 5); + + if(furnace.wasOn) + drawTexturedModalRect(guiLeft + 16, guiTop + 16 + 18 * i, 176, 0, 18, 18); + } + } +} diff --git a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java index b9acd7126..2d5009aca 100644 --- a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java @@ -251,14 +251,14 @@ public class SILEXRecipes { // HEAUS // recipes.put(new ComparableStack(ModItems.rbmk_pellet_heaus, 1, i), new SILEXRecipe(600, 100, 2) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 90 - i * 20)) + .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 90 - i * 20)) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 5 + 10 * i)) .addOut(new WeightedRandomObject(new ItemStack(Items.gold_nugget), 3 + 6 * i)) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i)) ); recipes.put(new ComparableStack(ModItems.rbmk_pellet_heaus, 1, i + 5), new SILEXRecipe(600, 100, 2) .addOut(new WeightedRandomObject(new ItemStack(ModItems.powder_xe135_tiny), 1)) - .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_lesser), 89 - i * 20)) + .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_australium_greater), 89 - i * 20)) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_au198), 5 + 10 * i)) .addOut(new WeightedRandomObject(new ItemStack(Items.gold_nugget), 3 + 6 * i)) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pb209), 2 + 4 * i)) ); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 2e10ec111..77604dd08 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -14,6 +14,8 @@ import net.minecraft.client.particle.EntityReddustFX; import net.minecraft.client.renderer.entity.RenderMinecart; import net.minecraft.client.renderer.entity.RenderSnowball; import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -254,6 +256,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRadiolysis.class, new RenderRadiolysis()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityElectrolyser.class, new RenderElectrolyser()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFurnaceIron.class, new RenderFurnaceIron()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFurnaceSteel.class, new RenderFurnaceSteel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityHeaterFirebox.class, new RenderFirebox()); //AMS ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase()); @@ -326,6 +329,15 @@ public class ClientProxy extends ServerProxy { for(Entry entry : ItemRenderLibrary.renderers.entrySet()) MinecraftForgeClient.registerItemRenderer(entry.getKey(), entry.getValue()); + Iterator iterator = TileEntityRendererDispatcher.instance.mapSpecialRenderers.values().iterator(); + while(iterator.hasNext()) { + Object renderer = iterator.next(); + if(renderer instanceof IItemRendererProvider) { + IItemRendererProvider prov = (IItemRendererProvider) renderer; + MinecraftForgeClient.registerItemRenderer(prov.getItemForRenderer(), prov.getRenderer()); + } + } + //universal JSON translated items double[] rtp = new double[] {0, 180, -90}; double[] ttp_high = new double[] {0.125, 0.625, 0}; diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index f069fa8f0..da892692e 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -51,7 +51,7 @@ public class ResourceManager { public static final IModelCustom turret_maxwell = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_microwave.obj")); public static final IModelCustom turret_fritz = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_fritz.obj")); public static final IModelCustom turret_brandon = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_brandon.obj")); - public static final IModelCustom turret_arty = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_arty.obj")); + public static final IModelCustom turret_arty = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_arty.obj")).asDisplayList(); // test! public static final IModelCustom turret_howard_damaged = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_howard_damaged.obj")); @@ -60,6 +60,7 @@ public class ResourceManager { //Furnaces public static final IModelCustom furnace_iron = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_iron.obj")); + public static final IModelCustom furnace_steel = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_steel.obj")); //Landmines public static final IModelCustom mine_ap = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/mine_ap.obj")); @@ -370,6 +371,7 @@ public class ResourceManager { //Furnaces public static final ResourceLocation furnace_iron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_iron.png"); + public static final ResourceLocation furnace_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_steel.png"); //Oil Pumps public static final ResourceLocation derrick_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/derrick.png"); diff --git a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java index a82248153..6eccc2344 100644 --- a/src/main/java/com/hbm/render/item/ItemRenderLibrary.java +++ b/src/main/java/com/hbm/render/item/ItemRenderLibrary.java @@ -16,6 +16,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +@Deprecated // implement IItemRendererProvider for TESRs instead! public class ItemRenderLibrary { public static HashMap renderers = new HashMap(); @@ -1339,6 +1340,17 @@ public class ItemRenderLibrary { ResourceManager.turret_arty.renderPart("Barrel"); GL11.glShadeModel(GL11.GL_FLAT); }}); + + renderers.put(Item.getItemFromBlock(ModBlocks.heater_firebox), new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(0, -1, 0); + GL11.glScaled(3.25, 3.25, 3.25); + } + public void renderCommon() { + bindTexture(ResourceManager.heater_firebox_tex); + ResourceManager.heater_firebox.renderPart("Main"); + ResourceManager.heater_firebox.renderPart("Door"); + }}); } private static void bindTexture(ResourceLocation res) { diff --git a/src/main/java/com/hbm/render/model/ModelT45Chest.java b/src/main/java/com/hbm/render/model/ModelT45Chest.java index 472c70417..07f4cda1f 100644 --- a/src/main/java/com/hbm/render/model/ModelT45Chest.java +++ b/src/main/java/com/hbm/render/model/ModelT45Chest.java @@ -8,6 +8,8 @@ package com.hbm.render.model; import org.lwjgl.opengl.GL11; +import com.hbm.interfaces.IHoldableWeapon; + import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; @@ -224,6 +226,9 @@ public class ModelT45Chest extends ModelBiped { this.aimedBow = true; } } + + if(itemstack != null && player.getHeldItem().getItem() instanceof IHoldableWeapon) + this.aimedBow = true; } super.setRotationAngles(f, f1, f2, f3, f4, f5, entity); this.chest.rotationPointX = this.bipedBody.rotationPointX; diff --git a/src/main/java/com/hbm/render/tileentity/IItemRendererProvider.java b/src/main/java/com/hbm/render/tileentity/IItemRendererProvider.java new file mode 100644 index 000000000..f4fab219a --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/IItemRendererProvider.java @@ -0,0 +1,10 @@ +package com.hbm.render.tileentity; + +import net.minecraft.item.Item; +import net.minecraftforge.client.IItemRenderer; + +public interface IItemRendererProvider { + + public Item getItemForRenderer(); + public IItemRenderer getRenderer(); +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderFurnaceSteel.java b/src/main/java/com/hbm/render/tileentity/RenderFurnaceSteel.java new file mode 100644 index 000000000..9d070f3be --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderFurnaceSteel.java @@ -0,0 +1,57 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderFurnaceSteel extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { + case 3: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(270, 0F, 1F, 0F); break; + } + + GL11.glRotatef(-90, 0F, 1F, 0F); + + bindTexture(ResourceManager.furnace_steel_tex); + ResourceManager.furnace_steel.renderAll(); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.furnace_steel); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(0, -1.5, 0); + GL11.glScaled(3.25, 3.25, 3.25); + } + public void renderCommon() { + bindTexture(ResourceManager.furnace_steel_tex); + ResourceManager.furnace_steel.renderAll(); + }}; + } + +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index 067f4f73c..e12dfd60c 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -8,6 +8,7 @@ import com.hbm.inventory.fluid.FluidType; import api.hbm.energy.IEnergyConnector; import api.hbm.energy.IEnergyUser; import api.hbm.fluid.IFluidConnector; +import api.hbm.tile.IHeatSource; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -15,12 +16,13 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector { +public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource { TileEntity tile; boolean inventory; boolean power; boolean fluid; + boolean heat; public TileEntityProxyCombo() { } @@ -30,6 +32,26 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy this.fluid = fluid; } + public TileEntityProxyCombo inventory() { + this.inventory = true; + return this; + } + + public TileEntityProxyCombo power() { + this.power = true; + return this; + } + + public TileEntityProxyCombo fluid() { + this.fluid = true; + return this; + } + + public TileEntityProxyCombo heatSource() { + this.heat = true; + return this; + } + //fewer messy recursive operations public TileEntity getTile() { @@ -437,4 +459,28 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy } return false; } + + @Override + public int getHeatStored() { + + if(!this.heat) + return 0; + + if(getTile() instanceof IHeatSource) { + return ((IHeatSource)getTile()).getHeatStored(); + } + + return 0; + } + + @Override + public void useUpHeat(int heat) { + + if(!this.heat) + return; + + if(getTile() instanceof IHeatSource) { + ((IHeatSource)getTile()).useUpHeat(heat); + } + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index a5fd5f671..e355594d8 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -249,6 +249,7 @@ public class TileMappings { private static void putMachines() { put(TileEntityHeaterFirebox.class, "tileentity_firebox"); put(TileEntityFurnaceIron.class, "tileentity_furnace_iron"); + put(TileEntityFurnaceSteel.class, "tileentity_furnace_steel"); put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter"); put(TileEntityDiFurnaceRTG.class, "tileentity_rtg_difurnace"); put(TileEntityMachineRadiolysis.class, "tileentity_radiolysis"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java new file mode 100644 index 000000000..265b11fe5 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceSteel.java @@ -0,0 +1,268 @@ +package com.hbm.tileentity.machine; + +import java.util.List; + +import com.hbm.inventory.container.ContainerFurnaceSteel; +import com.hbm.inventory.gui.GUIFurnaceSteel; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.ItemStackUtil; + +import api.hbm.tile.IHeatSource; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityFurnaceSteel extends TileEntityMachineBase implements IGUIProvider { + + public int[] progress = new int[3]; + public int[] bonus = new int[3]; + public static final int processTime = 40_000; // assuming vanilla furnace rules with 200 ticks of coal fire burning at 200HU/t + + public int heat; + public static final int maxHeat = 100_000; + public static final double diffusion = 0.05D; + + private ItemStack[] lastItems = new ItemStack[3]; + + public boolean wasOn = false; + + public TileEntityFurnaceSteel() { + super(6); + } + + @Override + public String getName() { + return "container.furnaceSteel"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + tryPullHeat(); + + this.wasOn = false; + + int burn = (heat - this.maxHeat / 3) / 10; + + for(int i = 0; i < 3; i++) { + + if(slots[i] == null || lastItems[i] == null || !slots[i].isItemEqual(lastItems[i])) { + progress[i] = 0; + bonus[i] = 0; + } + + if(canSmelt(i)) { + progress[i] += burn; + this.heat -= burn; + this.wasOn = true; + } + + lastItems[i] = slots[i]; + + if(progress[i] >= processTime) { + ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(slots[i]); + + if(slots[i + 3] == null) { + slots[i + 3] = result.copy(); + } else { + slots[i + 3].stackSize += result.stackSize; + } + + this.addBonus(slots[i], i); + + while(bonus[i] >= 100) { + slots[i + 3].stackSize = Math.min(slots[i + 3].getMaxStackSize(), slots[i + 3].stackSize + result.stackSize); + bonus[i] -= 100; + } + + this.decrStackSize(i, 1); + + progress[i] = 0; + + } + } + + NBTTagCompound data = new NBTTagCompound(); + data.setIntArray("progress", progress); + data.setIntArray("bonus", bonus); + data.setInteger("heat", heat); + data.setBoolean("wasOn", wasOn); + this.networkPack(data, 50); + } else { + + if(this.wasOn) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + worldObj.spawnParticle("smoke", xCoord + 0.5 - dir.offsetX * 1.125 - rot.offsetX * 0.75, yCoord + 2.625, zCoord + 0.5 - dir.offsetZ * 1.125 - rot.offsetZ * 0.75, 0.0, 0.05, 0.0); + + if(worldObj.rand.nextInt(20) == 0) + worldObj.spawnParticle("cloud", xCoord + 0.5 + dir.offsetX * 0.75, yCoord + 2, zCoord + 0.5 + dir.offsetZ * 0.75, 0.0, 0.05, 0.0); + } + } + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.progress = nbt.getIntArray("progress"); + this.bonus = nbt.getIntArray("bonus"); + this.heat = nbt.getInteger("heat"); + this.wasOn = nbt.getBoolean("wasOn"); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.progress = nbt.getIntArray("progress"); + this.bonus = nbt.getIntArray("bonus"); + this.heat = nbt.getInteger("heat"); + + NBTTagList list = nbt.getTagList("lastItems", 10); + for(int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("lastItem"); + if(b0 >= 0 && b0 < lastItems.length) { + lastItems[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setIntArray("progress", progress); + nbt.setIntArray("bonus", bonus); + nbt.setInteger("heat", heat); + + NBTTagList list = new NBTTagList(); + for(int i = 0; i < lastItems.length; i++) { + if(lastItems[i] != null) { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("lastItem", (byte) i); + lastItems[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("lastItems", list); + } + + protected void addBonus(ItemStack stack, int index) { + + List names = ItemStackUtil.getOreDictNames(stack); + + for(String name : names) { + if(name.startsWith("ore")) { this.bonus[index] += 25; return; } + if(name.startsWith("log")) { this.bonus[index] += 50; return; } + if(name.equals("anyTar")) { this.bonus[index] += 50; return; } + } + } + + protected void tryPullHeat() { + TileEntity con = worldObj.getTileEntity(xCoord, yCoord - 1, zCoord); + + if(con instanceof IHeatSource) { + IHeatSource source = (IHeatSource) con; + int diff = source.getHeatStored() - this.heat; + + if(diff == 0) { + return; + } + + if(diff > 0) { + diff = (int) Math.ceil(diff * diffusion); + source.useUpHeat(diff); + this.heat += diff; + if(this.heat > this.maxHeat) + this.heat = this.maxHeat; + return; + } + } + + this.heat = Math.max(this.heat - Math.max(this.heat / 1000, 1), 0); + } + + public boolean canSmelt(int index) { + + if(this.heat < this.maxHeat / 3) return false; + if(slots[index] == null) return false; + + ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(slots[index]); + + if(result == null) return false; + if(slots[index + 3] == null) return true; + + if(!result.isItemEqual(slots[index + 3])) return false; + if(result.stackSize + slots[index + 3].stackSize > slots[index + 3].getMaxStackSize()) return false; + + return true; + } + + @Override + public int[] getAccessibleSlotsFromSide(int meta) { + return new int[] { 0, 1, 2, 3, 4, 5 }; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + + if(i < 3) + return FurnaceRecipes.smelting().getSmeltingResult(itemStack) != null; + + return false; + } + + @Override + public boolean canExtractItem(int i, ItemStack itemStack, int j) { + return i > 2; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerFurnaceSteel(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIFurnaceSteel(player.inventory, this); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 3, + zCoord + 2 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java index ab1d572c2..2b2d81c19 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java @@ -96,8 +96,15 @@ public class TileEntityHeaterFirebox extends TileEntityMachineBase implements IG } } } else { - burnTime--; + + if(this.heatEnergy < this.maxHeatEnergy) { + burnTime--; + } this.wasOn = true; + + if(worldObj.rand.nextInt(15) == 0) { + worldObj.playSoundEffect(xCoord, yCoord, zCoord, "fire.fire", 1.0F, 0.5F + worldObj.rand.nextFloat() * 0.5F); + } } if(burnTime > 0) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java index c7c4030d0..abe14da88 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineElectricFurnace.java @@ -88,7 +88,7 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl } public boolean hasPower() { - return power > 0; + return power >= consumption; } public boolean isProcessing() { @@ -145,7 +145,6 @@ public class TileEntityMachineElectricFurnace extends TileEntityMachineBase impl @Override public void updateEntity() { - this.hasPower(); boolean flag1 = false; if(!worldObj.isRemote) { diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index c0350594e..f5d631afe 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3833,6 +3833,7 @@ tile.machine_industrial_generator.name=Industrial Generator tile.machine_keyforge.name=Locksmith Table tile.machine_large_turbine.name=Industrial Steam Turbine tile.machine_liquefactor.name=Industrial Liquefaction Machine +tile.machine_liquefactor.desc=Powerful universal machine to turn items into fluids.$Comes with versatile catalytic components, heating elements$and a built-in hydrator for petrochemical liquefaction. tile.machine_lithium_battery.name=Li-Ion Energy Storage Block tile.machine_microwave.name=Microwave tile.machine_mining_laser.name=Mining Laser @@ -3871,6 +3872,7 @@ tile.machine_silex.name=Laser Isotope Separation Chamber (SILEX) tile.machine_siren.name=Siren tile.machine_solar_boiler.name=Solar Tower Boiler tile.machine_solidifier.name=Industrial Solidification Machine +tile.machine_solidifier.desc=A universal machine fitted with cooling systems and other$versatile tools for turning fluids solid using various$processes such as freezing and petrochemical polymerization. tile.machine_spp_bottom.name=ZPE Potential Generator (Bottom) tile.machine_spp_top.name=ZPE Potential Generator (Top) tile.machine_storage_drum.name=Nuclear Waste Disposal Drum diff --git a/src/main/resources/assets/hbm/models/machines/furnace_steel.obj b/src/main/resources/assets/hbm/models/machines/furnace_steel.obj new file mode 100644 index 000000000..1128e38d2 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/furnace_steel.obj @@ -0,0 +1,788 @@ +# Blender v2.79 (sub 0) OBJ File: 'furnace_steel.blend' +# www.blender.org +o Plane +v -1.500000 0.000000 1.500000 +v 1.500000 0.000000 1.500000 +v -1.500000 0.000000 -1.500000 +v 1.500000 0.000000 -1.500000 +v -1.500000 0.125000 1.500000 +v 1.500000 0.125000 1.500000 +v -1.500000 0.125000 -1.500000 +v 1.500000 0.125000 -1.500000 +v -1.125000 0.125000 -1.375000 +v -1.125000 0.125000 1.375000 +v 1.375000 0.125000 1.375000 +v 1.375000 0.125000 -1.375000 +v -1.125000 1.125000 -1.375000 +v -1.125000 1.125000 1.375000 +v 1.375000 1.125000 1.375000 +v 1.375000 1.125000 -1.375000 +v -1.125000 1.625000 -0.625000 +v -1.125000 1.625000 0.625000 +v 1.375000 1.625000 0.625000 +v 1.375000 1.625000 -0.625000 +v -1.375000 0.125000 0.125000 +v -1.125000 0.125000 0.125000 +v -1.375000 0.125000 -0.125000 +v -1.125000 0.125000 -0.125000 +v -1.375000 1.750000 -0.125000 +v -1.375000 1.750000 0.125000 +v -1.125000 1.750000 0.125000 +v -1.125000 1.750000 -0.125000 +v -0.125000 1.750000 0.125000 +v -0.125000 1.750000 -0.125000 +v -1.125000 2.000000 0.125000 +v -1.125000 2.000000 -0.125000 +v -0.125000 2.000000 0.125000 +v -0.125000 2.000000 -0.125000 +v 0.125000 1.750000 0.125000 +v 0.125000 1.750000 -0.125000 +v -0.125000 1.625000 0.125000 +v -0.125000 1.625000 -0.125000 +v 0.125000 1.625000 0.125000 +v 0.125000 1.625000 -0.125000 +v 0.125000 1.625000 0.375000 +v 0.125000 1.625000 0.625000 +v -0.125000 1.625000 0.375000 +v -0.125000 1.625000 0.625000 +v 0.125000 1.750000 0.375000 +v 0.125000 1.750000 0.625000 +v -0.125000 2.000000 0.375000 +v -0.125000 2.000000 0.625000 +v -1.125000 2.000000 0.375000 +v -1.125000 2.000000 0.625000 +v -0.125000 1.750000 0.375000 +v -0.125000 1.750000 0.625000 +v -1.125000 1.750000 0.375000 +v -1.125000 1.750000 0.625000 +v -1.375000 1.750000 0.625000 +v -1.375000 1.750000 0.375000 +v -1.125000 0.125000 0.375000 +v -1.375000 0.125000 0.375000 +v -1.125000 0.125000 0.625000 +v -1.375000 0.125000 0.625000 +v -1.375000 0.125000 1.125000 +v -1.125000 0.125000 1.125000 +v -1.375000 0.125000 0.875000 +v -1.125000 0.125000 0.875000 +v -1.375000 1.750000 0.875000 +v -1.375000 1.750000 1.125000 +v -1.125000 1.750000 1.125000 +v -1.125000 1.750000 0.875000 +v 0.875000 1.750000 1.125000 +v 0.875000 1.750000 0.875000 +v -1.125000 2.000000 1.125000 +v -1.125000 2.000000 0.875000 +v 0.875000 2.000000 1.125000 +v 0.875000 2.000000 0.875000 +v 1.125000 1.750000 1.125000 +v 1.125000 1.750000 0.875000 +v 0.875000 1.250000 1.125000 +v 0.875000 1.250000 0.875000 +v 1.125000 1.250000 1.125000 +v 1.125000 1.250000 0.875000 +v -1.375000 0.125000 -0.500000 +v -0.875000 0.125000 -0.500000 +v -1.375000 0.125000 -1.000000 +v -0.875000 0.125000 -1.000000 +v -1.375000 2.625000 -0.500000 +v -0.875000 2.625000 -0.500000 +v -1.375000 2.625000 -1.000000 +v -0.875000 2.625000 -1.000000 +v 0.375000 1.625000 0.375000 +v 1.125000 1.625000 0.375000 +v 0.375000 1.625000 -0.375000 +v 1.125000 1.625000 -0.375000 +v 0.375000 1.875000 -0.375000 +v 0.375000 1.875000 0.375000 +v 1.125000 1.875000 0.375000 +v 1.125000 1.875000 -0.375000 +v 0.500000 1.875000 -0.250000 +v 0.500000 1.875000 0.250000 +v 1.000000 1.875000 0.250000 +v 1.000000 1.875000 -0.250000 +v 0.500000 1.750000 -0.250000 +v 0.500000 1.750000 0.250000 +v 1.000000 1.750000 0.250000 +v 1.000000 1.750000 -0.250000 +v 0.500000 1.812500 -0.250000 +v 0.500000 1.812500 0.250000 +v 1.000000 1.812500 0.250000 +v 1.000000 1.812500 -0.250000 +v 0.000000 1.125000 -0.750000 +v 0.500000 1.125000 -0.750000 +v 0.000000 1.125000 -1.250000 +v 0.500000 1.125000 -1.250000 +v 0.000000 1.625000 -1.250000 +v 0.000000 1.625000 -0.750000 +v 0.500000 1.625000 -0.750000 +v 0.500000 1.625000 -1.250000 +v 0.125000 1.875000 -1.125000 +v 0.125000 1.875000 -0.875000 +v 0.375000 1.875000 -0.875000 +v 0.375000 1.875000 -1.125000 +v 0.750000 1.125000 -0.750000 +v 1.250000 1.125000 -0.750000 +v 0.750000 1.125000 -1.250000 +v 1.250000 1.125000 -1.250000 +v 0.750000 1.625000 -1.250000 +v 0.750000 1.625000 -0.750000 +v 1.250000 1.625000 -0.750000 +v 1.250000 1.625000 -1.250000 +v 0.875000 1.875000 -1.125000 +v 0.875000 1.875000 -0.875000 +v 1.125000 1.875000 -0.875000 +v 1.125000 1.875000 -1.125000 +v -0.750000 1.125000 -0.750000 +v -0.250000 1.125000 -0.750000 +v -0.750000 1.125000 -1.250000 +v -0.250000 1.125000 -1.250000 +v -0.750000 1.625000 -1.250000 +v -0.750000 1.625000 -0.750000 +v -0.250000 1.625000 -0.750000 +v -0.250000 1.625000 -1.250000 +v -0.625000 1.875000 -1.125000 +v -0.625000 1.875000 -0.875000 +v -0.375000 1.875000 -0.875000 +v -0.375000 1.875000 -1.125000 +v 1.375000 0.812500 0.750000 +v 1.375000 0.562500 0.750000 +v 1.375000 0.812500 -0.750000 +v 1.375000 0.562500 -0.750000 +v 1.375000 0.937500 0.625000 +v 1.375000 0.937500 -0.625000 +v 0.875000 0.812500 0.750000 +v 0.875000 0.562500 0.750000 +v 0.875000 0.562500 -0.750000 +v 0.875000 0.812500 -0.750000 +v 0.875000 0.937500 -0.625000 +v 0.875000 0.937500 0.625000 +v 1.250000 0.812500 0.750000 +v 1.250000 0.562500 0.750000 +v 1.250000 0.562500 -0.750000 +v 1.250000 0.812500 -0.750000 +v 1.250000 0.937500 -0.625000 +v 1.250000 0.937500 0.625000 +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v 0.437500 0.000000 -0.437500 +v -0.437500 0.000000 -0.437500 +v 0.437500 0.000000 0.437500 +v -0.437500 0.000000 0.437500 +v -0.500000 0.062500 -0.500000 +v -0.500000 0.062500 0.500000 +v 0.500000 0.062500 0.500000 +v 0.500000 0.062500 -0.500000 +v 0.437500 0.062500 -0.437500 +v -0.437500 0.062500 -0.437500 +v 0.437500 0.062500 0.437500 +v -0.437500 0.062500 0.437500 +vt 0.087156 0.690000 +vt 0.151376 0.550000 +vt 0.151376 0.690000 +vt 0.229358 0.500000 +vt 0.220183 0.920000 +vt 0.220183 0.520000 +vt 0.238532 0.980000 +vt 0.238532 0.500000 +vt 0.000000 0.500000 +vt 0.009174 0.980000 +vt 0.000000 0.980000 +vt 0.229358 0.480000 +vt 0.009174 0.500000 +vt 0.009174 0.480000 +vt 0.009174 1.000000 +vt 0.229358 0.980000 +vt 0.229358 1.000000 +vt 0.018349 0.920000 +vt 0.018349 0.520000 +vt 0.614679 0.000000 +vt 0.458716 0.070000 +vt 0.412844 0.000000 +vt 0.798165 0.000000 +vt 0.614679 0.160000 +vt 0.229358 0.160000 +vt 0.229358 0.000000 +vt 0.467890 0.240000 +vt 0.559633 0.640000 +vt 0.467890 0.640000 +vt 0.614679 0.640000 +vt 0.559633 0.240000 +vt 0.614679 0.240000 +vt 0.412844 0.240000 +vt 0.412844 0.640000 +vt 1.000000 0.000000 +vt 0.944954 0.240000 +vt 0.733945 0.800000 +vt 0.807339 0.760000 +vt 0.807339 0.800000 +vt 0.733945 0.640000 +vt 0.807339 0.680000 +vt 0.733945 0.680000 +vt 0.596330 0.640000 +vt 0.715596 0.680000 +vt 0.596330 0.680000 +vt 0.596330 0.720000 +vt 0.715596 0.760000 +vt 0.596330 0.760000 +vt 0.715596 0.800000 +vt 0.596330 0.800000 +vt 0.715596 0.720000 +vt 0.733945 0.720000 +vt 0.807339 0.720000 +vt 0.733945 0.760000 +vt 0.715596 0.800000 +vt 0.715596 0.680000 +vt 0.825688 0.680000 +vt 0.834862 0.720000 +vt 0.825688 0.720000 +vt 0.825688 0.680000 +vt 0.825688 0.760000 +vt 0.825688 0.800000 +vt 0.825688 0.640000 +vt 0.834862 0.680000 +vt 0.825688 0.680000 +vt 0.834862 0.800000 +vt 0.825688 0.800000 +vt 0.834862 0.760000 +vt 0.825688 0.640000 +vt 0.834862 0.680000 +vt 0.825688 0.720000 +vt 0.834862 0.760000 +vt 0.825688 0.760000 +vt 0.834862 0.800000 +vt 0.825688 0.800000 +vt 0.807339 0.800000 +vt 0.807339 0.760000 +vt 0.825688 0.800000 +vt 0.807339 0.720000 +vt 0.807339 0.680000 +vt 0.825688 0.680000 +vt 0.834862 0.720000 +vt 0.733945 0.680000 +vt 0.733945 0.720000 +vt 0.715596 0.680000 +vt 0.715596 0.800000 +vt 0.733945 0.760000 +vt 0.733945 0.800000 +vt 0.715596 0.720000 +vt 0.715596 0.760000 +vt 0.596330 0.680000 +vt 0.596330 0.720000 +vt 0.596330 0.760000 +vt 0.715596 0.800000 +vt 0.596330 0.800000 +vt 0.596330 0.640000 +vt 0.715596 0.680000 +vt 0.733945 0.640000 +vt 0.376147 0.800000 +vt 0.522936 0.760000 +vt 0.522936 0.800000 +vt 0.376147 0.640000 +vt 0.522936 0.680000 +vt 0.376147 0.680000 +vt 0.238532 0.640000 +vt 0.357798 0.680000 +vt 0.238532 0.680000 +vt 0.238532 0.720000 +vt 0.357798 0.760000 +vt 0.238532 0.760000 +vt 0.357798 0.800000 +vt 0.238532 0.800000 +vt 0.357798 0.720000 +vt 0.376147 0.720000 +vt 0.522936 0.720000 +vt 0.376147 0.760000 +vt 0.357798 0.800000 +vt 0.357798 0.680000 +vt 0.541284 0.680000 +vt 0.577982 0.720000 +vt 0.541284 0.720000 +vt 0.541284 0.680000 +vt 0.541284 0.760000 +vt 0.541284 0.800000 +vt 0.577982 0.800000 +vt 0.541284 0.800000 +vt 0.577982 0.760000 +vt 0.541284 0.640000 +vt 0.577982 0.680000 +vt 0.871560 0.640000 +vt 0.834862 0.240000 +vt 0.871560 0.240000 +vt 0.944954 0.640000 +vt 0.908257 0.240000 +vt 0.944954 0.240000 +vt 0.908257 0.640000 +vt 0.981651 0.640000 +vt 0.981651 0.240000 +vt 0.834862 0.720000 +vt 0.871560 0.720000 +vt 0.467890 0.130000 +vt 0.669725 0.280000 +vt 0.623853 0.300000 +vt 0.614679 0.280000 +vt 0.834862 0.240000 +vt 0.779817 0.280000 +vt 0.779817 0.240000 +vt 0.669725 0.240000 +vt 0.614679 0.240000 +vt 0.724771 0.280000 +vt 0.724771 0.240000 +vt 0.678899 0.400000 +vt 0.715596 0.380000 +vt 0.715596 0.400000 +vt 0.614679 0.400000 +vt 0.660550 0.380000 +vt 0.669725 0.400000 +vt 0.660550 0.300000 +vt 0.623853 0.380000 +vt 0.678899 0.300000 +vt 0.678899 0.380000 +vt 0.724771 0.380000 +vt 0.715596 0.300000 +vt 0.724771 0.300000 +vt 0.669725 0.300000 +vt 0.669725 0.380000 +vt 0.715596 0.280000 +vt 0.678899 0.280000 +vt 0.623853 0.300000 +vt 0.660550 0.380000 +vt 0.623853 0.380000 +vt 0.688073 0.480000 +vt 0.660550 0.520000 +vt 0.651376 0.480000 +vt 0.688073 0.480000 +vt 0.660550 0.520000 +vt 0.651376 0.480000 +vt 0.651376 0.400000 +vt 0.614679 0.480000 +vt 0.614679 0.400000 +vt 0.724771 0.400000 +vt 0.688073 0.400000 +vt 0.761468 0.400000 +vt 0.724771 0.480000 +vt 0.623853 0.520000 +vt 0.642202 0.560000 +vt 0.623853 0.560000 +vt 0.761468 0.480000 +vt 0.733945 0.520000 +vt 0.697248 0.520000 +vt 0.651376 0.400000 +vt 0.614679 0.480000 +vt 0.614679 0.400000 +vt 0.724771 0.400000 +vt 0.688073 0.400000 +vt 0.761468 0.400000 +vt 0.724771 0.480000 +vt 0.623853 0.520000 +vt 0.642202 0.560000 +vt 0.623853 0.560000 +vt 0.761468 0.480000 +vt 0.733945 0.520000 +vt 0.697248 0.520000 +vt 0.688073 0.480000 +vt 0.660550 0.520000 +vt 0.651376 0.480000 +vt 0.651376 0.400000 +vt 0.614679 0.480000 +vt 0.614679 0.400000 +vt 0.724771 0.400000 +vt 0.688073 0.400000 +vt 0.761468 0.400000 +vt 0.724771 0.480000 +vt 0.623853 0.520000 +vt 0.642202 0.560000 +vt 0.623853 0.560000 +vt 0.761468 0.480000 +vt 0.733945 0.520000 +vt 0.697248 0.520000 +vt 0.412844 0.160000 +vt 0.568807 0.070000 +vt 0.559633 0.130000 +vt 0.412844 0.300000 +vt 0.376147 0.280000 +vt 0.412844 0.280000 +vt 0.275229 0.300000 +vt 0.376147 0.240000 +vt 0.366972 0.300000 +vt 0.275229 0.380000 +vt 0.366972 0.380000 +vt 0.376147 0.160000 +vt 0.266055 0.240000 +vt 0.266055 0.160000 +vt 0.229358 0.280000 +vt 0.266055 0.300000 +vt 0.229358 0.300000 +vt 0.412844 0.240000 +vt 0.229358 0.240000 +vt 0.266055 0.280000 +vt 0.275229 0.440000 +vt 0.376147 0.380000 +vt 0.366972 0.440000 +vt 0.087156 0.700000 +vt 0.087156 0.550000 +vt 0.151376 0.540000 +vt 0.155963 0.520000 +vt 0.082569 0.530000 +vt 0.082569 0.520000 +vt 0.082569 0.720000 +vt 0.155963 0.710000 +vt 0.155963 0.720000 +vt 0.155963 0.320000 +vt 0.155963 0.160000 +vt 0.229358 0.000000 +vt 0.082569 0.160000 +vt 0.009174 0.000000 +vt 0.082569 0.320000 +vt 0.077982 0.540000 +vt 0.082569 0.690000 +vt 0.077982 0.700000 +vt 0.155963 0.530000 +vt 0.087156 0.540000 +vt 0.160550 0.700000 +vt 0.155963 0.550000 +vt 0.160550 0.540000 +vt 0.082569 0.710000 +vt 0.151376 0.700000 +vt 0.165138 0.700000 +vt 0.165138 0.540000 +vt 0.073394 0.540000 +vt 0.073394 0.700000 +vt 0.082569 0.550000 +vt 0.155963 0.690000 +vt 0.798165 0.160000 +vt 1.000000 0.160000 +vt 0.853211 0.240000 +vt 0.807339 0.640000 +vt 0.715596 0.640000 +vt 0.834862 0.640000 +vt 0.834862 0.640000 +vt 0.715596 0.640000 +vt 0.807339 0.640000 +vt 0.522936 0.640000 +vt 0.357798 0.640000 +vt 0.577982 0.640000 +vt 0.834862 0.640000 +vt 0.834862 0.280000 +vt 0.660550 0.300000 +vt 0.678899 0.520000 +vt 0.678899 0.520000 +vt 0.642202 0.520000 +vt 0.752294 0.520000 +vt 0.715596 0.520000 +vt 0.642202 0.520000 +vt 0.752294 0.520000 +vt 0.715596 0.520000 +vt 0.678899 0.520000 +vt 0.642202 0.520000 +vt 0.752294 0.520000 +vt 0.715596 0.520000 +vt 0.458716 0.110000 +vt 0.568807 0.110000 +vt 0.376147 0.300000 +vt 0.266055 0.420000 +vt 0.266055 0.380000 +vt 0.376147 0.420000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.8321 -0.5547 +vn 0.0000 0.8321 0.5547 +vn -0.7071 0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.4472 -0.8944 +vn 0.0000 0.4472 0.8944 +vn 0.8944 0.4472 0.0000 +vn -0.8944 0.4472 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +s off +f 169/1/1 168/2/1 167/3/1 +f 8/4/2 9/5/2 12/6/2 +f 3/7/3 8/4/3 4/8/3 +f 2/9/4 5/10/4 1/11/4 +f 4/12/5 6/13/5 2/14/5 +f 1/15/6 7/16/6 3/17/6 +f 6/13/2 10/18/2 5/10/2 +f 8/4/2 11/19/2 6/13/2 +f 5/10/2 9/5/2 7/16/2 +f 12/20/5 146/21/5 11/22/5 +f 9/23/3 16/24/3 12/20/3 +f 11/22/4 14/25/4 10/26/4 +f 19/27/2 17/28/2 18/29/2 +f 13/30/7 20/31/7 16/32/7 +f 15/33/8 18/29/8 14/34/8 +f 9/23/6 10/35/6 18/36/6 +f 28/37/3 34/38/3 30/39/3 +f 28/40/1 29/41/1 27/42/1 +f 24/43/5 27/44/5 22/45/5 +f 21/46/6 25/47/6 23/48/6 +f 23/48/3 28/49/3 24/50/3 +f 22/45/4 26/51/4 21/46/4 +f 29/41/4 31/52/4 27/42/4 +f 34/38/2 31/52/2 33/53/2 +f 26/51/9 32/54/9 25/47/9 +f 25/55/3 32/54/3 28/37/3 +f 27/42/4 31/52/4 26/56/4 +f 29/57/4 39/58/4 35/59/4 +f 29/41/4 35/60/4 33/53/4 +f 33/53/10 36/61/10 34/38/10 +f 30/39/3 34/38/3 36/62/3 +f 51/63/6 44/64/6 52/65/6 +f 36/61/3 38/66/3 30/67/3 +f 35/59/5 40/68/5 36/61/5 +f 30/69/6 37/70/6 29/57/6 +f 46/71/5 41/72/5 45/73/5 +f 45/73/3 43/74/3 51/75/3 +f 51/76/3 47/77/3 45/78/3 +f 48/79/10 45/73/10 47/77/10 +f 52/80/4 46/81/4 48/79/4 +f 52/65/4 42/82/4 46/71/4 +f 54/83/4 50/84/4 55/85/4 +f 56/86/3 49/87/3 53/88/3 +f 55/89/9 49/87/9 56/90/9 +f 47/77/2 50/84/2 48/79/2 +f 52/80/4 50/84/4 54/83/4 +f 59/91/4 55/89/4 60/92/4 +f 58/93/3 53/94/3 57/95/3 +f 60/92/6 56/90/6 58/93/6 +f 57/96/5 54/97/5 59/91/5 +f 53/98/1 52/80/1 54/83/1 +f 53/88/3 47/77/3 51/76/3 +f 68/99/3 74/100/3 70/101/3 +f 68/102/1 69/103/1 67/104/1 +f 64/105/5 67/106/5 62/107/5 +f 61/108/6 65/109/6 63/110/6 +f 63/110/3 68/111/3 64/112/3 +f 62/107/4 66/113/4 61/108/4 +f 69/103/4 71/114/4 67/104/4 +f 74/100/2 71/114/2 73/115/2 +f 66/113/9 72/116/9 65/109/9 +f 65/117/3 72/116/3 68/99/3 +f 67/104/4 71/114/4 66/118/4 +f 69/119/4 79/120/4 75/121/4 +f 69/103/4 75/122/4 73/115/4 +f 73/115/10 76/123/10 74/100/10 +f 70/101/3 74/100/3 76/124/3 +f 76/123/3 78/125/3 70/126/3 +f 75/121/5 80/127/5 76/123/5 +f 70/128/6 77/129/6 69/119/6 +f 88/130/5 82/131/5 84/132/5 +f 85/133/6 83/134/6 81/135/6 +f 87/136/3 84/132/3 83/134/3 +f 86/137/4 81/135/4 82/138/4 +f 85/139/2 88/130/2 87/140/2 +f 149/141/5 20/31/5 19/27/5 +f 96/142/2 99/143/2 95/144/2 +f 90/145/4 94/146/4 89/147/4 +f 92/148/5 95/144/5 90/149/5 +f 89/147/6 93/150/6 91/151/6 +f 91/151/3 96/142/3 92/148/3 +f 98/152/5 101/153/5 97/154/5 +f 94/155/2 97/156/2 93/157/2 +f 93/157/2 100/158/2 96/142/2 +f 95/144/2 98/159/2 94/155/2 +f 103/160/2 101/153/2 102/161/2 +f 97/162/4 104/163/4 100/164/4 +f 99/165/3 102/161/3 98/166/3 +f 100/167/6 103/160/6 99/168/6 +f 107/169/2 105/170/2 106/171/2 +f 125/172/11 132/173/11 128/174/11 +f 113/175/11 120/176/11 116/177/11 +f 112/178/5 115/179/5 110/180/5 +f 109/181/6 113/175/6 111/182/6 +f 111/182/3 116/177/3 112/178/3 +f 110/183/4 114/184/4 109/181/4 +f 119/185/2 117/186/2 118/187/2 +f 115/188/12 118/189/12 114/184/12 +f 116/177/13 119/185/13 115/179/13 +f 114/184/14 117/190/14 113/175/14 +f 124/191/5 127/192/5 122/193/5 +f 121/194/6 125/172/6 123/195/6 +f 123/195/3 128/174/3 124/191/3 +f 122/196/4 126/197/4 121/194/4 +f 131/198/2 129/199/2 130/200/2 +f 127/201/12 130/202/12 126/197/12 +f 128/174/13 131/198/13 127/192/13 +f 126/197/14 129/203/14 125/172/14 +f 137/204/11 144/205/11 140/206/11 +f 136/207/5 139/208/5 134/209/5 +f 133/210/6 137/204/6 135/211/6 +f 135/211/3 140/206/3 136/207/3 +f 134/212/4 138/213/4 133/210/4 +f 143/214/2 141/215/2 142/216/2 +f 139/217/12 142/218/12 138/213/12 +f 140/206/13 143/214/13 139/208/13 +f 138/213/14 141/219/14 137/204/14 +f 146/21/5 15/220/5 11/22/5 +f 16/24/5 148/221/5 12/20/5 +f 150/222/5 16/24/5 20/31/5 +f 15/220/5 149/141/5 19/27/5 +f 150/223/15 154/224/15 147/225/15 +f 156/226/5 153/227/5 155/228/5 +f 149/229/1 155/228/1 150/230/1 +f 148/231/2 152/232/2 146/233/2 +f 145/234/16 156/235/16 149/236/16 +f 147/225/4 153/227/4 148/237/4 +f 146/238/3 151/239/3 145/234/3 +f 162/240/5 159/241/5 161/242/5 +f 167/3/5 177/243/5 169/1/5 +f 170/244/6 176/245/6 168/2/6 +f 165/246/5 172/247/5 163/248/5 +f 164/249/6 174/250/6 166/251/6 +f 2/14/1 166/252/1 4/12/1 +f 4/12/1 165/253/1 3/254/1 +f 3/254/1 163/255/1 1/256/1 +f 1/256/1 164/257/1 2/14/1 +f 172/258/1 177/259/1 173/260/1 +f 171/261/1 178/262/1 172/247/1 +f 174/263/1 176/264/1 171/265/1 +f 173/266/1 175/267/1 174/250/1 +f 166/268/4 171/265/4 165/269/4 +f 163/270/3 173/260/3 164/271/3 +f 169/1/4 178/272/4 170/244/4 +f 168/2/3 175/273/3 167/3/3 +f 169/1/1 170/244/1 168/2/1 +f 8/4/2 7/16/2 9/5/2 +f 3/7/3 7/16/3 8/4/3 +f 2/9/4 6/13/4 5/10/4 +f 4/12/5 8/4/5 6/13/5 +f 1/15/6 5/10/6 7/16/6 +f 6/13/2 11/19/2 10/18/2 +f 8/4/2 12/6/2 11/19/2 +f 5/10/2 10/18/2 9/5/2 +f 12/20/5 148/221/5 146/21/5 +f 9/23/3 13/274/3 16/24/3 +f 11/22/4 15/220/4 14/25/4 +f 19/27/2 20/31/2 17/28/2 +f 13/30/7 17/28/7 20/31/7 +f 15/33/8 19/27/8 18/29/8 +f 10/35/6 14/275/6 18/36/6 +f 18/36/6 17/276/6 9/23/6 +f 17/276/6 13/274/6 9/23/6 +f 28/37/3 32/54/3 34/38/3 +f 28/40/1 30/277/1 29/41/1 +f 24/43/5 28/278/5 27/44/5 +f 21/46/6 26/51/6 25/47/6 +f 23/48/3 25/47/3 28/49/3 +f 22/45/4 27/44/4 26/51/4 +f 29/41/4 33/53/4 31/52/4 +f 34/38/2 32/54/2 31/52/2 +f 26/51/9 31/52/9 32/54/9 +f 29/57/4 37/70/4 39/58/4 +f 33/53/10 35/59/10 36/61/10 +f 51/63/6 43/279/6 44/64/6 +f 36/61/3 40/68/3 38/66/3 +f 35/59/5 39/58/5 40/68/5 +f 30/69/6 38/280/6 37/70/6 +f 46/71/5 42/82/5 41/72/5 +f 45/73/3 41/72/3 43/74/3 +f 48/79/10 46/71/10 45/73/10 +f 52/65/4 44/64/4 42/82/4 +f 55/89/9 50/84/9 49/87/9 +f 47/77/2 49/87/2 50/84/2 +f 52/80/4 48/79/4 50/84/4 +f 59/91/4 54/97/4 55/89/4 +f 58/93/3 56/90/3 53/94/3 +f 60/92/6 55/89/6 56/90/6 +f 57/96/5 53/281/5 54/97/5 +f 53/98/1 51/282/1 52/80/1 +f 53/88/3 49/87/3 47/77/3 +f 68/99/3 72/116/3 74/100/3 +f 68/102/1 70/283/1 69/103/1 +f 64/105/5 68/284/5 67/106/5 +f 61/108/6 66/113/6 65/109/6 +f 63/110/3 65/109/3 68/111/3 +f 62/107/4 67/106/4 66/113/4 +f 69/103/4 73/115/4 71/114/4 +f 74/100/2 72/116/2 71/114/2 +f 66/113/9 71/114/9 72/116/9 +f 69/119/4 77/129/4 79/120/4 +f 73/115/10 75/121/10 76/123/10 +f 76/123/3 80/127/3 78/125/3 +f 75/121/5 79/120/5 80/127/5 +f 70/128/6 78/285/6 77/129/6 +f 88/130/5 86/286/5 82/131/5 +f 85/133/6 87/136/6 83/134/6 +f 87/136/3 88/130/3 84/132/3 +f 86/137/4 85/133/4 81/135/4 +f 85/139/2 86/286/2 88/130/2 +f 149/141/5 150/222/5 20/31/5 +f 96/142/2 100/158/2 99/143/2 +f 90/145/4 95/287/4 94/146/4 +f 92/148/5 96/142/5 95/144/5 +f 89/147/6 94/146/6 93/150/6 +f 91/151/3 93/150/3 96/142/3 +f 98/152/5 102/161/5 101/153/5 +f 94/155/2 98/159/2 97/156/2 +f 93/157/2 97/156/2 100/158/2 +f 95/144/2 99/143/2 98/159/2 +f 103/160/2 104/163/2 101/153/2 +f 97/162/4 101/153/4 104/163/4 +f 99/165/3 103/160/3 102/161/3 +f 100/167/6 104/163/6 103/160/6 +f 107/169/2 108/288/2 105/170/2 +f 125/172/11 129/289/11 132/173/11 +f 113/175/11 117/290/11 120/176/11 +f 112/178/5 116/177/5 115/179/5 +f 109/181/6 114/184/6 113/175/6 +f 111/182/3 113/175/3 116/177/3 +f 110/183/4 115/188/4 114/184/4 +f 119/185/2 120/291/2 117/186/2 +f 115/188/12 119/292/12 118/189/12 +f 116/177/13 120/291/13 119/185/13 +f 114/184/14 118/293/14 117/190/14 +f 124/191/5 128/174/5 127/192/5 +f 121/194/6 126/197/6 125/172/6 +f 123/195/3 125/172/3 128/174/3 +f 122/196/4 127/201/4 126/197/4 +f 131/198/2 132/294/2 129/199/2 +f 127/201/12 131/295/12 130/202/12 +f 128/174/13 132/294/13 131/198/13 +f 126/197/14 130/296/14 129/203/14 +f 137/204/11 141/297/11 144/205/11 +f 136/207/5 140/206/5 139/208/5 +f 133/210/6 138/213/6 137/204/6 +f 135/211/3 137/204/3 140/206/3 +f 134/212/4 139/217/4 138/213/4 +f 143/214/2 144/298/2 141/215/2 +f 139/217/12 143/299/12 142/218/12 +f 140/206/13 144/298/13 143/214/13 +f 138/213/14 142/300/14 141/219/14 +f 146/21/5 145/301/5 15/220/5 +f 16/24/5 147/302/5 148/221/5 +f 150/222/5 147/302/5 16/24/5 +f 15/220/5 145/301/5 149/141/5 +f 150/223/15 155/303/15 154/224/15 +f 156/226/5 151/239/5 152/232/5 +f 152/232/5 153/227/5 156/226/5 +f 153/227/5 154/224/5 155/228/5 +f 149/229/1 156/226/1 155/228/1 +f 148/231/2 153/227/2 152/232/2 +f 145/234/16 151/239/16 156/235/16 +f 147/225/4 154/224/4 153/227/4 +f 146/238/3 152/232/3 151/239/3 +f 162/240/5 157/304/5 158/305/5 +f 158/305/5 159/241/5 162/240/5 +f 159/241/5 160/306/5 161/242/5 +f 167/3/5 175/267/5 177/243/5 +f 170/244/6 178/262/6 176/245/6 +f 165/246/5 171/261/5 172/247/5 +f 164/249/6 173/266/6 174/250/6 +f 2/14/1 164/257/1 166/252/1 +f 4/12/1 166/252/1 165/253/1 +f 3/254/1 165/253/1 163/255/1 +f 1/256/1 163/255/1 164/257/1 +f 172/258/1 178/272/1 177/259/1 +f 171/261/1 176/245/1 178/262/1 +f 174/263/1 175/273/1 176/264/1 +f 173/266/1 177/243/1 175/267/1 +f 166/268/4 174/263/4 171/265/4 +f 163/270/3 172/258/3 173/260/3 +f 169/1/4 177/259/4 178/272/4 +f 168/2/3 176/264/3 175/273/3 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_furnace_steel.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_furnace_steel.png new file mode 100644 index 0000000000000000000000000000000000000000..4364497fdac349c33b79cc447790b2ce71fc13ce GIT binary patch literal 2100 zcmcIlX;hPE7Jd_=Mo>11%Dx;$iB)7OAR0}updbb<89$vJk%f{x{&M;J!JRI%VKS*i zl-?5&+A%Gu%Yv;?5B+GWE!8sX5C(}8myV9+`fQA}CMktKit?&^w6Gewc*i@8^>lf8 z*&yINXW?9tT>$V69rV@GS!zi-Ms?B%U+ z3#PDzoLUoZX=m!iPI)7kl=H(PjaB%59kdyw`cl)5Ov(&y3^h7!c9aU^A#3mhQq=57eX%X-75A zyqcJ)s}ThO3e;=7hq_6Y|DJdfb<#iMc6{yF6S0?!F-+K)fxyt_J?{r3I?B#-ojJ?h~+ zMyx6t85udHKeH&id|1a9iXD`%2KQ^;>vGg0`$_Je9AWo8!7o&^rLwFRs73HzII)-^ zPoI-GO4Hc`jH)?d$l~g5VZ{e|X+qb}mo8~zNclK$;6ShT*}^J)iPTkfMk4Xq1a7)- z;M8MPIG)9e-uD(BzzsYvn+FDu-NwPVL->YQGb^D|iV7Be~d%*klAj#MJ-XCH019(mn}7{7YvN;N2QeCyG2MS{sFiiYOus3(A1^(!6Xxp z!2!AD-0OCICi68mu^kc6-`u@>cVAD>tTx|Vpj=;dJhbA88|y;($s(jnIli^3))U^4 zCID#}C%8qp<{pvT;naG9hb6lyaetU{JFLjTHKXdU9&VNU<@t;Gp_0(r&Ylh@dyt)N zL`f$Vq7z=Y;>l+al-){P-^7qET8pXyc`OOhm;NSf0|)!o-L&o}w@VSAiMJ{Kl&yhV z+Yt^f9F(Q#5%e%zKl2L^F8w3I6|E8V>p}Sxf6S8RthP7$K5d2yW5vY~tXP!k8tY9AFe1S!t;a5h0+MT<|FtvnCsUF9WupPtAqe_AS z4e8sdz@wF`Am%|y9@?g`D9L@JyMQ?&t$B6n{Y91f6TIscTU;&H!?z_N+7P&Om}7u{ zVzw2hBp*V zE9<9G+!}u6No1c-+o;~bs?i*X3?ZM&8shv$zZ>JWtwEH!u)^!*% z*@Bow1GhF14V3lcS;V8FKTyWyfy=)nve_M*);E zFgWdnYYjUEPNXU6GASSmfp0ztYF|Aw4`ja}u16SXmKG zmcNeISwCN*yPyish{Se#5{<#w7{bCCHM^tDKW7ySLzr6- ze^QqJmhQ5l*YOt#MW4#OtV`wcFQ9+x%}ea})A*j`yBQ}V8|v?z<|ixs!x9?42Tw5p x-Qe-&J#6!Fuli0}EYf0PbQ3(H|1ZXil&dJB287}BRJHX4L|aFjq7&ZV{uBNli_`!B literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/furnace_steel.png b/src/main/resources/assets/hbm/textures/models/machines/furnace_steel.png new file mode 100644 index 0000000000000000000000000000000000000000..3e31bba21767881974410ff2f940caf585c77254 GIT binary patch literal 7428 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 A4FCWD literal 0 HcmV?d00001