Skip to content

Commit 31861fa

Browse files
committed
Add WorldsListener for integration with Worlds plugin
Registers `WorldsListener` to handle `WorldDeleteEvent` when the Worlds plugin is present. Adds dependency and configuration updates for proper integration.
1 parent f57b05a commit 31861fa

3 files changed

Lines changed: 52 additions & 16 deletions

File tree

build.gradle.kts

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import io.papermc.hangarpublishplugin.model.Platforms
22
import net.minecrell.pluginyml.bukkit.BukkitPluginDescription
3+
import net.minecrell.pluginyml.paper.PaperPluginDescription
34

45
plugins {
56
id("idea")
67
id("java")
7-
id("java-library")
88
id("com.gradleup.shadow") version "9.0.0-rc2"
99
id("com.modrinth.minotaur") version "2.+"
1010
id("de.eldoria.plugin-yml.paper") version "0.7.1"
@@ -32,13 +32,14 @@ repositories {
3232
dependencies {
3333
paperweight.paperDevBundle("1.21.8-R0.1-SNAPSHOT")
3434

35-
api("org.bstats:bstats-bukkit:3.1.1-SNAPSHOT")
35+
compileOnly("net.thenextlvl:worlds:3.2.5")
3636

37-
api("net.thenextlvl.core:adapters:2.0.2")
38-
api("net.thenextlvl.core:i18n:3.2.0")
39-
api("net.thenextlvl.core:paper:2.2.1")
37+
implementation("net.thenextlvl.core:adapters:2.0.2")
38+
implementation("net.thenextlvl.core:i18n:3.2.0")
39+
implementation("net.thenextlvl.core:paper:2.2.1")
40+
implementation("org.bstats:bstats-bukkit:3.1.1-SNAPSHOT")
4041

41-
api(project(":api"))
42+
implementation(project(":api"))
4243

4344
testImplementation(platform("org.junit:junit-bom:6.0.0-SNAPSHOT"))
4445
testImplementation("org.junit.jupiter:junit-jupiter")
@@ -62,7 +63,6 @@ sourceSets.main {
6263

6364
tasks.shadowJar {
6465
archiveBaseName.set("per-worlds")
65-
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
6666
relocate("org.bstats", "net.thenextlvl.perworlds.bstats")
6767
}
6868

@@ -109,6 +109,13 @@ paper {
109109
register("perworlds.command.group.spawn.unset") { children = listOf("perworlds.command.group.spawn") }
110110
register("perworlds.command.group.teleport") { children = listOf("perworlds.command.group") }
111111
}
112+
113+
serverDependencies {
114+
register("Worlds") {
115+
load = PaperPluginDescription.RelativeLoadOrder.BEFORE
116+
required = false
117+
}
118+
}
112119
}
113120

114121
val versionString: String = project.version as String
@@ -128,6 +135,9 @@ hangarPublish { // docs - https://docs.papermc.io/misc/hangar-publishing
128135
platforms.register(Platforms.PAPER) {
129136
jar.set(tasks.shadowJar.flatMap { it.archiveFile })
130137
platformVersions.set(versions)
138+
dependencies {
139+
hangar("Worlds") { required.set(false) }
140+
}
131141
}
132142
}
133143
}
@@ -140,4 +150,7 @@ modrinth {
140150
uploadFile.set(tasks.shadowJar)
141151
gameVersions.set(versions)
142152
loaders.add("paper")
153+
dependencies {
154+
optional.project("worlds-1")
155+
}
143156
}

src/main/java/net/thenextlvl/perworlds/PerWorldsPlugin.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import net.thenextlvl.perworlds.listener.RespawnListener;
1212
import net.thenextlvl.perworlds.listener.TeleportListener;
1313
import net.thenextlvl.perworlds.listener.WorldListener;
14+
import net.thenextlvl.perworlds.listener.WorldsListener;
1415
import net.thenextlvl.perworlds.version.PluginVersionChecker;
1516
import org.bstats.bukkit.Metrics;
1617
import org.bstats.charts.SimplePie;
@@ -49,12 +50,6 @@ public PerWorldsPlugin() {
4950
public void onLoad() {
5051
versionChecker.checkVersion();
5152
addCustomCharts();
52-
53-
54-
provider.getLogger().warn("PerWorlds is nearing the end of beta");
55-
provider.getLogger().warn("Although pretty stable, please be sure to always use the latest version");
56-
provider.getLogger().warn("We still suggest taking backups of your player data before using this plugin");
57-
provider.getLogger().warn("Please report any issues you encounter to {}", ISSUES);
5853
registerServices();
5954
loadGroups();
6055
}
@@ -82,6 +77,9 @@ private void registerListeners() {
8277
getServer().getPluginManager().registerEvents(new RespawnListener(provider), this);
8378
getServer().getPluginManager().registerEvents(new TeleportListener(provider), this);
8479
getServer().getPluginManager().registerEvents(new WorldListener(provider), this);
80+
81+
if (getServer().getPluginManager().getPlugin("Worlds") == null) return;
82+
getServer().getPluginManager().registerEvents(new WorldsListener(provider), this);
8583
}
8684

8785
private void warnWorldManager() {
@@ -93,7 +91,7 @@ private void warnWorldManager() {
9391
getComponentLogger().warn("Download at: https://modrinth.com/project/gBIw3Gvy");
9492
getComponentLogger().warn("Since Worlds already ships with PerWorlds, you have to uninstall this plugin when switching");
9593
}
96-
94+
9795
private void loadGroups() {
9896
var suffix = ".dat";
9997
var files = provider.getDataFolder().listFiles((file, name) -> name.endsWith(suffix));
@@ -103,7 +101,7 @@ private void loadGroups() {
103101
if (!provider.hasGroup(name)) provider.createGroup(name);
104102
}
105103
}
106-
104+
107105
private void persistGroups() {
108106
var groups = new ArrayList<>(provider.getGroups());
109107
groups.add(provider.getUnownedWorldGroup());
@@ -118,7 +116,8 @@ private void registerCommands() {
118116
event.registrar().register(WorldCommand.create(this)));
119117
}
120118

121-
final Set<String> knownWorldManagers = Set.of( // list ordered by likelihood of a plugin being used
119+
private final Set<String> knownWorldManagers = Set.of( // list ordered by likelihood of a plugin being used
120+
"Worlds", // https://github.com/TheNextLvl-net/worlds
122121
"Multiverse-Core", // https://github.com/Multiverse/Multiverse-Core/
123122
"My_Worlds", // https://github.com/bergerhealer/MyWorlds
124123
"MultiWorld", // https://dev.bukkit.org/projects/multiworld-v-2-0 // https://modrinth.com/plugin/multiworld-bukkit
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package net.thenextlvl.perworlds.listener;
2+
3+
import net.thenextlvl.perworlds.group.PaperGroupProvider;
4+
import net.thenextlvl.worlds.api.event.WorldDeleteEvent;
5+
import org.bukkit.event.EventHandler;
6+
import org.bukkit.event.EventPriority;
7+
import org.bukkit.event.Listener;
8+
9+
public class WorldsListener implements Listener {
10+
private final PaperGroupProvider provider;
11+
12+
public WorldsListener(PaperGroupProvider provider) {
13+
this.provider = provider;
14+
}
15+
16+
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
17+
public void onWorldDelete(WorldDeleteEvent event) {
18+
provider.getGroup(event.getWorld()).ifPresent(group -> {
19+
if (group.removeWorld(event.getWorld())) return;
20+
provider.getLogger().error("Failed to remove deleted world {} from group {}",
21+
event.getWorld().getName(), group.getName());
22+
});
23+
}
24+
}

0 commit comments

Comments
 (0)