From 56a0c75a39d39d8634906c70ce2aa5bbc8dc227b Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Thu, 11 Jun 2026 17:54:10 -0400 Subject: [PATCH] Host Bridge --- core/src/main/java/art/arcane/iris/Iris.java | 17 ++++++ .../iris/platform/bukkit/BukkitPlatform.java | 52 +++++++++++++------ 2 files changed, 52 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/art/arcane/iris/Iris.java b/core/src/main/java/art/arcane/iris/Iris.java index d30fd15fb..dada0b675 100644 --- a/core/src/main/java/art/arcane/iris/Iris.java +++ b/core/src/main/java/art/arcane/iris/Iris.java @@ -547,6 +547,23 @@ public class Iris extends VolmitPlugin implements Listener, ReloadAware { instance = this; BukkitPlatform.hostPlugin(this); BukkitPlatform.hostConsoleSender(Iris::getSender); + BukkitPlatform.hostBridge(new BukkitPlatform.HostBridge( + (level, message) -> { + switch (level) { + case DEBUG -> Iris.debug(message); + case INFO -> Iris.info(message); + case WARN -> Iris.warn(message); + case ERROR -> Iris.error(message); + } + }, + Iris::msg, + Iris::reportError, + (event) -> Iris.callEvent((org.bukkit.event.Event) event), + () -> Iris.instance.getDataFolder(), + (path) -> Iris.instance.getDataFile(path), + () -> Iris.instance.getJarFile(), + () -> Iris.instance.getIrisVersion(), + () -> Iris.instance.getMCVersion())); SlimJar.load(); } diff --git a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java index eeffb0d66..b6de8f8f2 100644 --- a/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java +++ b/core/src/main/java/art/arcane/iris/platform/bukkit/BukkitPlatform.java @@ -18,7 +18,6 @@ package art.arcane.iris.platform.bukkit; -import art.arcane.iris.Iris; import art.arcane.iris.core.nms.INMS; import art.arcane.iris.engine.object.IrisPosition; import art.arcane.iris.spi.IrisPlatform; @@ -44,7 +43,6 @@ import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; -import org.bukkit.event.Event; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.inventory.ItemStack; @@ -61,6 +59,31 @@ public final class BukkitPlatform implements IrisPlatform { private static volatile Plugin PLUGIN; private static volatile Bindings.Adventure AUDIENCES; private static volatile Supplier CONSOLE; + private static volatile HostBridge BRIDGE; + + public record HostBridge( + java.util.function.BiConsumer logSink, + java.util.function.Consumer msgSink, + java.util.function.Consumer errorSink, + java.util.function.Consumer eventSink, + Supplier dataFolder, + java.util.function.Function dataFile, + Supplier pluginJar, + java.util.function.IntSupplier irisVersion, + java.util.function.IntSupplier minecraftVersion) { + } + + public static void hostBridge(HostBridge bridge) { + BRIDGE = bridge; + } + + private static HostBridge bridge() { + HostBridge bridge = BRIDGE; + if (bridge == null) { + throw new IllegalStateException("No Iris host bridge is hosted"); + } + return bridge; + } private final BukkitRegistries registries = new BukkitRegistries(); private final BukkitScheduler scheduler = new BukkitScheduler(); @@ -142,7 +165,7 @@ public final class BukkitPlatform implements IrisPlatform { public static void unregisterListener(Object candidate) { if (candidate instanceof Listener listener) { - Iris.instance.unregisterListener(listener); + volmitPlugin().unregisterListener(listener); } } @@ -223,32 +246,32 @@ public final class BukkitPlatform implements IrisPlatform { @Override public File dataFolder() { - return Iris.instance.getDataFolder(); + return bridge().dataFolder().get(); } @Override public File dataFile(String... path) { - return Iris.instance.getDataFile(path); + return bridge().dataFile().apply(path); } @Override public File pluginJar() { - return Iris.instance.getJarFile(); + return bridge().pluginJar().get(); } @Override public int irisVersionNumber() { - return Iris.instance.getIrisVersion(); + return bridge().irisVersion().getAsInt(); } @Override public int minecraftVersionNumber() { - return Iris.instance.getMCVersion(); + return bridge().minecraftVersion().getAsInt(); } @Override public void callEvent(Object event) { - Iris.callEvent((Event) event); + bridge().eventSink().accept(event); } @Override @@ -258,22 +281,17 @@ public final class BukkitPlatform implements IrisPlatform { @Override public void log(LogLevel level, String message) { - switch (level) { - case DEBUG -> Iris.debug(message); - case INFO -> Iris.info(message); - case WARN -> Iris.warn(message); - case ERROR -> Iris.error(message); - } + bridge().logSink().accept(level, message); } @Override public void msg(String message) { - Iris.msg(message); + bridge().msgSink().accept(message); } @Override public void reportError(Throwable error) { - Iris.reportError(error); + bridge().errorSink().accept(error); } private static final class BukkitCapabilities implements PlatformCapabilities {