9
0
mirror of https://github.com/VolmitSoftware/Iris.git synced 2025-12-29 12:09:07 +00:00

Move NMS out of legacy

This commit is contained in:
Daniel Mills
2020-11-14 15:04:13 -05:00
parent 657f581a3d
commit b85efcd85a
12 changed files with 63 additions and 29 deletions

View File

@@ -0,0 +1,70 @@
package com.volmit.iris.nms;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.nms.v1X.NMSBinding1X;
import com.volmit.iris.util.KMap;
import org.bukkit.Bukkit;
public class INMS
{
//@builder
private static final KMap<String, Class<? extends INMSBinding>> bindings = new KMap<String, Class<? extends INMSBinding>>()
;//.qput("v1_16_R2", NMSBinding16_2.class);
//@done
private static final INMSBinding binding = bind();
public static INMSBinding get()
{
return binding;
}
private static final String getNMSTag()
{
if(IrisSettings.get().disableNMS)
{
return "BUKKIT";
}
try
{
return Bukkit.getServer().getClass().getCanonicalName().split("\\Q.\\E")[3];
}
catch(Throwable e)
{
Iris.error("Failed to determine server nms version!");
e.printStackTrace();
}
return "BUKKIT";
}
private static final INMSBinding bind()
{
String code = getNMSTag();
Iris.info("Locating NMS Binding for " + code);
if(bindings.containsKey(code))
{
try
{
INMSBinding b = bindings.get(code).getConstructor().newInstance();
Iris.info("Craftbukkit " + code + " <-> " + b.getClass().getSimpleName() + " Successfully Bound");
return b;
}
catch(Throwable e)
{
e.printStackTrace();
}
}
Iris.info("Craftbukkit " + code + " <-> " + NMSBinding1X.class.getSimpleName() + " Successfully Bound");
Iris.warn("Note: Some features of Iris may not work the same since you are on an unsupported version of Minecraft.");
Iris.warn("Note: If this is a new version, expect an update soon.");
return new NMSBinding1X();
}
}

View File

@@ -0,0 +1,19 @@
package com.volmit.iris.nms;
import org.bukkit.World;
import org.bukkit.WorldCreator;
public interface INMSBinding
{
public INMSCreator getCreator();
default World createWorld(WorldCreator creator)
{
return getCreator().createWorld(creator);
}
default World createWorld(WorldCreator creator, boolean loadSpawn)
{
return getCreator().createWorld(creator, loadSpawn);
}
}

View File

@@ -0,0 +1,14 @@
package com.volmit.iris.nms;
import org.bukkit.World;
import org.bukkit.WorldCreator;
public interface INMSCreator
{
default World createWorld(WorldCreator creator)
{
return createWorld(creator, false);
}
public World createWorld(WorldCreator creator, boolean loadSpawn);
}

View File

@@ -0,0 +1,16 @@
package com.volmit.iris.nms.v1X;
import com.volmit.iris.generator.legacy.atomics.AtomicCache;
import com.volmit.iris.nms.INMSBinding;
import com.volmit.iris.nms.INMSCreator;
public class NMSBinding1X implements INMSBinding
{
private final AtomicCache<INMSCreator> creator = new AtomicCache<>();
@Override
public INMSCreator getCreator()
{
return creator.aquire(NMSCreator1X::new);
}
}

View File

@@ -0,0 +1,14 @@
package com.volmit.iris.nms.v1X;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import com.volmit.iris.nms.INMSCreator;
class NMSCreator1X implements INMSCreator
{
public World createWorld(WorldCreator creator, boolean loadSpawn)
{
return creator.createWorld();
}
}