From d6a364515ed090dd73ea08c210afa0101c5c2785 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 19 May 2024 23:43:31 +0200 Subject: [PATCH] more arc furnace crap --- changelog | 4 +- .../machine/MachineArcFurnaceLarge.java | 25 +++- .../java/com/hbm/inventory/RecipesCommon.java | 2 +- .../com/hbm/inventory/SlotNonRetarded.java | 9 ++ .../ContainerMachineArcFurnaceLarge.java | 2 +- .../gui/GUIMachineArcFurnaceLarge.java | 3 + .../inventory/recipes/ArcFurnaceRecipes.java | 18 +++ .../inventory/recipes/AssemblerRecipes.java | 9 +- src/main/java/com/hbm/items/ModItems.java | 7 +- .../hbm/items/machine/ItemArcElectrode.java | 48 +++++++ .../items/machine/ItemArcElectrodeBurnt.java | 12 ++ .../com/hbm/items/machine/ItemRBMKRod.java | 4 +- .../java/com/hbm/tileentity/TileMappings.java | 2 +- .../TileEntityMachineArcFurnaceLarge.java | 131 ++++++++++++++++++ .../items/arc_electrode.saturnite.png | Bin 0 -> 485 bytes .../items/arc_electrode_burnt.desh.png | Bin 0 -> 377 bytes .../items/arc_electrode_burnt.graphite.png | Bin 0 -> 361 bytes .../items/arc_electrode_burnt.lanthanium.png | Bin 0 -> 361 bytes .../items/arc_electrode_burnt.saturnite.png | Bin 0 -> 367 bytes 19 files changed, 255 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/hbm/items/machine/ItemArcElectrode.java create mode 100644 src/main/java/com/hbm/items/machine/ItemArcElectrodeBurnt.java create mode 100644 src/main/resources/assets/hbm/textures/items/arc_electrode.saturnite.png create mode 100644 src/main/resources/assets/hbm/textures/items/arc_electrode_burnt.desh.png create mode 100644 src/main/resources/assets/hbm/textures/items/arc_electrode_burnt.graphite.png create mode 100644 src/main/resources/assets/hbm/textures/items/arc_electrode_burnt.lanthanium.png create mode 100644 src/main/resources/assets/hbm/textures/items/arc_electrode_burnt.saturnite.png diff --git a/changelog b/changelog index e5e8c9ea6..6cb66c27a 100644 --- a/changelog +++ b/changelog @@ -5,10 +5,12 @@ * Sellafite diamond ore now shreds into diamond gravel * ICF vessel blocks now use half as much fullerite as before * ICF capacitor and turbocharger blocks are now quite a bit cheaper -* Nerfed MEP, it only outputs 75% the heat it used to per outgoing flux and its self-ignition rate has been reduced from 20 flux to 2.5 +* MEP is no longer self-igniting ## Fixed * Fixed missing localization for meteorite ores and the new crucible materials * Removed the starmetal crystallization recipe, despite starmetal ore no longer existing * Fixed the ICF structure block detection being incorrect, omitting some parts * Fixed armor mods adding health showing only half as much as they actually do +* Fixed RBMK fuel xenon burn function being described wrong +* When converting ComparableStacks to ItemStacks, there is now a check that replaces null items with the nothing placeholder, fixing crashes caused by incorrect recipe configuration diff --git a/src/main/java/com/hbm/blocks/machine/MachineArcFurnaceLarge.java b/src/main/java/com/hbm/blocks/machine/MachineArcFurnaceLarge.java index f3c40d09f..125426208 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/blocks/machine/MachineArcFurnaceLarge.java @@ -2,6 +2,7 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityMachineArcFurnaceLarge; import net.minecraft.block.material.Material; @@ -19,6 +20,7 @@ public class MachineArcFurnaceLarge extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= 12) return new TileEntityMachineArcFurnaceLarge(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().power(); return null; } @@ -32,18 +34,29 @@ public class MachineArcFurnaceLarge extends BlockDummyable { return 2; } - @Override - public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { - super.fillSpace(world, x, y, z, dir, o); - MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o , y, z + dir.offsetZ * o, new int[] {4, 0, 3, -2, 1, 1}, this, dir); - } - @Override protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { if(!super.checkRequirement(world, x, y, z, dir, o)) return false; if(!MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o , y, z + dir.offsetZ * o, new int[] {4, 0, 3, -2, 1, 1}, x, y, z, dir)) return false; return true; } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y, z + dir.offsetZ * o, new int[] {4, 0, 3, -2, 1, 1}, this, dir); + + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + x += dir.offsetX * o; + z += dir.offsetZ * o; + + this.makeExtra(world, x + dir.offsetX * 2 + rot.offsetX, y, z + dir.offsetZ * 2 + rot.offsetZ); + this.makeExtra(world, x + dir.offsetX * 2 - rot.offsetX, y, z + dir.offsetZ * 2 - rot.offsetZ); + this.makeExtra(world, x + rot.offsetX * 2 + dir.offsetX, y, z + rot.offsetZ * 2 + dir.offsetZ); + this.makeExtra(world, x + rot.offsetX * 2 - dir.offsetX, y, z + rot.offsetZ * 2 - dir.offsetZ); + this.makeExtra(world, x - rot.offsetX * 2 + dir.offsetX, y, z - rot.offsetZ * 2 + dir.offsetZ); + this.makeExtra(world, x - rot.offsetX * 2 - dir.offsetX, y, z - rot.offsetZ * 2 - dir.offsetZ); + } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { diff --git a/src/main/java/com/hbm/inventory/RecipesCommon.java b/src/main/java/com/hbm/inventory/RecipesCommon.java index 9e963743b..7b472bbda 100644 --- a/src/main/java/com/hbm/inventory/RecipesCommon.java +++ b/src/main/java/com/hbm/inventory/RecipesCommon.java @@ -156,7 +156,7 @@ public class RecipesCommon { } public ItemStack toStack() { - return new ItemStack(item, stacksize, meta); + return new ItemStack(item == null ? ModItems.nothing : item, stacksize, meta); } public String[] getDictKeys() { diff --git a/src/main/java/com/hbm/inventory/SlotNonRetarded.java b/src/main/java/com/hbm/inventory/SlotNonRetarded.java index 4e5d12739..02b7faa05 100644 --- a/src/main/java/com/hbm/inventory/SlotNonRetarded.java +++ b/src/main/java/com/hbm/inventory/SlotNonRetarded.java @@ -21,4 +21,13 @@ public class SlotNonRetarded extends Slot { public boolean isItemValid(ItemStack stack) { return inventory.isItemValidForSlot(this.slotNumber, stack); } + + /** + * Because if slots have higher stacksizes than the maximum allowed by the tile, the display just stops working. + * Why was that necessary? Sure it's not intended but falsifying information isn't very cool. + */ + @Override + public int getSlotStackLimit() { + return Math.max(this.inventory.getInventoryStackLimit(), this.getHasStack() ? this.getStack().stackSize : 1); + } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java index 3a03e081f..27feec13f 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineArcFurnaceLarge.java @@ -23,7 +23,7 @@ public class ContainerMachineArcFurnaceLarge extends Container { //Upgrade this.addSlotToContainer(new Slot(tile, 4, 152, 108)); //Inputs - for(int i = 0; i < 4; i++) for(int j = 0; j < 5; j++) this.addSlotToContainer(new Slot(tile, 5 + j + i * 5, 44 + j * 18, 54 + i * 18)); + for(int i = 0; i < 4; i++) for(int j = 0; j < 5; j++) this.addSlotToContainer(new SlotNonRetarded(tile, 5 + j + i * 5, 44 + j * 18, 54 + i * 18)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java index 284f1846f..d31a35f7a 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineArcFurnaceLarge.java @@ -46,5 +46,8 @@ public class GUIMachineArcFurnaceLarge extends GuiInfoContainer { int p = (int) (arc.power * 70 / arc.maxPower); drawTexturedModalRect(guiLeft + 8, guiTop + 106 - p, 176, 70 - p, 7, p); + + int o = (int) (arc.progress * 70); + drawTexturedModalRect(guiLeft + 17, guiTop + 106 - o, 183, 70 - o, 7, o); } } diff --git a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java index 6ece17a5e..c36a387ed 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcFurnaceRecipes.java @@ -2,11 +2,13 @@ package com.hbm.inventory.recipes; import java.io.IOException; import java.util.HashMap; +import java.util.Map.Entry; import static com.hbm.inventory.OreDictManager.*; import com.google.gson.JsonElement; import com.google.gson.stream.JsonWriter; import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.material.MaterialShapes; import com.hbm.inventory.material.Mats; @@ -30,6 +32,22 @@ public class ArcFurnaceRecipes extends SerializableRecipe { recipes.put(new OreDictStack(FIBER.ingot()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 4)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.INGOT.q(1, 2)))); recipes.put(new OreDictStack(FIBER.block()), new ArcFurnaceRecipe().solid(new ItemStack(ModItems.nugget_silicon, 40)) .fluid(new MaterialStack(Mats.MAT_SILICON, MaterialShapes.INGOT.q(9, 2)))); } + + public static ArcFurnaceRecipe getOutput(ItemStack stack) { + + if(stack == null || stack.getItem() == null) return null; + + ComparableStack comp = new ComparableStack(stack).makeSingular(); + + if(recipes.containsKey(comp)) + return recipes.get(comp); + + for(Entry entry : recipes.entrySet()) { + if(entry.getKey().isApplicable(stack)) return entry.getValue(); + } + + return null; + } @Override public String getFileName() { diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 1281dc25d..511edfad3 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -1153,14 +1153,11 @@ public class AssemblerRecipes extends SerializableRecipe { }, 200); makeRecipe(new ComparableStack(ModBlocks.machine_radiolysis), new AStack[] { - !exp ? new OreDictStack(STEEL.ingot(), 12) : new OreDictStack(STEEL.heavyComp()), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 4), - new OreDictStack(DURA.ingot(), 10), - new OreDictStack(RUBBER.ingot(), 4), + new OreDictStack(RUBBER.ingot(), 8), new OreDictStack(PB.plate528(), 12), new OreDictStack(CU.plateCast(), 4), - new ComparableStack(ModItems.thermo_element, 10), - new ComparableStack(ModItems.wire_red_copper, 8), + new ComparableStack(ModItems.thermo_element, 8), new ComparableStack(ModItems.tank_steel, 3) }, 200); @@ -1273,6 +1270,8 @@ public class AssemblerRecipes extends SerializableRecipe { AStack[] input = this.readAStackArray(obj.get("input").getAsJsonArray()); int duration = obj.get("duration").getAsInt(); + if(output == null || output.getItem() == ModItems.nothing) return; + if(obj.has("folders")) { JsonArray array = obj.get("folders").getAsJsonArray(); List items = new ArrayList(); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 0ef8d4006..fede14397 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -3644,9 +3644,8 @@ public class ModItems { .setUnlocalizedName("rbmk_fuel_lep").setTextureName(RefStrings.MODID + ":rbmk_fuel_lep"); rbmk_fuel_mep = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_mep) .setYield(100000000D) - .setStats(35, 2.5) + .setStats(35) .setFunction(EnumBurnFunc.SQUARE_ROOT) - .setHeat(0.75D) .setMeltingPoint(2744) .setUnlocalizedName("rbmk_fuel_mep").setTextureName(RefStrings.MODID + ":rbmk_fuel_mep"); rbmk_fuel_hep239 = (ItemRBMKRod) new ItemRBMKRod(rbmk_pellet_hep239) @@ -4444,8 +4443,8 @@ public class ModItems { acetylene_torch = new ItemBlowtorch().setUnlocalizedName("acetylene_torch"); boltgun = new ItemBoltgun().setUnlocalizedName("boltgun"); overfuse = new ItemCustomLore().setUnlocalizedName("overfuse").setMaxStackSize(1).setFull3D().setTextureName(RefStrings.MODID + ":overfuse"); - arc_electrode = new ItemCustomLore().setUnlocalizedName("arc_electrode").setMaxDamage(250).setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setFull3D().setTextureName(RefStrings.MODID + ":arc_electrode"); - arc_electrode_burnt = new Item().setUnlocalizedName("arc_electrode_burnt").setMaxStackSize(1).setFull3D().setTextureName(RefStrings.MODID + ":arc_electrode_burnt"); + arc_electrode = new ItemArcElectrode().setUnlocalizedName("arc_electrode").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":arc_electrode"); + arc_electrode_burnt = new ItemArcElectrodeBurnt().setUnlocalizedName("arc_electrode_burnt").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":arc_electrode_burnt"); arc_electrode_desh = new ItemCustomLore().setUnlocalizedName("arc_electrode_desh").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setFull3D().setTextureName(RefStrings.MODID + ":arc_electrode_desh"); ams_focus_blank = new Item().setUnlocalizedName("ams_focus_blank").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":ams_focus_blank"); diff --git a/src/main/java/com/hbm/items/machine/ItemArcElectrode.java b/src/main/java/com/hbm/items/machine/ItemArcElectrode.java new file mode 100644 index 000000000..a4c417383 --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemArcElectrode.java @@ -0,0 +1,48 @@ +package com.hbm.items.machine; + +import com.hbm.items.ItemEnumMulti; +import com.hbm.util.EnumUtil; + +import net.minecraft.item.ItemStack; + +public class ItemArcElectrode extends ItemEnumMulti { + + public ItemArcElectrode() { + super(EnumElectrodeType.class, true, true); + this.setFull3D(); + this.setMaxStackSize(1); + } + + public static int getDurability(ItemStack stack) { + if(!stack.hasTagCompound()) return 0; + return stack.stackTagCompound.getInteger("durability"); + } + + public static int getMaxtDurability(ItemStack stack) { + EnumElectrodeType num = EnumUtil.grabEnumSafely(EnumElectrodeType.class, stack.getItemDamage()); + return num.durability; + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return getDurabilityForDisplay(stack) > 0D; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + return (double) getDurability(stack) / (double) getMaxtDurability(stack); + } + + public static enum EnumElectrodeType { + GRAPHITE( 10), + LANTHANIUM( 50), + DESH( 250), + SATURNITE( 500); + + public int durability; + + private EnumElectrodeType(int dura) { + this.durability = dura; + } + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemArcElectrodeBurnt.java b/src/main/java/com/hbm/items/machine/ItemArcElectrodeBurnt.java new file mode 100644 index 000000000..dc7c3dc3e --- /dev/null +++ b/src/main/java/com/hbm/items/machine/ItemArcElectrodeBurnt.java @@ -0,0 +1,12 @@ +package com.hbm.items.machine; + +import com.hbm.items.ItemEnumMulti; +import com.hbm.items.machine.ItemArcElectrode.EnumElectrodeType; + +public class ItemArcElectrodeBurnt extends ItemEnumMulti { + + public ItemArcElectrodeBurnt() { + super(EnumElectrodeType.class, true, true); + this.setFull3D(); + } +} diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 960a84874..93e30f4ac 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -374,7 +374,7 @@ public class ItemRBMKRod extends Item { list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.fluxFunc", EnumChatFormatting.WHITE + getFuncDescription(stack))); list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.funcType", this.function.title)); list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.xenonGen", EnumChatFormatting.WHITE + "x * " + xGen)); - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.xenonBurn", EnumChatFormatting.WHITE + "x² * " + xBurn)); + list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmx.xenonBurn", EnumChatFormatting.WHITE + "x² / " + xBurn)); list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("trait.rbmx.heat", heat + "°C")); list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("trait.rbmx.diffusion", diffusion + "¹/²")); list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("trait.rbmx.skinTemp", ((int)(getHullHeat(stack) * 10D) / 10D) + "m")); @@ -394,7 +394,7 @@ public class ItemRBMKRod extends Item { list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.fluxFunc", EnumChatFormatting.WHITE + getFuncDescription(stack))); list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.funcType", this.function.title)); list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.xenonGen", EnumChatFormatting.WHITE + "x * " + xGen)); - list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.xenonBurn", EnumChatFormatting.WHITE + "x² * " + xBurn)); + list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("trait.rbmk.xenonBurn", EnumChatFormatting.WHITE + "x² / " + xBurn)); list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("trait.rbmk.heat", heat + "°C")); list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("trait.rbmk.diffusion", diffusion + "¹/²")); list.add(EnumChatFormatting.RED + I18nUtil.resolveKey("trait.rbmk.skinTemp", ((int)(getHullHeat(stack) * 10D) / 10D) + "°C")); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 5a0ea3704..1fdf00d7f 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -313,7 +313,7 @@ public class TileMappings { put(TileEntityElectrolyser.class, "tileentity_electrolyser"); put(TileEntityMachineMixer.class, "tileentity_mixer"); put(TileEntityMachineArcWelder.class, "tileentity_arc_welder"); - put(TileEntityMachineArcFurnace.class, "tileentity_arc_furnace"); + put(TileEntityMachineArcFurnaceLarge.class, "tileentity_arc_furnace_large"); put(TileEntitySteamEngine.class, "tileentity_steam_engine"); put(TileEntityMachineTurbine.class, "tileentity_turbine"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java index acc45ff1b..8b3a7c108 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineArcFurnaceLarge.java @@ -6,17 +6,25 @@ import java.util.List; import com.hbm.inventory.container.ContainerMachineArcFurnaceLarge; import com.hbm.inventory.gui.GUIMachineArcFurnaceLarge; import com.hbm.inventory.material.Mats.MaterialStack; +import com.hbm.inventory.recipes.ArcFurnaceRecipes; +import com.hbm.inventory.recipes.ArcFurnaceRecipes.ArcFurnaceRecipe; +import com.hbm.items.ModItems; +import com.hbm.lib.Library; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.energymk2.IEnergyReceiverMK2; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import io.netty.buffer.ByteBuf; 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.util.AxisAlignedBB; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase implements IEnergyReceiverMK2, IGUIProvider { @@ -24,8 +32,11 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl public static final long maxPower = 10_000_000; public boolean liquidMode = false; public float progress; + public float lid; public float prevLid; + public int approachNum; + public float syncLid; public List liquids = new ArrayList(); @@ -38,9 +49,129 @@ public class TileEntityMachineArcFurnaceLarge extends TileEntityMachineBase impl return "container.machineArcFurnaceLarge"; } + @Override + public int getInventoryStackLimit() { + return 1; + } + @Override public void updateEntity() { + if(!worldObj.isRemote) { + + this.power = Library.chargeTEFromItems(slots, 3, power, maxPower); + + for(DirPos pos : getConPos()) this.trySubscribe(worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + + if(power > 0) { + + boolean ingredients = this.hasIngredients(); + boolean electrodes = this.hasElectrodes(); + + if(ingredients && electrodes) { + if(lid > 0) { + lid -= 1F/60F; + if(lid < 0) lid = 0; + this.progress = 0; + } else { + this.progress += 1F/100F; + if(this.progress >= 1F) { + this.process(); + this.progress = 0; + } + } + } else { + this.progress = 0; + if(lid < 1) { + lid += 1F/60F; + if(lid > 1) lid = 1; + } + } + } + + this.networkPackNT(150); + } else { + + this.prevLid = this.lid; + + if(this.approachNum > 0) { + this.lid = this.lid + ((this.syncLid - this.lid) / (float) this.approachNum); + --this.approachNum; + } else { + this.lid = this.syncLid; + } + } + } + + public void process() { + + for(int i = 5; i < 25; i++) { + if(slots[i] == null) continue; + ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(slots[i]); + + if(!liquidMode && recipe.solidOutput != null) { + slots[i] = recipe.solidOutput.copy(); + } + } + } + + public boolean hasIngredients() { + + for(int i = 5; i < 25; i++) { + if(slots[i] == null) continue; + ArcFurnaceRecipe recipe = ArcFurnaceRecipes.getOutput(slots[i]); + if(recipe == null) continue; + if(liquidMode && recipe.fluidOutput != null) return true; + if(!liquidMode && recipe.solidOutput != null) return true; + } + + return false; + } + + public boolean hasElectrodes() { + for(int i = 0; i < 3; i++) { + if(slots[i] == null || slots[i].getItem() != ModItems.arc_electrode) return false; + } + return true; + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) { + if(slot < 3) return stack.getItem() == ModItems.arc_electrode; + if(slot > 4) return lid > 0; + return false; + } + + protected DirPos[] getConPos() { + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - 10); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + return new DirPos[] { + new DirPos(xCoord + dir.offsetX * 3 + rot.offsetX, yCoord, zCoord + dir.offsetZ * 3 + rot.offsetZ, dir), + new DirPos(xCoord + dir.offsetX * 3 - rot.offsetX, yCoord, zCoord + dir.offsetZ * 3 - rot.offsetZ, dir), + new DirPos(xCoord + rot.offsetX * 3 + dir.offsetX, yCoord, zCoord + rot.offsetZ * 3 + dir.offsetZ, rot), + new DirPos(xCoord + rot.offsetX * 3 - dir.offsetX, yCoord, zCoord + rot.offsetZ * 3 - dir.offsetZ, rot), + new DirPos(xCoord - rot.offsetX * 3 + dir.offsetX, yCoord, zCoord - rot.offsetZ * 3 + dir.offsetZ, rot.getOpposite()), + new DirPos(xCoord - rot.offsetX * 3 - dir.offsetX, yCoord, zCoord - rot.offsetZ * 3 - dir.offsetZ, rot.getOpposite()) + }; + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + buf.writeLong(power); + buf.writeFloat(progress); + buf.writeFloat(lid); + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + this.power = buf.readLong(); + this.progress = buf.readFloat(); + this.syncLid = buf.readFloat(); + + this.approachNum = 2; } @Override diff --git a/src/main/resources/assets/hbm/textures/items/arc_electrode.saturnite.png b/src/main/resources/assets/hbm/textures/items/arc_electrode.saturnite.png new file mode 100644 index 0000000000000000000000000000000000000000..7e4c0c0d0265f938d73f81a72fee99127e43eaee GIT binary patch literal 485 zcmV9hCCsW{gaR%Zm#Nm6g2a za^Q3#%L@uX*^h9CUnXZ~F$@D|Z!bJN@N{|#FE6mR_%ZzN1v>oV=;Dg-rpE zDl{}eZLK-sLIJ9(;QSnJPX3I#ImEX&xW6~yiVDjxP>ixte5>oGcZ;xT0l=dQiUJ~k bdj4AP^6otR1j}%PA0_}kikwZj7L~9T(QG-K`LC_!27&Npu zv@`_SWJE+kG&VUz5Frv0Q3Q%Vz(Na4iy%rptqo!djh*>?+!=|<(^-xpJJ{QW6JEFar$RV~f*5u?W{;OZrGl*;_|&p#JUodjG{JlP z64h&97;L9=n7_dqGgYb9VSWb3U4iUL4C|{-?fHe(MAB$^g2E2bW#Uu={2uPNqIe$5 zTtAc6J6#2_wck+#G*Xo>y|Aq2;beufr@CMPk7CTVH( z8#Fja5jbRU)Dnf_7=hH{VN2IR2;xaW{+epB(%XCX=i$fuLPTuaR=HeOHk%bdEQ(wz zm6Xrtkwg##R4NtX)5?zHD3{BTN~IW$Mwq5a7={?r$lLa^R=3tjr_)rcRod+~g+hUP zy*_!t(axp}BaY)ZG@DJ%FRuaUcDuN)8~ZcR+FO@pS@^z>=XoTPNqW5=#_T+`S}g|r zz92j)YO%PFan~TTl%dn{==b{!1|g^J?f3D24Cwt{iIojtftimN60gsgb0)*#kb~pa zp4lKhgLEW`2)=D3(pO00000NkvXX Hu0mjf$|#}S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/arc_electrode_burnt.lanthanium.png b/src/main/resources/assets/hbm/textures/items/arc_electrode_burnt.lanthanium.png new file mode 100644 index 0000000000000000000000000000000000000000..3849abc5ef82f90c170fcb87075e9921354c749b GIT binary patch literal 361 zcmV-v0ha!WP)6%^tY2NDh<(!byk4NlS25C)A> zQ2#(Uxw>UPD2IZwAqX05^Kgh1DnY#4?rU;MOWk|(_Z}b2NFtlnPN}5jbXowxS>&x^ zQTcoxN!Yf{k!2|`t(?r|l*wd>L?ZaUk7=5?t~=d>jcigYYpX<~QOe~q&1REAp+K!x zW8#D3?R5o%0aB?HjYfmB>stWY?Kbz-s_|!_eqbvekJIUNa2$tFC`7N$=8ErHOG4mCBDU{hZP4T+&;MhKRdH1E?A4N|FlXFrFB_k}?Th2@JUL|{Pxwn5zS zwYZ|uD3YkvY9td0?0wsF5zQ_x;&!{SEDOUhs5hH9`f>fC894&ecsw3bsT7q$fu&fC z^Gv4qg5{NY*&KGJf{`e7U?*hwCZ(UheuI* z#|HeqAfMh;cy*oI%Tq=sCou1dv>Oe0Yx0oId>{YEfYrH|%jd_*7;Wnb^W~8bmw`-^ zgWbd4pVJrR_X|laN!LnlN7Pg74oFp%pHGzE-|AoPj#!nm!R3Dj;}dyilbS!2<9h%A N002ovPDHLkV1kI*n&