From 625a1f38e6a443903a127852d77aad32d08a82c2 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Thu, 25 Jul 2024 16:14:45 +0200 Subject: [PATCH] Cannon Arithmetic - Schematicannons no longer consume additional gunpowder items until the previous item is depleted - Condensed Schematicannon fuel config to a single shots-per-gunpowder value - Schematicannons can now take gunpowder from adjacent inventories if necessary - Fixed a typo in ponder --- src/generated/resources/.cache/cache | 4 +- .../resources/assets/create/lang/en_ud.json | 2 +- .../resources/assets/create/lang/en_us.json | 2 +- .../cannon/SchematicannonBlockEntity.java | 66 ++++++++++++------- .../cannon/SchematicannonScreen.java | 12 ++-- .../infrastructure/config/CSchematics.java | 7 +- .../ponder/scenes/BearingScenes.java | 2 +- 7 files changed, 55 insertions(+), 40 deletions(-) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 27786b130..bf6f7ce27 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -582,8 +582,8 @@ bf2b0310500213ff853c748c236eb5d01f61658e assets/create/blockstates/yellow_toolbo 5616dda664dd106d576848124fc0fc1de18d0fd3 assets/create/blockstates/yellow_valve_handle.json 7f39521b211441f5c3e06d60c5978cebe16cacfb assets/create/blockstates/zinc_block.json b7181bcd8182b2f17088e5aa881f374c9c65470c assets/create/blockstates/zinc_ore.json -9b0b65057342c778e8b442ad820b3400896f17ee assets/create/lang/en_ud.json -a15459832a165e6d082d80b301e4459d3dfecd41 assets/create/lang/en_us.json +3c04d30f0521554ade532f1662cdaf4ae2958ab3 assets/create/lang/en_ud.json +6a0df005c7594667d9c7582a877984d25382df7b assets/create/lang/en_us.json 487a511a01b2a4531fb672f917922312db78f958 assets/create/models/block/acacia_window.json b48060cba1a382f373a05bf0039054053eccf076 assets/create/models/block/acacia_window_pane_noside.json 3066db1bf03cffa1a9c7fbacf47ae586632f4eb3 assets/create/models/block/acacia_window_pane_noside_alt.json diff --git a/src/generated/resources/assets/create/lang/en_ud.json b/src/generated/resources/assets/create/lang/en_ud.json index 239c5fc3a..ba764c425 100644 --- a/src/generated/resources/assets/create/lang/en_ud.json +++ b/src/generated/resources/assets/create/lang/en_ud.json @@ -1777,7 +1777,7 @@ "create.ponder.mechanical_arm_redstone.text_1": "\u01DD\u0287\u0250\u028C\u0131\u0287\u0254\u0250 \u0287ou \u05DF\u05DF\u0131\u028D s\u026F\u0279\u2C6F \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW '\u01DDuo\u0287sp\u01DD\u1D1A \u028Eq p\u01DD\u0279\u01DD\u028Dod u\u01DD\u0265M", "create.ponder.mechanical_arm_redstone.text_2": "s\u01DD\u05DF\u0254\u028E\u0254 p\u01DD\u0287\u0279\u0250\u0287s \u028Eu\u0250 \u0265s\u0131u\u0131\u025F \u05DF\u05DF\u0131\u028D \u0287\u0131 'bu\u0131ddo\u0287s \u01DD\u0279o\u025F\u01DD\u15FA", "create.ponder.mechanical_arm_redstone.text_3": "\u01DD\u05DF\u0254\u028E\u0254 uo\u0131\u0287\u0250\u028C\u0131\u0287\u0254\u0250 \u01DDuo \u028E\u05DF\u0287\u0254\u0250x\u01DD \u0279\u01DDbb\u0131\u0279\u0287 o\u0287 p\u01DDsn \u01DDq u\u0250\u0254 \u01DDs\u05DFnd \u01DD\u028C\u0131\u0287\u0250b\u01DDu \u0250 'sn\u0265\u27D8", - "create.ponder.mechanical_bearing.header": "bu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW \u01DD\u0265\u0287 bu\u0131sn s\u01DD\u0279n\u0287\u0254n\u0279\u0287S sbu\u0131\u028CoW", + "create.ponder.mechanical_bearing.header": "bu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW \u01DD\u0265\u0287 bu\u0131sn s\u01DD\u0279n\u0287\u0254n\u0279\u0287S bu\u0131\u028CoW", "create.ponder.mechanical_bearing.text_1": "\u026F\u01DD\u0265\u0287 \u025Fo \u0287uo\u0279\u025F u\u0131 \u029E\u0254o\u05DFq \u01DD\u0265\u0287 o\u0287 \u0265\u0254\u0250\u0287\u0287\u0250 sbu\u0131\u0279\u0250\u01DD\u15FA \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW", "create.ponder.mechanical_bearing.text_2": "uo\u0131\u0287d\u0250\u0279\u0287uo\u0186 bu\u0131\u0287\u0250\u0287o\u1D1A \u0250 o\u0287u\u0131 \u0287\u0131 \u01DD\u05DFq\u026F\u01DDss\u0250 \u05DF\u05DF\u0131\u028D \u0287\u0131 '\u01DD\u0254\u0279o\u2132 \u05DF\u0250uo\u0131\u0287\u0250\u0287o\u1D1A bu\u0131\u028C\u0131\u01DD\u0254\u01DD\u0279 uod\u2229", "create.ponder.mechanical_crafter.header": "s\u0279\u01DD\u0287\u025F\u0250\u0279\u0186 \u05DF\u0250\u0254\u0131u\u0250\u0265\u0254\u01DDW dn bu\u0131\u0287\u0287\u01DDS", diff --git a/src/generated/resources/assets/create/lang/en_us.json b/src/generated/resources/assets/create/lang/en_us.json index 56eb86d44..2718106ff 100644 --- a/src/generated/resources/assets/create/lang/en_us.json +++ b/src/generated/resources/assets/create/lang/en_us.json @@ -1777,7 +1777,7 @@ "create.ponder.mechanical_arm_redstone.text_1": "When powered by Redstone, Mechanical Arms will not activate", "create.ponder.mechanical_arm_redstone.text_2": "Before stopping, it will finish any started cycles", "create.ponder.mechanical_arm_redstone.text_3": "Thus, a negative pulse can be used to trigger exactly one activation cycle", - "create.ponder.mechanical_bearing.header": "Movings Structures using the Mechanical Bearing", + "create.ponder.mechanical_bearing.header": "Moving Structures using the Mechanical Bearing", "create.ponder.mechanical_bearing.text_1": "Mechanical Bearings attach to the block in front of them", "create.ponder.mechanical_bearing.text_2": "Upon receiving Rotational Force, it will assemble it into a Rotating Contraption", "create.ponder.mechanical_crafter.header": "Setting up Mechanical Crafters", diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonBlockEntity.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonBlockEntity.java index 7db7d29c2..1772ac7bc 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonBlockEntity.java @@ -91,7 +91,7 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP public MaterialChecklist checklist; // Gui information - public float fuelLevel; + public int remainingFuel; public float bookPrintingProgress; public float schematicProgress; public String statusMsg; @@ -153,7 +153,7 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP statusMsg = compound.getString("Status"); schematicProgress = compound.getFloat("Progress"); bookPrintingProgress = compound.getFloat("PaperProgress"); - fuelLevel = compound.getFloat("Fuel"); + remainingFuel = compound.getInt("RemainingFuel"); String stateString = compound.getString("State"); state = stateString.isEmpty() ? State.STOPPED : State.valueOf(compound.getString("State")); blocksPlaced = compound.getInt("AmountPlaced"); @@ -227,7 +227,7 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP // Gui information compound.putFloat("Progress", schematicProgress); compound.putFloat("PaperProgress", bookPrintingProgress); - compound.putFloat("Fuel", fuelLevel); + compound.putInt("RemainingFuel", remainingFuel); compound.putString("Status", statusMsg); compound.putString("State", state.name()); compound.putInt("AmountPlaced", blocksPlaced); @@ -319,7 +319,7 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP return; } - if (state == State.PAUSED && !positionNotLoaded && missingItem == null && fuelLevel > getFuelUsageRate()) + if (state == State.PAUSED && !positionNotLoaded && missingItem == null && remainingFuel > 0) return; // Initialize Printer @@ -335,15 +335,18 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP } // Check Fuel - if (fuelLevel <= 0 && !hasCreativeCrate) { - fuelLevel = 0; - state = State.PAUSED; - statusMsg = "noGunpowder"; - sendUpdate = true; - return; + if (remainingFuel <= 0 && !hasCreativeCrate) { + refillFuelIfPossible(); + if (remainingFuel <= 0) { + state = State.PAUSED; + statusMsg = "noGunpowder"; + sendUpdate = true; + return; + } } if (hasCreativeCrate) { + remainingFuel = 0; if (missingItem != null) { missingItem = null; state = State.RUNNING; @@ -421,13 +424,13 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP }); printerCooldown = config().schematicannonDelay.get(); - fuelLevel -= getFuelUsageRate(); + remainingFuel -= 1; sendUpdate = true; missingItem = null; } - public double getFuelUsageRate() { - return hasCreativeCrate ? 0 : config().schematicannonFuelUsage.get() / 100f; + public int getShotsPerGunpowder() { + return hasCreativeCrate ? 0 : config().schematicannonShotsPerGunpowder.get(); } protected void initializePrinter(ItemStack blueprint) { @@ -646,15 +649,34 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP protected void refillFuelIfPossible() { if (hasCreativeCrate) return; - if (1 - fuelLevel + 1 / 128f < getFuelAddedByGunPowder()) - return; - if (inventory.getStackInSlot(4) - .isEmpty()) + if (remainingFuel > getShotsPerGunpowder()) { + remainingFuel = getShotsPerGunpowder(); + sendUpdate = true; + return; + } + + if (remainingFuel > 0) return; - inventory.getStackInSlot(4) - .shrink(1); - fuelLevel += getFuelAddedByGunPowder(); + if (!inventory.getStackInSlot(4) + .isEmpty()) + inventory.getStackInSlot(4) + .shrink(1); + else { + boolean externalGunpowderFound = false; + for (LazyOptional cap : attachedInventories) { + IItemHandler itemHandler = cap.orElse(EmptyHandler.INSTANCE); + if (ItemHelper.extract(itemHandler, stack -> inventory.isItemValid(4, stack), 1, false) + .isEmpty()) + continue; + externalGunpowderFound = true; + break; + } + if (!externalGunpowderFound) + return; + } + + remainingFuel += getShotsPerGunpowder(); if (statusMsg.equals("noGunpowder")) { if (blocksPlaced > 0) state = State.RUNNING; @@ -663,10 +685,6 @@ public class SchematicannonBlockEntity extends SmartBlockEntity implements MenuP sendUpdate = true; } - public double getFuelAddedByGunPowder() { - return config().schematicannonGunpowderWorth.get() / 100f; - } - protected void tickPaperPrinter() { int BookInput = 2; int BookOutput = 3; diff --git a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonScreen.java b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonScreen.java index c0cc7369f..e4024aa92 100644 --- a/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonScreen.java +++ b/src/main/java/com/simibubi/create/content/schematics/cannon/SchematicannonScreen.java @@ -283,7 +283,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen getFuelLevelTooltip(SchematicannonBlockEntity be) { - double fuelUsageRate = be.getFuelUsageRate(); - int shotsLeft = (int) (be.fuelLevel / fuelUsageRate); - int shotsLeftWithItems = (int) (shotsLeft + be.inventory.getStackInSlot(4) - .getCount() * (be.getFuelAddedByGunPowder() / fuelUsageRate)); + int shotsLeft = be.remainingFuel; + int shotsLeftWithItems = shotsLeft + be.inventory.getStackInSlot(4) + .getCount() * be.getShotsPerGunpowder(); List tooltip = new ArrayList<>(); if (be.hasCreativeCrate) { @@ -400,7 +400,7 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen