diff --git a/src/main/java/api/hbm/tile/IHeatSource.java b/src/main/java/api/hbm/tile/IHeatSource.java new file mode 100644 index 000000000..694a4ff47 --- /dev/null +++ b/src/main/java/api/hbm/tile/IHeatSource.java @@ -0,0 +1,12 @@ +package api.hbm.tile; + +public interface IHeatSource { + + public int getHeatStored(); + + /** + * Removes heat from the system. Implementation has to include the checks preventing the heat from going into the negative. + * @param heat + */ + public void useUpHeat(int heat); +} diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 9e5d42f73..4e78c0c64 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -623,6 +623,8 @@ public class ModBlocks { public static Block cel_prime_battery; public static Block cel_prime_port; public static Block cel_prime_tanks; + + public static Block heater_firebox; public static Block furnace_iron; @@ -1788,6 +1790,8 @@ public class ModBlocks { semtex = new BlockSemtex().setBlockName("semtex").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":semtex"); c4 = new BlockC4().setBlockName("c4").setStepSound(Block.soundTypeGrass).setCreativeTab(MainRegistry.nukeTab).setHardness(0.0F).setBlockTextureName(RefStrings.MODID + ":c4"); + 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"); machine_difurnace_off = new MachineDiFurnace(false).setBlockName("machine_difurnace_off").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -2959,6 +2963,7 @@ public class ModBlocks { GameRegistry.registerBlock(press_preheater, press_preheater.getUnlocalizedName()); GameRegistry.registerBlock(machine_press, machine_press.getUnlocalizedName()); GameRegistry.registerBlock(machine_epress, machine_epress.getUnlocalizedName()); + GameRegistry.registerBlock(heater_firebox, heater_firebox.getUnlocalizedName()); GameRegistry.registerBlock(furnace_iron, furnace_iron.getUnlocalizedName()); GameRegistry.registerBlock(machine_difurnace_off, machine_difurnace_off.getUnlocalizedName()); GameRegistry.registerBlock(machine_difurnace_on, machine_difurnace_on.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/machine/HeaterFirebox.java b/src/main/java/com/hbm/blocks/machine/HeaterFirebox.java new file mode 100644 index 000000000..fc85049c1 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/HeaterFirebox.java @@ -0,0 +1,40 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityHeaterFirebox; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class HeaterFirebox extends BlockDummyable { + + public HeaterFirebox() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + + if(meta >= 12) + return new TileEntityHeaterFirebox(); + 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[] {0, 0, 1, 1, 1, 1}; + } + + @Override + public int getOffset() { + return 1; + } +} diff --git a/src/main/java/com/hbm/inventory/container/ContainerFirebox.java b/src/main/java/com/hbm/inventory/container/ContainerFirebox.java new file mode 100644 index 000000000..4883cb374 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerFirebox.java @@ -0,0 +1,73 @@ +package com.hbm.inventory.container; + +import com.hbm.tileentity.machine.TileEntityHeaterFirebox; + +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 ContainerFirebox extends Container { + + protected TileEntityHeaterFirebox firebox; + + public ContainerFirebox(InventoryPlayer invPlayer, TileEntityHeaterFirebox furnace) { + this.firebox = furnace; + this.firebox.openInventory(); + + this.addSlotToContainer(new Slot(furnace, 0, 44, 27)); + this.addSlotToContainer(new Slot(furnace, 1, 62, 27)); + + 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, 86 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 144)); + } + } + + @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 <= 1) { + if(!this.mergeItemStack(originalStack, 2, this.inventorySlots.size(), true)) { + return null; + } + + slot.onSlotChange(originalStack, stack); + + } else if(!this.mergeItemStack(originalStack, 0, 2, false)) { + return null; + } + + if(originalStack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return firebox.isUseableByPlayer(player); + } + + @Override + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + this.firebox.closeInventory(); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIFirebox.java b/src/main/java/com/hbm/inventory/gui/GUIFirebox.java new file mode 100644 index 000000000..fcb0ab76b --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIFirebox.java @@ -0,0 +1,78 @@ +package com.hbm.inventory.gui; + +import java.util.List; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerFirebox; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityHeaterFirebox; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.util.ResourceLocation; + +public class GUIFirebox extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/machine/gui_firebox.png"); + private TileEntityHeaterFirebox diFurnace; + + public GUIFirebox(InventoryPlayer invPlayer, TileEntityHeaterFirebox tedf) { + super(new ContainerFirebox(invPlayer, tedf)); + diFurnace = tedf; + + this.xSize = 176; + this.ySize = 168; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + if(this.mc.thePlayer.inventory.getItemStack() == null) { + + for(int i = 0; i < 2; ++i) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(i); + + if(this.isMouseOverSlot(slot, x, y) && !slot.getHasStack()) { + + List bonuses = this.diFurnace.burnModule.getDesc(); + + if(!bonuses.isEmpty()) { + this.func_146283_a(bonuses, x, y); + } + } + } + } + + this.drawCustomInfoStat(x, y, guiLeft + 80, guiTop + 27, 71, 7, x, y, new String[] { String.format("%,d", diFurnace.heatEnergy) + " / " + String.format("%,d", diFurnace.maxHeatEnergy) + "TU" }); + this.drawCustomInfoStat(x, y, guiLeft + 80, guiTop + 36, 71, 7, x, y, new String[] { diFurnace.burnHeat + "TU/s", (diFurnace.burnTime / 20) + "s" }); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.diFurnace.hasCustomInventoryName() ? this.diFurnace.getInventoryName() : I18n.format(this.diFurnace.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 i = diFurnace.heatEnergy * 69 / diFurnace.maxHeatEnergy; + drawTexturedModalRect(guiLeft + 81, guiTop + 28, 176, 0, i, 5); + + int j = diFurnace.burnTime * 70 / Math.max(diFurnace.maxBurnTime, 1); + drawTexturedModalRect(guiLeft + 81, guiTop + 37, 176, 5, j, 5); + + if(diFurnace.wasOn) { + drawTexturedModalRect(guiLeft + 25, guiTop + 26, 176, 10, 18, 18); + } + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java b/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java index 282b3268e..cc3379b1d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java +++ b/src/main/java/com/hbm/inventory/gui/GUIFurnaceIron.java @@ -38,7 +38,7 @@ public class GUIFurnaceIron extends GuiInfoContainer { if(this.isMouseOverSlot(slot, x, y) && !slot.getHasStack()) { - List bonuses = this.diFurnace.burnModule.getDesc(); + List bonuses = this.diFurnace.burnModule.getTimeDesc(); if(!bonuses.isEmpty()) { this.func_146283_a(bonuses, x, y); diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java index 3fa4ae903..803b44ed5 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmoArty.java @@ -109,6 +109,7 @@ public class ItemAmmoArty extends Item { list.add(y + "Strength: 20"); list.add(r + "Deals nuclear damage"); list.add(r + "Destroys blocks"); + break; case MINI_NUKE_MULTI: list.add(r + "Splits x5"); break; diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index fda6c15f9..2e10ec111 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -254,6 +254,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(TileEntityHeaterFirebox.class, new RenderFirebox()); //AMS ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSEmitter.class, new RenderAMSEmitter()); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index be52392f4..a1fdef708 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -72,7 +72,6 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; import com.hbm.saveddata.satellites.Satellite; -import com.hbm.test.ReEvalTest; import com.hbm.tileentity.TileMappings; import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.machine.*; diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index e3a209a0f..f069fa8f0 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -55,6 +55,9 @@ public class ResourceManager { public static final IModelCustom turret_howard_damaged = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/turrets/turret_howard_damaged.obj")); + //Heaters + public static final IModelCustom heater_firebox = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/firebox.obj")); + //Furnaces public static final IModelCustom furnace_iron = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_iron.obj")); @@ -362,6 +365,9 @@ public class ResourceManager { public static final ResourceLocation mine_shrap_tex = new ResourceLocation(RefStrings.MODID, "textures/models/mine_shrap.png"); public static final ResourceLocation mine_fat_tex = new ResourceLocation(RefStrings.MODID, "textures/models/mine_fat.png"); + //Heaters + public static final ResourceLocation heater_firebox_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/firebox.png"); + //Furnaces public static final ResourceLocation furnace_iron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_iron.png"); diff --git a/src/main/java/com/hbm/module/ModuleBurnTime.java b/src/main/java/com/hbm/module/ModuleBurnTime.java index 5d2c8327c..a1ab0b3f4 100644 --- a/src/main/java/com/hbm/module/ModuleBurnTime.java +++ b/src/main/java/com/hbm/module/ModuleBurnTime.java @@ -17,51 +17,99 @@ import net.minecraft.util.EnumChatFormatting; */ public class ModuleBurnTime { - private double modLog = 1.0D; - private double modWood = 1.0D; - private double modCoal = 1.0D; - private double modLignite = 1.0D; - private double modCoke = 1.0D; - private double modSolid = 1.0D; - private double modRocket = 1.0D; + private static final int modLog = 0; + private static final int modWood = 1; + private static final int modCoal = 2; + private static final int modLignite = 3; + private static final int modCoke = 4; + private static final int modSolid = 5; + private static final int modRocket = 6; + + private double[] modTime = new double[7]; + private double[] modHeat = new double[7]; + + public ModuleBurnTime() { + for(int i = 0; i < modTime.length; i++) { + modTime[i] = 1.0D; + modHeat[i] = 1.0D; + } + } public int getBurnTime(ItemStack stack) { int fuel = TileEntityFurnace.getItemBurnTime(stack); if(fuel == 0) return 0; - - if(stack.getItem() == ModItems.solid_fuel) return (int) (fuel * modSolid); - if(stack.getItem() == ModItems.solid_fuel_presto) return (int) (fuel * modSolid); - if(stack.getItem() == ModItems.solid_fuel_presto_triplet) return (int) (fuel * modSolid); - if(stack.getItem() == ModItems.rocket_fuel) return (int) (fuel * modRocket); + return (int) (fuel * getMod(stack, modTime)); + } + + public int getBurnHeat(int base, ItemStack stack) { + return (int) (base * getMod(stack, modHeat)); + } + + public double getMod(ItemStack stack, double[] mod) { + + if(stack == null) + return 0; + + if(stack.getItem() == ModItems.solid_fuel) return mod[modSolid]; + if(stack.getItem() == ModItems.solid_fuel_presto) return mod[modSolid]; + if(stack.getItem() == ModItems.solid_fuel_presto_triplet) return mod[modSolid]; + + if(stack.getItem() == ModItems.rocket_fuel) return mod[modRocket]; List names = ItemStackUtil.getOreDictNames(stack); for(String name : names) { - if(name.contains("Coke")) return (int) (fuel * modCoke); - if(name.contains("Coal")) return (int) (fuel * modCoal); - if(name.contains("Lignite")) return (int) (fuel * modLignite); - if(name.startsWith("log")) return (int) (fuel * modLog); - if(name.contains("Wood")) return (int) (fuel * modWood); + if(name.contains("Coke")) return mod[modCoke]; + if(name.contains("Coal")) return mod[modCoal]; + if(name.contains("Lignite")) return mod[modLignite]; + if(name.startsWith("log")) return mod[modLog]; + if(name.contains("Wood")) return mod[modWood]; } - return fuel; + return 1; } public List getDesc() { + List desc = new ArrayList(); + desc.addAll(getTimeDesc()); + desc.addAll(getHeatDesc()); + return desc; + } + + public List getTimeDesc() { List list = new ArrayList(); list.add(EnumChatFormatting.GOLD + "Burn time bonuses:"); - addIf(list, "Logs", modLog); - addIf(list, "Wood", modWood); - addIf(list, "Coal", modCoal); - addIf(list, "Lignite", modLignite); - addIf(list, "Coke", modCoke); - addIf(list, "Solid Fuel", modSolid); - addIf(list, "Rocket Fuel", modRocket); + addIf(list, "Logs", modTime[modLog]); + addIf(list, "Wood", modTime[modWood]); + addIf(list, "Coal", modTime[modCoal]); + addIf(list, "Lignite", modTime[modLignite]); + addIf(list, "Coke", modTime[modCoke]); + addIf(list, "Solid Fuel", modTime[modSolid]); + addIf(list, "Rocket Fuel", modTime[modRocket]); + + if(list.size() == 1) + list.clear(); + + return list; + } + + public List getHeatDesc() { + List list = new ArrayList(); + + list.add(EnumChatFormatting.RED + "Burn heat bonuses:"); + + addIf(list, "Logs", modHeat[modLog]); + addIf(list, "Wood", modHeat[modWood]); + addIf(list, "Coal", modHeat[modCoal]); + addIf(list, "Lignite", modHeat[modLignite]); + addIf(list, "Coke", modHeat[modCoke]); + addIf(list, "Solid Fuel", modHeat[modSolid]); + addIf(list, "Rocket Fuel", modHeat[modRocket]); if(list.size() == 1) list.clear(); @@ -87,11 +135,19 @@ public class ModuleBurnTime { return num; } - public ModuleBurnTime setLogMod(double mod) { this.modLog = mod; return this; } - public ModuleBurnTime setWoodMod(double mod) { this.modWood = mod; return this; } - public ModuleBurnTime setCoalMod(double mod) { this.modCoal = mod; return this; } - public ModuleBurnTime setLigniteMod(double mod) { this.modLignite = mod; return this; } - public ModuleBurnTime setCokeMod(double mod) { this.modCoke = mod; return this; } - public ModuleBurnTime setSolidMod(double mod) { this.modSolid = mod; return this; } - public ModuleBurnTime setRocketMod(double mod) { this.modRocket = mod; return this; } + public ModuleBurnTime setLogTimeMod(double mod) { this.modTime[modLog] = mod; return this; } + public ModuleBurnTime setWoodTimeMod(double mod) { this.modTime[modWood] = mod; return this; } + public ModuleBurnTime setCoalTimeMod(double mod) { this.modTime[modCoal] = mod; return this; } + public ModuleBurnTime setLigniteTimeMod(double mod) { this.modTime[modLignite] = mod; return this; } + public ModuleBurnTime setCokeTimeMod(double mod) { this.modTime[modCoke] = mod; return this; } + public ModuleBurnTime setSolidTimeMod(double mod) { this.modTime[modSolid] = mod; return this; } + public ModuleBurnTime setRocketTimeMod(double mod) { this.modTime[modRocket] = mod; return this; } + + public ModuleBurnTime setLogHeatMod(double mod) { this.modHeat[modLog] = mod; return this; } + public ModuleBurnTime setWoodHeatMod(double mod) { this.modHeat[modWood] = mod; return this; } + public ModuleBurnTime setCoalHeatMod(double mod) { this.modHeat[modCoal] = mod; return this; } + public ModuleBurnTime setLigniteHeatMod(double mod) { this.modHeat[modLignite] = mod; return this; } + public ModuleBurnTime setCokeHeatMod(double mod) { this.modHeat[modCoke] = mod; return this; } + public ModuleBurnTime setSolidHeatMod(double mod) { this.modHeat[modSolid] = mod; return this; } + public ModuleBurnTime setRocketHeatMod(double mod) { this.modHeat[modRocket] = mod; return this; } } diff --git a/src/main/java/com/hbm/render/tileentity/RenderFirebox.java b/src/main/java/com/hbm/render/tileentity/RenderFirebox.java new file mode 100644 index 000000000..8584eb59a --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderFirebox.java @@ -0,0 +1,61 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.main.ResourceManager; +import com.hbm.tileentity.machine.TileEntityHeaterFirebox; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderFirebox extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + switch(tile.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); + + TileEntityHeaterFirebox firebox = (TileEntityHeaterFirebox) tile; + + bindTexture(ResourceManager.heater_firebox_tex); + ResourceManager.heater_firebox.renderPart("Main"); + + GL11.glPushMatrix(); + float door = firebox.prevDoorAngle + (firebox.doorAngle - firebox.prevDoorAngle) * interp; + GL11.glTranslated(1.375, 0, 0.375); + GL11.glRotatef(door, 0F, -1F, 0F); + GL11.glTranslated(-1.375, 0, -0.375); + ResourceManager.heater_firebox.renderPart("Door"); + GL11.glPopMatrix(); + + if(firebox.wasOn) { + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + ResourceManager.heater_firebox.renderPart("InnerBurning"); + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } else { + ResourceManager.heater_firebox.renderPart("InnerEmpty"); + } + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 174190c3e..a5fd5f671 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -247,6 +247,7 @@ public class TileMappings { } private static void putMachines() { + put(TileEntityHeaterFirebox.class, "tileentity_firebox"); put(TileEntityFurnaceIron.class, "tileentity_furnace_iron"); put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter"); put(TileEntityDiFurnaceRTG.class, "tileentity_rtg_difurnace"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java index 2b8fcab0b..8112d9cdd 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFurnaceIron.java @@ -36,11 +36,11 @@ public class TileEntityFurnaceIron extends TileEntityMachineBase implements IGUI super(5); burnModule = new ModuleBurnTime() - .setLigniteMod(1.25) - .setCoalMod(1.25) - .setCokeMod(1.5) - .setSolidMod(2) - .setRocketMod(2); + .setLigniteTimeMod(1.25) + .setCoalTimeMod(1.25) + .setCokeTimeMod(1.5) + .setSolidTimeMod(2) + .setRocketTimeMod(2); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java new file mode 100644 index 000000000..ab1d572c2 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeaterFirebox.java @@ -0,0 +1,225 @@ +package com.hbm.tileentity.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.inventory.container.ContainerFirebox; +import com.hbm.inventory.gui.GUIFirebox; +import com.hbm.module.ModuleBurnTime; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.TileEntityMachineBase; + +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.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityHeaterFirebox extends TileEntityMachineBase implements IGUIProvider, IHeatSource { + + public int maxBurnTime; + public int burnTime; + public int burnHeat; + public boolean wasOn = false; + private int playersUsing = 0; + + public float doorAngle = 0; + public float prevDoorAngle = 0; + + public int heatEnergy; + public static final int maxHeatEnergy = 100_000; + + public ModuleBurnTime burnModule; + + public TileEntityHeaterFirebox() { + super(2); + + burnModule = new ModuleBurnTime() + .setLigniteTimeMod(1.25) + .setCoalTimeMod(1.25) + .setCokeTimeMod(1.25) + .setSolidTimeMod(1.5) + .setRocketTimeMod(1.5) + + .setLigniteHeatMod(2) + .setCoalHeatMod(2) + .setCokeHeatMod(2) + .setSolidHeatMod(3) + .setRocketHeatMod(5); + } + + @Override + public String getName() { + return "container.heaterFirebox"; + } + + @Override + public void openInventory() { + if(!worldObj.isRemote) this.playersUsing++; + } + + @Override + public void closeInventory() { + if(!worldObj.isRemote) this.playersUsing--; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + wasOn = false; + + if(burnTime <= 0) { + + for(int i = 0; i < 2; i++) { + if(slots[i] != null) { + + int fuel = burnModule.getBurnTime(slots[i]); + + if(fuel > 0) { + this.maxBurnTime = this.burnTime = fuel; + this.burnHeat = burnModule.getBurnHeat(100, slots[i]); + slots[i].stackSize--; + + if(slots[i].stackSize == 0) { + slots[i] = slots[i].getItem().getContainerItem(slots[i]); + } + + break; + } + } + } + } else { + burnTime--; + this.wasOn = true; + } + + if(burnTime > 0) { + this.heatEnergy = Math.min(this.heatEnergy + this.burnHeat, maxHeatEnergy); + } else { + this.heatEnergy = Math.max(this.heatEnergy - Math.max(this.heatEnergy / 1000, 1), 0); + this.burnHeat = 0; + } + + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("maxBurnTime", this.maxBurnTime); + data.setInteger("burnTime", this.burnTime); + data.setInteger("burnHeat", this.burnHeat); + data.setInteger("heatEnergy", this.heatEnergy); + data.setInteger("playersUsing", this.playersUsing); + data.setBoolean("wasOn", this.wasOn); + this.networkPack(data, 50); + } else { + this.prevDoorAngle = this.doorAngle; + float swingSpeed = (doorAngle / 10F) + 3; + + if(this.playersUsing > 0) { + this.doorAngle += swingSpeed; + } else { + this.doorAngle -= swingSpeed; + } + + this.doorAngle = MathHelper.clamp_float(this.doorAngle, 0F, 135F); + + if(wasOn && worldObj.getTotalWorldTime() % 5 == 0) { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + double x = xCoord + 0.5 + dir.offsetX; + double y = yCoord + 0.25; + double z = zCoord + 0.5 + dir.offsetZ; + worldObj.spawnParticle("flame", x + worldObj.rand.nextDouble() * 0.5 - 0.25, y + worldObj.rand.nextDouble() * 0.25, z + worldObj.rand.nextDouble() * 0.5 - 0.25, 0, 0, 0); + } + } + } + + @Override + public int[] getAccessibleSlotsFromSide(int meta) { + return new int[] { 0, 1 }; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + return burnModule.getBurnTime(itemStack) > 0; + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.maxBurnTime = nbt.getInteger("maxBurnTime"); + this.burnTime = nbt.getInteger("burnTime"); + this.burnHeat = nbt.getInteger("burnHeat"); + this.heatEnergy = nbt.getInteger("heatEnergy"); + this.playersUsing = nbt.getInteger("playersUsing"); + this.wasOn = nbt.getBoolean("wasOn"); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.maxBurnTime = nbt.getInteger("maxBurnTime"); + this.burnTime = nbt.getInteger("burnTime"); + this.burnHeat = nbt.getInteger("burnHeat"); + this.heatEnergy = nbt.getInteger("heatEnergy"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setInteger("maxBurnTime", maxBurnTime); + nbt.setInteger("burnTime", burnTime); + nbt.setInteger("burnHeat", burnHeat); + nbt.setInteger("heatEnergy", heatEnergy); + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerFirebox(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIFirebox(player.inventory, this); + } + + @Override + public int getHeatStored() { + return heatEnergy; + } + + @Override + public void useUpHeat(int heat) { + this.heatEnergy = Math.max(0, this.heatEnergy - heat); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 1, + zCoord + 2 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 040054054..ea1dee654 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -262,6 +262,7 @@ container.gasCentrifuge=Gaszentrifuge container.gasFlare=Abfackelturm container.generator=Atomreaktor container.hadron=Teilchenbeschleuniger +container.heaterFirebox=Feuerbüchse container.iGenerator=Industrieller Generator container.keyForge=Schlossertisch container.launchPad=Raketenabschussrampe @@ -3328,6 +3329,7 @@ tile.hadron_power_100m.name=Teilchenbeschleuniger-Stromanschluss (100MHE) tile.hadron_power_1g.name=Teilchenbeschleuniger-Stromanschluss (1GHE) tile.hadron_power_10g.name=Teilchenbeschleuniger-Stromanschluss (10GHE) tile.hazmat.name=Strahlenschutzstoff-Block +tile.heater_firebox.name=Feuerbüchse tile.hev_battery.name=Anzugs-Batterie tile.iter.name=Kernfusionsreaktor tile.ladder_aluminium.name=Aluminiumleiter diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index fdd5061c8..c0350594e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -452,6 +452,7 @@ container.gasCentrifuge=Gas Centrifuge container.gasFlare=Flare Stack container.generator=Nuclear Reactor container.hadron=Particle Accelerator +container.heaterFirebox=Firebox container.iGenerator=Industrial Generator container.keyForge=Locksmith Table container.launchPad=Missile Launch Pad @@ -3755,6 +3756,7 @@ tile.hadron_power_100m.name=Particle Accelerator Power Plug (100MHE) tile.hadron_power_1g.name=Particle Accelerator Power Plug (1GHE) tile.hadron_power_10g.name=Particle Accelerator Power Plug (10GHE) tile.hazmat.name=Hazmat Cloth Block +tile.heater_firebox.name=Firebox tile.hev_battery.name=Suit Battery tile.iter.name=Fusion Reactor tile.ladder_aluminium.name=Aluminium Ladder diff --git a/src/main/resources/assets/hbm/models/machines/firebox.obj b/src/main/resources/assets/hbm/models/machines/firebox.obj new file mode 100644 index 000000000..51f73d851 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/firebox.obj @@ -0,0 +1,940 @@ +# Blender v2.79 (sub 0) OBJ File: 'firebox.blend' +# www.blender.org +o InnerEmpty +v 1.250000 0.750000 0.125000 +v 1.250000 0.250000 0.125000 +v 1.250000 0.750000 -0.125000 +v 1.250000 0.250000 -0.125000 +v 1.250000 0.375000 0.250000 +v 1.250000 0.375000 -0.250000 +v 1.250000 0.625000 0.250000 +v 1.250000 0.625000 -0.250000 +v 1.250000 0.875000 0.375000 +v 1.250000 0.125000 0.375000 +v 1.250000 0.875000 -0.375000 +v 1.250000 0.125000 -0.375000 +v 0.500000 0.875000 0.375000 +v 0.500000 0.125000 0.375000 +v 0.500000 0.875000 -0.375000 +v 0.500000 0.125000 -0.375000 +vt 0.586207 0.187500 +vt 0.603448 0.125000 +vt 0.603448 0.156250 +vt 0.586207 0.093750 +vt 0.655172 0.109375 +vt 0.620690 0.109375 +vt 0.689655 0.187500 +vt 0.620690 0.171875 +vt 0.655172 0.171875 +vt 0.689655 0.093750 +vt 0.672414 0.156250 +vt 0.672414 0.125000 +vt 1.000000 0.187500 +vt 0.896552 0.093750 +vt 1.000000 0.093750 +vt 0.793103 0.187500 +vt 0.896552 0.187500 +vt 0.896552 0.281250 +vt 0.793103 0.281250 +vt 0.793103 -0.000000 +vt 0.896552 -0.000000 +vt 0.793103 0.093750 +vn -1.0000 0.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 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +s off +f 11/1/1 6/2/1 8/3/1 +f 12/4/1 2/5/1 4/6/1 +f 9/7/1 3/8/1 1/9/1 +f 10/10/1 7/11/1 5/12/1 +f 6/2/1 12/4/1 4/6/1 +f 5/12/1 2/5/1 10/10/1 +f 7/11/1 9/7/1 1/9/1 +f 8/3/1 3/8/1 11/1/1 +f 11/13/2 16/14/2 12/15/2 +f 10/10/3 13/16/3 9/7/3 +f 13/16/4 16/14/4 15/17/4 +f 13/16/5 11/18/5 9/19/5 +f 16/14/6 10/20/6 12/21/6 +f 11/1/1 12/4/1 6/2/1 +f 12/4/1 10/10/1 2/5/1 +f 9/7/1 11/1/1 3/8/1 +f 10/10/1 9/7/1 7/11/1 +f 11/13/2 15/17/2 16/14/2 +f 10/10/3 14/22/3 13/16/3 +f 13/16/4 14/22/4 16/14/4 +f 13/16/5 15/17/5 11/18/5 +f 16/14/6 14/22/6 10/20/6 +o InnerBurning +v 1.250000 0.750000 0.125000 +v 1.250000 0.250000 0.125000 +v 1.250000 0.750000 -0.125000 +v 1.250000 0.250000 -0.125000 +v 1.250000 0.375000 0.250000 +v 1.250000 0.375000 -0.250000 +v 1.250000 0.625000 0.250000 +v 1.250000 0.625000 -0.250000 +v 1.250000 0.875000 0.375000 +v 1.250000 0.125000 0.375000 +v 1.250000 0.875000 -0.375000 +v 1.250000 0.125000 -0.375000 +v 0.500000 0.875000 0.375000 +v 0.500000 0.125000 0.375000 +v 0.500000 0.875000 -0.375000 +v 0.500000 0.125000 -0.375000 +v 1.250000 0.125000 0.375000 +v 1.250000 0.125000 -0.375000 +v 0.500000 0.125000 0.375000 +v 0.500000 0.250000 -0.375000 +v 1.250000 0.125000 0.250000 +v 1.250000 0.187500 0.125000 +v 1.250000 0.187500 -0.000000 +v 1.250000 0.125000 -0.125000 +v 1.250000 0.125000 -0.250000 +v 0.500000 0.187500 0.250000 +v 0.500000 0.250000 0.125000 +v 0.500000 0.250000 -0.000000 +v 0.500000 0.187500 -0.125000 +v 0.500000 0.250000 -0.250000 +v 0.625000 0.187500 0.375000 +v 0.750000 0.187500 0.375000 +v 0.875000 0.250000 0.375000 +v 1.000000 0.187500 0.375000 +v 1.125000 0.125000 0.375000 +v 1.125000 0.125000 -0.375000 +v 1.000000 0.187500 -0.375000 +v 0.875000 0.125000 -0.375000 +v 0.750000 0.187500 -0.375000 +v 0.625000 0.187500 -0.375000 +v 1.125000 0.187500 0.250000 +v 1.000000 0.187500 0.250000 +v 0.875000 0.250000 0.250000 +v 0.750000 0.250000 0.250000 +v 0.625000 0.187500 0.250000 +v 1.125000 0.187500 0.125000 +v 1.000000 0.250000 0.125000 +v 0.875000 0.250000 0.125000 +v 0.750000 0.312500 0.125000 +v 0.625000 0.250000 0.125000 +v 1.125000 0.187500 -0.000000 +v 1.000000 0.250000 -0.000000 +v 0.875000 0.312500 -0.000000 +v 0.750000 0.312500 -0.000000 +v 0.625000 0.250000 -0.000000 +v 1.125000 0.187500 -0.125000 +v 1.000000 0.250000 -0.125000 +v 0.875000 0.250000 -0.125000 +v 0.750000 0.250000 -0.125000 +v 0.625000 0.250000 -0.125000 +v 1.125000 0.187500 -0.250000 +v 1.000000 0.187500 -0.250000 +v 0.875000 0.187500 -0.250000 +v 0.750000 0.187500 -0.250000 +v 0.625000 0.250000 -0.250000 +vt 0.586207 0.468750 +vt 0.603448 0.406250 +vt 0.603448 0.437500 +vt 0.586207 0.375000 +vt 0.655172 0.390625 +vt 0.620690 0.390625 +vt 0.689655 0.468750 +vt 0.620690 0.453125 +vt 0.655172 0.453125 +vt 0.689655 0.375000 +vt 0.672414 0.437500 +vt 0.672414 0.406250 +vt 1.000000 0.468750 +vt 0.896552 0.375000 +vt 1.000000 0.375000 +vt 0.793103 0.468750 +vt 0.896552 0.468750 +vt 0.879310 0.359375 +vt 0.896552 0.359375 +vt 0.879310 0.375000 +vt 0.793103 0.359375 +vt 0.810345 0.359375 +vt 0.793103 0.375000 +vt 0.827586 0.359375 +vt 0.810345 0.375000 +vt 0.844828 0.359375 +vt 0.827586 0.375000 +vt 0.862069 0.359375 +vt 0.844828 0.375000 +vt 0.862069 0.375000 +vt 0.793103 0.281250 +vt 0.810345 0.281250 +vt 0.793103 0.296875 +vt 0.810345 0.296875 +vt 0.793103 0.312500 +vt 0.810345 0.312500 +vt 0.793103 0.328125 +vt 0.810345 0.343750 +vt 0.793103 0.343750 +vt 0.827586 0.281250 +vt 0.827586 0.312500 +vt 0.810345 0.328125 +vt 0.827586 0.328125 +vt 0.827586 0.343750 +vt 0.844828 0.281250 +vt 0.827586 0.296875 +vt 0.844828 0.296875 +vt 0.844828 0.312500 +vt 0.844828 0.328125 +vt 0.862069 0.296875 +vt 0.862069 0.312500 +vt 0.862069 0.328125 +vt 0.844828 0.343750 +vt 0.862069 0.343750 +vt 0.879310 0.281250 +vt 0.862069 0.281250 +vt 0.879310 0.296875 +vt 0.879310 0.312500 +vt 0.879310 0.328125 +vt 0.879310 0.343750 +vt 0.896552 0.296875 +vt 0.896552 0.312500 +vt 0.896552 0.328125 +vt 0.896552 0.562500 +vt 0.793103 0.562500 +vt 0.896552 0.281250 +vt 0.896552 0.375000 +vt 0.896552 0.343750 +vt 0.793103 0.375000 +vn -1.0000 0.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 0.0000 0.8944 -0.4472 +vn -0.4472 0.8944 0.0000 +vn 0.0000 0.8944 0.4472 +vn 0.0000 1.0000 0.0000 +vn 0.4082 0.8165 0.4082 +vn 0.4472 0.8944 0.0000 +vn -0.4082 0.8165 0.4082 +vn 0.4082 0.8165 -0.4082 +vn 0.0000 -1.0000 0.0000 +vn -0.4082 0.8165 -0.4082 +s off +f 27/23/7 22/24/7 24/25/7 +f 28/26/7 18/27/7 20/28/7 +f 25/29/7 19/30/7 17/31/7 +f 26/32/7 23/33/7 21/34/7 +f 22/24/7 28/26/7 20/28/7 +f 21/34/7 18/27/7 26/32/7 +f 23/33/7 25/29/7 17/31/7 +f 24/25/7 19/30/7 27/23/7 +f 27/35/8 32/36/8 28/37/8 +f 26/32/9 29/38/9 25/29/9 +f 29/38/10 32/36/10 31/39/10 +f 81/40/11 56/41/11 46/42/11 +f 47/43/12 61/44/12 35/45/12 +f 66/46/13 42/47/13 61/44/13 +f 71/48/14 43/49/14 66/46/14 +f 71/48/14 76/50/14 44/51/14 +f 76/50/12 81/40/12 45/52/12 +f 33/53/14 37/54/14 51/55/14 +f 51/55/15 57/56/15 50/57/15 +f 58/58/16 49/59/16 50/57/16 +f 49/59/17 60/60/17 48/61/17 +f 48/61/17 60/60/17 61/44/17 +f 38/62/15 57/56/15 37/54/15 +f 57/56/13 63/63/13 58/58/13 +f 58/58/15 63/63/15 59/64/15 +f 59/64/16 64/65/16 65/66/16 +f 39/67/14 62/68/14 38/62/14 +f 67/69/16 63/63/16 62/68/16 +f 63/63/16 68/70/16 69/71/16 +f 64/65/15 69/71/15 65/66/15 +f 66/46/17 60/60/17 65/66/17 +f 39/67/14 72/72/14 67/69/14 +f 72/72/16 68/70/16 67/69/16 +f 68/70/16 73/73/16 69/71/16 +f 74/74/11 70/75/11 69/71/11 +f 70/75/11 75/76/11 76/50/11 +f 41/77/16 72/72/16 40/78/16 +f 72/72/16 77/79/16 73/73/16 +f 78/80/11 74/74/11 73/73/11 +f 79/81/11 75/76/11 74/74/11 +f 75/76/18 80/82/18 81/40/18 +f 41/77/18 52/83/18 77/79/18 +f 77/79/18 52/83/18 53/84/18 +f 53/84/14 79/81/14 78/80/14 +f 79/81/11 54/85/11 80/82/11 +f 80/82/18 56/41/18 81/40/18 +f 29/38/19 27/86/19 25/87/19 +f 71/48/12 65/66/12 70/75/12 +f 51/55/15 37/54/15 57/56/15 +f 52/83/14 41/77/14 34/88/14 +f 46/42/16 56/41/16 36/89/16 +f 80/82/16 54/85/16 55/90/16 +f 73/73/11 77/79/11 78/80/11 +f 63/63/16 57/56/16 62/68/16 +f 59/64/14 63/63/14 64/65/14 +f 50/57/14 57/56/14 58/58/14 +f 61/44/14 47/43/14 48/61/14 +f 35/45/13 61/44/13 42/47/13 +f 44/51/20 76/50/20 45/52/20 +f 45/52/13 81/40/13 46/42/13 +f 81/40/14 76/50/14 75/76/14 +f 69/71/11 73/73/11 74/74/11 +f 69/71/13 64/65/13 63/63/13 +f 76/50/12 71/48/12 70/75/12 +f 65/66/13 60/60/13 59/64/13 +f 65/66/14 69/71/14 70/75/14 +f 53/84/14 78/80/14 77/79/14 +f 72/72/18 39/67/18 40/78/18 +f 27/23/7 28/26/7 22/24/7 +f 28/26/7 26/32/7 18/27/7 +f 25/29/7 27/23/7 19/30/7 +f 26/32/7 25/29/7 23/33/7 +f 27/35/8 31/39/8 32/36/8 +f 26/32/9 30/91/9 29/38/9 +f 29/38/10 30/91/10 32/36/10 +f 66/46/13 43/49/13 42/47/13 +f 71/48/14 44/51/14 43/49/14 +f 58/58/16 59/64/16 49/59/16 +f 49/59/14 59/64/14 60/60/14 +f 38/62/14 62/68/14 57/56/14 +f 39/67/14 67/69/14 62/68/14 +f 67/69/16 68/70/16 63/63/16 +f 66/46/17 61/44/17 60/60/17 +f 72/72/16 73/73/16 68/70/16 +f 74/74/11 75/76/11 70/75/11 +f 41/77/16 77/79/16 72/72/16 +f 78/80/11 79/81/11 74/74/11 +f 79/81/11 80/82/11 75/76/11 +f 53/84/20 54/85/20 79/81/20 +f 80/82/14 55/90/14 56/41/14 +f 29/38/19 31/39/19 27/86/19 +f 71/48/12 66/46/12 65/66/12 +o Door +v 1.375000 0.750000 0.125000 +v 1.375000 0.250000 0.125000 +v 1.375000 0.750000 -0.125000 +v 1.375000 0.250000 -0.125000 +v 1.375000 0.375000 0.250000 +v 1.375000 0.375000 -0.250000 +v 1.375000 0.625000 0.250000 +v 1.375000 0.625000 -0.250000 +v 1.312500 0.750000 -0.125000 +v 1.312500 0.750000 0.125000 +v 1.312500 0.375000 -0.250000 +v 1.312500 0.625000 -0.250000 +v 1.312500 0.250000 0.125000 +v 1.312500 0.250000 -0.125000 +v 1.312500 0.625000 0.250000 +v 1.312500 0.375000 0.250000 +v 1.375000 0.875000 0.187500 +v 1.375000 0.125000 0.187500 +v 1.375000 0.875000 -0.187500 +v 1.375000 0.125000 -0.187500 +v 1.375000 0.312500 0.375000 +v 1.375000 0.312500 -0.375000 +v 1.375000 0.687500 0.375000 +v 1.375000 0.687500 -0.375000 +v 1.437500 0.875000 0.187500 +v 1.437500 0.125000 0.187500 +v 1.437500 0.875000 -0.187500 +v 1.437500 0.125000 -0.187500 +v 1.437500 0.312500 0.375000 +v 1.437500 0.312500 -0.375000 +v 1.437500 0.687500 0.375000 +v 1.437500 0.687500 -0.375000 +v 1.500000 0.750000 0.125000 +v 1.500000 0.250000 0.125000 +v 1.500000 0.750000 -0.125000 +v 1.500000 0.250000 -0.125000 +v 1.500000 0.375000 0.250000 +v 1.500000 0.375000 -0.250000 +v 1.500000 0.625000 0.250000 +v 1.500000 0.625000 -0.250000 +v 1.625000 0.687500 -0.126000 +v 1.625000 0.312500 -0.126000 +v 1.625000 0.687500 -0.188500 +v 1.625000 0.312500 -0.188500 +v 1.500000 0.687500 -0.126000 +v 1.500000 0.312500 -0.126000 +v 1.500000 0.687500 -0.188500 +v 1.500000 0.312500 -0.188500 +v 1.500000 0.375000 -0.126000 +v 1.500000 0.375000 -0.188500 +v 1.500000 0.625000 -0.126000 +v 1.500000 0.625000 -0.188500 +v 1.562500 0.375000 -0.126000 +v 1.562500 0.375000 -0.188500 +v 1.562500 0.625000 -0.126000 +v 1.562500 0.625000 -0.188500 +vt 0.465517 0.218750 +vt 0.508621 0.234375 +vt 0.474138 0.234375 +vt 0.439655 0.171875 +vt 0.491379 0.156250 +vt 0.508621 0.203125 +vt 0.431034 0.156250 +vt 0.431034 0.171875 +vt 0.431034 0.250000 +vt 0.439655 0.265625 +vt 0.431034 0.265625 +vt 0.431034 0.312500 +vt 0.439655 0.343750 +vt 0.431034 0.343750 +vt 0.431034 0.218750 +vt 0.439655 0.250000 +vt 0.431034 0.296875 +vt 0.439655 0.312500 +vt 0.431034 0.203125 +vt 0.439655 0.218750 +vt 0.439655 0.296875 +vt 0.439655 0.203125 +vt 0.439655 0.289062 +vt 0.456897 0.250000 +vt 0.456897 0.281250 +vt 0.517241 0.312500 +vt 0.474138 0.296875 +vt 0.508621 0.296875 +vt 0.543103 0.242188 +vt 0.525862 0.281250 +vt 0.525862 0.250000 +vt 0.543103 0.289062 +vt 0.465517 0.312500 +vt 0.439655 0.242188 +vt 0.551724 0.179688 +vt 0.543103 0.156250 +vt 0.551724 0.156250 +vt 0.551724 0.250000 +vt 0.543103 0.226562 +vt 0.551724 0.226562 +vt 0.551724 0.437500 +vt 0.543103 0.390625 +vt 0.551724 0.390625 +vt 0.551724 0.296875 +vt 0.543103 0.250000 +vt 0.543103 0.367188 +vt 0.551724 0.367188 +vt 0.543103 0.320312 +vt 0.551724 0.320312 +vt 0.543103 0.296875 +vt 0.543103 0.179688 +vt 0.543103 0.382812 +vt 0.525862 0.343750 +vt 0.543103 0.335938 +vt 0.508621 0.390625 +vt 0.525862 0.375000 +vt 0.474138 0.390625 +vt 0.517241 0.406250 +vt 0.465517 0.406250 +vt 0.439655 0.382812 +vt 0.456897 0.343750 +vt 0.439655 0.335938 +vt 0.474138 0.328125 +vt 0.508621 0.328125 +vt 0.465517 0.312500 +vt 0.517241 0.312500 +vt 0.568965 0.171875 +vt 0.577586 0.218750 +vt 0.568965 0.218750 +vt 0.577586 0.156250 +vt 0.577586 0.171875 +vt 0.568965 0.234375 +vt 0.560345 0.226562 +vt 0.560345 0.210938 +vt 0.551724 0.234375 +vt 0.560345 0.234375 +vt 0.560345 0.156250 +vt 0.551724 0.164062 +vt 0.551724 0.156250 +vt 0.551724 0.179688 +vt 0.560345 0.179688 +vt 0.560345 0.164062 +vt 0.568965 0.156250 +vt 0.586207 0.210938 +vt 0.586207 0.164062 +vt 0.586207 0.226562 +vt 0.577586 0.234375 +vt 0.517241 0.218750 +vt 0.491379 0.218750 +vt 0.456897 0.218750 +vt 0.456897 0.156250 +vt 0.508621 0.171875 +vt 0.439655 0.156250 +vt 0.543103 0.437500 +vt 0.456897 0.375000 +vt 0.551724 0.226562 +vt 0.551724 0.210938 +vt 0.586207 0.179688 +vt 0.586207 0.156250 +vt 0.586207 0.234375 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -0.7071 0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 0.0000 1.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.8944 0.0000 -0.4472 +vn 0.9045 0.3015 -0.3015 +vn 0.8944 0.4472 0.0000 +vn 0.9045 0.3015 0.3015 +vn 0.8944 0.0000 0.4472 +vn 0.9045 -0.3015 0.3015 +vn 0.8944 -0.4472 0.0000 +vn 0.9045 -0.3015 -0.3015 +vn 1.0000 0.0000 0.0000 +s off +f 101/92/21 83/93/21 85/94/21 +f 92/95/21 94/96/21 96/97/21 +f 85/98/22 92/95/22 87/99/22 +f 82/100/23 96/101/23 88/102/23 +f 83/103/24 95/104/24 85/105/24 +f 84/106/25 91/107/25 82/100/25 +f 86/108/26 94/109/26 83/103/26 +f 89/110/27 90/111/27 84/106/27 +f 88/102/28 97/112/28 86/108/28 +f 87/99/29 93/113/29 89/110/29 +f 105/114/21 87/115/21 89/116/21 +f 98/117/21 84/118/21 82/119/21 +f 102/120/21 88/121/21 86/122/21 +f 104/123/21 82/119/21 88/121/21 +f 100/124/21 89/116/21 84/118/21 +f 83/93/21 102/120/21 86/122/21 +f 103/125/21 85/94/21 87/115/21 +f 103/126/22 109/127/22 101/128/22 +f 100/129/27 113/130/27 105/131/27 +f 101/132/24 107/133/24 99/134/24 +f 98/135/25 108/136/25 100/129/25 +f 99/134/26 110/137/26 102/138/26 +f 102/138/28 112/139/28 104/140/28 +f 104/140/23 106/141/23 98/135/23 +f 105/131/29 111/142/29 103/126/29 +f 113/143/30 119/144/30 111/145/30 +f 113/143/31 116/146/31 121/147/31 +f 114/148/32 108/149/32 106/150/32 +f 112/151/33 114/148/33 106/150/33 +f 118/152/34 112/151/34 110/153/34 +f 110/153/35 115/154/35 118/152/35 +f 117/155/36 107/156/36 109/157/36 +f 111/145/37 117/155/37 109/157/37 +f 118/152/38 117/155/38 121/147/38 +f 123/158/38 124/159/38 122/160/38 +f 123/158/24 129/161/24 125/162/24 +f 124/159/25 126/163/25 122/160/25 +f 126/163/28 136/164/28 122/160/28 +f 136/165/28 123/158/28 122/160/28 +f 133/166/24 136/164/24 132/167/24 +f 130/168/25 135/169/25 131/170/25 +f 136/165/21 135/171/21 134/172/21 +f 134/173/28 127/174/28 123/158/28 +f 125/162/29 137/175/29 124/159/29 +f 129/161/29 135/176/29 125/162/29 +f 137/177/29 128/178/29 124/159/29 +f 101/92/21 99/179/21 83/93/21 +f 96/97/21 91/180/21 90/181/21 +f 90/181/21 93/113/21 92/95/21 +f 92/95/21 95/182/21 94/96/21 +f 94/96/21 97/183/21 96/97/21 +f 96/97/21 90/181/21 92/95/21 +f 85/98/22 95/184/22 92/95/22 +f 82/100/23 91/107/23 96/101/23 +f 83/103/24 94/109/24 95/104/24 +f 84/106/25 90/111/25 91/107/25 +f 86/108/26 97/112/26 94/109/26 +f 89/110/27 93/113/27 90/111/27 +f 88/102/28 96/101/28 97/112/28 +f 87/99/29 92/95/29 93/113/29 +f 105/114/21 103/125/21 87/115/21 +f 98/117/21 100/124/21 84/118/21 +f 102/120/21 104/123/21 88/121/21 +f 104/123/21 98/117/21 82/119/21 +f 100/124/21 105/114/21 89/116/21 +f 83/93/21 99/179/21 102/120/21 +f 103/125/21 101/92/21 85/94/21 +f 103/126/22 111/142/22 109/127/22 +f 100/129/27 108/136/27 113/130/27 +f 101/132/24 109/185/24 107/133/24 +f 98/135/25 106/141/25 108/136/25 +f 99/134/26 107/133/26 110/137/26 +f 102/138/28 110/137/28 112/139/28 +f 104/140/23 112/139/23 106/141/23 +f 105/131/29 113/130/29 111/142/29 +f 113/143/30 121/147/30 119/144/30 +f 113/143/31 108/149/31 116/146/31 +f 114/148/32 116/146/32 108/149/32 +f 112/151/33 120/186/33 114/148/33 +f 118/152/34 120/186/34 112/151/34 +f 110/153/35 107/156/35 115/154/35 +f 117/155/36 115/154/36 107/156/36 +f 111/145/37 119/144/37 117/155/37 +f 121/147/38 116/146/38 114/148/38 +f 114/148/38 120/186/38 118/152/38 +f 118/152/38 115/154/38 117/155/38 +f 117/155/38 119/144/38 121/147/38 +f 121/147/38 114/148/38 118/152/38 +f 123/158/38 125/162/38 124/159/38 +f 123/158/24 127/174/24 129/161/24 +f 124/159/25 128/178/25 126/163/25 +f 126/163/28 132/167/28 136/164/28 +f 136/165/28 134/172/28 123/158/28 +f 133/166/24 137/187/24 136/164/24 +f 130/168/25 134/173/25 135/169/25 +f 136/165/21 137/188/21 135/171/21 +f 134/173/28 130/168/28 127/174/28 +f 125/162/29 135/189/29 137/175/29 +f 129/161/29 131/190/29 135/176/29 +f 137/177/29 133/191/29 128/178/29 +o Main +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 1.000000 1.500000 +v -1.500000 1.000000 -1.500000 +v -1.500000 1.000000 1.500000 +v 1.500000 1.000000 -1.500000 +v 1.375000 0.125000 1.500000 +v -1.375000 0.125000 -1.500000 +v -1.375000 0.125000 1.500000 +v 1.375000 0.125000 -1.500000 +v 1.375000 0.875000 1.500000 +v -1.375000 0.875000 -1.500000 +v -1.375000 0.875000 1.500000 +v 1.375000 0.875000 -1.500000 +v 1.500000 0.125000 -1.375000 +v -1.500000 0.125000 1.375000 +v 1.500000 0.125000 1.375000 +v -1.500000 0.125000 -1.375000 +v 1.500000 0.875000 -1.375000 +v -1.500000 0.875000 1.375000 +v 1.500000 0.875000 1.375000 +v -1.500000 0.875000 -1.375000 +v 1.375000 0.125000 1.375000 +v -1.375000 0.125000 1.375000 +v 1.375000 0.875000 1.375000 +v -1.375000 0.875000 1.375000 +v -1.375000 0.125000 -1.375000 +v 1.375000 0.125000 -1.375000 +v -1.375000 0.875000 -1.375000 +v 1.375000 0.875000 -1.375000 +v 1.375000 0.750000 0.125000 +v 1.375000 0.250000 0.125000 +v 1.375000 0.750000 -0.125000 +v 1.375000 0.250000 -0.125000 +v 1.375000 0.375000 0.250000 +v 1.375000 0.375000 -0.250000 +v 1.375000 0.625000 0.250000 +v 1.375000 0.625000 -0.250000 +v 1.250000 0.750000 0.125000 +v 1.250000 0.250000 0.125000 +v 1.250000 0.750000 -0.125000 +v 1.250000 0.250000 -0.125000 +v 1.250000 0.375000 0.250000 +v 1.250000 0.375000 -0.250000 +v 1.250000 0.625000 0.250000 +v 1.250000 0.625000 -0.250000 +v -0.500000 1.000000 0.500000 +v 0.500000 1.000000 0.500000 +v -0.500000 1.000000 -0.500000 +v 0.500000 1.000000 -0.500000 +v -0.437500 1.000000 0.437500 +v 0.437500 1.000000 0.437500 +v -0.437500 1.000000 -0.437500 +v 0.437500 1.000000 -0.437500 +v -0.500000 0.937500 -0.500000 +v -0.500000 0.937500 0.500000 +v 0.500000 0.937500 0.500000 +v 0.500000 0.937500 -0.500000 +v -0.437500 0.937500 -0.437500 +v -0.437500 0.937500 0.437500 +v 0.437500 0.937500 0.437500 +v 0.437500 0.937500 -0.437500 +vt 0.413793 0.000000 +vt 0.000000 0.375000 +vt 0.000000 -0.000000 +vt -0.000000 0.890625 +vt 0.017241 0.984375 +vt -0.000000 0.984375 +vt 0.000000 0.890625 +vt 0.017241 0.984375 +vt 0.000000 0.984375 +vt -0.000000 0.890625 +vt 0.017241 0.984375 +vt -0.000000 0.984375 +vt 0.000000 0.890625 +vt 0.017241 0.984375 +vt 0.000000 0.984375 +vt 0.413793 0.375000 +vt 0.017241 0.390625 +vt 0.000000 0.375000 +vt 0.017241 0.484375 +vt 0.000000 0.500000 +vt 0.413793 0.500000 +vt 0.396552 0.390625 +vt 0.413793 0.375000 +vt 0.413793 0.500000 +vt 0.396552 0.390625 +vt 0.413793 0.375000 +vt 0.017241 0.390625 +vt 0.000000 0.375000 +vt 0.017241 0.484375 +vt 0.000000 0.500000 +vt 0.413793 0.500000 +vt 0.396552 0.390625 +vt 0.017241 0.484375 +vt 0.000000 0.500000 +vt 0.413793 0.500000 +vt 0.413793 0.375000 +vt 0.017241 0.390625 +vt 0.396552 0.390625 +vt 0.000000 0.375000 +vt 0.017241 0.484375 +vt 0.000000 0.500000 +vt 0.017241 0.390625 +vt 0.396552 0.890625 +vt 0.017241 0.890625 +vt 0.413793 0.984375 +vt 0.413793 0.890625 +vt 0.017241 1.000000 +vt 0.396552 0.984375 +vt 0.396552 1.000000 +vt 0.396552 0.875000 +vt 0.017241 0.875000 +vt 0.396552 0.890625 +vt 0.017241 0.890625 +vt 0.017241 1.000000 +vt 0.396552 0.984375 +vt 0.396552 1.000000 +vt 0.396552 0.875000 +vt 0.017241 0.875000 +vt 0.413793 0.984375 +vt 0.413793 0.890625 +vt 0.413793 0.890625 +vt 0.396552 0.984375 +vt 0.396552 0.890625 +vt 0.017241 0.875000 +vt 0.396552 0.875000 +vt 0.017241 1.000000 +vt 0.396552 1.000000 +vt 0.017241 0.890625 +vt 0.413793 0.890625 +vt 0.396552 0.984375 +vt 0.396552 0.890625 +vt 0.017241 0.875000 +vt 0.396552 0.875000 +vt 0.017241 1.000000 +vt 0.396552 1.000000 +vt 0.017241 0.890625 +vt 0.172414 0.953125 +vt 0.241379 0.953125 +vt 0.189655 0.906250 +vt 0.224138 0.968750 +vt 0.172414 0.921875 +vt 0.224138 0.906250 +vt 0.241379 0.921875 +vt 0.189655 0.968750 +vt 0.413793 0.265625 +vt 0.431034 0.296875 +vt 0.413793 0.296875 +vt 0.431034 0.312500 +vt 0.413793 0.312500 +vt 0.413793 0.203125 +vt 0.431034 0.218750 +vt 0.413793 0.218750 +vt 0.431034 0.343750 +vt 0.413793 0.343750 +vt 0.431034 0.250000 +vt 0.413793 0.250000 +vt 0.413793 0.156250 +vt 0.431034 0.171875 +vt 0.413793 0.171875 +vt 0.431034 0.265625 +vt 0.431034 0.203125 +vt 0.275862 0.625000 +vt 0.431034 0.156250 +vt 0.568965 0.148438 +vt 0.568965 0.156250 +vt 0.275862 0.750000 +vt 0.413793 0.875000 +vt 0.137931 0.750000 +vt 0.000000 0.875000 +vt 0.439655 0.023438 +vt 0.560345 0.132812 +vt 0.439655 0.132812 +vt 0.560345 0.023438 +vt 0.568965 0.132812 +vt 0.568965 -0.000000 +vt 0.431034 0.007812 +vt 0.431034 -0.000000 +vt 0.439655 0.140625 +vt 0.431034 0.023438 +vt 0.422414 0.140625 +vt 0.422414 0.015625 +vt 0.431034 0.148438 +vt 0.577586 0.015625 +vt 0.577586 0.140625 +vt 0.560345 0.015625 +vt 0.568965 0.007812 +vt 0.586207 0.140625 +vt 0.586207 0.015625 +vt 0.413793 0.015625 +vt 0.413793 0.140625 +vt 0.137931 0.625000 +vt 0.396552 0.484375 +vt 0.396552 0.484375 +vt 0.396552 0.484375 +vt 0.396552 0.484375 +vt 0.413793 0.984375 +vt 0.413793 0.984375 +vt 0.431034 0.156250 +vt 0.568965 0.023438 +vt 0.560345 0.140625 +vt 0.431034 0.132812 +vt 0.439655 0.015625 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.7071 0.7071 +s off +f 140/192/39 139/193/39 138/194/39 +f 148/195/40 165/196/40 152/197/40 +f 149/198/41 169/199/41 153/200/41 +f 156/201/42 164/202/42 160/203/42 +f 157/204/43 168/205/43 161/206/43 +f 138/207/41 157/208/41 140/209/41 +f 140/209/41 161/210/41 143/211/41 +f 143/212/42 147/213/42 140/214/42 +f 144/215/41 155/216/41 138/207/41 +f 139/217/43 148/218/43 138/219/43 +f 138/219/43 152/220/43 144/221/43 +f 161/210/41 144/215/41 143/211/41 +f 152/220/43 142/222/43 144/221/43 +f 142/222/43 146/223/43 139/217/43 +f 139/193/40 160/224/40 142/225/40 +f 160/224/40 145/226/40 142/225/40 +f 141/227/40 156/228/40 139/193/40 +f 145/226/40 154/229/40 141/227/40 +f 141/230/42 153/231/42 145/232/42 +f 153/231/42 143/212/42 145/232/42 +f 140/214/42 149/233/42 141/230/42 +f 162/234/43 165/196/43 163/235/43 +f 150/236/41 162/234/41 146/237/41 +f 152/238/39 164/239/39 150/240/39 +f 146/241/44 163/235/44 148/242/44 +f 166/243/42 169/199/42 167/244/42 +f 153/245/39 168/246/39 151/247/39 +f 147/248/44 167/244/44 149/249/44 +f 151/250/40 166/243/40 147/251/40 +f 155/252/42 165/253/42 163/254/42 +f 163/254/44 157/255/44 155/256/44 +f 161/257/39 165/253/39 159/258/39 +f 163/254/41 168/205/41 166/259/41 +f 154/260/43 169/261/43 167/262/43 +f 167/262/44 156/263/44 154/264/44 +f 160/265/39 169/261/39 158/266/39 +f 162/267/40 176/268/40 164/202/40 +f 177/269/40 167/262/40 169/261/40 +f 167/262/40 171/270/40 162/267/40 +f 164/202/40 172/271/40 169/261/40 +f 171/270/40 174/272/40 162/267/40 +f 173/273/40 167/262/40 175/274/40 +f 172/271/40 177/269/40 169/261/40 +f 170/275/40 164/202/40 176/268/40 +f 177/276/43 183/277/43 175/278/43 +f 175/278/45 181/279/45 173/280/45 +f 176/281/46 178/282/46 170/283/46 +f 173/280/44 179/284/44 171/285/44 +f 170/283/39 180/286/39 172/287/39 +f 171/288/47 182/289/47 174/290/47 +f 172/287/48 185/291/48 177/276/48 +f 174/290/42 184/292/42 176/281/42 +f 189/293/44 142/225/44 145/226/44 +f 186/294/40 194/295/40 188/296/40 +f 188/297/44 145/226/44 143/298/44 +f 186/299/44 143/298/44 144/300/44 +f 191/301/44 192/302/44 190/303/44 +f 193/304/42 198/305/42 192/302/42 +f 189/306/41 196/307/41 187/308/41 +f 192/302/41 199/309/41 190/303/41 +f 200/310/44 195/311/44 196/312/44 +f 199/309/44 194/295/44 195/313/44 +f 198/305/44 197/314/44 194/315/44 +f 201/316/44 196/307/44 197/317/44 +f 190/303/43 200/310/43 191/301/43 +f 188/318/43 197/314/43 189/319/43 +f 187/320/42 195/311/42 186/321/42 +f 191/301/40 201/316/40 193/304/40 +f 186/299/44 142/225/44 187/322/44 +f 140/192/39 141/227/39 139/193/39 +f 148/195/40 163/235/40 165/196/40 +f 149/198/41 167/244/41 169/199/41 +f 156/201/42 162/267/42 164/202/42 +f 157/204/43 166/259/43 168/205/43 +f 138/207/41 155/216/41 157/208/41 +f 140/209/41 157/208/41 161/210/41 +f 143/212/42 151/323/42 147/213/42 +f 144/215/41 159/324/41 155/216/41 +f 139/217/43 146/223/43 148/218/43 +f 138/219/43 148/218/43 152/220/43 +f 161/210/41 159/324/41 144/215/41 +f 152/220/43 150/325/43 142/222/43 +f 142/222/43 150/325/43 146/223/43 +f 139/193/40 156/228/40 160/224/40 +f 160/224/40 158/326/40 145/226/40 +f 141/227/40 154/229/40 156/228/40 +f 145/226/40 158/326/40 154/229/40 +f 141/230/42 149/233/42 153/231/42 +f 153/231/42 151/323/42 143/212/42 +f 140/214/42 147/213/42 149/233/42 +f 162/234/43 164/239/43 165/196/43 +f 150/236/41 164/239/41 162/234/41 +f 152/238/39 165/196/39 164/239/39 +f 146/241/44 162/234/44 163/235/44 +f 166/243/42 168/246/42 169/199/42 +f 153/245/39 169/199/39 168/246/39 +f 147/248/44 166/243/44 167/244/44 +f 151/250/40 168/246/40 166/243/40 +f 155/252/42 159/327/42 165/253/42 +f 163/254/44 166/259/44 157/255/44 +f 161/257/39 168/205/39 165/253/39 +f 163/254/41 165/253/41 168/205/41 +f 154/260/43 158/328/43 169/261/43 +f 167/262/44 162/267/44 156/263/44 +f 160/265/39 164/202/39 169/261/39 +f 162/267/40 174/272/40 176/268/40 +f 177/269/40 175/274/40 167/262/40 +f 167/262/40 173/273/40 171/270/40 +f 164/202/40 170/275/40 172/271/40 +f 177/276/43 185/291/43 183/277/43 +f 175/278/45 183/277/45 181/279/45 +f 176/281/46 184/292/46 178/282/46 +f 173/280/44 181/279/44 179/284/44 +f 170/283/39 178/282/39 180/286/39 +f 171/288/47 179/329/47 182/289/47 +f 172/287/48 180/286/48 185/291/48 +f 174/290/42 182/289/42 184/292/42 +f 189/293/44 187/322/44 142/225/44 +f 186/294/40 195/313/40 194/295/40 +f 188/297/44 189/293/44 145/226/44 +f 186/299/44 188/297/44 143/298/44 +f 191/301/44 193/304/44 192/302/44 +f 193/304/42 201/330/42 198/305/42 +f 189/306/41 197/317/41 196/307/41 +f 192/302/41 198/331/41 199/309/41 +f 200/310/44 199/332/44 195/311/44 +f 199/309/44 198/331/44 194/295/44 +f 198/305/44 201/330/44 197/314/44 +f 201/316/44 200/333/44 196/307/44 +f 190/303/43 199/332/43 200/310/43 +f 188/318/43 194/315/43 197/314/43 +f 187/320/42 196/312/42 195/311/42 +f 191/301/40 200/333/40 201/316/40 +f 186/299/44 144/300/44 142/225/44 diff --git a/src/main/resources/assets/hbm/textures/gui/machine/gui_firebox.png b/src/main/resources/assets/hbm/textures/gui/machine/gui_firebox.png new file mode 100644 index 000000000..8674655ef Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/machine/gui_firebox.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/firebox.png b/src/main/resources/assets/hbm/textures/models/machines/firebox.png new file mode 100644 index 000000000..322fe0c99 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/firebox.png differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/firebox_novent.png b/src/main/resources/assets/hbm/textures/models/machines/firebox_novent.png new file mode 100644 index 000000000..489060fb9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/firebox_novent.png differ