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 000000000..4364497fd Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_furnace_steel.png differ 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 000000000..3e31bba21 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/furnace_steel.png differ