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'