Skip to content

Commit ff9f583

Browse files
committed
Delete old world folder properly
Signed-off-by: BT (calcastor/mame) <43831917+calcastor@users.noreply.github.com>
1 parent b0c541e commit ff9f583

File tree

7 files changed

+64
-23
lines changed

7 files changed

+64
-23
lines changed

core/src/main/java/tc/oc/pgm/PGMPlugin.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package tc.oc.pgm;
22

3+
import static tc.oc.pgm.util.bukkit.MiscUtils.MISC_UTILS;
4+
35
import com.google.common.collect.Lists;
46
import fr.minuskube.inv.InventoryManager;
57
import java.io.File;
@@ -67,7 +69,6 @@
6769
import tc.oc.pgm.rotation.MapPoolManager;
6870
import tc.oc.pgm.rotation.RandomMapOrder;
6971
import tc.oc.pgm.tablist.MatchTabManager;
70-
import tc.oc.pgm.util.FileUtils;
7172
import tc.oc.pgm.util.bukkit.ViaUtils;
7273
import tc.oc.pgm.util.chunk.NullChunkGenerator;
7374
import tc.oc.pgm.util.concurrent.BukkitExecutorService;
@@ -211,14 +212,7 @@ public void onEnable() {
211212
config.getGroups().isEmpty() ? null : new ConfigDecorationProvider());
212213

213214
// Sometimes match folders need to be cleaned up if the server previously crashed
214-
final File[] worldDirs = getServer().getWorldContainer().listFiles();
215-
if (worldDirs != null) {
216-
for (File dir : worldDirs) {
217-
if (dir.isDirectory() && dir.getName().startsWith("match")) {
218-
FileUtils.delete(dir);
219-
}
220-
}
221-
}
215+
MISC_UTILS.cleanupWorldFiles();
222216

223217
matchManager = new MatchManagerImpl(logger);
224218

core/src/main/java/tc/oc/pgm/match/MatchImpl.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static tc.oc.pgm.util.Assert.assertNotNull;
44
import static tc.oc.pgm.util.Assert.assertTrue;
5+
import static tc.oc.pgm.util.bukkit.MiscUtils.MISC_UTILS;
56
import static tc.oc.pgm.util.nms.NMSHacks.NMS_HACKS;
67

78
import com.google.common.collect.ImmutableList;
@@ -946,8 +947,8 @@ public void destroy() {
946947
Level.SEVERE, "Unable to unload world " + worldName + " (this can cause memory leaks!)");
947948
}
948949

949-
final File oldMatchFolder = new File(PGM.get().getServer().getWorldContainer(), worldName);
950-
if (oldMatchFolder.exists()) {
950+
final File oldMatchFolder = MISC_UTILS.getWorldFolder(worldName);
951+
if (oldMatchFolder != null && oldMatchFolder.exists()) {
951952
FileUtils.delete(oldMatchFolder);
952953
}
953954
}

platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/impl/ModernMiscUtil.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@
22

33
import static tc.oc.pgm.util.platform.Supports.Variant.PAPER;
44

5+
import io.papermc.paper.world.PaperWorldLoader;
6+
import java.io.File;
57
import java.nio.file.Path;
68
import java.util.List;
79
import net.kyori.adventure.key.Key;
810
import net.kyori.adventure.text.format.NamedTextColor;
911
import net.minecraft.nbt.NbtAccounter;
1012
import net.minecraft.nbt.NbtIo;
1113
import net.minecraft.nbt.NbtUtils;
14+
import org.bukkit.Bukkit;
1215
import org.bukkit.ExplosionResult;
1316
import org.bukkit.Location;
17+
import org.bukkit.NamespacedKey;
1418
import org.bukkit.Registry;
1519
import org.bukkit.Sound;
1620
import org.bukkit.block.Block;
21+
import org.bukkit.craftbukkit.CraftServer;
1722
import org.bukkit.damage.DamageSource;
1823
import org.bukkit.damage.DamageType;
1924
import org.bukkit.enchantments.Enchantment;
@@ -36,6 +41,7 @@
3641
import org.bukkit.scoreboard.Team;
3742
import tc.oc.pgm.platform.modern.material.ModernBlockMaterialData;
3843
import tc.oc.pgm.util.DataVersions;
44+
import tc.oc.pgm.util.FileUtils;
3945
import tc.oc.pgm.util.bukkit.MiscUtils;
4046
import tc.oc.pgm.util.material.BlockMaterialData;
4147
import tc.oc.pgm.util.platform.Supports;
@@ -133,4 +139,27 @@ public Entity getFakePickupEntity(PlayerPickupItemEvent ev) {
133139
if (ev instanceof PlayerPickupArrowEvent arrowEvent) return arrowEvent.getArrow();
134140
return ev.getItem();
135141
}
142+
143+
@Override
144+
public File getWorldFolder(String worldName) {
145+
var console = ((CraftServer) Bukkit.getServer()).getServer();
146+
var dimensionKey = PaperWorldLoader.dimensionKey(NamespacedKey.minecraft(worldName));
147+
return console.storageSource.getDimensionPath(dimensionKey).toFile();
148+
}
149+
150+
@Override
151+
public void cleanupWorldFiles() {
152+
MiscUtils.super.cleanupWorldFiles();
153+
154+
// Probe a non-existent dimension to get the dimension folder
155+
final File dimsFolder = new File(getWorldFolder("probe").getParent());
156+
final File[] dimDirs = dimsFolder.listFiles();
157+
if (dimDirs != null) {
158+
for (File dir : dimDirs) {
159+
if (dir.isDirectory() && dir.getName().startsWith("match")) {
160+
FileUtils.delete(dir);
161+
}
162+
}
163+
}
164+
}
136165
}

platform/platform-modern/src/main/java/tc/oc/pgm/platform/modern/impl/ModernNMSHacks.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -337,16 +337,6 @@ public boolean canMineBlock(BlockMaterialData blockMaterial, Player player) {
337337
.isPreferredTool(player.getInventory().getItemInMainHand());
338338
}
339339

340-
@Override
341-
public void resetDimension(World world) {
342-
// no-op
343-
}
344-
345-
@Override
346-
public void cleanupWorld(World world) {
347-
// no-op
348-
}
349-
350340
@Override
351341
public void cleanupPlayer(Player player) {
352342
player.setKiller(null);

platform/platform-sportpaper/src/main/java/tc/oc/pgm/platform/sportpaper/impl/SpMiscUtil.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
import static tc.oc.pgm.util.platform.Supports.Priority.HIGH;
55
import static tc.oc.pgm.util.platform.Supports.Variant.SPORTPAPER;
66

7+
import java.io.File;
78
import java.nio.file.Files;
89
import java.nio.file.Path;
910
import java.util.List;
1011
import net.kyori.adventure.key.Key;
1112
import net.minecraft.server.v1_8_R3.EntityPotion;
1213
import net.minecraft.server.v1_8_R3.NBTCompressedStreamTools;
14+
import org.bukkit.Bukkit;
1315
import org.bukkit.Location;
1416
import org.bukkit.Sound;
1517
import org.bukkit.block.Block;
@@ -123,4 +125,9 @@ public boolean isDestructiveExplosion(EntityExplodeEvent ev) {
123125
public Entity getFakePickupEntity(PlayerPickupItemEvent ev) {
124126
return ev.getItem();
125127
}
128+
129+
@Override
130+
public File getWorldFolder(String worldName) {
131+
return new File(Bukkit.getServer().getWorldContainer(), worldName);
132+
}
126133
}

util/src/main/java/tc/oc/pgm/util/bukkit/MiscUtils.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package tc.oc.pgm.util.bukkit;
22

3+
import java.io.File;
34
import java.nio.file.Path;
45
import java.util.List;
56
import net.kyori.adventure.key.Key;
67
import net.kyori.adventure.text.format.NamedTextColor;
8+
import org.bukkit.Bukkit;
79
import org.bukkit.Location;
810
import org.bukkit.block.Block;
911
import org.bukkit.entity.Arrow;
@@ -21,6 +23,7 @@
2123
import org.bukkit.event.player.PlayerPickupItemEvent;
2224
import org.bukkit.inventory.ItemStack;
2325
import org.bukkit.scoreboard.Team;
26+
import tc.oc.pgm.util.FileUtils;
2427
import tc.oc.pgm.util.material.BlockMaterialData;
2528
import tc.oc.pgm.util.platform.Platform;
2629

@@ -60,4 +63,17 @@ default void initScoreboardTeam(Team team, NamedTextColor color) {}
6063
boolean isDestructiveExplosion(EntityExplodeEvent ev);
6164

6265
Entity getFakePickupEntity(PlayerPickupItemEvent ev);
66+
67+
File getWorldFolder(String worldName);
68+
69+
default void cleanupWorldFiles() {
70+
final File[] worldDirs = Bukkit.getServer().getWorldContainer().listFiles();
71+
if (worldDirs != null) {
72+
for (File dir : worldDirs) {
73+
if (dir.isDirectory() && dir.getName().startsWith("match")) {
74+
FileUtils.delete(dir);
75+
}
76+
}
77+
}
78+
}
6379
}

util/src/main/java/tc/oc/pgm/util/nms/NMSHacks.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,13 @@ public interface NMSHacks {
4444

4545
boolean canMineBlock(BlockMaterialData blockMaterial, Player player);
4646

47-
void resetDimension(World world);
47+
default void resetDimension(World world) {
48+
// no-op
49+
}
4850

49-
void cleanupWorld(World world);
51+
default void cleanupWorld(World world) {
52+
// no-op
53+
}
5054

5155
void cleanupPlayer(Player player);
5256

0 commit comments

Comments
 (0)