diff --git a/bukkit/build.gradle b/bukkit/build.gradle
index 841d4c6..ac50ac4 100644
--- a/bukkit/build.gradle
+++ b/bukkit/build.gradle
@@ -44,6 +44,7 @@ dependencies {
implementation project(":bukkit:simpleclans")
implementation project(":bukkit:playerpoints")
implementation project(":bukkit:multiverse")
+ implementation project(":bukkit:multiverse5")
implementation project(":bukkit:factionsuuid")
implementation project(":bukkit:factionsuuid05")
implementation project(":bukkit:factions")
diff --git a/bukkit/multiverse5/build.gradle b/bukkit/multiverse5/build.gradle
new file mode 100644
index 0000000..db58c90
--- /dev/null
+++ b/bukkit/multiverse5/build.gradle
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2016 Florian Stober
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+repositories {
+ maven {
+ url "https://repo.onarandombox.com/content/groups/public/"
+ }
+}
+
+// Multiverse-Core 5 is compiled for Java 17, so javac 8 cannot read it. Compile this module with
+// a Java 17 toolchain but emit Java 8 bytecode, so the rest of the project - which is Java 8
+// throughout - can still depend on it directly, and the produced classes load on any server.
+java {
+ toolchain {
+ languageVersion.set(JavaLanguageVersion.of(17))
+ }
+}
+
+tasks.withType(JavaCompile).configureEach {
+ options.release.set(8)
+}
+
+dependencies {
+ compileOnly "org.mvplugins.multiverse.core:multiverse-core:5.0.0"
+}
diff --git a/bukkit/multiverse5/src/main/java/de/codecrafter47/data/bukkit/multiverse/MultiverseWorldAliasProvider5.java b/bukkit/multiverse5/src/main/java/de/codecrafter47/data/bukkit/multiverse/MultiverseWorldAliasProvider5.java
new file mode 100644
index 0000000..fdc78f2
--- /dev/null
+++ b/bukkit/multiverse5/src/main/java/de/codecrafter47/data/bukkit/multiverse/MultiverseWorldAliasProvider5.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2020 Florian Stober
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package de.codecrafter47.data.bukkit.multiverse;
+
+import org.bukkit.entity.Player;
+import org.mvplugins.multiverse.core.MultiverseCoreApi;
+import org.mvplugins.multiverse.core.world.MultiverseWorld;
+import org.mvplugins.multiverse.external.vavr.control.Option;
+
+import java.util.function.Function;
+
+/**
+ * World alias lookup for Multiverse-Core 5.x.
+ *
+ *
Multiverse 5 renamed its packages from {@code com.onarandombox.MultiverseCore} to
+ * {@code org.mvplugins.multiverse.core}, so {@code MultiverseWorldAliasProvider} - which targets
+ * the 4.x API - fails with {@code NoClassDefFoundError} on a Multiverse 5 server.
+ *
+ *
Uses {@code getAliasOrName()} rather than {@code getAlias()} so a world without an alias
+ * yields its name instead of an empty string.
+ */
+public class MultiverseWorldAliasProvider5 implements Function {
+
+ @Override
+ public String apply(Player player) {
+ Option world = MultiverseCoreApi.get().getWorldManager().getWorld(player.getWorld());
+ return world.isDefined() ? world.get().getAliasOrName() : null;
+ }
+}
diff --git a/bukkit/src/main/java/de/codecrafter47/data/bukkit/PlayerDataAccess.java b/bukkit/src/main/java/de/codecrafter47/data/bukkit/PlayerDataAccess.java
index 15add49..3865aa7 100644
--- a/bukkit/src/main/java/de/codecrafter47/data/bukkit/PlayerDataAccess.java
+++ b/bukkit/src/main/java/de/codecrafter47/data/bukkit/PlayerDataAccess.java
@@ -33,6 +33,7 @@
import de.codecrafter47.data.bukkit.factions.*;
import de.codecrafter47.data.bukkit.factionsuuid.*;
import de.codecrafter47.data.bukkit.multiverse.MultiverseWorldAliasProvider;
+import de.codecrafter47.data.bukkit.multiverse.MultiverseWorldAliasProvider5;
import de.codecrafter47.data.bukkit.playerpoints.PlayerPointsProvider;
import de.codecrafter47.data.bukkit.simpleclans.*;
import de.codecrafter47.data.bukkit.supervanish.SuperVanishIsVanishedProvider;
@@ -171,7 +172,11 @@ protected void init() {
}
if (Bukkit.getPluginManager().getPlugin("Multiverse-Core") != null) {
- addProvider(BukkitData.Multiverse_WorldAlias, new MultiverseWorldAliasProvider());
+ if (classExists("org.mvplugins.multiverse.core.MultiverseCoreApi")) {
+ addProvider(BukkitData.Multiverse_WorldAlias, new MultiverseWorldAliasProvider5());
+ } else {
+ addProvider(BukkitData.Multiverse_WorldAlias, new MultiverseWorldAliasProvider());
+ }
}
if (Bukkit.getPluginManager().getPlugin("ASkyBlock") != null) {
diff --git a/settings.gradle b/settings.gradle
index c4c644f..e1c6304 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -27,6 +27,7 @@ include 'bukkit:supervanish'
include 'bukkit:simpleclans'
include 'bukkit:playerpoints'
include 'bukkit:multiverse'
+include 'bukkit:multiverse5'
include 'bukkit:factionsuuid'
include 'bukkit:factionsuuid05'
include 'bukkit:factions'