Multiverse Support

This commit is contained in:
Daniel Mills 2020-09-02 13:47:20 -04:00
parent ea5dd69719
commit 4a98fb6c9d
4 changed files with 127 additions and 12 deletions

View File

@ -43,6 +43,7 @@ public class Iris extends MortarPlugin
public static WandManager wand; public static WandManager wand;
public static StructureManager struct; public static StructureManager struct;
public static IrisBoardManager board; public static IrisBoardManager board;
public static MultiverseCoreLink linkMultiverseCore;
private static IrisLock lock = new IrisLock("Iris"); private static IrisLock lock = new IrisLock("Iris");
@Permission @Permission
@ -84,6 +85,7 @@ public class Iris extends MortarPlugin
struct = new StructureManager(); struct = new StructureManager();
proj = new ProjectManager(); proj = new ProjectManager();
board = new IrisBoardManager(); board = new IrisBoardManager();
linkMultiverseCore = new MultiverseCoreLink();
J.a(() -> IO.delete(getTemp())); J.a(() -> IO.delete(getTemp()));
super.onEnable(); super.onEnable();
} }

View File

@ -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<String, ?> getList()
{
try
{
Plugin p = getMultiverse();
Object mvWorldManager = p.getClass().getDeclaredMethod("getMVWorldManager").invoke(p);
Field f = mvWorldManager.getClass().getDeclaredField("worldsFromTheConfig");
f.setAccessible(true);
return (Map<String, ?>) 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;
}
}

View File

@ -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())); 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); done.set(true);
sender.sendMessage("Generating 100%"); sender.sendMessage("Generating 100%");
@ -385,6 +387,7 @@ public class ProjectManager
{ {
currentProject.close(); currentProject.close();
File folder = currentProject.getWorld().getWorldFolder(); File folder = currentProject.getWorld().getWorldFolder();
Iris.linkMultiverseCore.removeFromConfig(currentProject.getWorld());
Bukkit.unloadWorld(currentProject.getWorld(), false); Bukkit.unloadWorld(currentProject.getWorld(), false);
currentProject = null; currentProject = null;
Iris.globaldata.dump(); Iris.globaldata.dump();

View File

@ -38,7 +38,6 @@ public class CommandIrisCreate extends MortarCommand
String type = "overworld"; String type = "overworld";
long seed = 1337; long seed = 1337;
int pregen = 0; int pregen = 0;
boolean zip = false;
File folder = new File(worldName); File folder = new File(worldName);
if(folder.exists()) if(folder.exists())
@ -52,11 +51,6 @@ public class CommandIrisCreate extends MortarCommand
for(String i : args) for(String i : args)
{ {
if(i.equals("-zip"))
{
zip = true;
}
type = i.startsWith("type=") ? i.split("\\Q=\\E")[1] : type; type = i.startsWith("type=") ? i.split("\\Q=\\E")[1] : type;
seed = i.startsWith("seed=") ? Long.valueOf(i.split("\\Q=\\E")[1]) : seed; seed = i.startsWith("seed=") ? Long.valueOf(i.split("\\Q=\\E")[1]) : seed;
pregen = i.startsWith("pregen=") ? Integer.parseInt(i.split("\\Q=\\E")[1]) : pregen; 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(() -> J.a(() ->
{ {
@ -185,11 +180,15 @@ public class CommandIrisCreate extends MortarCommand
return; return;
} }
if(zipp) if(Iris.linkMultiverseCore.supported())
{ {
sender.sendMessage("Zipping up world"); Iris.linkMultiverseCore.addWorld(worldName, dimm, seedd + "");
ZipUtil.pack(folder, new File("" + folder.getName() + ".zip"), 9); sender.sendMessage("Added " + worldName + " to MultiverseCore.");
sender.sendMessage("Zipped to " + folder.getName() + ".zip"); }
else
{
sender.sendMessage("No MVC?");
} }
sender.sendMessage("All Done!"); sender.sendMessage("All Done!");