From 4a98fb6c9dc15eb16de58823204b6b2bb08d3596 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Wed, 2 Sep 2020 13:47:20 -0400 Subject: [PATCH] Multiverse Support --- src/main/java/com/volmit/iris/Iris.java | 4 +- .../com/volmit/iris/MultiverseCoreLink.java | 111 ++++++++++++++++++ .../java/com/volmit/iris/ProjectManager.java | 3 + .../iris/command/CommandIrisCreate.java | 21 ++-- 4 files changed, 127 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/volmit/iris/MultiverseCoreLink.java diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java index 845197f2e..5d63623d5 100644 --- a/src/main/java/com/volmit/iris/Iris.java +++ b/src/main/java/com/volmit/iris/Iris.java @@ -43,6 +43,7 @@ public class Iris extends MortarPlugin public static WandManager wand; public static StructureManager struct; public static IrisBoardManager board; + public static MultiverseCoreLink linkMultiverseCore; private static IrisLock lock = new IrisLock("Iris"); @Permission @@ -84,10 +85,11 @@ public class Iris extends MortarPlugin struct = new StructureManager(); proj = new ProjectManager(); board = new IrisBoardManager(); + linkMultiverseCore = new MultiverseCoreLink(); J.a(() -> IO.delete(getTemp())); super.onEnable(); } - + public static File getTemp() { return instance.getDataFolder("cache", "temp"); diff --git a/src/main/java/com/volmit/iris/MultiverseCoreLink.java b/src/main/java/com/volmit/iris/MultiverseCoreLink.java new file mode 100644 index 000000000..b8f2a7199 --- /dev/null +++ b/src/main/java/com/volmit/iris/MultiverseCoreLink.java @@ -0,0 +1,111 @@ +package com.volmit.iris; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Map; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.World.Environment; +import org.bukkit.WorldType; +import org.bukkit.plugin.Plugin; + +import com.volmit.iris.object.IrisDimension; + +public class MultiverseCoreLink +{ + public MultiverseCoreLink() + { + + } + + public boolean supported() + { + return getMultiverse() != null; + } + + public boolean addWorld(String worldName, IrisDimension dim, String seed) + { + if(!supported()) + { + return false; + } + + try + { + Plugin p = getMultiverse(); + Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p); + Method m = mvWorldManager.getClass().getDeclaredMethod("addWorld", + + String.class, Environment.class, String.class, WorldType.class, Boolean.class, String.class, boolean.class); + boolean b = (boolean) m.invoke(mvWorldManager, worldName, dim.getEnvironment(), seed, WorldType.NORMAL, dim.isVanillaStructures(), "Iris", false); + saveConfig(); + return b; + } + + catch(Throwable e) + { + e.printStackTrace(); + } + + return false; + } + + @SuppressWarnings("unchecked") + public Map getList() + { + try + { + Plugin p = getMultiverse(); + Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p); + Field f = mvWorldManager.getClass().getDeclaredField("worldsFromTheConfig"); + f.setAccessible(true); + return (Map) f.get(mvWorldManager); + } + + catch(Throwable e) + { + e.printStackTrace(); + } + + return null; + } + + public void removeFromConfig(World world) + { + if(!supported()) + { + return; + } + + getList().remove(world.getName()); + saveConfig(); + } + + public void saveConfig() + { + try + { + Plugin p = getMultiverse(); + Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p); + mvWorldManager.getClass().getDeclaredMethod("saveWorldsConfig").invoke(mvWorldManager); + } + + catch(Throwable e) + { + e.printStackTrace(); + } + } + + public Plugin getMultiverse() + { + Plugin p = Bukkit.getPluginManager().getPlugin("Multiverse-Core"); + + if(p == null) + { + return null; + } + + return p; + } +} diff --git a/src/main/java/com/volmit/iris/ProjectManager.java b/src/main/java/com/volmit/iris/ProjectManager.java index 411cb5f6d..f03373b2e 100644 --- a/src/main/java/com/volmit/iris/ProjectManager.java +++ b/src/main/java/com/volmit/iris/ProjectManager.java @@ -358,6 +358,8 @@ public class ProjectManager }); World world = Bukkit.createWorld(new WorldCreator("iris/" + UUID.randomUUID()).seed(1337).generator(gx).generateStructures(false).type(WorldType.NORMAL).environment(d.getEnvironment())); + Iris.linkMultiverseCore.removeFromConfig(world); + done.set(true); sender.sendMessage("Generating 100%"); @@ -385,6 +387,7 @@ public class ProjectManager { currentProject.close(); File folder = currentProject.getWorld().getWorldFolder(); + Iris.linkMultiverseCore.removeFromConfig(currentProject.getWorld()); Bukkit.unloadWorld(currentProject.getWorld(), false); currentProject = null; Iris.globaldata.dump(); diff --git a/src/main/java/com/volmit/iris/command/CommandIrisCreate.java b/src/main/java/com/volmit/iris/command/CommandIrisCreate.java index 035547eca..aa399c870 100644 --- a/src/main/java/com/volmit/iris/command/CommandIrisCreate.java +++ b/src/main/java/com/volmit/iris/command/CommandIrisCreate.java @@ -38,7 +38,6 @@ public class CommandIrisCreate extends MortarCommand String type = "overworld"; long seed = 1337; int pregen = 0; - boolean zip = false; File folder = new File(worldName); if(folder.exists()) @@ -52,11 +51,6 @@ public class CommandIrisCreate extends MortarCommand for(String i : args) { - if(i.equals("-zip")) - { - zip = true; - } - type = i.startsWith("type=") ? i.split("\\Q=\\E")[1] : type; seed = i.startsWith("seed=") ? Long.valueOf(i.split("\\Q=\\E")[1]) : seed; pregen = i.startsWith("pregen=") ? Integer.parseInt(i.split("\\Q=\\E")[1]) : pregen; @@ -161,7 +155,8 @@ public class CommandIrisCreate extends MortarCommand }); } - boolean zipp = zip; + IrisDimension dimm = dim; + long seedd = seed; J.a(() -> { @@ -185,11 +180,15 @@ public class CommandIrisCreate extends MortarCommand return; } - if(zipp) + if(Iris.linkMultiverseCore.supported()) { - sender.sendMessage("Zipping up world"); - ZipUtil.pack(folder, new File("" + folder.getName() + ".zip"), 9); - sender.sendMessage("Zipped to " + folder.getName() + ".zip"); + Iris.linkMultiverseCore.addWorld(worldName, dimm, seedd + ""); + sender.sendMessage("Added " + worldName + " to MultiverseCore."); + } + + else + { + sender.sendMessage("No MVC?"); } sender.sendMessage("All Done!");