aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorShane Freeder <[email protected]>2022-09-28 05:11:13 +0100
committerShane Freeder <[email protected]>2022-09-28 05:11:13 +0100
commit557d7c048bc4c1a6a56fc8d3fc55fae831cb7d01 (patch)
treefd53a923a5175f6b67069e071ea88ae31657b635
parentbd496d0e0ddd5b4ec7702fde28e0fe9b4b703e0f (diff)
downloadPaper-557d7c048bc4c1a6a56fc8d3fc55fae831cb7d01.tar.gz
Paper-557d7c048bc4c1a6a56fc8d3fc55fae831cb7d01.zip
Preliminary example of WorldUnloadEvent
needs organisating, commentry, and actually exposing in the API
-rw-r--r--patches/api/0398-Add-WorldUnloadResult.patch42
-rw-r--r--patches/server/0917-Add-WorldUnloadResult.patch67
2 files changed, 109 insertions, 0 deletions
diff --git a/patches/api/0398-Add-WorldUnloadResult.patch b/patches/api/0398-Add-WorldUnloadResult.patch
new file mode 100644
index 0000000000..1ada5657c1
--- /dev/null
+++ b/patches/api/0398-Add-WorldUnloadResult.patch
@@ -0,0 +1,42 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Shane Freeder <[email protected]>
+Date: Wed, 28 Sep 2022 05:09:05 +0100
+Subject: [PATCH] Add WorldUnloadResult
+
+
+diff --git a/src/main/java/io/papermc/paper/world/WorldUnloadResult.java b/src/main/java/io/papermc/paper/world/WorldUnloadResult.java
+new file mode 100644
+index 0000000000000000000000000000000000000000..5fb077e0ab5ad238763adb2a1d2a6cc95cf0f1e4
+--- /dev/null
++++ b/src/main/java/io/papermc/paper/world/WorldUnloadResult.java
+@@ -0,0 +1,30 @@
++package io.papermc.paper.world;
++
++import net.kyori.adventure.text.Component;
++
++public class WorldUnloadResult {
++
++ public static final WorldUnloadResult SUCCESS = new WorldUnloadResult(true, Component.text("Success"));
++ public static final WorldUnloadResult NOT_LOADED = new WorldUnloadResult(false, Component.text("Cannot unload unloaded world"));
++ public static final WorldUnloadResult UNSUPPORTED = new WorldUnloadResult(false, Component.text("Unloading this world is not supported"));
++ public static final WorldUnloadResult NOT_EMPTY = new WorldUnloadResult(false, Component.text("Unable to load world with players!"));
++ public static final WorldUnloadResult PENDING_LOGIN = new WorldUnloadResult(false, Component.text("Unable to load world with pending login!"));
++ public static final WorldUnloadResult PLUGIN = new WorldUnloadResult(false, Component.text("World unload cancelled by plugin"));
++ public static final WorldUnloadResult NULL = new WorldUnloadResult(false, Component.text("Cannot unload null world"));
++
++ private final boolean success;
++ private final Component message;
++
++ public WorldUnloadResult(boolean success, Component message) {
++ this.success = success;
++ this.message = message;
++ }
++
++ public boolean isSuccess() {
++ return success;
++ }
++
++ public Component message() {
++ return message;
++ }
++}
diff --git a/patches/server/0917-Add-WorldUnloadResult.patch b/patches/server/0917-Add-WorldUnloadResult.patch
new file mode 100644
index 0000000000..75de89c98d
--- /dev/null
+++ b/patches/server/0917-Add-WorldUnloadResult.patch
@@ -0,0 +1,67 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Shane Freeder <[email protected]>
+Date: Wed, 28 Sep 2022 05:09:11 +0100
+Subject: [PATCH] Add WorldUnloadResult
+
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+index 111f8276f26350a5c62a7b8577b4598978b5355d..8843c966eeeb8cc009df43cf04aae713466dbda0 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+@@ -1269,30 +1269,41 @@ public final class CraftServer implements Server {
+
+ @Override
+ public boolean unloadWorld(World world, boolean save) {
++ // Paper start
++ return unloadWorld_(world, save).isSuccess();
++ }
++
++ public io.papermc.paper.world.WorldUnloadResult unloadWorld_(World world, boolean save) {
++ // paper end
+ //Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot unload a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes.
+ if (world == null) {
+- return false;
++ return io.papermc.paper.world.WorldUnloadResult.NULL; // Just, why... // paper
+ }
+
+ ServerLevel handle = ((CraftWorld) world).getHandle();
+
+ if (this.console.getLevel(handle.dimension()) == null) {
+- return false;
++ return io.papermc.paper.world.WorldUnloadResult.NOT_LOADED; // paper
+ }
+
+ if (handle.dimension() == net.minecraft.world.level.Level.OVERWORLD) {
+- return false;
++ return io.papermc.paper.world.WorldUnloadResult.UNSUPPORTED; // Paper
+ }
+
+- if (handle.players().size() > 0 || handle.pendingLogin.size() > 0) { // Paper
+- return false;
++ // Paper start - replace return, and differentiante
++ if (handle.players().size() > 0) {
++ return io.papermc.paper.world.WorldUnloadResult.NOT_EMPTY;
++ }
++ if (handle.pendingLogin.size() > 0) {
++ return io.papermc.paper.world.WorldUnloadResult.PENDING_LOGIN;
+ }
++ // Paper end
+
+ WorldUnloadEvent e = new WorldUnloadEvent(handle.getWorld());
+ this.pluginManager.callEvent(e);
+
+ if (e.isCancelled()) {
+- return false;
++ return io.papermc.paper.world.WorldUnloadResult.PLUGIN;
+ }
+
+ try {
+@@ -1309,7 +1320,7 @@ public final class CraftServer implements Server {
+
+ this.worlds.remove(world.getName().toLowerCase(java.util.Locale.ENGLISH));
+ this.console.removeLevel(handle);
+- return true;
++ return io.papermc.paper.world.WorldUnloadResult.SUCCESS;
+ }
+
+ public DedicatedServer getServer() {