From 18c316d947b13f7f96eb1f3fd9682b817acbcdbe Mon Sep 17 00:00:00 2001 From: DerToaster98 <38782719+DerToaster98@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:35:04 +0200 Subject: [PATCH 1/4] fix moveblocks being ignored if there are no moveblocks aboard (cherry picked from commit efd92fb6cef1d9c5e10fce661d95ff744d3149f1) --- .../movecraft/features/status/StatusManager.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java index 533f84ece..763b6f678 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java @@ -143,9 +143,17 @@ public void onCraftStatusUpdate(@NotNull CraftStatusUpdateEvent e) { if(!entry.check(flyBlocks.get(entry), nonNegligibleBlocks, sinkPercent)) sinking = true; } - for (RequiredBlockEntry entry : moveBlocks.getKeySet()) { - if (!entry.check(moveBlocks.get(entry), nonNegligibleBlocks, sinkPercent)) + // If the craft has MOveblocks defined, then validate them, if there are any aboard + if (craft.getType().getRequiredBlockProperty(CraftType.MOVE_BLOCKS).size() > 0) { + if (moveBlocks.isEmpty()) { disabled = true; + } + else { + for (RequiredBlockEntry entry : moveBlocks.getKeySet()) { + if (!entry.check(moveBlocks.get(entry), nonNegligibleBlocks, sinkPercent)) + disabled = true; + } + } } // And check the OverallSinkPercent From 9244e954b9a10274c141ec53eb668320af5b9aa3 Mon Sep 17 00:00:00 2001 From: DerToaster98 <38782719+DerToaster98@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:36:25 +0200 Subject: [PATCH 2/4] implement more elegant solution => prefill all moveblock properties in the tag with 0 (cherry picked from commit 4934e8d097ca7d8a32d3fe955b0690c80ae11c8c) --- .../features/status/StatusManager.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java index 763b6f678..212005ee0 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java @@ -95,6 +95,12 @@ private StatusUpdateTask(@NotNull Craft craft) { Counter flyblocks = new Counter<>(); Counter moveblocks = new Counter<>(); + + // Pre-fill the moveblocks counter to avoid ignoring moveblocks + for(RequiredBlockEntry entry : craft.getType().getRequiredBlockProperty(CraftType.MOVE_BLOCKS)) { + moveblocks.add(entry, 0); + } + for(Material material : materials.getKeySet()) { for(RequiredBlockEntry entry : craft.getType().getRequiredBlockProperty(CraftType.FLY_BLOCKS)) { if(entry.contains(material)) { @@ -145,14 +151,9 @@ public void onCraftStatusUpdate(@NotNull CraftStatusUpdateEvent e) { } // If the craft has MOveblocks defined, then validate them, if there are any aboard if (craft.getType().getRequiredBlockProperty(CraftType.MOVE_BLOCKS).size() > 0) { - if (moveBlocks.isEmpty()) { - disabled = true; - } - else { - for (RequiredBlockEntry entry : moveBlocks.getKeySet()) { - if (!entry.check(moveBlocks.get(entry), nonNegligibleBlocks, sinkPercent)) - disabled = true; - } + for (RequiredBlockEntry entry : moveBlocks.getKeySet()) { + if (!entry.check(moveBlocks.get(entry), nonNegligibleBlocks, sinkPercent)) + disabled = true; } } From 43bdf5fa8271310e8891d4bc9c769f40bc7f6366 Mon Sep 17 00:00:00 2001 From: DerToaster98 <38782719+DerToaster98@users.noreply.github.com> Date: Wed, 18 Jun 2025 11:38:30 +0200 Subject: [PATCH 3/4] dont create a new object, re-use the existing ones (cherry picked from commit 0e37fd7ce3795a4f27ac28aa0698bdda6dd6cd55) --- .../movecraft/features/status/StatusManager.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java index 212005ee0..3bc562092 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java @@ -67,7 +67,9 @@ private StatusUpdateTask(@NotNull Craft craft) { @Override public @NotNull Effect get() { - Counter materials = new Counter<>(); + Counter materials = craft.getDataTag(Craft.MATERIALS); + materials.clear(); + int nonNegligibleBlocks = 0; int nonNegligibleSolidBlocks = 0; double fuel = 0; @@ -93,8 +95,10 @@ private StatusUpdateTask(@NotNull Craft craft) { } } - Counter flyblocks = new Counter<>(); - Counter moveblocks = new Counter<>(); + Counter flyblocks = craft.getDataTag(Craft.FLYBLOCKS); + flyblocks.clear(); + Counter moveblocks = craft.getDataTag(Craft.MOVEBLOCKS); + moveblocks.clear(); // Pre-fill the moveblocks counter to avoid ignoring moveblocks for(RequiredBlockEntry entry : craft.getType().getRequiredBlockProperty(CraftType.MOVE_BLOCKS)) { @@ -115,10 +119,9 @@ private StatusUpdateTask(@NotNull Craft craft) { } } + // Primitive type tags => Re-apply those + // RE-applying is not necessary for object tags as we manipulate the object itself craft.setDataTag(Craft.FUEL, fuel); - craft.setDataTag(Craft.MATERIALS, materials); - craft.setDataTag(Craft.FLYBLOCKS, flyblocks); - craft.setDataTag(Craft.MOVEBLOCKS, moveblocks); craft.setDataTag(Craft.NON_NEGLIGIBLE_BLOCKS, nonNegligibleBlocks); craft.setDataTag(Craft.NON_NEGLIGIBLE_SOLID_BLOCKS, nonNegligibleSolidBlocks); craft.setDataTag(LAST_STATUS_CHECK, System.currentTimeMillis()); From 96dea8833d15f739cd7a975af97af31ecc582c7c Mon Sep 17 00:00:00 2001 From: DerToaster98 <38782719+DerToaster98@users.noreply.github.com> Date: Wed, 18 Jun 2025 13:00:16 +0200 Subject: [PATCH 4/4] Revert "dont create a new object, re-use the existing ones" This reverts commit 0e37fd7ce3795a4f27ac28aa0698bdda6dd6cd55. (cherry picked from commit fe5eadb0578415630fd953e8853c12842541777a) --- .../movecraft/features/status/StatusManager.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java index 3bc562092..212005ee0 100644 --- a/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java +++ b/Movecraft/src/main/java/net/countercraft/movecraft/features/status/StatusManager.java @@ -67,9 +67,7 @@ private StatusUpdateTask(@NotNull Craft craft) { @Override public @NotNull Effect get() { - Counter materials = craft.getDataTag(Craft.MATERIALS); - materials.clear(); - + Counter materials = new Counter<>(); int nonNegligibleBlocks = 0; int nonNegligibleSolidBlocks = 0; double fuel = 0; @@ -95,10 +93,8 @@ private StatusUpdateTask(@NotNull Craft craft) { } } - Counter flyblocks = craft.getDataTag(Craft.FLYBLOCKS); - flyblocks.clear(); - Counter moveblocks = craft.getDataTag(Craft.MOVEBLOCKS); - moveblocks.clear(); + Counter flyblocks = new Counter<>(); + Counter moveblocks = new Counter<>(); // Pre-fill the moveblocks counter to avoid ignoring moveblocks for(RequiredBlockEntry entry : craft.getType().getRequiredBlockProperty(CraftType.MOVE_BLOCKS)) { @@ -119,9 +115,10 @@ private StatusUpdateTask(@NotNull Craft craft) { } } - // Primitive type tags => Re-apply those - // RE-applying is not necessary for object tags as we manipulate the object itself craft.setDataTag(Craft.FUEL, fuel); + craft.setDataTag(Craft.MATERIALS, materials); + craft.setDataTag(Craft.FLYBLOCKS, flyblocks); + craft.setDataTag(Craft.MOVEBLOCKS, moveblocks); craft.setDataTag(Craft.NON_NEGLIGIBLE_BLOCKS, nonNegligibleBlocks); craft.setDataTag(Craft.NON_NEGLIGIBLE_SOLID_BLOCKS, nonNegligibleSolidBlocks); craft.setDataTag(LAST_STATUS_CHECK, System.currentTimeMillis());