Added NMSAddon override for BukkitAddon

This commit is contained in:
OakLoaf 2024-10-29 19:38:59 +00:00
parent afd2c81b19
commit 8df3a4dd02
4 changed files with 45 additions and 16 deletions

View File

@ -20,6 +20,9 @@ package com.dfsek.terra.bukkit;
import com.dfsek.tectonic.api.TypeRegistry; import com.dfsek.tectonic.api.TypeRegistry;
import com.dfsek.tectonic.api.depth.DepthTracker; import com.dfsek.tectonic.api.depth.DepthTracker;
import com.dfsek.tectonic.api.exception.LoadException; import com.dfsek.tectonic.api.exception.LoadException;
import com.dfsek.terra.bukkit.nms.Initializer;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -96,7 +99,7 @@ public class PlatformImpl extends AbstractPlatform {
@Override @Override
protected Iterable<BaseAddon> platformAddon() { protected Iterable<BaseAddon> platformAddon() {
return List.of(new BukkitAddon(this)); return List.of(Initializer.nmsAddon(this));
} }
@Override @Override

View File

@ -1,5 +1,7 @@
package com.dfsek.terra.bukkit.nms; package com.dfsek.terra.bukkit.nms;
import com.dfsek.terra.bukkit.BukkitAddon;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -13,20 +15,11 @@ public interface Initializer {
static boolean init(PlatformImpl platform) { static boolean init(PlatformImpl platform) {
Logger logger = LoggerFactory.getLogger(Initializer.class); Logger logger = LoggerFactory.getLogger(Initializer.class);
try {
String packageVersion = NMS;
if(NMS.equals("v1_21_3")) {
packageVersion = "v1_21"; // TODO: Refactor nms package to v1_21_3
}
Class<?> initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer"); Initializer initializer = constructInitializer();
try { if(initializer != null) {
Initializer initializer = (Initializer) initializerClass.getConstructor().newInstance(); initializer.initialize(platform);
initializer.initialize(platform); } else {
} catch(ReflectiveOperationException e) {
throw new RuntimeException("Error initializing NMS bindings. Report this to Terra.", e);
}
} catch(ClassNotFoundException e) {
logger.error("NMS bindings for version {} do not exist. Support for this version is limited.", NMS); logger.error("NMS bindings for version {} do not exist. Support for this version is limited.", NMS);
logger.error("This is usually due to running Terra on an unsupported Minecraft version."); logger.error("This is usually due to running Terra on an unsupported Minecraft version.");
String bypassKey = "IKnowThereAreNoNMSBindingsFor" + NMS + "ButIWillProceedAnyway"; String bypassKey = "IKnowThereAreNoNMSBindingsFor" + NMS + "ButIWillProceedAnyway";
@ -49,8 +42,34 @@ public interface Initializer {
logger.error("Since you enabled the \"{}\" flag, we won't disable Terra. But be warned.", bypassKey); logger.error("Since you enabled the \"{}\" flag, we won't disable Terra. But be warned.", bypassKey);
} }
} }
return true; return true;
} }
static BukkitAddon nmsAddon(PlatformImpl platform) {
Initializer initializer = constructInitializer();
return initializer != null ? initializer.getNMSAddon(platform) : new BukkitAddon(platform);
}
private static Initializer constructInitializer() {
try {
String packageVersion = NMS;
if(NMS.equals("v1_21_3")) {
packageVersion = "v1_21"; // TODO: Refactor nms package to v1_21_3
}
Class<?> initializerClass = Class.forName(TERRA_PACKAGE + "." + packageVersion + ".NMSInitializer");
try {
return (Initializer) initializerClass.getConstructor().newInstance();
} catch(ReflectiveOperationException e) {
throw new RuntimeException("Error initializing NMS bindings. Report this to Terra.", e);
}
} catch(ClassNotFoundException e) {
return null;
}
}
void initialize(PlatformImpl plugin); void initialize(PlatformImpl plugin);
BukkitAddon getNMSAddon(PlatformImpl plugin);
} }

View File

@ -10,8 +10,8 @@ import com.dfsek.terra.bukkit.nms.v1_21.config.VanillaBiomeProperties;
public class NMSAddon extends BukkitAddon { public class NMSAddon extends BukkitAddon {
public NMSAddon(PlatformImpl terraBukkitPlugin) { public NMSAddon(PlatformImpl platform) {
super(terraBukkitPlugin); super(platform);
} }
@Override @Override

View File

@ -1,5 +1,7 @@
package com.dfsek.terra.bukkit.nms.v1_21; package com.dfsek.terra.bukkit.nms.v1_21;
import com.dfsek.terra.bukkit.BukkitAddon;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import com.dfsek.terra.bukkit.PlatformImpl; import com.dfsek.terra.bukkit.PlatformImpl;
@ -12,4 +14,9 @@ public class NMSInitializer implements Initializer {
AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry());
Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin());
} }
@Override
public BukkitAddon getNMSAddon(PlatformImpl plugin) {
return new NMSAddon(plugin);
}
} }