From c0cb28c2ad13bbba1abfb4eda712279500ab1c3b Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 12 Sep 2025 11:03:27 +0200 Subject: [PATCH] every step we take that's synchronized --- changelog | 11 +++++ .../gui/GUIScreenRecipeSelector.java | 12 +++++- .../inventory/recipes/AssemblerRecipes.java | 23 ---------- .../recipes/AssemblyMachineRecipes.java | 3 ++ src/main/java/com/hbm/items/ModItems.java | 2 +- .../TileEntityMachineAssemblyFactory.java | 42 ++++++++----------- src/main/resources/assets/hbm/lang/de_DE.lang | 4 +- src/main/resources/assets/hbm/lang/en_US.lang | 5 ++- 8 files changed, 51 insertions(+), 51 deletions(-) diff --git a/changelog b/changelog index de0dc79c4..ba019f652 100644 --- a/changelog +++ b/changelog @@ -1,9 +1,20 @@ +## Added +* New assembly factory + * Once again four recipe units at double the base speed + * Upgrades and stats are identical to the chemical factory + * Comes with an improved version of the old assemfac animations + ## Changed * Updated chinese localization * Added more QMAW manual pages * WIAJ presentations now use the same configurable keybind as QMAW * Shift has to be held for the presentations, while F1 will open the standard QMAW page * Double UZIs no longer render weirdly when dropped +* Added keyboard controls to the recipe selector's scroll function + * Up and down keys scroll by one line + * PgUp and PgDown scroll by 5 lines (full page) + * Pos1 and End keys scroll to the top and bottom of the list respectively +* C4, like semtex, is now edible ## Fixed * Fixed fusion reactor item IO being broken diff --git a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java index 244a2549b..986751e43 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java +++ b/src/main/java/com/hbm/inventory/gui/GUIScreenRecipeSelector.java @@ -27,6 +27,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GUIScreenRecipeSelector extends GuiScreen { @@ -325,7 +326,16 @@ public class GUIScreenRecipeSelector extends GuiScreen { search(this.search.getText()); return; } - + + if(keyCode == Keyboard.KEY_UP) pageIndex--; + if(keyCode == Keyboard.KEY_DOWN) pageIndex++; + if(keyCode == Keyboard.KEY_PRIOR) pageIndex -= 5; + if(keyCode == Keyboard.KEY_NEXT) pageIndex += 5; + if(keyCode == Keyboard.KEY_HOME) pageIndex = 0; + if(keyCode == Keyboard.KEY_END) pageIndex = size; + + pageIndex = MathHelper.clamp_int(pageIndex, 0, size); + if(keyCode == 1 || keyCode == this.mc.gameSettings.keyBindInventory.getKeyCode()) { FMLCommonHandler.instance().showGuiScreen(previousScreen); } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index f3a8f3f2e..cc05e44e8 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -793,29 +793,6 @@ import net.minecraft.item.ItemStack; new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD) }, 100); - makeRecipe(new ComparableStack(ModBlocks.machine_assemfac, 1), new AStack[] { - !exp ? new OreDictStack(STEEL.ingot(), 48) : new OreDictStack(STEEL.heavyComp(), 2), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), - new OreDictStack(B.ingot(), 4), - new OreDictStack(RUBBER.ingot(), 16), - new OreDictStack(KEY_ANYPANE, 64), - new ComparableStack(ModItems.motor, 18), - new OreDictStack(W.bolt(), 16), - new OreDictStack(STEEL.pipe(), 8), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) - }, 400); - - makeRecipe(new ComparableStack(ModBlocks.machine_chemical_factory, 1), new AStack[] { - new OreDictStack(DURA.ingot(), 16), - new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), - new OreDictStack(RUBBER.ingot(), 16), - new OreDictStack(STEEL.shell(), 12), - new OreDictStack(CU.pipe(), 8), - new ComparableStack(ModItems.motor_desh, 4), - new ComparableStack(ModItems.coil_tungsten, 16), - new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC) - }, 400); - makeRecipe(new ComparableStack(ModItems.missile_shuttle, 1), new AStack[] { new ComparableStack(ModItems.missile_generic, 2), new ComparableStack(ModItems.missile_strong, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 73890a546..096fd0825 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -338,6 +338,9 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.strandcaster").setup(200, 100).outputItems(new ItemStack(ModBlocks.machine_strand_caster, 1)) .inputItems(new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.plateCast(), 6), new OreDictStack(CU.plateWelded(), 2), new OreDictStack(STEEL.shell(), 2), new OreDictStack(ANY_CONCRETE.any(), 8)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 1, EnumExpensiveType.HEAVY_FRAME), new ComparableStack(ModItems.ingot_firebrick, 16), new OreDictStack(STEEL.shell(), 4), new OreDictStack(ANY_CONCRETE.any(), 8))); + this.register(new GenericRecipe("ass.assemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_assembly_factory, 1)) + .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(B.ingot(), 8), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.motor, 12), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) + .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(B.ingot(), 8), new OreDictStack(STEEL.shell(), 4), new ComparableStack(ModItems.motor, 24), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); this.register(new GenericRecipe("ass.chemfac").setup(400, 100).outputItems(new ItemStack(ModBlocks.machine_chemical_factory, 1)) .inputItems(new OreDictStack(DURA.ingot(), 16), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 8), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 8), new ComparableStack(ModItems.motor_desh, 4), new ComparableStack(ModItems.coil_tungsten, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BASIC)) .inputItemsEx(new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.HEAVY_FRAME), new OreDictStack(ANY_RESISTANTALLOY.ingot(), 16), new OreDictStack(RUBBER.ingot(), 16), new OreDictStack(STEEL.shell(), 12), new OreDictStack(CU.pipe(), 16), new ComparableStack(ModItems.motor_desh, 16), new ComparableStack(ModItems.item_expensive, 4, EnumExpensiveType.CIRCUIT))); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index df8387936..2887a7ab2 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -2316,7 +2316,7 @@ public class ModItems { lithium = new Item().setUnlocalizedName("lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lithium"); ingot_zirconium = new Item().setUnlocalizedName("ingot_zirconium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_zirconium"); ingot_semtex = new ItemLemon(4, 5, true).setUnlocalizedName("ingot_semtex").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_semtex"); - ingot_c4 = new Item().setUnlocalizedName("ingot_c4").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_c4"); + ingot_c4 = new ItemLemon(4, 5, true).setUnlocalizedName("ingot_c4").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_c4"); ingot_phosphorus = new Item().setUnlocalizedName("ingot_phosphorus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ingot_phosphorus"); coil_advanced_alloy = new Item().setUnlocalizedName("coil_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_alloy"); coil_advanced_torus = new Item().setUnlocalizedName("coil_advanced_torus").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coil_advanced_torus"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java index f7318d808..0613437c8 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineAssemblyFactory.java @@ -71,7 +71,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl super(60); animations = new TragicYuri[2]; - for(int i = 0; i < animations.length; i++) animations[i] = new TragicYuri(); + for(int i = 0; i < animations.length; i++) animations[i] = new TragicYuri(i); this.inputTanks = new FluidTank[4]; this.outputTanks = new FluidTank[4]; @@ -171,7 +171,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl boolean markDirty = false; for(int i = 0; i < 4; i++) { - this.assemblerModule[i].update(speed * 2D, pow * 2D, canCool(), slots[4 + i * 7]); + this.assemblerModule[i].update(speed * 2D, pow * 2D, canCool(), slots[4 + i * 14]); this.didProcess[i] = this.assemblerModule[i].didProcess; markDirty |= this.assemblerModule[i].markDirty; @@ -204,7 +204,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl } } - for(TragicYuri animation : animations) animation.update(true || didProcess[0] ||didProcess[1] ||didProcess[2] ||didProcess[3]); + for(TragicYuri animation : animations) animation.update(didProcess[0] ||didProcess[1] ||didProcess[2] ||didProcess[3]); if(worldObj.getTotalWorldTime() % 20 == 0) { frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord); @@ -246,17 +246,6 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl new DirPos(xCoord + 0, yCoord, zCoord - 3, Library.NEG_Z), new DirPos(xCoord + 2, yCoord, zCoord - 3, Library.NEG_Z), - new DirPos(xCoord + dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 0 + rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 1 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 2 + rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 + rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX * 0 - rot.offsetX * 2, yCoord + 3, zCoord + dir.offsetZ * 0 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 1 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 1 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 2, yCoord + 3, zCoord - dir.offsetZ * 2 - rot.offsetZ * 2, Library.POS_Y), - new DirPos(xCoord + dir.offsetX + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ + rot.offsetZ * 3, rot), new DirPos(xCoord - dir.offsetX + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ + rot.offsetZ * 3, rot), new DirPos(xCoord + dir.offsetX - rot.offsetX * 3, yCoord, zCoord + dir.offsetZ - rot.offsetZ * 3, rot.getOpposite()), @@ -451,16 +440,17 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl boolean direction = false; int timeUntilReposition; - public TragicYuri() { - striker = new AssemblerArm(); - saw = new AssemblerArm().yepThatsASaw(); + public TragicYuri(int group) { + striker = new AssemblerArm( group == 0 ? 0 : 3); + saw = new AssemblerArm( group == 0 ? 1 : 2).yepThatsASaw(); timeUntilReposition = 200; } public void update(boolean working) { this.prevSlider = this.slider; - if(working) switch(state) { + // one of the arms must do something. doesn't matter which or what position the carriage is in + if(didProcess[striker.recipeIndex] || didProcess[saw.recipeIndex]) switch(state) { case WORKING: { timeUntilReposition--; if(timeUntilReposition <= 0) { @@ -475,7 +465,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl } } break; case SLIDING: { - double sliderSpeed = 1D / 20D; // 20 ticks for transit + double sliderSpeed = 1D / 10D; // 10 ticks for transit if(direction) { slider += sliderSpeed; if(slider >= 1) { @@ -493,8 +483,8 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl } break; } - striker.updateArm(working); - saw.updateArm(working); + striker.updateArm(); + saw.updateArm(); } public double getSlider(float interp) { @@ -510,12 +500,14 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl public double[] speed = new double[4]; public double sawAngle; public double prevSawAngle; + public int recipeIndex; // the index of which pedestal is serviced, assuming the carriage is at default position ArmState state = ArmState.REPOSITION; int actionDelay = 0; boolean saw = false; - public AssemblerArm() { + public AssemblerArm(int index) { + this.recipeIndex = index; this.resetSpeed(); this.chooseNewArmPoistion(); } @@ -529,7 +521,7 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl speed[3] = saw ? 0.125 : 0.5; //Striker } - public void updateArm(boolean working) { + public void updateArm() { resetSpeed(); for(int i = 0; i < angles.length; i++) { @@ -538,7 +530,9 @@ public class TileEntityMachineAssemblyFactory extends TileEntityMachineBase impl prevSawAngle = sawAngle; - if(!working) return; + int serviceIndex = recipeIndex; + if(slider > 0.5) serviceIndex += (serviceIndex % 2 == 0 ? 1 : -1); // if the carriage has moved, swap the indices so they match up with the serviced pedestal + if(!didProcess[serviceIndex]) state = ArmState.RETIRE; if(state == ArmState.CUT || state == ArmState.EXTEND) { this.sawAngle += 45D; diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7599e7e9e..2e54e7e49 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -379,6 +379,7 @@ container.leadBox=Sicherheitsbehälter container.machineAmmoPress=Munitionspresse container.machineArcWelder=Lichtbogenschweißer container.machineArcFurnaceLarge=Lichtbogenofen +container.machineAssemblyFactory=Montagefabrik container.machineAssemblyMachine=Montagemaschine container.machineBoiler=Ölwärmer container.machineChemicalFactory=Chemiefabrik @@ -4382,7 +4383,8 @@ tile.machine_armor_table.name=Rüstungsmodifikationstisch tile.machine_ashpit.name=Aschekasten tile.machine_ashpit.desc=Sammelt Asche von Feuerbüchsen und Heizöfen tile.machine_assembler.name=Fertigungsmaschine (Legacy) -tile.machine_assemfac.name=Fertigungsfabrik +tile.machine_assemfac.name=Fertigungsfabrik (Legacy) +tile.machine_assembly_factory.name=Fertigungsfabrik tile.machine_assembly_machine.name=Montagemaschine tile.machine_autocrafter.name=Automatische Werkbank tile.machine_autosaw.name=Automatische Kreissäge diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 25d7a3933..4157a22a5 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -785,6 +785,7 @@ container.leadBox=Containment Box container.machineAmmoPress=Ammo Press container.machineArcWelder=Arc Welder container.machineArcFurnaceLarge=Arc Furnace +container.machineAssemblyFactory=Assembly Factory container.machineAssemblyMachine=Assembly Machine container.machineBoiler=Oil Heater container.machineChemicalFactory=Chemical Factory @@ -5642,7 +5643,9 @@ tile.machine_armor_table.name=Armor Modification Table tile.machine_ashpit.name=Ashpit tile.machine_ashpit.desc=Collects ashes from fireboxes and heating ovens tile.machine_assembler.name=Assembly Machine (Legacy) -tile.machine_assemfac.name=Assembly Factory +tile.machine_assemfac.name=Assembly Factory (Legacy) +tile.machine_assembly_factory.name=Assembly Factory +tile.machine_assembly_factory.desc=Quadruple assembly machine.$Recipes process twice as fast,$but need twice as much power.$Needs to be cooled with water,$produces low-pressure steam. tile.machine_assembly_machine.name=Assembly Machine tile.machine_autocrafter.name=Automatic Crafting Table tile.machine_autosaw.name=Automatic Buzz Saw