From c5526c86a2ffa25091ff5b0d9a82235314dc1a09 Mon Sep 17 00:00:00 2001 From: Ben Woo <30431861+benwoo1110@users.noreply.github.com> Date: Mon, 9 Jun 2025 22:58:41 +0800 Subject: [PATCH] Implement multiverse plugin hook --- platforms/bukkit/common/build.gradle.kts | 7 +++- .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 2 +- .../hooks/MultiverseGeneratorPluginHook.java | 42 +++++++++++++++++++ .../bukkit/listeners/CommonListener.java | 26 +++++++++++- 4 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/hooks/MultiverseGeneratorPluginHook.java diff --git a/platforms/bukkit/common/build.gradle.kts b/platforms/bukkit/common/build.gradle.kts index fb3b1cc8f..d6c87de8e 100644 --- a/platforms/bukkit/common/build.gradle.kts +++ b/platforms/bukkit/common/build.gradle.kts @@ -1,5 +1,8 @@ repositories { - + maven { + name = "onarandombox" + url = uri("https://repo.onarandombox.com/content/groups/public/") + } } dependencies { @@ -7,6 +10,8 @@ dependencies { compileOnly("io.papermc.paper", "paper-api", Versions.Bukkit.paper) + compileOnly("org.mvplugins.multiverse.core", "multiverse-core", "5.0.0") + shadedApi("io.papermc", "paperlib", Versions.Bukkit.paperLib) shadedApi("com.google.guava", "guava", Versions.Libraries.Internal.guava) diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java index 1ebd8de52..1b33a4837 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java @@ -87,7 +87,7 @@ public class TerraBukkitPlugin extends JavaPlugin { return; } - Bukkit.getPluginManager().registerEvents(new CommonListener(), this); // Register master event listener + Bukkit.getPluginManager().registerEvents(new CommonListener(platform), this); // Register master event listener PaperUtil.checkPaper(this); } diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/hooks/MultiverseGeneratorPluginHook.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/hooks/MultiverseGeneratorPluginHook.java new file mode 100644 index 000000000..372e1162b --- /dev/null +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/hooks/MultiverseGeneratorPluginHook.java @@ -0,0 +1,42 @@ +package com.dfsek.terra.bukkit.hooks; + +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.api.registry.key.Keyed; + +import org.mvplugins.multiverse.core.world.generators.GeneratorPlugin; +import org.mvplugins.multiverse.external.jetbrains.annotations.NotNull; +import org.mvplugins.multiverse.external.jetbrains.annotations.Nullable; + +import java.util.Collection; +import java.util.List; + +public final class MultiverseGeneratorPluginHook implements GeneratorPlugin { + + private final Platform platform; + + public MultiverseGeneratorPluginHook(Platform platform) { + this.platform = platform; + } + + @Override + public @NotNull Collection suggestIds(@Nullable String s) { + return platform.getConfigRegistry().entries().stream() + .map(Keyed::getID) + .toList(); + } + + @Override + public @Nullable Collection getExampleUsages() { + return List.of("/mv create example_world NORMAL -g Terra:OVERWORLD"); + } + + @Override + public @Nullable String getInfoLink() { + return "https://terra.polydev.org/"; + } + + @Override + public @NotNull String getPluginName() { + return "Terra"; + } +} diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java index 84d836fd7..ede5c9e98 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/listeners/CommonListener.java @@ -17,13 +17,37 @@ package com.dfsek.terra.bukkit.listeners; +import com.dfsek.terra.api.Platform; +import com.dfsek.terra.bukkit.hooks.MultiverseGeneratorPluginHook; + +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.server.PluginEnableEvent; +import org.mvplugins.multiverse.core.MultiverseCoreApi; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Listener for events on all implementations. */ public class CommonListener implements Listener { - public CommonListener() { + private static final Logger logger = LoggerFactory.getLogger(CommonListener.class); + private final Platform platform; + + public CommonListener(Platform platform) { + this.platform = platform; + } + + @EventHandler + public void onPluginEnable(PluginEnableEvent e) { + if(e.getPlugin().getName().equals("Multiverse-Core")) { + try { + MultiverseCoreApi.get().getGeneratorProvider() + .registerGeneratorPlugin(new MultiverseGeneratorPluginHook(platform)); + } catch(Exception ex) { + logger.error("Failed to register Terra generator plugin to multiverse.", ex); + } + } } }