diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java index f26698b39..68ba921ad 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/PlatformImpl.java @@ -20,6 +20,9 @@ package com.dfsek.terra.bukkit; import com.dfsek.tectonic.api.TypeRegistry; import com.dfsek.tectonic.api.depth.DepthTracker; import com.dfsek.tectonic.api.exception.LoadException; + +import com.dfsek.terra.bukkit.nms.Initializer; + import org.bukkit.Bukkit; import org.bukkit.entity.EntityType; import org.jetbrains.annotations.NotNull; @@ -96,7 +99,7 @@ public class PlatformImpl extends AbstractPlatform { @Override protected Iterable platformAddon() { - return List.of(new BukkitAddon(this)); + return List.of(Initializer.nmsAddon(this)); } @Override diff --git a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java index b39b67d6b..c29fa1e1b 100644 --- a/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java +++ b/platforms/bukkit/common/src/main/java/com/dfsek/terra/bukkit/nms/Initializer.java @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.nms; +import com.dfsek.terra.bukkit.BukkitAddon; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,20 +15,11 @@ public interface Initializer { static boolean init(PlatformImpl platform) { 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"); - try { - Initializer initializer = (Initializer) initializerClass.getConstructor().newInstance(); - initializer.initialize(platform); - } catch(ReflectiveOperationException e) { - throw new RuntimeException("Error initializing NMS bindings. Report this to Terra.", e); - } - } catch(ClassNotFoundException e) { + Initializer initializer = constructInitializer(); + if(initializer != null) { + initializer.initialize(platform); + } else { 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."); 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); } } + 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); + + BukkitAddon getNMSAddon(PlatformImpl plugin); } diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java index 2c7944d12..55be58c3b 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSAddon.java @@ -10,8 +10,8 @@ import com.dfsek.terra.bukkit.nms.v1_21.config.VanillaBiomeProperties; public class NMSAddon extends BukkitAddon { - public NMSAddon(PlatformImpl terraBukkitPlugin) { - super(terraBukkitPlugin); + public NMSAddon(PlatformImpl platform) { + super(platform); } @Override diff --git a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java index 18f1a058f..9e9ed7499 100644 --- a/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java +++ b/platforms/bukkit/nms/v1_21/src/main/java/com/dfsek/terra/bukkit/nms/v1_21/NMSInitializer.java @@ -1,5 +1,7 @@ package com.dfsek.terra.bukkit.nms.v1_21; +import com.dfsek.terra.bukkit.BukkitAddon; + import org.bukkit.Bukkit; import com.dfsek.terra.bukkit.PlatformImpl; @@ -12,4 +14,9 @@ public class NMSInitializer implements Initializer { AwfulBukkitHacks.registerBiomes(platform.getRawConfigRegistry()); Bukkit.getPluginManager().registerEvents(new NMSInjectListener(), platform.getPlugin()); } + + @Override + public BukkitAddon getNMSAddon(PlatformImpl plugin) { + return new NMSAddon(plugin); + } }