Skip to content

Commit 5d742a7

Browse files
committed
Complete all repairs on server shutdown
1 parent 372c850 commit 5d742a7

3 files changed

Lines changed: 42 additions & 3 deletions

File tree

src/main/java/net/countercraft/movecraft/repair/MovecraftRepair.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,11 @@ else if (object instanceof String) {
225225
}
226226
}
227227

228+
@Override
229+
public void onDisable() {
230+
repairManager.shutdown();
231+
}
232+
228233
@NotNull
229234
public WorldEditPlugin getWorldEditPlugin() {
230235
return worldEditPlugin;

src/main/java/net/countercraft/movecraft/repair/RepairManager.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,33 @@ public void run() {
4949
}
5050
}
5151

52+
public void shutdown() {
53+
long start = System.currentTimeMillis();
54+
MovecraftRepair.getInstance().getLogger().info(() -> String.format("Completing %d repairs", repairs.size()));
55+
56+
while (!repairs.isEmpty()) {
57+
Repair repair = repairs.poll();
58+
repair.run();
59+
60+
if (repair.isDone()) {
61+
end(repair);
62+
}
63+
else {
64+
repairs.add(repair);
65+
}
66+
67+
if (System.currentTimeMillis() - start > 5000) {
68+
MovecraftRepair.getInstance().getLogger().info(() -> String.format("Repair time overrun, %d skipped:", repairs.size()));
69+
for (Repair skipped : repairs) {
70+
MovecraftRepair.getInstance().getLogger().info(() -> String.format("- %s's repair %s with the cost of %.2f", skipped.getPlayerUUID(), skipped.getName(), skipped.getCost()));
71+
}
72+
return;
73+
}
74+
}
75+
76+
MovecraftRepair.getInstance().getLogger().info("Repairs completed");
77+
}
78+
5279
public Set<Repair> get() {
5380
return new HashSet<>(repairs);
5481
}

src/main/java/net/countercraft/movecraft/repair/types/Repair.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,9 @@ public boolean run(long time) {
5757
int placedBlocks = 0;
5858

5959
while (elapsedTicks > Config.RepairTicksPerBlock && placedBlocks <= Config.RepairMaxBlocksPerTick) {
60-
RepairTask task = queue.poll();
61-
if (task == null)
60+
if (!run())
6261
break;
6362

64-
task.execute();
6563
elapsedTicks -= Config.RepairTicksPerBlock;
6664
placedBlocks++;
6765
}
@@ -73,4 +71,13 @@ public boolean run(long time) {
7371

7472
return false;
7573
}
74+
75+
public boolean run() {
76+
RepairTask task = queue.poll();
77+
if (task == null)
78+
return false;
79+
80+
task.execute();
81+
return true;
82+
}
7683
}

0 commit comments

Comments
 (0)