From 406955edb0ecbecdf76d45aba763505f257b9fdb Mon Sep 17 00:00:00 2001 From: Yeregorix Date: Fri, 4 Oct 2024 13:23:48 +0200 Subject: [PATCH] Fix Guice error when depending on a mod --- .../launch/plugin/ForgePluginContainer.java | 13 ++++------- .../launch/plugin/NeoPluginContainer.java | 13 ++++------- .../launch/plugin/SpongePluginContainer.java} | 9 +++++--- .../inject/plugin/PublicPluginModule.java | 23 ++++++------------- .../plugin/VanillaDummyPluginContainer.java | 11 ++++++++- .../plugin/VanillaJavaPluginContainer.java | 10 ++++---- 6 files changed, 37 insertions(+), 42 deletions(-) rename src/{main/java/org/spongepowered/common/inject/SpongePluginInjectorProvider.java => launch/java/org/spongepowered/common/launch/plugin/SpongePluginContainer.java} (85%) diff --git a/forge/src/launch/java/org/spongepowered/forge/launch/plugin/ForgePluginContainer.java b/forge/src/launch/java/org/spongepowered/forge/launch/plugin/ForgePluginContainer.java index f7900c6743c..d4979335e54 100644 --- a/forge/src/launch/java/org/spongepowered/forge/launch/plugin/ForgePluginContainer.java +++ b/forge/src/launch/java/org/spongepowered/forge/launch/plugin/ForgePluginContainer.java @@ -30,8 +30,7 @@ import net.minecraftforge.fml.loading.moddiscovery.ModInfo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.spongepowered.common.inject.SpongePluginInjectorProvider; -import org.spongepowered.plugin.PluginContainer; +import org.spongepowered.common.launch.plugin.SpongePluginContainer; import org.spongepowered.plugin.metadata.PluginMetadata; import java.net.URI; @@ -41,7 +40,7 @@ import java.util.Objects; import java.util.Optional; -public class ForgePluginContainer implements PluginContainer, SpongePluginInjectorProvider { +public class ForgePluginContainer implements SpongePluginContainer { private final ModContainer modContainer; private Injector injector; @@ -52,10 +51,6 @@ private ForgePluginContainer(final ModContainer modContainer) { this.modContainer = modContainer; } - public ModContainer getModContainer() { - return this.modContainer; - } - @Override public PluginMetadata metadata() { if (this.pluginMetadata == null) { @@ -84,8 +79,8 @@ public Object instance() { } @Override - public Injector injector() { - return this.injector; + public Optional injector() { + return Optional.ofNullable(this.injector); } public void setInjector(final Injector injector) { diff --git a/neoforge/src/launch/java/org/spongepowered/neoforge/launch/plugin/NeoPluginContainer.java b/neoforge/src/launch/java/org/spongepowered/neoforge/launch/plugin/NeoPluginContainer.java index f5d62a5d966..e3dd33d8703 100644 --- a/neoforge/src/launch/java/org/spongepowered/neoforge/launch/plugin/NeoPluginContainer.java +++ b/neoforge/src/launch/java/org/spongepowered/neoforge/launch/plugin/NeoPluginContainer.java @@ -30,8 +30,7 @@ import net.neoforged.fml.loading.moddiscovery.ModInfo; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.spongepowered.common.inject.SpongePluginInjectorProvider; -import org.spongepowered.plugin.PluginContainer; +import org.spongepowered.common.launch.plugin.SpongePluginContainer; import org.spongepowered.plugin.metadata.PluginMetadata; import java.net.URI; @@ -41,7 +40,7 @@ import java.util.Objects; import java.util.Optional; -public class NeoPluginContainer implements PluginContainer, SpongePluginInjectorProvider { +public class NeoPluginContainer implements SpongePluginContainer { private final ModContainer modContainer; private Logger logger; @@ -53,10 +52,6 @@ private NeoPluginContainer(final ModContainer modContainer) { this.modContainer = modContainer; } - public ModContainer getModContainer() { - return this.modContainer; - } - @Override public PluginMetadata metadata() { if (this.pluginMetadata == null) { @@ -89,8 +84,8 @@ public void setInstance(final Object instance) { } @Override - public Injector injector() { - return this.injector; + public Optional injector() { + return Optional.ofNullable(this.injector); } public void setInjector(final Injector injector) { diff --git a/src/main/java/org/spongepowered/common/inject/SpongePluginInjectorProvider.java b/src/launch/java/org/spongepowered/common/launch/plugin/SpongePluginContainer.java similarity index 85% rename from src/main/java/org/spongepowered/common/inject/SpongePluginInjectorProvider.java rename to src/launch/java/org/spongepowered/common/launch/plugin/SpongePluginContainer.java index 0d275ee9e5f..7d6b13b7cda 100644 --- a/src/main/java/org/spongepowered/common/inject/SpongePluginInjectorProvider.java +++ b/src/launch/java/org/spongepowered/common/launch/plugin/SpongePluginContainer.java @@ -22,11 +22,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ -package org.spongepowered.common.inject; +package org.spongepowered.common.launch.plugin; import com.google.inject.Injector; +import org.spongepowered.plugin.PluginContainer; -public interface SpongePluginInjectorProvider { +import java.util.Optional; - Injector injector(); +public interface SpongePluginContainer extends PluginContainer { + + Optional injector(); } diff --git a/src/main/java/org/spongepowered/common/inject/plugin/PublicPluginModule.java b/src/main/java/org/spongepowered/common/inject/plugin/PublicPluginModule.java index 6c962fcd293..dcf628c26fb 100644 --- a/src/main/java/org/spongepowered/common/inject/plugin/PublicPluginModule.java +++ b/src/main/java/org/spongepowered/common/inject/plugin/PublicPluginModule.java @@ -26,7 +26,7 @@ import com.google.inject.AbstractModule; import org.spongepowered.api.Sponge; -import org.spongepowered.common.inject.SpongePluginInjectorProvider; +import org.spongepowered.common.launch.plugin.SpongePluginContainer; import org.spongepowered.plugin.PluginContainer; import org.spongepowered.plugin.metadata.model.PluginDependency; @@ -53,29 +53,20 @@ protected void configure() { continue; } - Sponge.pluginManager().plugin(dependency.id()).ifPresent(p -> { - if (!(p instanceof final SpongePluginInjectorProvider injectorProvider)) { - return; - } - - bindingHelper.bindFrom(injectorProvider.injector()); - }); + Sponge.pluginManager().plugin(dependency.id()) + .flatMap(p -> ((SpongePluginContainer) p).injector()) + .ifPresent(bindingHelper::bindFrom); } - //Indirect dependencies + // Indirect dependencies Sponge.pluginManager() .plugins() .stream() .filter(p -> p.metadata().dependency(this.container.metadata().id()) .map(PluginDependency::loadOrder) .orElse(PluginDependency.LoadOrder.UNDEFINED) == PluginDependency.LoadOrder.BEFORE) - .forEach(p -> { - if (!(p instanceof final SpongePluginInjectorProvider injectorProvider)) { - return; - } - - bindingHelper.bindFrom(injectorProvider.injector()); - }); + .flatMap(p -> ((SpongePluginContainer) p).injector().stream()) + .forEach(bindingHelper::bindFrom); bindingHelper.bind(); } diff --git a/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaDummyPluginContainer.java b/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaDummyPluginContainer.java index f2053bc5117..e9de757aa15 100644 --- a/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaDummyPluginContainer.java +++ b/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaDummyPluginContainer.java @@ -24,15 +24,24 @@ */ package org.spongepowered.vanilla.launch.plugin; +import com.google.inject.Injector; import org.apache.logging.log4j.Logger; import org.spongepowered.common.applaunch.plugin.DummyPluginContainer; +import org.spongepowered.common.launch.plugin.SpongePluginContainer; import org.spongepowered.plugin.PluginCandidate; import org.spongepowered.plugin.builtin.StandardPluginContainer; -public final class VanillaDummyPluginContainer extends StandardPluginContainer implements DummyPluginContainer { +import java.util.Optional; + +public final class VanillaDummyPluginContainer extends StandardPluginContainer implements SpongePluginContainer, DummyPluginContainer { public VanillaDummyPluginContainer(final PluginCandidate candidate, final Logger logger, final Object instance) { super(candidate, logger); this.initializeInstance(instance); } + + @Override + public Optional injector() { + return Optional.empty(); + } } diff --git a/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaJavaPluginContainer.java b/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaJavaPluginContainer.java index 8b80d344a13..696596282af 100644 --- a/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaJavaPluginContainer.java +++ b/vanilla/src/launch/java/org/spongepowered/vanilla/launch/plugin/VanillaJavaPluginContainer.java @@ -26,11 +26,13 @@ import com.google.inject.Injector; import org.spongepowered.api.Sponge; -import org.spongepowered.common.inject.SpongePluginInjectorProvider; +import org.spongepowered.common.launch.plugin.SpongePluginContainer; import org.spongepowered.plugin.PluginCandidate; import org.spongepowered.plugin.builtin.StandardPluginContainer; -public final class VanillaJavaPluginContainer extends StandardPluginContainer implements SpongePluginInjectorProvider { +import java.util.Optional; + +public final class VanillaJavaPluginContainer extends StandardPluginContainer implements SpongePluginContainer { private Injector injector; @@ -45,8 +47,8 @@ protected void initializeInstance(final Object instance) { } @Override - public Injector injector() { - return this.injector; + public Optional injector() { + return Optional.ofNullable(this.injector); } public void setInjector(final Injector injector) {