diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 035491dc3..923ba0029 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -689,6 +689,7 @@ public class ModBlocks { public static Block foundry_channel; public static Block foundry_tank; public static Block foundry_outlet; + public static Block machine_strand_caster; public static Block foundry_slagtap; public static Block slag; @@ -1830,6 +1831,7 @@ public class ModBlocks { machine_stirling_steel = new MachineStirling().setBlockName("machine_stirling_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_stirling_creative = new MachineStirling().setBlockName("machine_stirling_creative").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_sawmill = new MachineSawmill().setBlockName("machine_sawmill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_strand_caster = new MachineStrandCaster().setBlockName("machine_strand_caster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); machine_crucible = new MachineCrucible().setBlockName("machine_crucible").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); machine_boiler = new MachineHeatBoiler().setBlockName("machine_boiler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper"); machine_industrial_boiler = new MachineHeatBoilerIndustrial().setBlockName("machine_industrial_boiler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3114,6 +3116,7 @@ public class ModBlocks { register(machine_stirling_creative); register(machine_sawmill); register(machine_crucible); + register(machine_strand_caster); register(machine_boiler); register(machine_industrial_boiler); register(foundry_mold); diff --git a/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java new file mode 100644 index 000000000..9b2c6ced5 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java @@ -0,0 +1,232 @@ +package com.hbm.blocks.machine; + +import api.hbm.block.ICrucibleAcceptor; +import api.hbm.block.IToolable; +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ILookOverlay; +import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.inventory.material.Mats; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMold; +import com.hbm.items.machine.ItemScraps; +import com.hbm.tileentity.TileEntityProxyCombo; +import com.hbm.tileentity.machine.TileEntityCrucible; +import com.hbm.tileentity.machine.TileEntityFoundryCastingBase; +import com.hbm.tileentity.machine.TileEntityMachineStrandCaster; +import com.hbm.util.I18nUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent; +import net.minecraftforge.common.util.ForgeDirection; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class MachineStrandCaster extends BlockDummyable implements ICrucibleAcceptor, ILookOverlay, IToolable { + + public MachineStrandCaster() { + super(Material.iron); + } + + //reminder, if the machine is a solid brick, get dimensions will already handle it without the need to use fillSapce + //the order is up, down, forward, backward, left, right + //x is for left(-)/right(+), z is for forward(+)/backward(-), y you already know + @Override + public int[] getDimensions() { + return new int[]{0, 0, 6, 0, 1, 0}; + } + + @Override + public int getOffset() { + return 0; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if (meta >= 12) return new TileEntityMachineStrandCaster(); + if (meta >= 6) return new TileEntityProxyCombo(true, false, true).moltenMetal(); + return null; + } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + //up,down;forward,backward;left,right + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, this, dir); + //Fluid ports + this.makeExtra(world, x + rot.offsetX - dir.offsetX, y, z + rot.offsetZ - dir.offsetZ); + this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ); + this.makeExtra(world, x - dir.offsetX * 5, y, z - dir.offsetZ * 5); + this.makeExtra(world, x + rot.offsetX - dir.offsetX * 5, y, z + rot.offsetZ - dir.offsetZ * 5); + //Molten slop ports + this.makeExtra(world, x + rot.offsetX - dir.offsetX, y + 2, z + rot.offsetZ - dir.offsetZ); + this.makeExtra(world, x - dir.offsetX, y + 2, z - dir.offsetZ); + this.makeExtra(world, x + rot.offsetX, y + 2, z + rot.offsetZ); + this.makeExtra(world, x, y + 2, z); + } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { + + TileEntity poured = world.getTileEntity(x, y, z); + if (!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return false; + + int[] pos = this.findCore(world, x, y, z); + if (pos == null) return false; + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (!(tile instanceof TileEntityMachineStrandCaster)) return false; + TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile; + + return caster.canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { + + TileEntity poured = world.getTileEntity(x, y, z); + if (!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return stack; + + int[] pos = this.findCore(world, x, y, z); + if (pos == null) return stack; + TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]); + if (!(tile instanceof TileEntityMachineStrandCaster)) return stack; + TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile; + + return caster.pour(world, x, y, z, dX, dY, dZ, side, stack); + } + + @Override + public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + return false; + } + + @Override + public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + return null; + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { + if (world.isRemote) { + return true; + } + + int[] coords = findCore(world, x, y, z); + TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]); + if (cast != null) { + //insert mold + if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.mold && cast.slots[0] == null) { + cast.slots[0] = player.getHeldItem().copy(); + cast.slots[0].stackSize = 1; + player.getHeldItem().stackSize--; + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F); + cast.markDirty(); + return true; + + } + + if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool && player.getHeldItem().getItem().getToolClasses(player.getHeldItem()).contains("shovel")) { + if (cast.amount > 0) { + ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount)); + if (!player.inventory.addItemStackToInventory(scrap)) { + EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap); + world.spawnEntityInWorld(item); + } else { + player.inventoryContainer.detectAndSendChanges(); + } + cast.amount = 0; + cast.type = null; + cast.markDirty(); + } + return true; + } + } + return this.standardOpenBehavior(world, x, y, z, player, 0); + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block b, int i) { + + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityMachineStrandCaster) { + TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) te; + + if (cast.amount > 0) { + ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount)); + EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap); + world.spawnEntityInWorld(item); + cast.amount = 0; //just for safety + } + } + super.breakBlock(world, x, y, z, b, i); + } + + public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { + int[] coords = findCore(world, x, y, z); + if (coords == null) return; + + TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]); + + List text = new ArrayList(); + if (cast != null) { + if (cast.slots[0] == null) { + text.add(EnumChatFormatting.RED + I18nUtil.resolveKey("foundry.noCast")); + } else if (cast.slots[0].getItem() == ModItems.mold) { + ItemMold.Mold mold = ((ItemMold) cast.slots[0].getItem()).getMold(cast.slots[0]); + text.add(EnumChatFormatting.BLUE + mold.getTitle()); + } + } + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xFF4000, 0x401000, text); + } + + @Override + protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + x += dir.offsetX * o; + z += dir.offsetZ * o; + + if (!MultiblockHandlerXR.checkSpace(world, x, y, z, getDimensions(), x, y, z, dir)) return false; + return MultiblockHandlerXR.checkSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, x, y, z, dir); + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + if (tool != ToolType.SCREWDRIVER) + return false; + + int[] coords = findCore(world, x, y, z); + TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]); + + if (cast.slots[0] == null) + return false; + + if (!player.inventory.addItemStackToInventory(cast.slots[0].copy())) { + EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, cast.slots[0].copy()); + world.spawnEntityInWorld(item); + } else { + player.inventoryContainer.detectAndSendChanges(); + } + + cast.markDirty(); + + cast.slots[0] = null; + + return true; + } +} + diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineStrandCaster.java b/src/main/java/com/hbm/inventory/container/ContainerMachineStrandCaster.java new file mode 100644 index 000000000..6c503f6ce --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineStrandCaster.java @@ -0,0 +1,76 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotCraftingOutput; +import com.hbm.inventory.SlotNonRetarded; +import com.hbm.tileentity.machine.TileEntityMachineStrandCaster; +import com.hbm.util.InventoryUtil; +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 ContainerMachineStrandCaster extends Container { + + protected TileEntityMachineStrandCaster caster; + + public ContainerMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster caster) { + this.caster = caster; + + //the wretched mold + this.addSlotToContainer(new SlotNonRetarded(this.caster, 0, 57, 62)); + + //output + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 2; j++) { + this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, this.caster, j + i * 2 + 1, 125 + j * 18, 26 + i * 18)); + } + } + + + 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, 132 + i * 18)); + } + } + + for (int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 190)); + } + } + + @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 <= 6) { + if (!InventoryUtil.mergeItemStack(this.inventorySlots, originalStack, 7, this.inventorySlots.size(), true)) { + return null; + } + + slot.onSlotChange(originalStack, stack); + + } else if (!InventoryUtil.mergeItemStack(this.inventorySlots, originalStack, 1, 2, false)) { + return null; + } + + if (originalStack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return caster.isUseableByPlayer(player); + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java b/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java new file mode 100644 index 000000000..a2e959621 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java @@ -0,0 +1,98 @@ +package com.hbm.inventory.gui; + +import com.hbm.inventory.container.ContainerMachineStrandCaster; +import com.hbm.inventory.material.Mats; +import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior; +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.machine.TileEntityMachineStrandCaster; +import com.hbm.util.I18nUtil; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +public class GUIMachineStrandCaster extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_strand_caster.png"); + private TileEntityMachineStrandCaster caster; + + public GUIMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster tedf) { + super(new ContainerMachineStrandCaster(invPlayer, tedf)); + caster = tedf; + + this.xSize = 176; + this.ySize = 214; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + drawStackInfo(x, y, 16, 17); + + caster.water.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 14, 16, 24); + caster.steam.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 64, 16, 24); + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.caster.hasCustomInventoryName() ? this.caster.getInventoryName() : I18n.format(this.caster.getInventoryName()); + + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 0xffffff); + 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); + + if (caster.amount != 0) { + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + + int targetHeight = Math.min((caster.amount) * 79 / caster.getCapacity(), 92); + + int hex = caster.type.moltenColor; + //hex = 0xC18336; + Color color = new Color(hex); + GL11.glColor3f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); + drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1F, 1F, 1F, 0.3F); + drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight); + GL11.glDisable(GL11.GL_BLEND); + + } + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor3f(255, 255, 255); + + caster.water.renderTank(guiLeft + 82, guiTop + 38, this.zLevel, 16, 24); + caster.steam.renderTank(guiLeft + 82, guiTop + 90, this.zLevel, 16, 24); + + } + + + protected void drawStackInfo(int mouseX, int mouseY, int x, int y) { + + List list = new ArrayList(); + + if (caster.type == null) list.add(EnumChatFormatting.RED + "Empty"); + else + list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey(caster.type.getUnlocalizedName()) + ": " + Mats.formatAmount(caster.amount, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT))); + + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + x, guiTop + y, 36, 81, mouseX, mouseY, list); + } + + +} diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 2a0416386..547df6609 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -447,6 +447,15 @@ public class AssemblerRecipes { new ComparableStack(ModItems.wire_red_copper, 24), new ComparableStack(ModItems.circuit_copper, 1) }, 300); + + makeRecipe(new ComparableStack(ModBlocks.machine_strand_caster, 1), new AStack[] { + new ComparableStack(ModItems.ingot_firebrick, 12), + new OreDictStack(STEEL.plateCast(), 6), + new OreDictStack(CU.plateWelded(), 2), + new ComparableStack(ModItems.tank_steel, 2), + new OreDictStack(ANY_CONCRETE.any(), 8) + }, 100); + makeRecipe(new ComparableStack(ModItems.piston_set, 1, EnumPistonType.STEEL.ordinal()), new AStack[] { new OreDictStack(STEEL.plate(), 16), new OreDictStack(CU.plate(), 4), diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index fa962250c..e323183b7 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -306,6 +306,7 @@ public class ClientProxy extends ServerProxy { //Foundry ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineStrandCaster.class, new RenderStrandCaster()); //AMS ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSEmitter.class, new RenderAMSEmitter()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 9033ff37a..0eeb22d63 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -50,7 +50,10 @@ public class ResourceManager { public static final IModelCustom boiler_burst = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/boiler_burst.obj")); public static final IModelCustom boiler_industrial = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/industrial_boiler.obj")); public static final IModelCustom hephaestus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/hephaestus.obj")); - + + //Caster o' Strands + public static final IModelCustom strand_caster = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/strand_caster.obj")); + //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")); @@ -448,7 +451,10 @@ public class ResourceManager { public static final ResourceLocation boiler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/boiler.png"); public static final ResourceLocation boiler_industrial_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/industrial_boiler.png"); public static final ResourceLocation hephaestus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/hephaestus.png"); - + + //Strand Caster + public static final ResourceLocation strand_caster_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/strand_caster.png"); + //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"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderStrandCaster.java b/src/main/java/com/hbm/render/tileentity/RenderStrandCaster.java new file mode 100644 index 000000000..6d9579ab0 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderStrandCaster.java @@ -0,0 +1,125 @@ +package com.hbm.render.tileentity; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineStrandCaster; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.nio.DoubleBuffer; + +public class RenderStrandCaster extends TileEntitySpecialRenderer implements IItemRendererProvider { + public static final ResourceLocation lava = new ResourceLocation(RefStrings.MODID, "textures/models/machines/lava_gray.png"); + private static DoubleBuffer buf = null; + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) te; + + if(buf == null){ + buf = GLAllocation.createDirectByteBuffer(8*4).asDoubleBuffer(); + } + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + switch(te.getBlockMetadata() - BlockDummyable.offset) { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + GL11.glTranslated( 0.5, 0, 0.5); + GL11.glRotated(180, 0, 1, 0); + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + + bindTexture(ResourceManager.strand_caster_tex); + ResourceManager.strand_caster.renderPart("caster"); + + + if (caster.amount != 0 && caster.getInstalledMold() != null) { + + double level = ((double) caster.amount / (double) caster.getCapacity()) * 0.675D; + double offset = ((double) caster.amount / (double) caster.getInstalledMold().getCost()) * 0.375D; + + int color = caster.type.moltenColor; + + int r = color >> 16 & 0xFF; + int g = color >> 8 & 0xFF; + int b = color & 0xFF; + + GL11.glPushAttrib(GL11.GL_LIGHTING_BIT); + GL11.glDisable(GL11.GL_LIGHTING); + + GL11.glPushMatrix(); + GL11.glColor3f( r/ 255F, g/ 255F, b/ 255F); + GL11.glEnable(GL11.GL_CLIP_PLANE0); + buf.put(new double[] { 0, 0, -1, 0.5} ); + buf.rewind(); + GL11.glClipPlane(GL11.GL_CLIP_PLANE0, buf); + GL11.glTranslated(0,0,-offset + 3.4); + ResourceManager.strand_caster.renderPart("plate"); + GL11.glDisable(GL11.GL_CLIP_PLANE0); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F); + Tessellator tess = Tessellator.instance; + tess.setNormal(0F, 1F, 0F); + tess.setColorOpaque_F(r / 255F, g / 255F, b / 255F); + bindTexture(lava); + tess.startDrawingQuads(); + tess.addVertexWithUV(-0.9, 2.3 + level, -0.999, 0, 0); + tess.addVertexWithUV(-0.9, 2.3 + level, 0.999, 0, 1); + tess.addVertexWithUV(0.9, 2.3 + level, 0.999, 1, 1); + tess.addVertexWithUV(0.9, 2.3 + level, -0.999, 1, 0); + tess.draw(); + + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopAttrib(); + } + + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_strand_caster); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(2, 0, 2); + GL11.glScaled( 2, 2, 2); + } + public void renderCommon() { + GL11.glScaled(1, 1, 1); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.strand_caster_tex); ResourceManager.strand_caster.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }; + } + +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index eb4a603e0..c0957eb69 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -1,6 +1,7 @@ package com.hbm.tileentity; +import api.hbm.block.ICrucibleAcceptor; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; import com.hbm.inventory.fluid.FluidType; @@ -9,20 +10,23 @@ import api.hbm.energy.IEnergyConnector; import api.hbm.energy.IEnergyUser; import api.hbm.fluid.IFluidConnector; import api.hbm.tile.IHeatSource; +import com.hbm.inventory.material.Mats; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource { +public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource, ICrucibleAcceptor { TileEntity tile; boolean inventory; boolean power; boolean fluid; boolean heat; + public boolean moltenMetal; public TileEntityProxyCombo() { } @@ -41,7 +45,10 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy this.power = true; return this; } - + public TileEntityProxyCombo moltenMetal() { + this.moltenMetal = true; + return this; + } public TileEntityProxyCombo fluid() { this.fluid = true; return this; @@ -425,6 +432,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy this.inventory = nbt.getBoolean("inv"); this.power = nbt.getBoolean("power"); this.fluid = nbt.getBoolean("fluid"); + this.moltenMetal = nbt.getBoolean("metal"); this.heat = nbt.getBoolean("heat"); } @@ -435,6 +443,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy nbt.setBoolean("inv", inventory); nbt.setBoolean("power", power); nbt.setBoolean("fluid", fluid); + nbt.setBoolean("metal", moltenMetal); nbt.setBoolean("heat", heat); } @@ -497,4 +506,36 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy ((IHeatSource)getTile()).useUpHeat(heat); } } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + } + return false; + } + + @Override + public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).pour(world, x, y, z, dX, dY, dZ, side, stack); + } + return null; + } + + @Override + public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).canAcceptPartialFlow(world, x, y, z, side, stack); + } + return false; + } + + @Override + public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).flow(world, x, y, z, side, stack); + } + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 407e28545..1eec40138 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -292,6 +292,7 @@ public class TileMappings { put(TileEntityFoundryOutlet.class, "tileentity_foundry_outlet"); put(TileEntityFoundrySlagtap.class, "tileentity_foundry_slagtap"); put(TileEntitySlag.class, "tileentity_foundry_slag"); + put(TileEntityMachineStrandCaster.class, "tileentity_strand_caster"); put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter"); put(TileEntityMachineFunnel.class, "tileentity_funnel"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java index a6ee9501c..e486b7a60 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCrucible.java @@ -158,7 +158,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); Vec3 impact = Vec3.createVectorHelper(0, 0, 0); - MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, this.wasteStack, MaterialShapes.NUGGET.q(2), impact); + MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, this.wasteStack, MaterialShapes.NUGGET.q(3), impact); if(didPour != null) { NBTTagCompound data = new NBTTagCompound(); @@ -198,7 +198,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro } Vec3 impact = Vec3.createVectorHelper(0, 0, 0); - MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, toCast, MaterialShapes.NUGGET.q(2), impact); + MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, toCast, MaterialShapes.NUGGET.q(3), impact); if(didPour != null) { NBTTagCompound data = new NBTTagCompound(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java index 145c2159a..6c65fb4c2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java @@ -7,7 +7,11 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityFoundryBasin extends TileEntityFoundryCastingBase implements IRenderFoundry { - + + public TileEntityFoundryBasin() { + super(2); + } + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java index bf2e63a95..da2a8d8a5 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java @@ -7,6 +7,7 @@ import com.hbm.items.machine.ItemMold.Mold; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -19,10 +20,12 @@ import net.minecraftforge.common.util.ForgeDirection; * */ public abstract class TileEntityFoundryCastingBase extends TileEntityFoundryBase implements ISidedInventory { - - public ItemStack slots[] = new ItemStack[2]; + public ItemStack[] slots; + public TileEntityFoundryCastingBase(int slotCount) { + slots = new ItemStack[slotCount]; + } public int cooloff = 100; - + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java index 607b1d13c..f2e476a3e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java @@ -3,7 +3,11 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.material.NTMMaterial; public class TileEntityFoundryMold extends TileEntityFoundryCastingBase implements IRenderFoundry { - + + public TileEntityFoundryMold() { + super(2); + } + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java new file mode 100644 index 000000000..62f04d8e4 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -0,0 +1,333 @@ +package com.hbm.tileentity.machine; + +import api.hbm.block.ICrucibleAcceptor; +import api.hbm.fluid.IFluidStandardTransceiver; +import com.hbm.blocks.BlockDummyable; +import com.hbm.inventory.container.ContainerMachineStrandCaster; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.tank.FluidTank; +import com.hbm.inventory.gui.GUIMachineStrandCaster; +import com.hbm.inventory.material.Mats; +import com.hbm.items.ModItems; +import com.hbm.items.machine.ItemMold; +import com.hbm.items.machine.ItemScraps; +import com.hbm.packet.NBTPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.IGUIProvider; +import com.hbm.tileentity.INBTPacketReceiver; +import com.hbm.util.fauxpointtwelve.DirPos; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +//god thank you bob for this base class +public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase implements IGUIProvider, ICrucibleAcceptor, ISidedInventory, IFluidStandardTransceiver, INBTPacketReceiver, IInventory { + + public FluidTank water; + public FluidTank steam; + + public String getName() { + return "container.machineStrandCaster"; + } + + @Override + public String getInventoryName() { + return getName(); + } + + public TileEntityMachineStrandCaster() { + super(7); + water = new FluidTank(Fluids.WATER, 64_000); + steam = new FluidTank(Fluids.SPENTSTEAM, 64_000); + } + + + @Override + public void updateEntity() { + + if (!worldObj.isRemote) { + + if (this.lastType != this.type || this.lastAmount != this.amount) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + this.lastType = this.type; + this.lastAmount = this.amount; + } + + if (this.amount >= this.getCapacity()) { + //In case of overfill problems, spit out the excess as scrap + if (amount > getCapacity()) { + ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(type, amount)); + EntityItem item = new EntityItem(worldObj, xCoord + 0.5, yCoord + 2, zCoord + 0.5, scrap); + worldObj.spawnEntityInWorld(item); + } + this.amount = this.getCapacity(); + + } + + if (this.amount == 0) { + this.type = null; + } + + this.updateConnections(); + + ItemMold.Mold mold = this.getInstalledMold(); + + if (canProcess()) { + + int itemsCasted = Math.min(amount / mold.getCost(), 9); + + for (int j = 0; j < itemsCasted; j++) { + this.amount -= mold.getCost(); + + ItemStack out = mold.getOutput(type); + + for (int i = 1; i < 7; i++) { + if (slots[i] == null) { + slots[i] = out.copy(); + break; + } + + if (slots[i].isItemEqual(out) && slots[i].stackSize + out.stackSize <= out.getMaxStackSize()) { + slots[i].stackSize += out.stackSize; + break; + } + + } + } + markChanged(); + + water.setFill(water.getFill() - getWaterRequired() * itemsCasted); + steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted); + } + } + + NBTTagCompound data = new NBTTagCompound(); + + water.writeToNBT(data, "w"); + steam.writeToNBT(data, "s"); + + this.networkPack(data, 150); + + } + + public boolean canProcess() { + ItemMold.Mold mold = this.getInstalledMold(); + if (type != null && mold != null && this.amount >= mold.getCost() * 9 && mold.getOutput(type) != null) { + for (int i = 1; i < 7; i++) { + if (slots[i] == null || slots[i].isItemEqual(mold.getOutput(type)) && slots[i].stackSize + mold.getOutput(type).stackSize <= mold.getOutput(type).getMaxStackSize()) + return water.getFill() >= getWaterRequired() && steam.getFill() < steam.getMaxFill(); + + } + } + + return false; + } + + public DirPos[] getFluidConPos() { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + return new DirPos[]{ + new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ, rot), + new DirPos(xCoord - rot.offsetX - dir.offsetX, yCoord, zCoord - rot.offsetZ - dir.offsetZ, rot.getOpposite()), + new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX * 5, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ * 5, rot), + new DirPos(xCoord - rot.offsetX - dir.offsetX * 5, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 5, rot.getOpposite()), + }; + } + + public int[][] getMetalPourPos() { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + return new int[][]{ + new int[]{xCoord + rot.offsetX - dir.offsetX, yCoord + 2, zCoord + rot.offsetZ - dir.offsetZ}, + new int[]{xCoord - dir.offsetX, yCoord + 2, zCoord - dir.offsetZ}, + new int[]{xCoord + rot.offsetX, yCoord + 2, zCoord + rot.offsetZ}, + new int[]{xCoord, yCoord + 2, zCoord}, + }; + } + + @Override + public ItemMold.Mold getInstalledMold() { + if (slots[0] == null) return null; + + if (slots[0].getItem() == ModItems.mold) { + return ((ItemMold) slots[0].getItem()).getMold(slots[0]); + } + + return null; + } + + @Override + public int getMoldSize() { + return getInstalledMold().size; + } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { + + if (side != ForgeDirection.UP) return false; + for (int[] pos : getMetalPourPos()) { + if (pos[0] == x && pos[1] == y && pos[2] == z) { + return this.standardCheck(world, x, y, z, side, stack); + } + } + return false; + + } + + @Override + public boolean standardCheck(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + if (this.type != null && this.type != stack.material) return false; + return !(this.amount >= this.getCapacity() || getInstalledMold() == null); + } + + @Override + public int getCapacity() { + ItemMold.Mold mold = this.getInstalledMold(); + return mold == null ? 50000 : mold.getCost() * 10; + } + + private int getWaterRequired() { + return getInstalledMold() != null ? 5 * getInstalledMold().getCost() : 50; + } + + private void updateConnections() { + for (DirPos pos : getFluidConPos()) { + this.trySubscribe(water.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + for (DirPos pos : getFluidConPos()) { + sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } + } + + @Override + public FluidTank[] getSendingTanks() { + return new FluidTank[]{steam}; + } + + @Override + public FluidTank[] getReceivingTanks() { + return new FluidTank[]{water}; + } + + @Override + public FluidTank[] getAllTanks() { + return new FluidTank[]{water, steam}; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerMachineStrandCaster(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUIMachineStrandCaster(player.inventory, this); + } + + public void networkPack(NBTTagCompound nbt, int range) { + if (!worldObj.isRemote) + PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new NetworkRegistry.TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + water.readFromNBT(nbt, "w"); + steam.readFromNBT(nbt, "s"); + + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + water.writeToNBT(nbt, "w"); + steam.writeToNBT(nbt, "s"); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + water.readFromNBT(nbt, "w"); + steam.readFromNBT(nbt, "s"); + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack stack) { + + if (i == 0) { + return stack.getItem() == ModItems.mold; + } + + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public int[] getAccessibleSlotsFromSide(int meta) { + return new int[]{1, 2, 3, 4, 5, 6}; + } + + public void markChanged() { + this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if (worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { + return false; + } else { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128; + } + } + + + @Override + public boolean canInsertItem(int slot, ItemStack itemStack, int side) { + return this.isItemValidForSlot(slot, itemStack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack itemStack, int side) { + return !this.isItemValidForSlot(slot, itemStack); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if (bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 7, + yCoord, + zCoord - 7, + xCoord + 7, + yCoord + 3, + zCoord + 7 + ); + } + return bb; + } + + +} diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e185542ef..e8a6504bc 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -721,6 +721,7 @@ container.machineSelenium=Radial Performance Engine container.machineShredder=Shredder container.machineSILEX=SILEX container.machineSolidifier=Solidifier +container.machineStrandCaster=Strand Caster container.machineTurbine=Steam Turbine container.machineTurbofan=Turbofan container.machineWoodBurner=Wood-Burner @@ -5176,6 +5177,7 @@ tile.machine_stirling_creative.desc=Turns heat into energy. Requires external he tile.machine_stirling_steel.name=Heavy Stirling Engine tile.machine_stirling_steel.desc=Turns heat into energy. Requires external heat source.$Uses a much heavier gear to support higher temperatures.$Heat transfer rate: T*0.1 TU/t$Max intake: 1500 TU/t$Efficiency: 50%% tile.machine_storage_drum.name=Nuclear Waste Disposal Drum +tile.machine_strand_caster.name=Strand Caster tile.machine_telelinker.name=Turret Telemetry Linker tile.machine_teleporter.name=Teleporter tile.machine_tower_large.name=Cooling Tower diff --git a/src/main/resources/assets/hbm/models/machines/strand_caster.obj b/src/main/resources/assets/hbm/models/machines/strand_caster.obj new file mode 100644 index 000000000..2a009d538 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/strand_caster.obj @@ -0,0 +1,946 @@ +# Blender 3.6.1 +# www.blender.org +mtllib strand_caster.mtl +o caster +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 -0.000000 -6.000000 +v 1.000000 -0.000000 -6.000000 +v -1.000000 0.750000 -6.000000 +v -1.000000 0.750000 1.000000 +v 1.000000 0.750000 1.000000 +v 1.000000 0.750000 -6.000000 +v -1.000000 2.000000 1.000000 +v 1.000000 2.000000 1.000000 +v -1.000000 3.000000 1.000000 +v 1.000000 3.000000 1.000000 +v -1.000000 2.000000 -1.000000 +v 1.000000 2.000000 -1.000000 +v -1.000000 3.000000 -1.000000 +v 1.000000 3.000000 -1.000000 +v -0.875000 3.000000 0.875000 +v 0.875000 3.000000 0.875000 +v -0.875000 3.000000 -0.875000 +v 0.875000 3.000000 -0.875000 +v -0.875000 2.125000 0.875000 +v 0.875000 2.125000 0.875000 +v -0.875000 2.125000 -0.875000 +v 0.875000 2.125000 -0.875000 +v -0.750000 2.000000 0.750000 +v 0.750000 2.000000 0.750000 +v -0.750000 2.000000 -0.750000 +v 0.750000 2.000000 -0.750000 +v -0.750000 0.500000 -1.500000 +v -0.750000 0.500000 0.750000 +v 0.750000 0.500000 -1.500000 +v -0.750000 0.750000 -5.750000 +v -0.750000 0.750000 0.750000 +v 0.750000 0.750000 0.750000 +v 0.750000 0.750000 -5.750000 +v -0.750000 0.500000 -5.750000 +v 0.750000 0.500000 0.750000 +v 0.750000 0.500000 -5.750000 +v 0.750000 1.250000 -1.500000 +v -0.750000 1.250000 -1.500000 +v 0.750000 0.812500 -3.125000 +v -0.750000 0.812500 -3.125000 +v -0.750000 0.812500 -2.125000 +v 0.750000 0.812500 -2.125000 +v -0.750000 0.724112 -2.088388 +v 0.750000 0.724112 -2.088388 +v -0.750000 0.687500 -2.000000 +v 0.750000 0.687500 -2.000000 +v -0.750000 0.724112 -1.911612 +v 0.750000 0.724112 -1.911612 +v -0.750000 0.812500 -1.875000 +v 0.750000 0.812500 -1.875000 +v -0.750000 0.900888 -1.911612 +v 0.750000 0.900888 -1.911612 +v -0.750000 0.937500 -2.000000 +v 0.750000 0.937500 -2.000000 +v -0.750000 0.900888 -2.088388 +v 0.750000 0.900888 -2.088388 +v -0.750000 0.724112 -3.088388 +v 0.750000 0.724112 -3.088388 +v -0.750000 0.687500 -3.000000 +v 0.750000 0.687500 -3.000000 +v -0.750000 0.724112 -2.911612 +v 0.750000 0.724112 -2.911612 +v -0.750000 0.812500 -2.875000 +v 0.750000 0.812500 -2.875000 +v -0.750000 0.900888 -2.911612 +v 0.750000 0.900888 -2.911612 +v -0.750000 0.937500 -3.000000 +v 0.750000 0.937500 -3.000000 +v -0.750000 0.900888 -3.088388 +v 0.750000 0.900888 -3.088388 +v 0.750000 0.812500 -4.125000 +v -0.750000 0.812500 -4.125000 +v -0.750000 0.724112 -4.088388 +v 0.750000 0.724112 -4.088388 +v -0.750000 0.687500 -4.000000 +v 0.750000 0.687500 -4.000000 +v -0.750000 0.724112 -3.911612 +v 0.750000 0.724112 -3.911612 +v -0.750000 0.812500 -3.875000 +v 0.750000 0.812500 -3.875000 +v -0.750000 0.900888 -3.911612 +v 0.750000 0.900888 -3.911612 +v -0.750000 0.937500 -4.000000 +v 0.750000 0.937500 -4.000000 +v -0.750000 0.900888 -4.088388 +v 0.750000 0.900888 -4.088388 +v 0.750000 0.812500 -5.125000 +v -0.750000 0.812500 -5.125000 +v -0.750000 0.724112 -5.088388 +v 0.750000 0.724112 -5.088388 +v -0.750000 0.687500 -5.000000 +v 0.750000 0.687500 -5.000000 +v -0.750000 0.724112 -4.911612 +v 0.750000 0.724112 -4.911612 +v -0.750000 0.812500 -4.875000 +v 0.750000 0.812500 -4.875000 +v -0.750000 0.900888 -4.911612 +v 0.750000 0.900888 -4.911612 +v -0.750000 0.937500 -5.000000 +v 0.750000 0.937500 -5.000000 +v -0.750000 0.900888 -5.088388 +v 0.750000 0.900888 -5.088388 +v 0.750000 1.187500 -3.625000 +v -0.750000 1.187500 -3.625000 +v -0.750000 1.187500 -2.625000 +v 0.750000 1.187500 -2.625000 +v -0.750000 1.099112 -2.588388 +v 0.750000 1.099112 -2.588388 +v -0.750000 1.062500 -2.500000 +v 0.750000 1.062500 -2.500000 +v -0.750000 1.099112 -2.411612 +v 0.750000 1.099112 -2.411612 +v -0.750000 1.187500 -2.375000 +v 0.750000 1.187500 -2.375000 +v -0.750000 1.275888 -2.411612 +v 0.750000 1.275888 -2.411612 +v -0.750000 1.312500 -2.500000 +v 0.750000 1.312500 -2.500000 +v -0.750000 1.275888 -2.588388 +v 0.750000 1.275888 -2.588388 +v -0.750000 1.099112 -3.588388 +v 0.750000 1.099112 -3.588388 +v -0.750000 1.062500 -3.500000 +v 0.750000 1.062500 -3.500000 +v -0.750000 1.099112 -3.411612 +v 0.750000 1.099112 -3.411612 +v -0.750000 1.187500 -3.375000 +v 0.750000 1.187500 -3.375000 +v -0.750000 1.275888 -3.411612 +v 0.750000 1.275888 -3.411612 +v -0.750000 1.312500 -3.500000 +v 0.750000 1.312500 -3.500000 +v -0.750000 1.275888 -3.588388 +v 0.750000 1.275888 -3.588388 +v 0.750000 1.187500 -4.625000 +v -0.750000 1.187500 -4.625000 +v -0.750000 1.099112 -4.588388 +v 0.750000 1.099112 -4.588388 +v -0.750000 1.062500 -4.500000 +v 0.750000 1.062500 -4.500000 +v -0.750000 1.099112 -4.411612 +v 0.750000 1.099112 -4.411612 +v -0.750000 1.187500 -4.375000 +v 0.750000 1.187500 -4.375000 +v -0.750000 1.275888 -4.411612 +v 0.750000 1.275888 -4.411612 +v -0.750000 1.312500 -4.500000 +v 0.750000 1.312500 -4.500000 +v -0.750000 1.275888 -4.588388 +v 0.750000 1.275888 -4.588388 +v 0.750000 0.937500 -2.125000 +v 0.875000 0.937500 -2.125000 +v 0.750000 0.937500 -2.375000 +v 0.875000 0.937500 -2.375000 +v 0.750000 1.062500 -2.375000 +v -0.750000 1.312500 -2.125000 +v -0.875000 1.312500 -2.125000 +v 0.875000 1.062500 -2.375000 +v -0.750000 1.062500 -2.375000 +v 0.750000 1.312500 -2.125000 +v 0.875000 1.312500 -2.125000 +v -0.875000 1.062500 -2.375000 +v 0.875000 1.062500 -4.625000 +v 0.750000 1.062500 -4.625000 +v -0.750000 0.937500 -2.375000 +v -0.875000 0.937500 -2.375000 +v -0.750000 0.937500 -2.125000 +v -0.875000 0.937500 -2.125000 +v 0.875000 1.312500 -4.875000 +v 0.750000 1.312500 -4.875000 +v 0.875000 0.937500 -4.625000 +v 0.750000 0.937500 -4.625000 +v 0.875000 0.937500 -4.875000 +v 0.750000 0.937500 -4.875000 +v -0.750000 1.062500 -4.625000 +v -0.875000 1.062500 -4.625000 +v -0.750000 1.312500 -4.875000 +v -0.875000 1.312500 -4.875000 +v -0.750000 0.937500 -4.625000 +v -0.875000 0.937500 -4.625000 +v -0.750000 0.937500 -4.875000 +v -0.875000 0.937500 -4.875000 +v 0.750000 0.937500 -1.625000 +v 0.875000 0.937500 -1.625000 +v -0.750000 0.937500 -1.625000 +v -0.875000 0.937500 -1.625000 +v 0.750000 0.937500 -5.375000 +v 0.875000 0.937500 -5.375000 +v -0.750000 0.937500 -5.375000 +v -0.875000 0.937500 -5.375000 +v 0.750000 0.750000 -1.625000 +v 0.875000 0.750000 -1.625000 +v -0.875000 0.750000 -1.625000 +v -0.750000 0.750000 -1.625000 +v 0.750000 0.750000 -5.375000 +v 0.875000 0.750000 -5.375000 +v -0.875000 0.750000 -5.375000 +v -0.750000 0.750000 -5.375000 +v 0.250000 1.250000 -1.500000 +v 0.161612 1.275888 -1.474112 +v 0.125000 1.338388 -1.411612 +v 0.161612 1.400888 -1.349112 +v 0.250000 1.426777 -1.323223 +v 0.338388 1.400888 -1.349112 +v 0.375000 1.338388 -1.411612 +v 0.338388 1.275888 -1.474112 +v 0.250000 1.426777 -1.573223 +v 0.161612 1.426777 -1.536612 +v 0.125000 1.426777 -1.448223 +v 0.161612 1.426777 -1.359835 +v 0.338388 1.426777 -1.359835 +v 0.375000 1.426777 -1.448223 +v 0.338388 1.426777 -1.536612 +v 0.250000 1.603553 -1.500000 +v 0.161612 1.577665 -1.474112 +v 0.125000 1.515165 -1.411612 +v 0.161612 1.452665 -1.349112 +v 0.338388 1.452665 -1.349112 +v 0.375000 1.515165 -1.411612 +v 0.338388 1.577665 -1.474112 +v -0.161612 1.275888 -1.474112 +v -0.125000 1.338388 -1.411612 +v -0.161612 1.400888 -1.349112 +v -0.250000 1.426777 -1.323223 +v -0.338388 1.400888 -1.349112 +v -0.375000 1.338388 -1.411612 +v -0.338388 1.275888 -1.474112 +v -0.250000 1.250000 -1.500000 +v 0.161612 2.152189 -0.899587 +v 0.250000 2.178077 -0.925476 +v 0.125000 2.089689 -0.837087 +v 0.161612 2.027189 -0.774587 +v 0.375000 2.089689 -0.837087 +v 0.338388 2.027189 -0.774587 +v 0.338388 2.152189 -0.899587 +v 0.250000 2.001301 -0.748699 +v -0.250000 1.426777 -1.573223 +v -0.338388 1.426777 -1.536612 +v -0.375000 1.426777 -1.448223 +v -0.338388 1.426777 -1.359835 +v -0.161612 1.426777 -1.359835 +v -0.125000 1.426777 -1.448223 +v -0.161612 1.426777 -1.536612 +v -0.250000 1.603553 -1.500000 +v -0.338388 1.577665 -1.474112 +v -0.375000 1.515165 -1.411612 +v -0.338388 1.452665 -1.349112 +v -0.161612 1.452665 -1.349112 +v -0.125000 1.515165 -1.411612 +v -0.161612 1.577665 -1.474112 +v -0.338388 2.152189 -0.899587 +v -0.250000 2.178077 -0.925476 +v -0.375000 2.089689 -0.837087 +v -0.338388 2.027189 -0.774587 +v -0.125000 2.089689 -0.837087 +v -0.161612 2.027189 -0.774587 +v -0.161612 2.152189 -0.899587 +v -0.250000 2.001301 -0.748699 +v 0.750000 0.750000 -0.125000 +v 0.750000 2.000000 -0.125000 +v 0.838388 0.750000 -0.088388 +v 0.838388 2.000000 -0.088388 +v 0.875000 0.750000 -0.000000 +v 0.875000 2.000000 -0.000000 +v 0.838388 0.750000 0.088388 +v 0.838388 2.000000 0.088388 +v 0.750000 0.750000 0.125000 +v 0.750000 2.000000 0.125000 +v 0.750000 0.750000 0.375000 +v 0.750000 2.000000 0.375000 +v 0.838388 0.750000 0.411612 +v 0.838388 2.000000 0.411612 +v 0.875000 0.750000 0.500000 +v 0.875000 2.000000 0.500000 +v 0.838388 0.750000 0.588388 +v 0.838388 2.000000 0.588388 +v 0.750000 0.750000 0.625000 +v 0.750000 2.000000 0.625000 +v 0.750000 0.750000 -0.625000 +v 0.750000 2.000000 -0.625000 +v 0.838388 0.750000 -0.588388 +v 0.838388 2.000000 -0.588388 +v 0.875000 0.750000 -0.500000 +v 0.875000 2.000000 -0.500000 +v 0.838388 0.750000 -0.411612 +v 0.838388 2.000000 -0.411612 +v 0.750000 0.750000 -0.375000 +v 0.750000 2.000000 -0.375000 +v -0.750000 0.750000 -0.125000 +v -0.750000 2.000000 -0.125000 +v -0.750000 0.750000 0.125000 +v -0.750000 2.000000 0.125000 +v -0.838388 0.750000 0.088388 +v -0.838388 2.000000 0.088388 +v -0.875000 0.750000 -0.000000 +v -0.875000 2.000000 -0.000000 +v -0.838388 0.750000 -0.088388 +v -0.838388 2.000000 -0.088388 +v -0.750000 0.750000 0.375000 +v -0.750000 2.000000 0.375000 +v -0.750000 0.750000 0.625000 +v -0.750000 2.000000 0.625000 +v -0.838388 0.750000 0.588388 +v -0.838388 2.000000 0.588388 +v -0.875000 0.750000 0.500000 +v -0.875000 2.000000 0.500000 +v -0.838388 0.750000 0.411612 +v -0.838388 2.000000 0.411612 +v -0.750000 0.750000 -0.625000 +v -0.750000 2.000000 -0.625000 +v -0.750000 0.750000 -0.375000 +v -0.750000 2.000000 -0.375000 +v -0.838388 0.750000 -0.411612 +v -0.838388 2.000000 -0.411612 +v -0.875000 0.750000 -0.500000 +v -0.875000 2.000000 -0.500000 +v -0.838388 0.750000 -0.588388 +v -0.838388 2.000000 -0.588388 +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.7071 -0.7071 +vn -0.0000 -0.7071 0.7071 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 0.7071 0.7071 +vn -0.7311 0.2611 0.6303 +vn -0.9955 -0.0000 -0.0949 +vn -0.9947 -0.0393 -0.0948 +vn -0.6333 -0.2962 -0.7150 +vn -0.0000 -0.3827 -0.9239 +vn 0.6333 -0.2962 -0.7150 +vn 0.9955 -0.0000 -0.0949 +vn 0.7311 0.2611 0.6303 +vn 0.9947 -0.0393 -0.0948 +vn -0.6630 -0.0000 -0.7486 +vn 0.6630 -0.0000 -0.7486 +vn 0.6794 0.4063 -0.6110 +vn 0.9987 0.0196 -0.0473 +vn 0.7574 -0.0000 0.6530 +vn -0.9987 0.0196 -0.0473 +vn -0.7263 -0.3800 0.5728 +vn -0.7574 -0.0000 0.6530 +vn -0.6794 0.4063 -0.6110 +vn -0.0000 -0.5562 0.8311 +vn 0.7263 -0.3800 0.5728 +vn 0.7071 -0.5000 0.5000 +vn -0.7071 -0.5000 0.5000 +vn -0.0000 0.5628 -0.8266 +vn -0.7071 0.5000 -0.5000 +vn 0.3827 -0.0000 -0.9239 +vn 0.7071 -0.0000 -0.7071 +vn 0.7071 -0.0000 0.7071 +vn 0.3827 -0.0000 0.9239 +vn -0.3827 -0.0000 0.9239 +vn -0.7071 -0.0000 0.7071 +vn -0.7071 -0.0000 -0.7071 +vn -0.3827 -0.0000 -0.9239 +vn 0.7071 0.5000 -0.5000 +vt 0.484375 0.100000 +vt 0.046875 0.366667 +vt 0.046875 0.100000 +vt 0.484375 0.733333 +vt 0.468750 0.500000 +vt 0.484375 0.466667 +vt 0.531250 0.366667 +vt 0.484375 0.366667 +vt -0.000000 0.100000 +vt 0.046875 0.466667 +vt 0.484375 -0.000000 +vt 0.656250 0.600000 +vt 0.531250 0.466667 +vt 0.656250 0.466667 +vt 0.531250 0.600000 +vt 0.531250 0.200000 +vt 0.539062 0.616667 +vt 0.648438 0.616667 +vt 0.539062 0.733333 +vt 0.648438 0.966667 +vt 0.539062 0.966667 +vt 0.468750 0.733333 +vt 0.062500 0.766667 +vt 0.062500 0.733333 +vt 0.062500 0.700000 +vt 0.046875 0.733333 +vt 0.531250 -0.000000 +vt 0.671875 -0.000000 +vt 0.671875 0.100000 +vt 0.812500 0.200000 +vt 0.765625 -0.000000 +vt 0.906250 -0.000000 +vt 0.765625 0.100000 +vt 0.906250 0.200000 +vt 1.000000 -0.000000 +vt 1.000000 0.200000 +vt 0.058594 0.500000 +vt 0.468750 0.700000 +vt 0.468750 0.966667 +vt 0.062500 0.966667 +vt 0.062500 1.000000 +vt 0.468750 1.000000 +vt 0.484375 0.966667 +vt 0.468750 0.766667 +vt 0.484375 0.766667 +vt 0.046875 0.766667 +vt 0.046875 0.966667 +vt 0.671875 0.200000 +vt 0.765625 0.200000 +vt 0.695312 0.550000 +vt 0.679688 0.566667 +vt 0.679688 0.516667 +vt 0.875000 0.500000 +vt 0.851562 0.516667 +vt 0.851562 0.500000 +vt 0.687500 0.433333 +vt 0.695312 0.450000 +vt 0.687500 0.450000 +vt 0.695312 0.466667 +vt 0.679688 0.450000 +vt 0.835938 0.550000 +vt 0.851562 0.566667 +vt 0.835938 0.566667 +vt 0.679688 0.500000 +vt 0.656250 0.516667 +vt 0.656250 0.500000 +vt 0.695312 0.433333 +vt 0.835938 0.450000 +vt 0.835938 0.433333 +vt 0.843750 0.450000 +vt 0.835938 0.466667 +vt 0.851562 0.450000 +vt 0.902344 0.391667 +vt 0.667969 0.408333 +vt 0.667969 0.391667 +vt 0.902344 0.366667 +vt 0.914062 0.408333 +vt 0.902344 0.408333 +vt 0.656250 0.391667 +vt 0.667969 0.433333 +vt 0.531250 0.100000 +vt 0.000000 0.366667 +vt 0.046875 -0.000000 +vt 0.656250 0.200000 +vt 0.648438 0.733333 +vt 0.621094 0.200000 +vt 0.695312 0.566667 +vt 0.875000 0.516667 +vt 0.843750 0.433333 +vt 0.667969 0.366667 +vt 0.914062 0.391667 +vt 0.656250 0.408333 +vt 0.902344 0.433333 +vt 0.921875 0.200000 +vt 0.929688 0.400000 +vt 0.921875 0.400000 +vt 0.960938 0.200000 +vt 0.968750 0.400000 +vt 0.960938 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.937500 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.929688 0.200000 +vt 0.914062 0.200000 +vt 0.914062 0.400000 +vt 0.953125 0.200000 +vt 0.953125 0.400000 +vt 0.945312 0.200000 +vt 0.695312 0.341667 +vt 0.703125 0.333333 +vt 0.703125 0.350000 +vt 0.710938 0.358333 +vt 0.718750 0.333333 +vt 0.718750 0.358333 +vt 0.726562 0.358333 +vt 0.734375 0.333333 +vt 0.742188 0.341667 +vt 0.734375 0.350000 +vt 0.710938 0.333333 +vt 0.726562 0.333333 +vt 0.726562 0.308333 +vt 0.734375 0.316667 +vt 0.742188 0.333333 +vt 0.703125 0.316667 +vt 0.695312 0.325000 +vt 0.695312 0.333333 +vt 0.710938 0.308333 +vt 0.687500 0.333333 +vt 0.750000 0.333333 +vt 0.742188 0.325000 +vt 0.742188 0.200000 +vt 0.750000 0.308333 +vt 0.742188 0.308333 +vt 0.734375 0.200000 +vt 0.734375 0.308333 +vt 0.695312 0.200000 +vt 0.703125 0.308333 +vt 0.695312 0.308333 +vt 0.718750 0.200000 +vt 0.718750 0.308333 +vt 0.703125 0.200000 +vt 0.687500 0.200000 +vt 0.687500 0.308333 +vt 0.710938 0.200000 +vt 0.687500 0.366667 +vt 0.679688 0.200000 +vt 0.679688 0.366667 +vt 0.671875 0.366667 +vt 0.664062 0.200000 +vt 0.664062 0.366667 +vt 0.976562 0.200000 +vt 0.750000 0.200000 +vt 0.726562 0.200000 +vt 0.656250 0.366667 +s 0 +usemtl +f 3/1/1 2/2/1 1/3/1 +f 5/4/2 35/5/2 8/6/2 +f 3/1/3 8/7/3 4/8/3 +f 2/2/4 6/9/4 1/3/4 +f 4/8/5 7/10/5 2/2/5 +f 1/3/6 5/11/6 3/1/6 +f 12/12/4 9/13/4 10/14/4 +f 13/14/3 16/15/3 14/13/3 +f 10/13/5 16/12/5 12/15/5 +f 9/16/1 14/14/1 10/13/1 +f 11/12/6 13/13/6 9/14/6 +f 11/12/2 19/17/2 15/15/2 +f 17/18/5 23/19/5 19/17/5 +f 16/12/2 18/17/2 12/15/2 +f 15/12/2 20/17/2 16/15/2 +f 12/12/2 17/17/2 11/15/2 +f 22/19/2 23/20/2 21/21/2 +f 19/18/4 24/19/4 20/17/4 +f 20/18/6 22/19/6 18/17/6 +f 18/18/3 21/19/3 17/17/3 +f 35/22/6 37/23/6 34/24/6 +f 7/10/2 33/25/2 6/26/2 +f 37/27/5 31/28/5 39/29/5 +f 27/30/6 29/31/6 30/32/6 +f 39/29/3 29/31/3 40/33/3 +f 25/34/4 37/35/4 26/36/4 +f 8/6/2 34/37/2 7/10/2 +f 6/26/2 32/38/2 5/4/2 +f 37/23/2 36/39/2 30/40/2 +f 33/41/5 36/39/5 32/42/5 +f 32/43/4 38/44/4 35/45/4 +f 34/46/3 30/40/3 33/47/3 +f 28/48/7 40/33/7 27/49/7 +f 157/50/6 153/51/6 162/52/6 +f 183/53/3 180/54/3 179/55/3 +f 155/56/3 160/57/3 156/58/3 +f 160/59/5 154/60/5 156/57/5 +f 178/61/6 184/62/6 182/63/6 +f 163/64/4 153/65/4 154/66/4 +f 164/67/1 177/68/1 161/57/1 +f 178/69/4 181/70/4 177/68/4 +f 161/59/5 179/55/5 158/64/5 +f 171/55/2 162/52/2 163/64/2 +f 161/59/5 169/60/5 167/57/5 +f 177/71/5 183/72/5 179/55/5 +f 157/67/1 165/68/1 160/57/1 +f 179/55/2 159/52/2 158/64/2 +f 166/61/6 176/62/6 174/63/6 +f 160/59/5 171/55/5 163/64/5 +f 162/52/6 166/61/6 157/50/6 +f 158/64/4 170/65/4 169/66/4 +f 159/52/6 178/61/6 164/50/6 +f 164/50/6 170/51/6 159/52/6 +f 165/71/5 175/72/5 171/55/5 +f 166/69/4 173/70/4 165/68/4 +f 168/56/3 161/57/3 167/58/3 +f 175/53/3 172/54/3 171/55/3 +f 191/73/2 188/74/2 187/75/2 +f 190/73/2 185/74/2 186/75/2 +f 187/75/5 200/76/5 191/73/5 +f 190/73/3 197/77/3 189/78/3 +f 185/74/4 194/79/4 186/75/4 +f 189/78/6 193/80/6 185/74/6 +f 192/78/6 195/80/6 188/74/6 +f 191/73/3 199/77/3 192/78/3 +f 188/74/4 196/79/4 187/75/4 +f 186/75/5 198/76/5 190/73/5 +f 3/1/1 4/8/1 2/2/1 +f 5/4/2 32/38/2 35/5/2 +f 3/1/3 5/81/3 8/7/3 +f 2/2/4 7/82/4 6/9/4 +f 4/8/5 8/6/5 7/10/5 +f 1/3/6 6/83/6 5/11/6 +f 12/12/4 11/15/4 9/13/4 +f 13/14/3 15/12/3 16/15/3 +f 10/13/5 14/14/5 16/12/5 +f 9/16/1 13/84/1 14/14/1 +f 11/12/6 15/15/6 13/13/6 +f 11/12/2 17/18/2 19/17/2 +f 17/18/5 21/85/5 23/19/5 +f 16/12/2 20/18/2 18/17/2 +f 15/12/2 19/18/2 20/17/2 +f 12/12/2 18/18/2 17/17/2 +f 22/19/2 24/85/2 23/20/2 +f 19/18/4 23/85/4 24/19/4 +f 20/18/6 24/85/6 22/19/6 +f 18/18/3 22/85/3 21/19/3 +f 35/22/6 38/44/6 37/23/6 +f 7/10/2 34/37/2 33/25/2 +f 39/29/5 28/86/5 37/27/5 +f 28/86/5 26/16/5 37/27/5 +f 30/32/6 25/34/6 27/30/6 +f 27/30/6 40/33/6 29/31/6 +f 39/29/3 31/28/3 29/31/3 +f 25/34/4 30/32/4 37/35/4 +f 8/6/2 35/5/2 34/37/2 +f 6/26/2 33/25/2 32/38/2 +f 37/23/2 38/44/2 36/39/2 +f 33/41/5 30/40/5 36/39/5 +f 32/43/4 36/39/4 38/44/4 +f 34/46/3 37/23/3 30/40/3 +f 28/48/7 39/29/7 40/33/7 +f 157/50/6 155/87/6 153/51/6 +f 183/53/3 184/88/3 180/54/3 +f 155/56/3 157/67/3 160/57/3 +f 160/59/5 163/64/5 154/60/5 +f 178/61/6 180/54/6 184/62/6 +f 163/64/4 162/52/4 153/65/4 +f 164/67/1 178/69/1 177/68/1 +f 178/69/4 182/89/4 181/70/4 +f 161/59/5 177/71/5 179/55/5 +f 171/55/2 172/54/2 162/52/2 +f 161/59/5 158/64/5 169/60/5 +f 177/71/5 181/68/5 183/72/5 +f 157/67/1 166/69/1 165/68/1 +f 179/55/2 180/54/2 159/52/2 +f 166/61/6 172/54/6 176/62/6 +f 160/59/5 165/71/5 171/55/5 +f 162/52/6 172/54/6 166/61/6 +f 158/64/4 159/52/4 170/65/4 +f 159/52/6 180/54/6 178/61/6 +f 164/50/6 168/87/6 170/51/6 +f 165/71/5 173/68/5 175/72/5 +f 166/69/4 174/89/4 173/70/4 +f 168/56/3 164/67/3 161/57/3 +f 175/53/3 176/88/3 172/54/3 +f 191/73/2 192/78/2 188/74/2 +f 190/73/2 189/78/2 185/74/2 +f 187/75/5 196/90/5 200/76/5 +f 190/73/3 198/91/3 197/77/3 +f 185/74/4 193/92/4 194/79/4 +f 189/78/6 197/93/6 193/80/6 +f 192/78/6 199/93/6 195/80/6 +f 191/73/3 200/91/3 199/77/3 +f 188/74/4 195/92/4 196/79/4 +f 186/75/5 194/90/5 198/76/5 +s 1 +f 80/94/8 81/95/4 79/96/8 +f 44/97/3 45/98/9 43/99/3 +f 68/100/10 69/101/2 67/102/10 +f 46/103/9 47/104/1 45/98/9 +f 84/100/10 85/101/2 83/102/10 +f 66/105/4 67/102/10 65/95/4 +f 48/106/1 49/96/8 47/107/1 +f 64/94/8 65/95/4 63/96/8 +f 50/94/8 51/95/4 49/96/8 +f 62/106/1 63/96/8 61/107/1 +f 52/105/4 53/102/10 51/95/4 +f 72/108/7 42/99/3 71/109/7 +f 60/103/9 61/104/1 59/98/9 +f 54/100/10 55/101/2 53/102/10 +f 41/97/3 59/98/9 42/99/3 +f 56/110/2 57/109/7 55/101/2 +f 82/105/4 83/102/10 81/95/4 +f 70/110/2 71/109/7 69/101/2 +f 58/108/7 43/99/3 57/109/7 +f 78/106/1 79/96/8 77/107/1 +f 88/108/7 74/99/3 87/109/7 +f 76/103/9 77/104/1 75/98/9 +f 73/97/3 75/98/9 74/99/3 +f 86/110/2 87/109/7 85/101/2 +f 96/94/8 97/95/4 95/96/8 +f 100/100/10 101/101/2 99/102/10 +f 98/105/4 99/102/10 97/95/4 +f 94/106/1 95/96/8 93/107/1 +f 104/108/7 90/99/3 103/109/7 +f 92/103/9 93/104/1 91/98/9 +f 89/97/3 91/98/9 90/99/3 +f 102/110/2 103/109/7 101/101/2 +f 144/94/8 145/95/4 143/96/8 +f 108/97/3 109/98/9 107/99/3 +f 132/100/10 133/101/2 131/102/10 +f 110/103/9 111/104/1 109/98/9 +f 148/100/10 149/101/2 147/102/10 +f 130/105/4 131/102/10 129/95/4 +f 112/106/1 113/96/8 111/107/1 +f 128/94/8 129/95/4 127/96/8 +f 114/94/8 115/95/4 113/96/8 +f 126/106/1 127/96/8 125/107/1 +f 116/105/4 117/102/10 115/95/4 +f 136/108/7 106/99/3 135/109/7 +f 124/103/9 125/104/1 123/98/9 +f 118/100/10 119/101/2 117/102/10 +f 105/97/3 123/98/9 106/99/3 +f 120/110/2 121/109/7 119/101/2 +f 146/105/4 147/102/10 145/95/4 +f 134/110/2 135/109/7 133/101/2 +f 122/108/7 107/99/3 121/109/7 +f 142/106/1 143/96/8 141/107/1 +f 152/108/7 138/99/3 151/109/7 +f 140/103/9 141/104/1 139/98/9 +f 137/97/3 139/98/9 138/99/3 +f 150/110/2 151/109/7 149/101/2 +f 204/111/11 211/112/12 203/113/13 +f 202/114/14 209/115/3 201/116/15 +f 209/115/3 208/117/16 201/116/15 +f 214/118/17 206/119/18 207/120/19 +f 203/113/13 210/121/20 202/114/14 +f 215/122/21 207/120/19 208/117/16 +f 209/115/3 222/123/22 215/122/21 +f 221/124/23 213/125/24 214/118/17 +f 218/126/25 210/121/20 211/112/12 +f 215/122/21 221/124/23 214/118/17 +f 219/127/26 211/112/12 212/128/27 +f 217/129/28 209/115/3 210/121/20 +f 204/111/11 205/130/29 212/128/27 +f 212/128/27 205/130/29 219/127/26 +f 205/131/29 206/119/18 213/125/24 +f 213/125/24 220/132/30 205/131/29 +f 236/133/31 205/134/29 220/135/30 +f 230/116/15 245/122/21 223/117/16 +f 222/123/22 235/136/5 221/137/23 +f 234/138/32 218/139/25 219/140/26 +f 232/141/7 222/123/22 216/142/33 +f 235/136/5 220/135/30 221/137/23 +f 233/143/6 217/129/28 218/139/25 +f 227/111/11 241/112/12 228/113/13 +f 238/144/8 219/140/26 205/145/29 +f 228/113/13 240/121/20 229/114/14 +f 239/115/3 252/123/22 245/122/21 +f 248/126/25 240/121/20 241/112/12 +f 240/121/20 230/116/15 229/114/14 +f 244/118/17 225/119/18 224/120/19 +f 245/122/21 224/120/19 223/117/16 +f 251/124/23 243/125/24 244/118/17 +f 231/146/34 216/142/33 217/129/28 +f 245/122/21 251/124/23 244/118/17 +f 242/128/27 248/126/25 241/112/12 +f 247/129/28 239/115/3 240/121/20 +f 227/111/11 226/130/29 242/128/27 +f 242/128/27 226/130/29 249/127/26 +f 226/131/29 225/119/18 243/125/24 +f 243/125/24 250/132/30 226/131/29 +f 258/133/31 226/134/29 250/135/30 +f 252/123/22 257/136/5 251/137/23 +f 256/138/32 248/139/25 249/140/26 +f 254/141/7 252/123/22 246/142/33 +f 257/136/5 250/135/30 251/137/23 +f 255/143/6 247/129/28 248/139/25 +f 260/144/8 249/140/26 226/145/29 +f 253/146/34 246/142/33 247/129/28 +f 262/147/35 263/148/36 261/144/35 +f 264/149/36 265/48/5 263/148/36 +f 266/150/5 267/151/37 265/48/5 +f 268/152/37 269/84/38 267/151/37 +f 274/149/36 275/48/5 273/148/36 +f 272/147/35 273/148/36 271/144/35 +f 276/150/5 277/151/37 275/48/5 +f 278/152/37 279/84/38 277/151/37 +f 284/149/36 285/48/5 283/148/36 +f 282/147/35 283/148/36 281/144/35 +f 286/150/5 287/151/37 285/48/5 +f 288/152/37 289/84/38 287/151/37 +f 294/147/39 295/148/40 293/144/39 +f 296/149/40 297/48/6 295/148/40 +f 298/150/6 299/151/41 297/48/6 +f 300/152/41 291/84/42 299/151/41 +f 304/147/39 305/148/40 303/144/39 +f 306/149/40 307/48/6 305/148/40 +f 308/150/6 309/151/41 307/48/6 +f 310/152/41 301/84/42 309/151/41 +f 314/147/39 315/148/40 313/144/39 +f 316/149/40 317/48/6 315/148/40 +f 318/150/6 319/151/41 317/48/6 +f 320/152/41 311/84/42 319/151/41 +f 80/94/8 82/105/4 81/95/4 +f 44/97/3 46/103/9 45/98/9 +f 68/100/10 70/110/2 69/101/2 +f 46/103/9 48/153/1 47/104/1 +f 84/100/10 86/110/2 85/101/2 +f 66/105/4 68/100/10 67/102/10 +f 48/106/1 50/94/8 49/96/8 +f 64/94/8 66/105/4 65/95/4 +f 50/94/8 52/105/4 51/95/4 +f 62/106/1 64/94/8 63/96/8 +f 52/105/4 54/100/10 53/102/10 +f 72/108/7 41/97/3 42/99/3 +f 60/103/9 62/153/1 61/104/1 +f 54/100/10 56/110/2 55/101/2 +f 41/97/3 60/103/9 59/98/9 +f 56/110/2 58/108/7 57/109/7 +f 82/105/4 84/100/10 83/102/10 +f 70/110/2 72/108/7 71/109/7 +f 58/108/7 44/97/3 43/99/3 +f 78/106/1 80/94/8 79/96/8 +f 88/108/7 73/97/3 74/99/3 +f 76/103/9 78/153/1 77/104/1 +f 73/97/3 76/103/9 75/98/9 +f 86/110/2 88/108/7 87/109/7 +f 96/94/8 98/105/4 97/95/4 +f 100/100/10 102/110/2 101/101/2 +f 98/105/4 100/100/10 99/102/10 +f 94/106/1 96/94/8 95/96/8 +f 104/108/7 89/97/3 90/99/3 +f 92/103/9 94/153/1 93/104/1 +f 89/97/3 92/103/9 91/98/9 +f 102/110/2 104/108/7 103/109/7 +f 144/94/8 146/105/4 145/95/4 +f 108/97/3 110/103/9 109/98/9 +f 132/100/10 134/110/2 133/101/2 +f 110/103/9 112/153/1 111/104/1 +f 148/100/10 150/110/2 149/101/2 +f 130/105/4 132/100/10 131/102/10 +f 112/106/1 114/94/8 113/96/8 +f 128/94/8 130/105/4 129/95/4 +f 114/94/8 116/105/4 115/95/4 +f 126/106/1 128/94/8 127/96/8 +f 116/105/4 118/100/10 117/102/10 +f 136/108/7 105/97/3 106/99/3 +f 124/103/9 126/153/1 125/104/1 +f 118/100/10 120/110/2 119/101/2 +f 105/97/3 124/103/9 123/98/9 +f 120/110/2 122/108/7 121/109/7 +f 146/105/4 148/100/10 147/102/10 +f 134/110/2 136/108/7 135/109/7 +f 122/108/7 108/97/3 107/99/3 +f 142/106/1 144/94/8 143/96/8 +f 152/108/7 137/97/3 138/99/3 +f 140/103/9 142/153/1 141/104/1 +f 137/97/3 140/103/9 139/98/9 +f 150/110/2 152/108/7 151/109/7 +f 204/111/11 212/128/27 211/112/12 +f 202/114/14 210/121/20 209/115/3 +f 209/115/3 215/122/21 208/117/16 +f 214/118/17 213/125/24 206/119/18 +f 203/113/13 211/112/12 210/121/20 +f 215/122/21 214/118/17 207/120/19 +f 209/115/3 216/142/33 222/123/22 +f 221/124/23 220/132/30 213/125/24 +f 218/126/25 217/129/28 210/121/20 +f 215/122/21 222/123/22 221/124/23 +f 219/127/26 218/126/25 211/112/12 +f 217/129/28 216/142/33 209/115/3 +f 236/133/31 238/154/8 205/134/29 +f 230/116/15 239/115/3 245/122/21 +f 222/123/22 237/155/43 235/136/5 +f 234/138/32 233/143/6 218/139/25 +f 232/141/7 237/155/43 222/123/22 +f 235/136/5 236/133/31 220/135/30 +f 233/143/6 231/146/34 217/129/28 +f 227/111/11 242/128/27 241/112/12 +f 238/144/8 234/138/32 219/140/26 +f 228/113/13 241/112/12 240/121/20 +f 239/115/3 246/142/33 252/123/22 +f 248/126/25 247/129/28 240/121/20 +f 240/121/20 239/115/3 230/116/15 +f 244/118/17 243/125/24 225/119/18 +f 245/122/21 244/118/17 224/120/19 +f 251/124/23 250/132/30 243/125/24 +f 231/146/34 232/141/7 216/142/33 +f 245/122/21 252/123/22 251/124/23 +f 242/128/27 249/127/26 248/126/25 +f 247/129/28 246/142/33 239/115/3 +f 258/133/31 260/154/8 226/134/29 +f 252/123/22 259/155/43 257/136/5 +f 256/138/32 255/143/6 248/139/25 +f 254/141/7 259/155/43 252/123/22 +f 257/136/5 258/133/31 250/135/30 +f 255/143/6 253/146/34 247/129/28 +f 260/144/8 256/138/32 249/140/26 +f 253/146/34 254/141/7 246/142/33 +f 262/147/35 264/149/36 263/148/36 +f 264/149/36 266/150/5 265/48/5 +f 266/150/5 268/152/37 267/151/37 +f 268/152/37 270/156/38 269/84/38 +f 274/149/36 276/150/5 275/48/5 +f 272/147/35 274/149/36 273/148/36 +f 276/150/5 278/152/37 277/151/37 +f 278/152/37 280/156/38 279/84/38 +f 284/149/36 286/150/5 285/48/5 +f 282/147/35 284/149/36 283/148/36 +f 286/150/5 288/152/37 287/151/37 +f 288/152/37 290/156/38 289/84/38 +f 294/147/39 296/149/40 295/148/40 +f 296/149/40 298/150/6 297/48/6 +f 298/150/6 300/152/41 299/151/41 +f 300/152/41 292/156/42 291/84/42 +f 304/147/39 306/149/40 305/148/40 +f 306/149/40 308/150/6 307/48/6 +f 308/150/6 310/152/41 309/151/41 +f 310/152/41 302/156/42 301/84/42 +f 314/147/39 316/149/40 315/148/40 +f 316/149/40 318/150/6 317/48/6 +f 318/150/6 320/152/41 319/151/41 +f 320/152/41 312/156/42 311/84/42 +o plate +v -0.500000 0.937500 -1.500000 +v 0.500000 0.937500 -1.500000 +v -0.500000 0.937500 -5.250000 +v 0.500000 0.937500 -5.250000 +v -0.500000 1.062500 -5.250000 +v -0.500000 1.062500 -1.500000 +v 0.500000 1.062500 -1.500000 +v 0.500000 1.062500 -5.250000 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -1.0000 -0.0000 -0.0000 +vt 0.890625 0.566667 +vt 0.656250 0.700000 +vt 0.656250 0.566667 +vt 0.890625 0.700000 +vt 0.664062 0.700000 +vt 0.664062 0.566667 +vt 0.890625 0.683333 +vt 0.656250 0.683333 +vt 0.656250 0.583333 +vt 0.890625 0.583333 +s 0 +usemtl +f 323/157/44 322/158/44 321/159/44 +f 327/159/45 325/160/45 326/158/45 +f 323/161/46 328/159/46 324/162/46 +f 324/163/47 327/158/47 322/164/47 +f 321/165/48 325/157/48 323/166/48 +f 323/157/44 324/160/44 322/158/44 +f 327/159/45 328/157/45 325/160/45 +f 323/161/46 325/158/46 328/159/46 +f 324/163/47 328/160/47 327/158/47 +f 321/165/48 326/159/48 325/157/48 diff --git a/src/main/resources/assets/hbm/textures/gui/processing/gui_strand_caster.png b/src/main/resources/assets/hbm/textures/gui/processing/gui_strand_caster.png new file mode 100644 index 000000000..9f3253374 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/processing/gui_strand_caster.png differ