From 34947c21682c8e3e632448b9d980ae1654a5e057 Mon Sep 17 00:00:00 2001 From: dfsek Date: Sat, 22 May 2021 23:09:30 -0700 Subject: [PATCH] implement TerraPlugin#getMods --- .../java/com/dfsek/terra/api/TerraPlugin.java | 7 +++++ .../terra/api/platform/modloader/Mod.java | 9 ++++++ .../com/dfsek/terra/bukkit/BukkitPlugin.java | 27 ++++++++++++++++++ .../dfsek/terra/bukkit/TerraBukkitPlugin.java | 9 ++++++ .../com/dfsek/terra/fabric/FabricMod.java | 28 +++++++++++++++++++ .../dfsek/terra/fabric/TerraFabricPlugin.java | 8 ++++++ .../java/com/dfsek/terra/forge/ForgeMod.java | 27 ++++++++++++++++++ .../dfsek/terra/forge/TerraForgePlugin.java | 7 +++++ 8 files changed, 122 insertions(+) create mode 100644 common/src/main/java/com/dfsek/terra/api/platform/modloader/Mod.java create mode 100644 platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitPlugin.java create mode 100644 platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricMod.java create mode 100644 platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeMod.java diff --git a/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java b/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java index 2982da04f..4fc258da8 100644 --- a/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java +++ b/common/src/main/java/com/dfsek/terra/api/TerraPlugin.java @@ -4,6 +4,7 @@ import com.dfsek.terra.api.addons.TerraAddon; import com.dfsek.terra.api.event.EventManager; import com.dfsek.terra.api.platform.handle.ItemHandle; import com.dfsek.terra.api.platform.handle.WorldHandle; +import com.dfsek.terra.api.platform.modloader.Mod; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.registry.CheckedRegistry; import com.dfsek.terra.api.registry.LockedRegistry; @@ -19,6 +20,8 @@ import com.dfsek.terra.world.TerraWorld; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; +import java.util.Collections; +import java.util.Set; import java.util.jar.JarFile; /** @@ -75,4 +78,8 @@ public interface TerraPlugin extends LoaderRegistrar { default JarFile getModJar() throws URISyntaxException, IOException { return JarUtil.getJarFile(); } + + default Set getMods() { + return Collections.emptySet(); + } } diff --git a/common/src/main/java/com/dfsek/terra/api/platform/modloader/Mod.java b/common/src/main/java/com/dfsek/terra/api/platform/modloader/Mod.java new file mode 100644 index 000000000..8d5e3573a --- /dev/null +++ b/common/src/main/java/com/dfsek/terra/api/platform/modloader/Mod.java @@ -0,0 +1,9 @@ +package com.dfsek.terra.api.platform.modloader; + +public interface Mod { + String getID(); + + String getVersion(); + + String getName(); +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitPlugin.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitPlugin.java new file mode 100644 index 000000000..3202dac6d --- /dev/null +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/BukkitPlugin.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.bukkit; + +import com.dfsek.terra.api.platform.modloader.Mod; +import org.bukkit.plugin.Plugin; + +public class BukkitPlugin implements Mod { + private final Plugin plugin; + + public BukkitPlugin(Plugin plugin) { + this.plugin = plugin; + } + + @Override + public String getID() { + return plugin.getName(); + } + + @Override + public String getVersion() { + return plugin.getDescription().getVersion(); + } + + @Override + public String getName() { + return plugin.getName(); + } +} diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java index a2388d121..5fa8c3cef 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/TerraBukkitPlugin.java @@ -14,6 +14,7 @@ import com.dfsek.terra.api.event.TerraEventManager; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.handle.ItemHandle; import com.dfsek.terra.api.platform.handle.WorldHandle; +import com.dfsek.terra.api.platform.modloader.Mod; import com.dfsek.terra.api.platform.world.Biome; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.registry.CheckedRegistry; @@ -57,9 +58,12 @@ import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { @@ -306,6 +310,11 @@ public class TerraBukkitPlugin extends JavaPlugin implements TerraPlugin { genericLoaders.register(registry); } + @Override + public Set getMods() { + return Arrays.stream(Bukkit.getPluginManager().getPlugins()).map(BukkitPlugin::new).collect(Collectors.toSet()); + } + @Override public LockedRegistry getAddons() { return addonLockedRegistry; diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricMod.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricMod.java new file mode 100644 index 000000000..30efb5057 --- /dev/null +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/FabricMod.java @@ -0,0 +1,28 @@ +package com.dfsek.terra.fabric; + +import com.dfsek.terra.api.platform.modloader.Mod; +import net.fabricmc.loader.api.ModContainer; + + +public class FabricMod implements Mod { + private final ModContainer mod; + + public FabricMod(ModContainer mod) { + this.mod = mod; + } + + @Override + public String getID() { + return mod.getMetadata().getId(); + } + + @Override + public String getVersion() { + return mod.getMetadata().getVersion().getFriendlyString(); + } + + @Override + public String getName() { + return mod.getMetadata().getName(); + } +} diff --git a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java index 3778da03a..4006bd54a 100644 --- a/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java +++ b/platforms/fabric/src/main/java/com/dfsek/terra/fabric/TerraFabricPlugin.java @@ -21,6 +21,7 @@ import com.dfsek.terra.api.event.events.config.ConfigPackPreLoadEvent; import com.dfsek.terra.api.platform.block.BlockData; import com.dfsek.terra.api.platform.handle.ItemHandle; import com.dfsek.terra.api.platform.handle.WorldHandle; +import com.dfsek.terra.api.platform.modloader.Mod; import com.dfsek.terra.api.platform.world.Tree; import com.dfsek.terra.api.platform.world.World; import com.dfsek.terra.api.registry.CheckedRegistry; @@ -74,6 +75,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; public class TerraFabricPlugin implements TerraPlugin, ModInitializer { @@ -285,6 +288,11 @@ public class TerraFabricPlugin implements TerraPlugin, ModInitializer { return eventManager; } + @Override + public Set getMods() { + return FabricLoader.getInstance().getAllMods().stream().map(FabricMod::new).collect(Collectors.toSet()); + } + @Override public Profiler getProfiler() { return profiler; diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeMod.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeMod.java new file mode 100644 index 000000000..4d3649e52 --- /dev/null +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/ForgeMod.java @@ -0,0 +1,27 @@ +package com.dfsek.terra.forge; + +import com.dfsek.terra.api.platform.modloader.Mod; +import net.minecraftforge.fml.loading.moddiscovery.ModInfo; + +public class ForgeMod implements Mod { + private final ModInfo mod; + + public ForgeMod(ModInfo mod) { + this.mod = mod; + } + + @Override + public String getID() { + return mod.getModId(); + } + + @Override + public String getVersion() { + return mod.getVersion().getQualifier(); + } + + @Override + public String getName() { + return mod.getDisplayName(); + } +} diff --git a/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java b/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java index e24229ac7..376bb053d 100644 --- a/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java +++ b/platforms/forge/src/main/java/com/dfsek/terra/forge/TerraForgePlugin.java @@ -79,7 +79,9 @@ import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.jar.JarFile; +import java.util.stream.Collectors; import java.util.zip.ZipFile; @Mod("terra") @@ -304,6 +306,11 @@ public class TerraForgePlugin implements TerraPlugin { return eventManager; } + @Override + public Set getMods() { + return net.minecraftforge.fml.ModList.get().getMods().stream().map(ForgeMod::new).collect(Collectors.toSet()); + } + @Override public Profiler getProfiler() { return profiler;