From 5d742a7894fc0571ebe36da5d5f8d8a7376efca3 Mon Sep 17 00:00:00 2001 From: TylerS1066 Date: Sun, 4 Jan 2026 10:34:20 -0600 Subject: [PATCH 1/2] Complete all repairs on server shutdown --- .../movecraft/repair/MovecraftRepair.java | 5 ++++ .../movecraft/repair/RepairManager.java | 27 +++++++++++++++++++ .../movecraft/repair/types/Repair.java | 13 ++++++--- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/countercraft/movecraft/repair/MovecraftRepair.java b/src/main/java/net/countercraft/movecraft/repair/MovecraftRepair.java index 485c248..540aae5 100644 --- a/src/main/java/net/countercraft/movecraft/repair/MovecraftRepair.java +++ b/src/main/java/net/countercraft/movecraft/repair/MovecraftRepair.java @@ -225,6 +225,11 @@ else if (object instanceof String) { } } + @Override + public void onDisable() { + repairManager.shutdown(); + } + @NotNull public WorldEditPlugin getWorldEditPlugin() { return worldEditPlugin; diff --git a/src/main/java/net/countercraft/movecraft/repair/RepairManager.java b/src/main/java/net/countercraft/movecraft/repair/RepairManager.java index e9fca01..e52c7e8 100644 --- a/src/main/java/net/countercraft/movecraft/repair/RepairManager.java +++ b/src/main/java/net/countercraft/movecraft/repair/RepairManager.java @@ -49,6 +49,33 @@ public void run() { } } + public void shutdown() { + long start = System.currentTimeMillis(); + MovecraftRepair.getInstance().getLogger().info(() -> String.format("Completing %d repairs", repairs.size())); + + while (!repairs.isEmpty()) { + Repair repair = repairs.poll(); + repair.run(); + + if (repair.isDone()) { + end(repair); + } + else { + repairs.add(repair); + } + + if (System.currentTimeMillis() - start > 5000) { + MovecraftRepair.getInstance().getLogger().info(() -> String.format("Repair time overrun, %d skipped:", repairs.size())); + for (Repair skipped : repairs) { + MovecraftRepair.getInstance().getLogger().info(() -> String.format("- %s's repair %s with the cost of %.2f", skipped.getPlayerUUID(), skipped.getName(), skipped.getCost())); + } + return; + } + } + + MovecraftRepair.getInstance().getLogger().info("Repairs completed"); + } + public Set get() { return new HashSet<>(repairs); } diff --git a/src/main/java/net/countercraft/movecraft/repair/types/Repair.java b/src/main/java/net/countercraft/movecraft/repair/types/Repair.java index e81fad7..cc487c8 100644 --- a/src/main/java/net/countercraft/movecraft/repair/types/Repair.java +++ b/src/main/java/net/countercraft/movecraft/repair/types/Repair.java @@ -57,11 +57,9 @@ public boolean run(long time) { int placedBlocks = 0; while (elapsedTicks > Config.RepairTicksPerBlock && placedBlocks <= Config.RepairMaxBlocksPerTick) { - RepairTask task = queue.poll(); - if (task == null) + if (!run()) break; - task.execute(); elapsedTicks -= Config.RepairTicksPerBlock; placedBlocks++; } @@ -73,4 +71,13 @@ public boolean run(long time) { return false; } + + public boolean run() { + RepairTask task = queue.poll(); + if (task == null) + return false; + + task.execute(); + return true; + } } From 07a3372ab69d423392edb5acf3997f6102a5e9fd Mon Sep 17 00:00:00 2001 From: TylerS1066 Date: Sun, 4 Jan 2026 10:37:42 -0600 Subject: [PATCH 2/2] Update RepairManager.java --- .../java/net/countercraft/movecraft/repair/RepairManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/net/countercraft/movecraft/repair/RepairManager.java b/src/main/java/net/countercraft/movecraft/repair/RepairManager.java index e52c7e8..822713e 100644 --- a/src/main/java/net/countercraft/movecraft/repair/RepairManager.java +++ b/src/main/java/net/countercraft/movecraft/repair/RepairManager.java @@ -73,7 +73,7 @@ public void shutdown() { } } - MovecraftRepair.getInstance().getLogger().info("Repairs completed"); + MovecraftRepair.getInstance().getLogger().info(() -> String.format("Repairs completed in %d ms", System.currentTimeMillis() - start)); } public Set get() {