diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 6200d2c9..adbeb1ee 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -1,5 +1,3 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - plugins { `kotlin-dsl` } @@ -14,9 +12,3 @@ dependencies { implementation("gradle.plugin.com.github.johnrengelman", "shadow", "7.1.1") implementation("gradle.plugin.org.jetbrains.gradle.plugin.idea-ext", "gradle-idea-ext", "1.1.7") } - -tasks.withType { - kotlinOptions { - jvmTarget = "1.8" - } -} diff --git a/build-logic/src/main/kotlin/floodgate.base-conventions.gradle.kts b/build-logic/src/main/kotlin/floodgate.base-conventions.gradle.kts index f1d9ab8f..84bf069f 100644 --- a/build-logic/src/main/kotlin/floodgate.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/floodgate.base-conventions.gradle.kts @@ -18,9 +18,10 @@ indra { mitLicense() javaVersions { + target(11) // without toolchain & strictVersion sun.misc.Unsafe won't be found - minimumToolchain(8) - strictVersions(true) +// minimumToolchain(8) +// strictVersions(true) } } diff --git a/bungee/src/main/java/org/geysermc/floodgate/BungeePlatform.java b/bungee/src/main/java/org/geysermc/floodgate/BungeePlatform.java index 5fc98eaf..7e0d5a8d 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/BungeePlatform.java +++ b/bungee/src/main/java/org/geysermc/floodgate/BungeePlatform.java @@ -27,12 +27,7 @@ package org.geysermc.floodgate; import com.google.inject.Module; import net.md_5.bungee.api.plugin.Plugin; -import org.geysermc.floodgate.module.BungeeAddonModule; -import org.geysermc.floodgate.module.BungeeListenerModule; import org.geysermc.floodgate.module.BungeePlatformModule; -import org.geysermc.floodgate.module.CommandModule; -import org.geysermc.floodgate.module.PluginMessageModule; -import org.geysermc.floodgate.module.ProxyCommonModule; import org.geysermc.floodgate.util.ReflectionUtils; public class BungeePlatform extends FloodgatePlatform { @@ -46,18 +41,7 @@ public class BungeePlatform extends FloodgatePlatform { @Override protected Module[] loadStageModules() { return new Module[]{ - new ProxyCommonModule(plugin.getDataFolder().toPath()), new BungeePlatformModule(plugin) }; } - - @Override - protected Module[] postEnableStageModules() { - return new Module[]{ - new CommandModule(), - new BungeeListenerModule(), - new BungeeAddonModule(), - new PluginMessageModule() - }; - } } diff --git a/bungee/src/main/java/org/geysermc/floodgate/addon/data/BungeeDataAddon.java b/bungee/src/main/java/org/geysermc/floodgate/addon/data/BungeeDataAddon.java index a8822f54..45c313b6 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/addon/data/BungeeDataAddon.java +++ b/bungee/src/main/java/org/geysermc/floodgate/addon/data/BungeeDataAddon.java @@ -25,10 +25,11 @@ package org.geysermc.floodgate.addon.data; -import com.google.inject.Inject; -import com.google.inject.name.Named; import io.netty.channel.Channel; import io.netty.util.AttributeKey; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.geysermc.floodgate.api.ProxyFloodgateApi; import org.geysermc.floodgate.api.inject.InjectorAddon; import org.geysermc.floodgate.api.logger.FloodgateLogger; @@ -36,6 +37,7 @@ import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.geysermc.floodgate.config.ProxyFloodgateConfig; import org.geysermc.floodgate.player.FloodgateHandshakeHandler; +@Singleton public class BungeeDataAddon implements InjectorAddon { @Inject private FloodgateHandshakeHandler handshakeHandler; @Inject private ProxyFloodgateConfig config; diff --git a/bungee/src/main/java/org/geysermc/floodgate/inject/bungee/BungeeInjector.java b/bungee/src/main/java/org/geysermc/floodgate/inject/bungee/BungeeInjector.java index e6a3e964..c5f611b3 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/inject/bungee/BungeeInjector.java +++ b/bungee/src/main/java/org/geysermc/floodgate/inject/bungee/BungeeInjector.java @@ -30,6 +30,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; +import jakarta.inject.Singleton; import java.lang.reflect.Field; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -42,6 +43,7 @@ import org.geysermc.floodgate.util.BungeeReflectionUtils; import org.geysermc.floodgate.util.ReflectionUtils; @RequiredArgsConstructor +@Singleton public final class BungeeInjector extends CommonPlatformInjector { private static final String BUNGEE_INIT = "floodgate-bungee-init"; diff --git a/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListener.java b/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListener.java index 9723cf58..c66c6f73 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListener.java +++ b/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListener.java @@ -27,10 +27,11 @@ package org.geysermc.floodgate.listener; import static com.google.common.base.Preconditions.checkNotNull; -import com.google.inject.Inject; -import com.google.inject.name.Named; import io.netty.channel.Channel; import io.netty.util.AttributeKey; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.lang.reflect.Field; import java.util.UUID; import net.md_5.bungee.api.connection.PendingConnection; @@ -47,11 +48,14 @@ import org.geysermc.floodgate.api.ProxyFloodgateApi; import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.geysermc.floodgate.config.ProxyFloodgateConfig; +import org.geysermc.floodgate.register.ListenerRegister; import org.geysermc.floodgate.skin.SkinApplier; import org.geysermc.floodgate.skin.SkinDataImpl; import org.geysermc.floodgate.util.LanguageManager; import org.geysermc.floodgate.util.ReflectionUtils; +@ListenerRegister.Listener +@Singleton @SuppressWarnings("ConstantConditions") public final class BungeeListener implements Listener { private static final Field CHANNEL_WRAPPER; diff --git a/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListenerRegistration.java b/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListenerRegistration.java index cbfe1492..0282a738 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListenerRegistration.java +++ b/bungee/src/main/java/org/geysermc/floodgate/listener/BungeeListenerRegistration.java @@ -25,7 +25,7 @@ package org.geysermc.floodgate.listener; -import com.google.inject.Inject; +import jakarta.inject.Inject; import lombok.RequiredArgsConstructor; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.plugin.Listener; diff --git a/bungee/src/main/java/org/geysermc/floodgate/module/BungeeAddonModule.java b/bungee/src/main/java/org/geysermc/floodgate/module/BungeeAddonModule.java deleted file mode 100644 index e5945454..00000000 --- a/bungee/src/main/java/org/geysermc/floodgate/module/BungeeAddonModule.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.multibindings.ProvidesIntoSet; -import org.geysermc.floodgate.addon.AddonManagerAddon; -import org.geysermc.floodgate.addon.DebugAddon; -import org.geysermc.floodgate.addon.PacketHandlerAddon; -import org.geysermc.floodgate.addon.data.BungeeDataAddon; -import org.geysermc.floodgate.api.inject.InjectorAddon; -import org.geysermc.floodgate.register.AddonRegister; - -public final class BungeeAddonModule extends AbstractModule { - @Override - protected void configure() { - bind(AddonRegister.class).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon managerAddon() { - return new AddonManagerAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon dataAddon() { - return new BungeeDataAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon debugAddon() { - return new DebugAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon packetHandlerAddon() { - return new PacketHandlerAddon(); - } -} diff --git a/bungee/src/main/java/org/geysermc/floodgate/module/BungeeListenerModule.java b/bungee/src/main/java/org/geysermc/floodgate/module/BungeeListenerModule.java deleted file mode 100644 index a5a99d4f..00000000 --- a/bungee/src/main/java/org/geysermc/floodgate/module/BungeeListenerModule.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.TypeLiteral; -import com.google.inject.multibindings.ProvidesIntoSet; -import net.md_5.bungee.api.plugin.Listener; -import org.geysermc.floodgate.listener.BungeeListener; -import org.geysermc.floodgate.platform.pluginmessage.PluginMessageUtils; -import org.geysermc.floodgate.register.ListenerRegister; - -public final class BungeeListenerModule extends AbstractModule { - @Override - protected void configure() { - bind(new TypeLiteral>() {}).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public Listener bungeeListener() { - return new BungeeListener(); - } - - @Singleton - @ProvidesIntoSet - public Listener pluginMessageListener(PluginMessageUtils handler) { - return (Listener) handler; // Plugin message handler is also the listener - } -} diff --git a/bungee/src/main/java/org/geysermc/floodgate/module/BungeePlatformModule.java b/bungee/src/main/java/org/geysermc/floodgate/module/BungeePlatformModule.java index e21142ac..801c0262 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/module/BungeePlatformModule.java +++ b/bungee/src/main/java/org/geysermc/floodgate/module/BungeePlatformModule.java @@ -30,9 +30,9 @@ import cloud.commandframework.bungee.BungeeCommandManager; import cloud.commandframework.execution.CommandExecutionCoordinator; import com.google.inject.AbstractModule; import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.name.Named; import com.google.inject.name.Names; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.util.logging.Logger; import lombok.RequiredArgsConstructor; import net.md_5.bungee.api.CommandSender; @@ -46,14 +46,11 @@ import org.geysermc.floodgate.listener.BungeeListenerRegistration; import org.geysermc.floodgate.logger.JavaUtilFloodgateLogger; import org.geysermc.floodgate.platform.command.CommandUtil; import org.geysermc.floodgate.platform.listener.ListenerRegistration; -import org.geysermc.floodgate.platform.pluginmessage.PluginMessageUtils; import org.geysermc.floodgate.platform.util.PlatformUtils; import org.geysermc.floodgate.player.FloodgateCommandPreprocessor; import org.geysermc.floodgate.player.UserAudience; import org.geysermc.floodgate.pluginmessage.BungeePluginMessageRegistration; -import org.geysermc.floodgate.pluginmessage.BungeePluginMessageUtils; import org.geysermc.floodgate.pluginmessage.BungeeSkinApplier; -import org.geysermc.floodgate.pluginmessage.PluginMessageManager; import org.geysermc.floodgate.pluginmessage.PluginMessageRegistration; import org.geysermc.floodgate.skin.SkinApplier; import org.geysermc.floodgate.util.BungeeCommandUtil; @@ -107,14 +104,6 @@ public final class BungeePlatformModule extends AbstractModule { return new BungeeListenerRegistration(plugin); } - @Provides - @Singleton - public PluginMessageUtils pluginMessageUtils( - PluginMessageManager manager, - FloodgateLogger logger) { - return new BungeePluginMessageUtils(manager, logger); - } - @Provides @Singleton public PluginMessageRegistration pluginMessageRegistration() { diff --git a/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeePluginMessageUtils.java b/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeePluginMessageUtils.java index 178657b0..c4b62781 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeePluginMessageUtils.java +++ b/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeePluginMessageUtils.java @@ -25,8 +25,9 @@ package org.geysermc.floodgate.pluginmessage; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.UUID; -import lombok.RequiredArgsConstructor; import net.md_5.bungee.ServerConnection; import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; @@ -40,11 +41,13 @@ import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.platform.pluginmessage.PluginMessageUtils; import org.geysermc.floodgate.pluginmessage.PluginMessageChannel.Identity; import org.geysermc.floodgate.pluginmessage.PluginMessageChannel.Result; +import org.geysermc.floodgate.register.ListenerRegister; -@RequiredArgsConstructor +@ListenerRegister.Listener +@Singleton public final class BungeePluginMessageUtils extends PluginMessageUtils implements Listener { - private final PluginMessageManager pluginMessageManager; - private final FloodgateLogger logger; + @Inject PluginMessageManager pluginMessageManager; + @Inject FloodgateLogger logger; @EventHandler(priority = EventPriority.LOW) public void onPluginMessage(PluginMessageEvent event) { diff --git a/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java b/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java index ce6105ec..5f73371e 100644 --- a/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java +++ b/bungee/src/main/java/org/geysermc/floodgate/pluginmessage/BungeeSkinApplier.java @@ -28,8 +28,8 @@ package org.geysermc.floodgate.pluginmessage; import static com.google.common.base.Preconditions.checkNotNull; import static org.geysermc.floodgate.util.ReflectionUtils.getFieldOfType; -import com.google.inject.Inject; -import com.google.inject.Singleton; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; @@ -60,8 +60,8 @@ public final class BungeeSkinApplier implements SkinApplier { private final ProxyServer server = ProxyServer.getInstance(); - @Inject private EventBus eventBus; - @Inject private FloodgateLogger logger; + @Inject EventBus eventBus; + @Inject FloodgateLogger logger; @Override public void applySkin(@NonNull FloodgatePlayer floodgatePlayer, @NonNull SkinData skinData) { diff --git a/core/build.gradle.kts b/core/build.gradle.kts index d7d48737..da8e8cf7 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -16,6 +16,14 @@ dependencies { api("cloud.commandframework", "cloud-core", Versions.cloudVersion) api("org.yaml", "snakeyaml", Versions.snakeyamlVersion) api("org.bstats", "bstats-base", Versions.bstatsVersion) + + api("com.google.guava:guava:31.1-jre") + + api("io.avaje:avaje-inject:8.13-RC2") + annotationProcessor("io.avaje:avaje-inject-generator:8.13-RC2") + + testImplementation("io.avaje:avaje-inject-test:8.13-RC2") + testAnnotationProcessor("io.avaje:avaje-inject-generator:8.13-RC2") } // present on all platforms diff --git a/core/src/main/java/org/geysermc/floodgate/FloodgatePlatform.java b/core/src/main/java/org/geysermc/floodgate/FloodgatePlatform.java index 04d8d41f..4cd48bf6 100644 --- a/core/src/main/java/org/geysermc/floodgate/FloodgatePlatform.java +++ b/core/src/main/java/org/geysermc/floodgate/FloodgatePlatform.java @@ -25,15 +25,14 @@ package org.geysermc.floodgate; -import com.google.inject.Guice; -import com.google.inject.Inject; -import com.google.inject.Injector; -import com.google.inject.Module; +import io.avaje.inject.BeanScope; import java.util.UUID; import lombok.AccessLevel; import lombok.Getter; import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.InstanceHolder; +import org.geysermc.floodgate.api.ProxyModule; +import org.geysermc.floodgate.api.ServerModule; import org.geysermc.floodgate.api.event.FloodgateEventBus; import org.geysermc.floodgate.api.handshake.HandshakeHandlers; import org.geysermc.floodgate.api.inject.PlatformInjector; @@ -44,44 +43,42 @@ import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.event.EventBus; import org.geysermc.floodgate.event.lifecycle.PostEnableEvent; import org.geysermc.floodgate.event.lifecycle.ShutdownEvent; -import org.geysermc.floodgate.module.PostEnableModules; @Getter(AccessLevel.PROTECTED) public abstract class FloodgatePlatform { private static final UUID KEY = UUID.randomUUID(); - private PlatformInjector injector; - + + private BeanScope scope; private FloodgateConfig config; - @Inject private Injector guice; - - + private PlatformInjector injector; + public void load() { long startTime = System.currentTimeMillis(); - guice = guice != null ? - guice.createChildInjector(loadStageModules()) : - Guice.createInjector(loadStageModules()); + scope = BeanScope.builder() + .bean("isProxy", boolean.class, isProxy()) + .modules(new FloodgateModule()) + .modules(isProxy() ? new ProxyModule() : new ServerModule()) + .build(); - config = guice.getInstance(FloodgateConfig.class); - injector = guice.getInstance(PlatformInjector.class); + config = scope.get(FloodgateConfig.class); + injector = scope.get(PlatformInjector.class); InstanceHolder.set( - guice.getInstance(FloodgateApi.class), - guice.getInstance(PlayerLink.class), - guice.getInstance(FloodgateEventBus.class), + scope.get(FloodgateApi.class), + scope.get(PlayerLink.class), + scope.get(FloodgateEventBus.class), injector, - guice.getInstance(PacketHandlers.class), - guice.getInstance(HandshakeHandlers.class), + scope.get(PacketHandlers.class), + scope.get(HandshakeHandlers.class), KEY ); long endTime = System.currentTimeMillis(); - guice.getInstance(FloodgateLogger.class) + scope.get(FloodgateLogger.class) .translatedInfo("floodgate.core.finish", endTime - startTime); } - protected abstract Module[] loadStageModules(); - public void enable() throws RuntimeException { if (injector == null) { throw new RuntimeException("Failed to find the platform injector!"); @@ -93,15 +90,13 @@ public abstract class FloodgatePlatform { throw new RuntimeException("Failed to inject the packet listener!", exception); } - this.guice = guice.createChildInjector(new PostEnableModules(postEnableStageModules())); +// this.guice = guice.createChildInjector(new PostEnableModules(postEnableStageModules())); - guice.getInstance(EventBus.class).fire(new PostEnableEvent()); + scope.get(EventBus.class).fire(new PostEnableEvent()); } - protected abstract Module[] postEnableStageModules(); - public void disable() { - guice.getInstance(EventBus.class).fire(new ShutdownEvent()); + scope.get(EventBus.class).fire(new ShutdownEvent()); if (injector != null && injector.canRemoveInjection()) { try { @@ -110,9 +105,9 @@ public abstract class FloodgatePlatform { throw new RuntimeException("Failed to remove the injection!", exception); } } + + scope.close(); } - public boolean isProxy() { - return config.isProxy(); - } + abstract boolean isProxy(); } diff --git a/core/src/main/java/org/geysermc/floodgate/addon/AddonManagerAddon.java b/core/src/main/java/org/geysermc/floodgate/addon/AddonManagerAddon.java index 9e494292..4915166a 100644 --- a/core/src/main/java/org/geysermc/floodgate/addon/AddonManagerAddon.java +++ b/core/src/main/java/org/geysermc/floodgate/addon/AddonManagerAddon.java @@ -25,13 +25,15 @@ package org.geysermc.floodgate.addon; -import com.google.inject.Inject; import io.netty.channel.Channel; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.geysermc.floodgate.api.inject.InjectorAddon; import org.geysermc.floodgate.inject.CommonPlatformInjector; +@Singleton public final class AddonManagerAddon implements InjectorAddon { - @Inject private CommonPlatformInjector injector; + @Inject CommonPlatformInjector injector; @Override public void onInject(Channel channel, boolean toServer) { diff --git a/core/src/main/java/org/geysermc/floodgate/addon/DebugAddon.java b/core/src/main/java/org/geysermc/floodgate/addon/DebugAddon.java index 7249e167..3bc98901 100644 --- a/core/src/main/java/org/geysermc/floodgate/addon/DebugAddon.java +++ b/core/src/main/java/org/geysermc/floodgate/addon/DebugAddon.java @@ -25,10 +25,11 @@ package org.geysermc.floodgate.addon; -import com.google.inject.Inject; -import com.google.inject.name.Named; import io.netty.channel.Channel; import io.netty.channel.ChannelPipeline; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.geysermc.floodgate.addon.debug.ChannelInDebugHandler; import org.geysermc.floodgate.addon.debug.ChannelOutDebugHandler; import org.geysermc.floodgate.addon.debug.StateChangeDetector; @@ -37,21 +38,22 @@ import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.util.Utils; +@Singleton public final class DebugAddon implements InjectorAddon { - @Inject private FloodgateConfig config; - @Inject private FloodgateLogger logger; + @Inject FloodgateConfig config; + @Inject FloodgateLogger logger; @Inject @Named("implementationName") - private String implementationName; + String implementationName; @Inject @Named("packetEncoder") - private String packetEncoder; + String packetEncoder; @Inject @Named("packetDecoder") - private String packetDecoder; + String packetDecoder; @Override public void onInject(Channel channel, boolean toServer) { diff --git a/core/src/main/java/org/geysermc/floodgate/addon/PacketHandlerAddon.java b/core/src/main/java/org/geysermc/floodgate/addon/PacketHandlerAddon.java index 0d8c6713..4185b01b 100644 --- a/core/src/main/java/org/geysermc/floodgate/addon/PacketHandlerAddon.java +++ b/core/src/main/java/org/geysermc/floodgate/addon/PacketHandlerAddon.java @@ -25,26 +25,28 @@ package org.geysermc.floodgate.addon; -import com.google.inject.Inject; -import com.google.inject.name.Named; import io.netty.channel.Channel; import io.netty.channel.ChannelPipeline; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.geysermc.floodgate.addon.packethandler.ChannelInPacketHandler; import org.geysermc.floodgate.addon.packethandler.ChannelOutPacketHandler; import org.geysermc.floodgate.api.inject.InjectorAddon; import org.geysermc.floodgate.packet.PacketHandlersImpl; import org.geysermc.floodgate.util.Utils; +@Singleton public class PacketHandlerAddon implements InjectorAddon { - @Inject private PacketHandlersImpl packetHandlers; + @Inject PacketHandlersImpl packetHandlers; @Inject @Named("packetEncoder") - private String packetEncoder; + String packetEncoder; @Inject @Named("packetDecoder") - private String packetDecoder; + String packetDecoder; @Override public void onInject(Channel channel, boolean toServer) { diff --git a/core/src/main/java/org/geysermc/floodgate/addon/data/HandshakeHandlersImpl.java b/core/src/main/java/org/geysermc/floodgate/addon/data/HandshakeHandlersImpl.java index 1df44c5b..d060467c 100644 --- a/core/src/main/java/org/geysermc/floodgate/addon/data/HandshakeHandlersImpl.java +++ b/core/src/main/java/org/geysermc/floodgate/addon/data/HandshakeHandlersImpl.java @@ -27,11 +27,13 @@ package org.geysermc.floodgate.addon.data; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import jakarta.inject.Singleton; import java.util.Random; import org.geysermc.floodgate.api.handshake.HandshakeData; import org.geysermc.floodgate.api.handshake.HandshakeHandler; import org.geysermc.floodgate.api.handshake.HandshakeHandlers; +@Singleton public class HandshakeHandlersImpl implements HandshakeHandlers { private final Random random = new Random(); private final Int2ObjectMap handshakeHandlers = new Int2ObjectOpenHashMap<>(); diff --git a/core/src/main/java/org/geysermc/floodgate/api/ProxyFloodgateApi.java b/core/src/main/java/org/geysermc/floodgate/api/ProxyFloodgateApi.java index ede56730..86c1c9d6 100644 --- a/core/src/main/java/org/geysermc/floodgate/api/ProxyFloodgateApi.java +++ b/core/src/main/java/org/geysermc/floodgate/api/ProxyFloodgateApi.java @@ -25,14 +25,16 @@ package org.geysermc.floodgate.api; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.nio.charset.StandardCharsets; import org.geysermc.floodgate.crypto.FloodgateCipher; +import org.geysermc.floodgate.scope.ProxyScope; import org.geysermc.floodgate.util.BedrockData; +@ProxyScope public final class ProxyFloodgateApi extends SimpleFloodgateApi { @Inject - private FloodgateCipher cipher; + FloodgateCipher cipher; public byte[] createEncryptedData(BedrockData bedrockData) { try { diff --git a/core/src/main/java/org/geysermc/floodgate/api/SimpleFloodgateApi.java b/core/src/main/java/org/geysermc/floodgate/api/SimpleFloodgateApi.java index 5ef49e46..59e53265 100644 --- a/core/src/main/java/org/geysermc/floodgate/api/SimpleFloodgateApi.java +++ b/core/src/main/java/org/geysermc/floodgate/api/SimpleFloodgateApi.java @@ -30,7 +30,7 @@ import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableSet; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.util.Collection; import java.util.Map; import java.util.UUID; @@ -46,10 +46,12 @@ import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.pluginmessage.PluginMessageManager; import org.geysermc.floodgate.pluginmessage.channel.FormChannel; import org.geysermc.floodgate.pluginmessage.channel.TransferChannel; +import org.geysermc.floodgate.scope.ServerScope; import org.geysermc.floodgate.util.Constants; import org.geysermc.floodgate.util.HttpClient; import org.geysermc.floodgate.util.Utils; +@ServerScope public class SimpleFloodgateApi implements FloodgateApi { private final Map players = new ConcurrentHashMap<>(); private final Cache pendingRemove = @@ -57,10 +59,10 @@ public class SimpleFloodgateApi implements FloodgateApi { .expireAfterWrite(20, TimeUnit.SECONDS) .build(); - @Inject private PluginMessageManager pluginMessageManager; - @Inject private FloodgateConfig config; - @Inject private HttpClient httpClient; - @Inject private FloodgateLogger logger; + @Inject PluginMessageManager pluginMessageManager; + @Inject FloodgateConfig config; + @Inject HttpClient httpClient; + @Inject FloodgateLogger logger; @Override public String getPlayerPrefix() { diff --git a/core/src/main/java/org/geysermc/floodgate/command/LinkAccountCommand.java b/core/src/main/java/org/geysermc/floodgate/command/LinkAccountCommand.java index fe8695fd..674603da 100644 --- a/core/src/main/java/org/geysermc/floodgate/command/LinkAccountCommand.java +++ b/core/src/main/java/org/geysermc/floodgate/command/LinkAccountCommand.java @@ -32,9 +32,10 @@ import cloud.commandframework.Command; import cloud.commandframework.CommandManager; import cloud.commandframework.arguments.standard.StringArgument; import cloud.commandframework.context.CommandContext; -import com.google.inject.Inject; +import io.avaje.inject.Secondary; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import lombok.Getter; -import lombok.NoArgsConstructor; import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.link.LinkRequestResult; import org.geysermc.floodgate.api.link.PlayerLink; @@ -50,10 +51,11 @@ import org.geysermc.floodgate.player.audience.ProfileAudience; import org.geysermc.floodgate.player.audience.ProfileAudienceArgument; import org.geysermc.floodgate.util.Constants; -@NoArgsConstructor +@Singleton +@Secondary public final class LinkAccountCommand implements FloodgateCommand { - @Inject private FloodgateApi api; - @Inject private FloodgateLogger logger; + @Inject FloodgateApi api; + @Inject FloodgateLogger logger; @Override public Command buildCommand(CommandManager commandManager) { diff --git a/core/src/main/java/org/geysermc/floodgate/command/TestCommand.java b/core/src/main/java/org/geysermc/floodgate/command/TestCommand.java index f950da04..6c9613e3 100644 --- a/core/src/main/java/org/geysermc/floodgate/command/TestCommand.java +++ b/core/src/main/java/org/geysermc/floodgate/command/TestCommand.java @@ -28,12 +28,14 @@ package org.geysermc.floodgate.command; import cloud.commandframework.Command; import cloud.commandframework.CommandManager; import cloud.commandframework.context.CommandContext; +import jakarta.inject.Singleton; import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.platform.command.FloodgateCommand; import org.geysermc.floodgate.player.UserAudience; import org.geysermc.floodgate.util.Constants; +@Singleton public class TestCommand implements FloodgateCommand { @Override public Command buildCommand(CommandManager commandManager) { diff --git a/core/src/main/java/org/geysermc/floodgate/command/UnlinkAccountCommand.java b/core/src/main/java/org/geysermc/floodgate/command/UnlinkAccountCommand.java index 1c5b0444..221ebf54 100644 --- a/core/src/main/java/org/geysermc/floodgate/command/UnlinkAccountCommand.java +++ b/core/src/main/java/org/geysermc/floodgate/command/UnlinkAccountCommand.java @@ -31,11 +31,12 @@ import cloud.commandframework.ArgumentDescription; import cloud.commandframework.Command; import cloud.commandframework.CommandManager; import cloud.commandframework.context.CommandContext; -import com.google.inject.Inject; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import lombok.Getter; -import lombok.NoArgsConstructor; import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.link.PlayerLink; +import org.geysermc.floodgate.command.util.Permission; import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.link.GlobalPlayerLinking; import org.geysermc.floodgate.platform.command.FloodgateCommand; @@ -43,11 +44,10 @@ import org.geysermc.floodgate.platform.command.TranslatableMessage; import org.geysermc.floodgate.player.UserAudience; import org.geysermc.floodgate.player.UserAudience.PlayerAudience; import org.geysermc.floodgate.util.Constants; -import org.geysermc.floodgate.command.util.Permission; -@NoArgsConstructor +@Singleton public final class UnlinkAccountCommand implements FloodgateCommand { - @Inject private FloodgateApi api; + @Inject FloodgateApi api; @Override public Command buildCommand(CommandManager commandManager) { diff --git a/core/src/main/java/org/geysermc/floodgate/command/WhitelistCommand.java b/core/src/main/java/org/geysermc/floodgate/command/WhitelistCommand.java index b87a20ee..6fc911c2 100644 --- a/core/src/main/java/org/geysermc/floodgate/command/WhitelistCommand.java +++ b/core/src/main/java/org/geysermc/floodgate/command/WhitelistCommand.java @@ -33,7 +33,8 @@ import cloud.commandframework.CommandManager; import cloud.commandframework.context.CommandContext; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.inject.Inject; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.UUID; import lombok.Getter; import org.geysermc.floodgate.api.FloodgateApi; @@ -51,15 +52,16 @@ import org.geysermc.floodgate.player.audience.ProfileAudienceArgument; import org.geysermc.floodgate.util.Constants; import org.geysermc.floodgate.util.HttpClient; +@Singleton public class WhitelistCommand implements FloodgateCommand { - @Inject private FloodgateConfig config; - @Inject private HttpClient httpClient; - @Inject private FloodgateLogger logger; + @Inject FloodgateConfig config; + @Inject HttpClient httpClient; + @Inject FloodgateLogger logger; @Override public Command buildCommand(CommandManager commandManager) { Command.Builder builder = commandManager.commandBuilder("fwhitelist", - ArgumentDescription.of("Easy way to whitelist Bedrock players")) + ArgumentDescription.of("Easy way to whitelist Bedrock players")) .permission(Permission.COMMAND_WHITELIST.get()); commandManager.command(builder diff --git a/core/src/main/java/org/geysermc/floodgate/command/main/FirewallCheckSubcommand.java b/core/src/main/java/org/geysermc/floodgate/command/main/FirewallCheckSubcommand.java index 6fa989f5..9486b0ae 100644 --- a/core/src/main/java/org/geysermc/floodgate/command/main/FirewallCheckSubcommand.java +++ b/core/src/main/java/org/geysermc/floodgate/command/main/FirewallCheckSubcommand.java @@ -29,8 +29,8 @@ import static org.geysermc.floodgate.util.Constants.COLOR_CHAR; import cloud.commandframework.context.CommandContext; import com.google.gson.JsonElement; -import com.google.inject.Inject; import it.unimi.dsi.fastutil.Pair; +import jakarta.inject.Inject; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.BooleanSupplier; @@ -46,6 +46,11 @@ final class FirewallCheckSubcommand extends FloodgateSubCommand { @Inject private HttpClient httpClient; + @Override + public Class parent() { + return FirewallCheckSubcommand.class; + } + @Override public String name() { return "firewall"; diff --git a/core/src/main/java/org/geysermc/floodgate/command/main/MainCommand.java b/core/src/main/java/org/geysermc/floodgate/command/main/MainCommand.java index 446e8106..ada07aac 100644 --- a/core/src/main/java/org/geysermc/floodgate/command/main/MainCommand.java +++ b/core/src/main/java/org/geysermc/floodgate/command/main/MainCommand.java @@ -32,6 +32,7 @@ import cloud.commandframework.Command; import cloud.commandframework.Command.Builder; import cloud.commandframework.CommandManager; import cloud.commandframework.context.CommandContext; +import jakarta.inject.Singleton; import java.util.Locale; import org.geysermc.floodgate.command.util.Permission; import org.geysermc.floodgate.platform.command.FloodgateCommand; @@ -39,12 +40,8 @@ import org.geysermc.floodgate.platform.command.FloodgateSubCommand; import org.geysermc.floodgate.platform.command.SubCommands; import org.geysermc.floodgate.player.UserAudience; +@Singleton public final class MainCommand extends SubCommands implements FloodgateCommand { - public MainCommand() { - defineSubCommand(FirewallCheckSubcommand.class); - defineSubCommand(VersionSubcommand.class); - } - @Override public Command buildCommand(CommandManager commandManager) { Builder builder = commandManager.commandBuilder( diff --git a/core/src/main/java/org/geysermc/floodgate/command/main/VersionSubcommand.java b/core/src/main/java/org/geysermc/floodgate/command/main/VersionSubcommand.java index ea985778..c8fcfaf8 100644 --- a/core/src/main/java/org/geysermc/floodgate/command/main/VersionSubcommand.java +++ b/core/src/main/java/org/geysermc/floodgate/command/main/VersionSubcommand.java @@ -29,7 +29,7 @@ import static org.geysermc.floodgate.util.Constants.COLOR_CHAR; import cloud.commandframework.context.CommandContext; import com.google.gson.JsonElement; -import com.google.inject.Inject; +import jakarta.inject.Inject; import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.command.WhitelistCommand.Message; import org.geysermc.floodgate.command.util.Permission; @@ -39,11 +39,13 @@ import org.geysermc.floodgate.util.Constants; import org.geysermc.floodgate.util.HttpClient; public class VersionSubcommand extends FloodgateSubCommand { - @Inject - private HttpClient httpClient; + @Inject HttpClient httpClient; + @Inject FloodgateLogger logger; - @Inject - private FloodgateLogger logger; + @Override + public Class parent() { + return MainCommand.class; + } @Override public String name() { diff --git a/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java b/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java index 4a87b0d4..246f9f0d 100644 --- a/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java +++ b/core/src/main/java/org/geysermc/floodgate/config/FloodgateConfig.java @@ -25,6 +25,7 @@ package org.geysermc.floodgate.config; +import jakarta.inject.Singleton; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -38,6 +39,7 @@ import org.geysermc.configutils.loader.callback.GenericPostInitializeCallback; * addition to the global configuration like {@link ProxyFloodgateConfig} for the proxies. */ @Getter +@Singleton public class FloodgateConfig implements GenericPostInitializeCallback { private String keyFileName; private String usernamePrefix = ""; diff --git a/core/src/main/java/org/geysermc/floodgate/database/config/DatabaseConfigLoader.java b/core/src/main/java/org/geysermc/floodgate/database/config/DatabaseConfigLoader.java index ca71d7f6..7c3b68a1 100644 --- a/core/src/main/java/org/geysermc/floodgate/database/config/DatabaseConfigLoader.java +++ b/core/src/main/java/org/geysermc/floodgate/database/config/DatabaseConfigLoader.java @@ -26,8 +26,8 @@ package org.geysermc.floodgate.database.config; import com.google.gson.JsonObject; -import com.google.inject.Inject; -import com.google.inject.name.Named; +import jakarta.inject.Inject; +import jakarta.inject.Named; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; @@ -42,19 +42,19 @@ public class DatabaseConfigLoader { @Inject @Named("dataDirectory") - private Path dataDirectory; + Path dataDirectory; @Inject @Named("databaseName") - private String name; + String name; @Inject @Named("databaseClassLoader") - private ClassLoader classLoader; + ClassLoader classLoader; @Inject @Named("databaseInitData") - private JsonObject initData; + JsonObject initData; @Inject public void init() { diff --git a/core/src/main/java/org/geysermc/floodgate/event/EventBus.java b/core/src/main/java/org/geysermc/floodgate/event/EventBus.java index c8e6f9bc..c7c288f5 100644 --- a/core/src/main/java/org/geysermc/floodgate/event/EventBus.java +++ b/core/src/main/java/org/geysermc/floodgate/event/EventBus.java @@ -25,7 +25,7 @@ package org.geysermc.floodgate.event; -import com.google.inject.Singleton; +import jakarta.inject.Singleton; import java.util.function.BiConsumer; import java.util.function.Consumer; import org.checkerframework.checker.nullness.qual.NonNull; diff --git a/core/src/main/java/org/geysermc/floodgate/inject/CommonPlatformInjector.java b/core/src/main/java/org/geysermc/floodgate/inject/CommonPlatformInjector.java index 1547a2be..b400c2bd 100644 --- a/core/src/main/java/org/geysermc/floodgate/inject/CommonPlatformInjector.java +++ b/core/src/main/java/org/geysermc/floodgate/inject/CommonPlatformInjector.java @@ -26,6 +26,7 @@ package org.geysermc.floodgate.inject; import io.netty.channel.Channel; +import jakarta.inject.Inject; import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -40,6 +41,11 @@ public abstract class CommonPlatformInjector implements PlatformInjector { private final Map, InjectorAddon> addons = new HashMap<>(); + @Inject + void registerAddons(Set addons) { + addons.forEach(this::addAddon); + } + protected boolean addInjectedClient(Channel channel) { return injectedClients.add(channel); } diff --git a/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java b/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java index 9324a097..b53dc361 100644 --- a/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java +++ b/core/src/main/java/org/geysermc/floodgate/link/CommonPlayerLink.java @@ -25,9 +25,8 @@ package org.geysermc.floodgate.link; -import com.google.inject.Inject; -import com.google.inject.Key; -import com.google.inject.name.Names; +import io.avaje.inject.BeanScope; +import jakarta.inject.Inject; import java.util.Random; import java.util.UUID; import java.util.concurrent.ExecutorService; @@ -44,7 +43,6 @@ import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.database.config.DatabaseConfig; import org.geysermc.floodgate.database.config.DatabaseConfigLoader; import org.geysermc.floodgate.event.lifecycle.ShutdownEvent; -import org.geysermc.floodgate.util.InjectorHolder; @Listener public abstract class CommonPlayerLink implements PlayerLink { @@ -57,17 +55,17 @@ public abstract class CommonPlayerLink implements PlayerLink { @Inject @Getter(AccessLevel.PROTECTED) - private FloodgateLogger logger; + FloodgateLogger logger; @Inject @Getter(AccessLevel.PROTECTED) - private FloodgateApi api; + FloodgateApi api; @Inject - private InjectorHolder injectorHolder; + BeanScope scope; @Inject - private void init(FloodgateConfig config) { + void init(FloodgateConfig config) { FloodgateConfig.PlayerLinkConfig linkConfig = config.getPlayerLink(); enabled = linkConfig.isEnabled(); allowLinking = linkConfig.isAllowed(); @@ -94,12 +92,12 @@ public abstract class CommonPlayerLink implements PlayerLink { public T getConfig(Class configClass) { // this method is not intended to be used more than once. It'll make a new instance of // DatabaseConfigLoader and DatabaseConfig every time you run this method. - return injectorHolder.get().getInstance(DatabaseConfigLoader.class).loadAs(configClass); + return scope.get(DatabaseConfigLoader.class).loadAs(configClass); } @Override public String getName() { - return injectorHolder.get().getInstance(Key.get(String.class, Names.named("databaseName"))); + return scope.get(String.class, "databaseName"); } @Override diff --git a/core/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java b/core/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java index bc57c61b..c339d04f 100644 --- a/core/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java +++ b/core/src/main/java/org/geysermc/floodgate/link/GlobalPlayerLinking.java @@ -29,7 +29,7 @@ import static org.geysermc.floodgate.util.Constants.GET_BEDROCK_LINK; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.util.UUID; import java.util.concurrent.CompletableFuture; import lombok.Getter; @@ -43,8 +43,7 @@ import org.geysermc.floodgate.util.Utils; @Getter public class GlobalPlayerLinking extends CommonPlayerLink { - @Inject - private HttpClient httpClient; + @Inject HttpClient httpClient; private PlayerLink databaseImpl; diff --git a/core/src/main/java/org/geysermc/floodgate/link/PlayerLinkHolder.java b/core/src/main/java/org/geysermc/floodgate/link/PlayerLinkHolder.java index a91ba679..0f1c41b2 100644 --- a/core/src/main/java/org/geysermc/floodgate/link/PlayerLinkHolder.java +++ b/core/src/main/java/org/geysermc/floodgate/link/PlayerLinkHolder.java @@ -29,11 +29,10 @@ import static java.util.Objects.requireNonNull; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.google.inject.Inject; -import com.google.inject.Injector; -import com.google.inject.Singleton; -import com.google.inject.name.Named; -import com.google.inject.name.Names; +import io.avaje.inject.BeanScope; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -53,22 +52,22 @@ import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.config.FloodgateConfig.PlayerLinkConfig; import org.geysermc.floodgate.event.lifecycle.ShutdownEvent; import org.geysermc.floodgate.util.Constants; -import org.geysermc.floodgate.util.InjectorHolder; import org.geysermc.floodgate.util.Utils; @Listener @Singleton @SuppressWarnings("unchecked") public final class PlayerLinkHolder { - @Inject private Injector injector; - @Inject private FloodgateConfig config; - @Inject private FloodgateLogger logger; + @Inject BeanScope currentScope; + @Inject FloodgateConfig config; + @Inject FloodgateLogger logger; @Inject @Named("dataDirectory") - private Path dataDirectory; + Path dataDirectory; private URLClassLoader classLoader; + private BeanScope childScope; private PlayerLink instance; @NonNull @@ -100,7 +99,7 @@ public final class PlayerLinkHolder { // been found, or when global linking is enabled and own player linking is disabled. if (linkConfig.isEnableGlobalLinking() && (files.isEmpty() || !linkConfig.isEnableOwnLinking())) { - return injector.getInstance(GlobalPlayerLinking.class); + return currentScope.get(GlobalPlayerLinking.class); } if (files.isEmpty()) { @@ -174,26 +173,18 @@ public final class PlayerLinkHolder { init = false; - InjectorHolder injectorHolder = new InjectorHolder(); - Injector linkInjector = injector.createChildInjector(binder -> { - binder.bind(String.class) - .annotatedWith(Names.named("databaseName")) - .toInstance(databaseName); - binder.bind(ClassLoader.class).annotatedWith( - Names.named("databaseClassLoader")).toInstance(classLoader); - binder.bind(JsonObject.class) - .annotatedWith(Names.named("databaseInitData")) - .toInstance(dbInitConfig); - binder.bind(InjectorHolder.class) - .toInstance(injectorHolder); - }); - injectorHolder.set(linkInjector); + childScope = BeanScope.builder() + .parent(currentScope) + .bean("databaseName", String.class, databaseName) + .bean("databaseClassLoader", ClassLoader.class, classLoader) + .bean("databaseInitData", JsonObject.class, dbInitConfig) + .build(); - instance = linkInjector.getInstance(mainClass); + instance = childScope.get(mainClass); // we use our own internal PlayerLinking when global linking is enabled if (linkConfig.isEnableGlobalLinking()) { - GlobalPlayerLinking linking = linkInjector.getInstance(GlobalPlayerLinking.class); + GlobalPlayerLinking linking = childScope.get(GlobalPlayerLinking.class); linking.setDatabaseImpl(instance); linking.load(); return linking; @@ -220,6 +211,7 @@ public final class PlayerLinkHolder { @Subscribe public void onShutdown(ShutdownEvent ignored) throws Exception { instance.stop(); + childScope.close(); classLoader.close(); } } diff --git a/core/src/main/java/org/geysermc/floodgate/logger/JavaUtilFloodgateLogger.java b/core/src/main/java/org/geysermc/floodgate/logger/JavaUtilFloodgateLogger.java index 97f1af3f..1d51d228 100644 --- a/core/src/main/java/org/geysermc/floodgate/logger/JavaUtilFloodgateLogger.java +++ b/core/src/main/java/org/geysermc/floodgate/logger/JavaUtilFloodgateLogger.java @@ -27,24 +27,26 @@ package org.geysermc.floodgate.logger; import static org.geysermc.floodgate.util.MessageFormatter.format; -import com.google.inject.Inject; -import com.google.inject.Singleton; -import com.google.inject.name.Named; +import io.avaje.inject.Secondary; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.util.logging.Level; import java.util.logging.Logger; import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.util.LanguageManager; +@Secondary @Singleton public final class JavaUtilFloodgateLogger implements FloodgateLogger { @Inject @Named("logger") - private Logger logger; + Logger logger; private LanguageManager languageManager; @Inject - private void init(LanguageManager languageManager, FloodgateConfig config) { + public void init(LanguageManager languageManager, FloodgateConfig config) { this.languageManager = languageManager; if (config.isDebug()) { logger.setLevel(Level.ALL); diff --git a/core/src/main/java/org/geysermc/floodgate/module/CommandModule.java b/core/src/main/java/org/geysermc/floodgate/module/CommandModule.java deleted file mode 100644 index f741c868..00000000 --- a/core/src/main/java/org/geysermc/floodgate/module/CommandModule.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.multibindings.ProvidesIntoSet; -import org.geysermc.floodgate.command.LinkAccountCommand; -import org.geysermc.floodgate.command.TestCommand; -import org.geysermc.floodgate.command.UnlinkAccountCommand; -import org.geysermc.floodgate.command.WhitelistCommand; -import org.geysermc.floodgate.command.main.MainCommand; -import org.geysermc.floodgate.platform.command.FloodgateCommand; -import org.geysermc.floodgate.register.CommandRegister; - -public class CommandModule extends AbstractModule { - @Override - protected void configure() { - bind(CommandRegister.class).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public FloodgateCommand linkAccountCommand() { - return new LinkAccountCommand(); - } - - @Singleton - @ProvidesIntoSet - public FloodgateCommand unlinkAccountCommand() { - return new UnlinkAccountCommand(); - } - - @Singleton - @ProvidesIntoSet - public FloodgateCommand whitelistCommand() { - return new WhitelistCommand(); - } - - @Singleton - @ProvidesIntoSet - public FloodgateCommand testCommand() { - return new TestCommand(); - } - - @Singleton - @ProvidesIntoSet - public FloodgateCommand mainCommand() { - return new MainCommand(); - } -} diff --git a/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java b/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java index 881f3ede..68affbb3 100644 --- a/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java +++ b/core/src/main/java/org/geysermc/floodgate/module/CommonModule.java @@ -27,14 +27,14 @@ package org.geysermc.floodgate.module; import com.google.inject.AbstractModule; import com.google.inject.Provides; -import com.google.inject.Singleton; import com.google.inject.TypeLiteral; -import com.google.inject.name.Named; import com.google.inject.name.Names; import com.google.inject.spi.InjectionListener; import com.google.inject.spi.TypeEncounter; import com.google.inject.spi.TypeListener; import io.netty.util.AttributeKey; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.nio.file.Path; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -42,14 +42,9 @@ import java.util.concurrent.ScheduledExecutorService; import lombok.RequiredArgsConstructor; import org.geysermc.event.PostOrder; import org.geysermc.floodgate.addon.data.HandshakeHandlersImpl; -import org.geysermc.floodgate.api.FloodgateApi; import org.geysermc.floodgate.api.SimpleFloodgateApi; -import org.geysermc.floodgate.api.event.FloodgateEventBus; -import org.geysermc.floodgate.api.handshake.HandshakeHandlers; -import org.geysermc.floodgate.api.inject.PlatformInjector; import org.geysermc.floodgate.api.link.PlayerLink; import org.geysermc.floodgate.api.logger.FloodgateLogger; -import org.geysermc.floodgate.api.packet.PacketHandlers; import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.geysermc.floodgate.config.ConfigLoader; import org.geysermc.floodgate.config.FloodgateConfig; @@ -61,14 +56,11 @@ import org.geysermc.floodgate.crypto.KeyProducer; import org.geysermc.floodgate.event.EventBus; import org.geysermc.floodgate.event.lifecycle.ShutdownEvent; import org.geysermc.floodgate.event.util.ListenerAnnotationMatcher; -import org.geysermc.floodgate.inject.CommonPlatformInjector; import org.geysermc.floodgate.link.PlayerLinkHolder; -import org.geysermc.floodgate.packet.PacketHandlersImpl; import org.geysermc.floodgate.player.FloodgateHandshakeHandler; import org.geysermc.floodgate.pluginmessage.PluginMessageManager; import org.geysermc.floodgate.skin.SkinUploadManager; import org.geysermc.floodgate.util.Constants; -import org.geysermc.floodgate.util.HttpClient; import org.geysermc.floodgate.util.LanguageManager; @RequiredArgsConstructor @@ -78,8 +70,6 @@ public class CommonModule extends AbstractModule { @Override protected void configure() { - bind(EventBus.class).toInstance(eventBus); - bind(FloodgateEventBus.class).to(EventBus.class); // register every class that has the Listener annotation bindListener(new ListenerAnnotationMatcher(), new TypeListener() { @Override @@ -103,17 +93,6 @@ public class CommonModule extends AbstractModule { .annotatedWith(Names.named("commonScheduledPool")) .toInstance(commonScheduledPool); - bind(HttpClient.class).in(Singleton.class); - - bind(FloodgateApi.class).to(SimpleFloodgateApi.class); - bind(PlatformInjector.class).to(CommonPlatformInjector.class); - - bind(HandshakeHandlers.class).to(HandshakeHandlersImpl.class); - bind(HandshakeHandlersImpl.class).in(Singleton.class); - - bind(PacketHandlers.class).to(PacketHandlersImpl.class); - bind(PacketHandlersImpl.class).asEagerSingleton(); - install(new AutoBindModule()); } diff --git a/core/src/main/java/org/geysermc/floodgate/module/ConfigLoadedModule.java b/core/src/main/java/org/geysermc/floodgate/module/ConfigLoadedModule.java index 0c76ec4f..75ac24df 100644 --- a/core/src/main/java/org/geysermc/floodgate/module/ConfigLoadedModule.java +++ b/core/src/main/java/org/geysermc/floodgate/module/ConfigLoadedModule.java @@ -27,7 +27,7 @@ package org.geysermc.floodgate.module; import com.google.inject.AbstractModule; import com.google.inject.Provides; -import com.google.inject.Singleton; +import jakarta.inject.Singleton; import lombok.RequiredArgsConstructor; import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.config.ProxyFloodgateConfig; diff --git a/core/src/main/java/org/geysermc/floodgate/module/PluginMessageModule.java b/core/src/main/java/org/geysermc/floodgate/module/PluginMessageModule.java deleted file mode 100644 index 6fa6d928..00000000 --- a/core/src/main/java/org/geysermc/floodgate/module/PluginMessageModule.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.multibindings.ProvidesIntoSet; -import org.geysermc.floodgate.pluginmessage.PluginMessageChannel; -import org.geysermc.floodgate.pluginmessage.channel.FormChannel; -import org.geysermc.floodgate.pluginmessage.channel.PacketChannel; -import org.geysermc.floodgate.pluginmessage.channel.SkinChannel; -import org.geysermc.floodgate.pluginmessage.channel.TransferChannel; -import org.geysermc.floodgate.register.PluginMessageRegister; - -public final class PluginMessageModule extends AbstractModule { - @Override - protected void configure() { - bind(PluginMessageRegister.class).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public PluginMessageChannel formChannel() { - return new FormChannel(); - } - - @Singleton - @ProvidesIntoSet - public PluginMessageChannel skinChannel() { - return new SkinChannel(); - } - - @Singleton - @ProvidesIntoSet - public PluginMessageChannel transferChannel() { - return new TransferChannel(); - } - - @Singleton - @ProvidesIntoSet - public PluginMessageChannel packetChannel() { - return new PacketChannel(); - } -} diff --git a/core/src/main/java/org/geysermc/floodgate/module/ProxyCommonModule.java b/core/src/main/java/org/geysermc/floodgate/module/ProxyCommonModule.java deleted file mode 100644 index 77d52d2c..00000000 --- a/core/src/main/java/org/geysermc/floodgate/module/ProxyCommonModule.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.name.Named; -import java.nio.file.Path; -import org.geysermc.floodgate.api.ProxyFloodgateApi; -import org.geysermc.floodgate.api.SimpleFloodgateApi; -import org.geysermc.floodgate.config.FloodgateConfig; -import org.geysermc.floodgate.config.ProxyFloodgateConfig; - -public final class ProxyCommonModule extends CommonModule { - public ProxyCommonModule(Path dataDirectory) { - super(dataDirectory); - } - - @Override - protected void configure() { - super.configure(); - - bind(SimpleFloodgateApi.class).to(ProxyFloodgateApi.class); - bind(ProxyFloodgateApi.class).in(Singleton.class); - } - - @Provides - @Singleton - public ProxyFloodgateConfig proxyFloodgateConfig(FloodgateConfig config) { - return (ProxyFloodgateConfig) config; - } - - @Provides - @Singleton - @Named("configClass") - public Class floodgateConfigClass() { - return ProxyFloodgateConfig.class; - } -} diff --git a/core/src/main/java/org/geysermc/floodgate/module/ServerCommonModule.java b/core/src/main/java/org/geysermc/floodgate/module/ServerCommonModule.java deleted file mode 100644 index 23514824..00000000 --- a/core/src/main/java/org/geysermc/floodgate/module/ServerCommonModule.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.name.Named; -import java.nio.file.Path; -import org.geysermc.floodgate.api.SimpleFloodgateApi; -import org.geysermc.floodgate.config.FloodgateConfig; - -public final class ServerCommonModule extends CommonModule { - public ServerCommonModule(Path dataDirectory) { - super(dataDirectory); - } - - @Override - protected void configure() { - super.configure(); - bind(SimpleFloodgateApi.class).in(Singleton.class); - } - - @Provides - @Singleton - @Named("configClass") - public Class floodgateConfigClass() { - return FloodgateConfig.class; - } -} diff --git a/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java b/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java index 40358247..be4fba1e 100644 --- a/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java +++ b/core/src/main/java/org/geysermc/floodgate/news/NewsChecker.java @@ -27,8 +27,10 @@ package org.geysermc.floodgate.news; import com.google.gson.JsonArray; import com.google.gson.JsonElement; -import com.google.inject.Inject; -import com.google.inject.name.Named; +import io.avaje.inject.PostConstruct; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -42,35 +44,32 @@ import org.geysermc.floodgate.news.data.AnnouncementData; import org.geysermc.floodgate.news.data.BuildSpecificData; import org.geysermc.floodgate.news.data.CheckAfterData; import org.geysermc.floodgate.platform.command.CommandUtil; -import org.geysermc.floodgate.util.AutoBind; import org.geysermc.floodgate.util.Constants; import org.geysermc.floodgate.util.HttpClient; import org.geysermc.floodgate.util.HttpClient.HttpResponse; -@AutoBind +@Singleton public class NewsChecker { private final Map activeNewsItems = new HashMap<>(); - @Inject - @Named("commonScheduledPool") - private ScheduledExecutorService executorService; @Inject - private CommandUtil commandUtil; - @Inject - private HttpClient httpClient; - @Inject - private FloodgateLogger logger; + @Named("commonScheduledPool") + ScheduledExecutorService executorService; + + @Inject CommandUtil commandUtil; + @Inject HttpClient httpClient; + @Inject FloodgateLogger logger; @Inject @Named("gitBranch") - private String branch; + String branch; @Inject @Named("buildNumber") - private int build; + int build; private boolean firstCheck; - @Inject + @PostConstruct public void start() { executorService.scheduleWithFixedDelay(this::checkNews, 0, 30, TimeUnit.MINUTES); } diff --git a/core/src/main/java/org/geysermc/floodgate/packet/PacketHandlersImpl.java b/core/src/main/java/org/geysermc/floodgate/packet/PacketHandlersImpl.java index bca49e8e..da225010 100644 --- a/core/src/main/java/org/geysermc/floodgate/packet/PacketHandlersImpl.java +++ b/core/src/main/java/org/geysermc/floodgate/packet/PacketHandlersImpl.java @@ -26,6 +26,7 @@ package org.geysermc.floodgate.packet; import io.netty.channel.ChannelHandlerContext; +import jakarta.inject.Singleton; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -40,6 +41,7 @@ import org.geysermc.floodgate.api.packet.PacketHandler; import org.geysermc.floodgate.api.packet.PacketHandlers; import org.geysermc.floodgate.api.util.TriFunction; +@Singleton public final class PacketHandlersImpl implements PacketHandlers { private final Map> handlers = new HashMap<>(); private final Set> globalPacketHandlers = new HashSet<>(); diff --git a/core/src/main/java/org/geysermc/floodgate/platform/command/FloodgateSubCommand.java b/core/src/main/java/org/geysermc/floodgate/platform/command/FloodgateSubCommand.java index 25515ddc..12bdbfd3 100644 --- a/core/src/main/java/org/geysermc/floodgate/platform/command/FloodgateSubCommand.java +++ b/core/src/main/java/org/geysermc/floodgate/platform/command/FloodgateSubCommand.java @@ -30,6 +30,8 @@ import org.geysermc.floodgate.command.util.Permission; import org.geysermc.floodgate.player.UserAudience; public abstract class FloodgateSubCommand { + public abstract Class parent(); + public abstract String name(); public abstract String description(); diff --git a/core/src/main/java/org/geysermc/floodgate/platform/command/SubCommands.java b/core/src/main/java/org/geysermc/floodgate/platform/command/SubCommands.java index 75ece406..eb6051e6 100644 --- a/core/src/main/java/org/geysermc/floodgate/platform/command/SubCommands.java +++ b/core/src/main/java/org/geysermc/floodgate/platform/command/SubCommands.java @@ -25,27 +25,15 @@ package org.geysermc.floodgate.platform.command; -import com.google.inject.Inject; -import com.google.inject.Injector; -import java.util.Collections; -import java.util.HashSet; +import jakarta.inject.Inject; import java.util.Set; public abstract class SubCommands { - private final Set> toRegister = new HashSet<>(); - private Set subCommands; - - public void defineSubCommand(Class subCommandClass) { - toRegister.add(subCommandClass); - } + Set subCommands; @Inject - public void registerSubCommands(Injector injector) { - Set subCommandSet = new HashSet<>(); - for (Class subCommand : toRegister) { - subCommandSet.add(injector.getInstance(subCommand)); - } - subCommands = Collections.unmodifiableSet(subCommandSet); + public void setup(Set subCommands) { + subCommands.removeIf(subCommand -> !subCommand.parent().isAssignableFrom(this.getClass())); } protected Set subCommands() { diff --git a/core/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageManager.java b/core/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageManager.java index ee162412..58ab20fe 100644 --- a/core/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageManager.java +++ b/core/src/main/java/org/geysermc/floodgate/pluginmessage/PluginMessageManager.java @@ -25,7 +25,7 @@ package org.geysermc.floodgate.pluginmessage; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -34,6 +34,8 @@ public class PluginMessageManager { private final Map, PluginMessageChannel> classInstanceMap = new HashMap<>(); private final Map identifierInstanceMap = new HashMap<>(); + @Inject PluginMessageRegistration registration; + @Inject public void addChannels(Set channels) { if (!classInstanceMap.isEmpty()) { @@ -43,6 +45,7 @@ public class PluginMessageManager { for (PluginMessageChannel channel : channels) { classInstanceMap.put(channel.getClass(), channel); identifierInstanceMap.put(channel.getIdentifier(), channel); + registration.register(channel); } } diff --git a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/FormChannel.java b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/FormChannel.java index b12ec325..06c2dd82 100644 --- a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/FormChannel.java +++ b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/FormChannel.java @@ -26,9 +26,9 @@ package org.geysermc.floodgate.pluginmessage.channel; import com.google.common.base.Charsets; -import com.google.inject.Inject; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; +import jakarta.inject.Inject; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import org.geysermc.cumulus.form.Form; @@ -44,9 +44,9 @@ public class FormChannel implements PluginMessageChannel { private final Short2ObjectMap
storedForms = new Short2ObjectOpenHashMap<>(); private final AtomicInteger nextFormId = new AtomicInteger(0); - @Inject private PluginMessageUtils pluginMessageUtils; - @Inject private FloodgateConfig config; - @Inject private FloodgateLogger logger; + @Inject PluginMessageUtils pluginMessageUtils; + @Inject FloodgateConfig config; + @Inject FloodgateLogger logger; @Override public String getIdentifier() { diff --git a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/PacketChannel.java b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/PacketChannel.java index 2296f35e..5826308f 100644 --- a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/PacketChannel.java +++ b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/PacketChannel.java @@ -25,14 +25,14 @@ package org.geysermc.floodgate.pluginmessage.channel; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.util.UUID; import org.geysermc.floodgate.api.UnsafeFloodgateApi; import org.geysermc.floodgate.platform.pluginmessage.PluginMessageUtils; import org.geysermc.floodgate.pluginmessage.PluginMessageChannel; public final class PacketChannel implements PluginMessageChannel { - @Inject private PluginMessageUtils pluginMessageUtils; + @Inject PluginMessageUtils pluginMessageUtils; @Override public String getIdentifier() { diff --git a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/SkinChannel.java b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/SkinChannel.java index 8e9e64b0..d9a60204 100644 --- a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/SkinChannel.java +++ b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/SkinChannel.java @@ -25,7 +25,7 @@ package org.geysermc.floodgate.pluginmessage.channel; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.nio.charset.StandardCharsets; import java.util.UUID; import org.geysermc.floodgate.api.FloodgateApi; @@ -38,9 +38,9 @@ import org.geysermc.floodgate.skin.SkinApplier; import org.geysermc.floodgate.skin.SkinDataImpl; public class SkinChannel implements PluginMessageChannel { - @Inject private FloodgateApi api; - @Inject private FloodgateConfig config; - @Inject private SkinApplier skinApplier; + @Inject FloodgateApi api; + @Inject FloodgateConfig config; + @Inject SkinApplier skinApplier; @Override public String getIdentifier() { diff --git a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/TransferChannel.java b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/TransferChannel.java index 7ca754ed..70bd363b 100644 --- a/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/TransferChannel.java +++ b/core/src/main/java/org/geysermc/floodgate/pluginmessage/channel/TransferChannel.java @@ -25,14 +25,14 @@ package org.geysermc.floodgate.pluginmessage.channel; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.nio.charset.StandardCharsets; import java.util.UUID; import org.geysermc.floodgate.platform.pluginmessage.PluginMessageUtils; import org.geysermc.floodgate.pluginmessage.PluginMessageChannel; public class TransferChannel implements PluginMessageChannel { - @Inject private PluginMessageUtils pluginMessageUtils; + @Inject PluginMessageUtils pluginMessageUtils; @Override public String getIdentifier() { diff --git a/core/src/main/java/org/geysermc/floodgate/register/CommandRegister.java b/core/src/main/java/org/geysermc/floodgate/register/CommandRegister.java index 2eed7d26..21938cbc 100644 --- a/core/src/main/java/org/geysermc/floodgate/register/CommandRegister.java +++ b/core/src/main/java/org/geysermc/floodgate/register/CommandRegister.java @@ -26,9 +26,8 @@ package org.geysermc.floodgate.register; import cloud.commandframework.CommandManager; -import com.google.inject.Inject; -import com.google.inject.Injector; -import com.google.inject.Key; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.Set; import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.platform.command.FloodgateCommand; @@ -39,22 +38,14 @@ import org.geysermc.floodgate.player.UserAudience; * is currently in use. So that the commands only have to be written once (in the common module) and * can be used across all platforms without the need of adding platform specific commands. */ +@Singleton public final class CommandRegister { - private final CommandManager commandManager; - private final FloodgateConfig config; - private final Injector guice; - - @Inject - public CommandRegister(Injector guice) { - this.commandManager = guice.getInstance(new Key>() {}); - this.config = guice.getInstance(FloodgateConfig.class); - this.guice = guice; - } + @Inject CommandManager commandManager; + @Inject FloodgateConfig config; @Inject public void registerCommands(Set foundCommands) { for (FloodgateCommand command : foundCommands) { - guice.injectMembers(command); if (command.shouldRegister(config)) { commandManager.command(command.buildCommand(commandManager)); } diff --git a/core/src/main/java/org/geysermc/floodgate/register/ListenerRegister.java b/core/src/main/java/org/geysermc/floodgate/register/ListenerRegister.java index 62785b27..06264b6e 100644 --- a/core/src/main/java/org/geysermc/floodgate/register/ListenerRegister.java +++ b/core/src/main/java/org/geysermc/floodgate/register/ListenerRegister.java @@ -25,22 +25,31 @@ package org.geysermc.floodgate.register; -import com.google.inject.Inject; -import com.google.inject.Injector; -import java.util.Set; -import lombok.RequiredArgsConstructor; +import jakarta.inject.Inject; +import jakarta.inject.Qualifier; +import jakarta.inject.Singleton; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; import org.geysermc.floodgate.platform.listener.ListenerRegistration; -@RequiredArgsConstructor(onConstructor = @__(@Inject)) -public final class ListenerRegister { - private final ListenerRegistration registration; - private final Injector guice; - +@Singleton +@SuppressWarnings({"rawtypes", "unchecked"}) +public final class ListenerRegister { @Inject - public void registerListeners(Set foundListeners) { - for (T listener : foundListeners) { - guice.injectMembers(listener); - registration.register(listener); - } + ListenerRegistration registration; + +// @Inject +// public void registerListeners(Set<@Listener Object> foundListeners) { +// for (Object listener : foundListeners) { +// registration.register(listener); +// } +// } + + @Qualifier + @Retention(RetentionPolicy.RUNTIME) + @Target(ElementType.TYPE_USE) + public @interface Listener { } } diff --git a/core/src/main/java/org/geysermc/floodgate/register/PluginMessageRegister.java b/core/src/main/java/org/geysermc/floodgate/register/PluginMessageRegister.java deleted file mode 100644 index 1a71f6fb..00000000 --- a/core/src/main/java/org/geysermc/floodgate/register/PluginMessageRegister.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.register; - -import com.google.inject.Inject; -import com.google.inject.Injector; -import java.util.Set; -import org.geysermc.floodgate.pluginmessage.PluginMessageChannel; -import org.geysermc.floodgate.pluginmessage.PluginMessageManager; -import org.geysermc.floodgate.pluginmessage.PluginMessageRegistration; - -public class PluginMessageRegister { - @Inject private Injector guice; - @Inject private PluginMessageManager manager; - @Inject private PluginMessageRegistration registration; - - @Inject - public void registerChannels(Set channels) { - // we can safely add the channels this way - guice.injectMembers(manager); - - for (PluginMessageChannel channel : channels) { - guice.injectMembers(channel); - registration.register(channel); - } - } -} diff --git a/core/src/main/java/org/geysermc/floodgate/util/InjectorHolder.java b/core/src/main/java/org/geysermc/floodgate/scope/ProxyScope.java similarity index 77% rename from core/src/main/java/org/geysermc/floodgate/util/InjectorHolder.java rename to core/src/main/java/org/geysermc/floodgate/scope/ProxyScope.java index c4865da9..ac5c5816 100644 --- a/core/src/main/java/org/geysermc/floodgate/util/InjectorHolder.java +++ b/core/src/main/java/org/geysermc/floodgate/scope/ProxyScope.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,18 +23,13 @@ * @link https://github.com/GeyserMC/Floodgate */ -package org.geysermc.floodgate.util; +package org.geysermc.floodgate.scope; -import com.google.inject.Injector; +import jakarta.inject.Scope; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; -public class InjectorHolder { - private Injector injector; - - public Injector get() { - return injector; - } - - public void set(Injector injector) { - this.injector = injector; - } +@Retention(RetentionPolicy.RUNTIME) +@Scope +public @interface ProxyScope { } diff --git a/core/src/main/java/org/geysermc/floodgate/register/AddonRegister.java b/core/src/main/java/org/geysermc/floodgate/scope/ServerScope.java similarity index 64% rename from core/src/main/java/org/geysermc/floodgate/register/AddonRegister.java rename to core/src/main/java/org/geysermc/floodgate/scope/ServerScope.java index 094b99a7..90f5894a 100644 --- a/core/src/main/java/org/geysermc/floodgate/register/AddonRegister.java +++ b/core/src/main/java/org/geysermc/floodgate/scope/ServerScope.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,23 +23,13 @@ * @link https://github.com/GeyserMC/Floodgate */ -package org.geysermc.floodgate.register; +package org.geysermc.floodgate.scope; -import com.google.inject.Inject; -import com.google.inject.Injector; -import java.util.Set; -import org.geysermc.floodgate.api.inject.InjectorAddon; -import org.geysermc.floodgate.api.inject.PlatformInjector; +import jakarta.inject.Scope; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; -public final class AddonRegister { - @Inject private Injector guice; - @Inject private PlatformInjector injector; - - @Inject - public void registerAddons(Set addons) { - for (InjectorAddon addon : addons) { - guice.injectMembers(addon); - injector.addAddon(addon); - } - } +@Retention(RetentionPolicy.RUNTIME) +@Scope +public @interface ServerScope { } diff --git a/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java b/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java index 61db1ab6..87c5d798 100644 --- a/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java +++ b/core/src/main/java/org/geysermc/floodgate/skin/SkinUploadManager.java @@ -25,11 +25,11 @@ package org.geysermc.floodgate.skin; -import com.google.inject.Inject; -import com.google.inject.Singleton; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMaps; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.geysermc.event.Listener; import org.geysermc.event.subscribe.Subscribe; import org.geysermc.floodgate.api.FloodgateApi; @@ -42,9 +42,9 @@ public final class SkinUploadManager { private final Int2ObjectMap connections = Int2ObjectMaps.synchronize(new Int2ObjectOpenHashMap<>()); - @Inject private FloodgateApi api; - @Inject private SkinApplier applier; - @Inject private FloodgateLogger logger; + @Inject FloodgateApi api; + @Inject SkinApplier applier; + @Inject FloodgateLogger logger; public void addConnectionIfNeeded(int id, String verifyCode) { connections.computeIfAbsent(id, (ignored) -> { diff --git a/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java b/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java index 960dc1b1..65d2280b 100644 --- a/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java +++ b/core/src/main/java/org/geysermc/floodgate/util/HttpClient.java @@ -27,9 +27,9 @@ package org.geysermc.floodgate.util; import com.google.gson.Gson; import com.google.gson.JsonObject; -import com.google.inject.Inject; -import com.google.inject.Singleton; -import com.google.inject.name.Named; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; @@ -51,7 +51,7 @@ public class HttpClient { private final Gson gson = new Gson(); @Inject @Named("commonPool") - private ExecutorService executorService; + ExecutorService executorService; public CompletableFuture asyncGet(String urlString) { return CompletableFuture.supplyAsync(() -> get(urlString), executorService); diff --git a/core/src/main/java/org/geysermc/floodgate/util/LanguageManager.java b/core/src/main/java/org/geysermc/floodgate/util/LanguageManager.java index a3d659bf..d93b1c58 100644 --- a/core/src/main/java/org/geysermc/floodgate/util/LanguageManager.java +++ b/core/src/main/java/org/geysermc/floodgate/util/LanguageManager.java @@ -26,8 +26,8 @@ package org.geysermc.floodgate.util; import com.google.common.base.Joiner; -import com.google.inject.Inject; -import com.google.inject.Singleton; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.net.URL; import java.text.MessageFormat; import java.util.HashMap; @@ -45,13 +45,13 @@ import org.geysermc.floodgate.config.FloodgateConfig; public final class LanguageManager { private final Map localeMappings = new HashMap<>(); - @Inject private FloodgateConfig config; - @Inject private FloodgateLogger logger; + @Inject FloodgateConfig config; + @Inject FloodgateLogger logger; /** * The locale used in console and as a fallback */ - @Getter private String defaultLocale; + @Getter String defaultLocale; /** * Cleans up and formats a locale string diff --git a/core/src/main/java/org/geysermc/floodgate/util/Metrics.java b/core/src/main/java/org/geysermc/floodgate/util/Metrics.java index 4ef585b7..385d772b 100644 --- a/core/src/main/java/org/geysermc/floodgate/util/Metrics.java +++ b/core/src/main/java/org/geysermc/floodgate/util/Metrics.java @@ -25,8 +25,9 @@ package org.geysermc.floodgate.util; -import com.google.inject.Inject; -import com.google.inject.name.Named; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.util.Collections; import java.util.HashMap; import java.util.Locale; @@ -44,14 +45,18 @@ import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.config.FloodgateConfig.MetricsConfig; import org.geysermc.floodgate.platform.util.PlatformUtils; -@AutoBind +@Singleton public final class Metrics { private final MetricsBase metricsBase; @Inject - Metrics(FloodgateConfig config, PlatformUtils platformUtils, FloodgateApi api, - @Named("implementationName") String implementationName, FloodgateLogger logger) { - + Metrics( + FloodgateConfig config, + PlatformUtils platformUtils, + FloodgateApi api, + @Named("implementationName") String implementationName, + FloodgateLogger logger + ) { MetricsConfig metricsConfig = config.getMetrics(); metricsBase = new MetricsBase( diff --git a/core/src/main/java/org/geysermc/floodgate/util/PostEnableMessages.java b/core/src/main/java/org/geysermc/floodgate/util/PostEnableMessages.java index e526c470..96046ee5 100644 --- a/core/src/main/java/org/geysermc/floodgate/util/PostEnableMessages.java +++ b/core/src/main/java/org/geysermc/floodgate/util/PostEnableMessages.java @@ -25,8 +25,9 @@ package org.geysermc.floodgate.util; -import com.google.inject.Inject; -import com.google.inject.name.Named; +import io.avaje.inject.PostConstruct; +import jakarta.inject.Inject; +import jakarta.inject.Named; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledExecutorService; @@ -42,11 +43,11 @@ import org.geysermc.floodgate.event.lifecycle.PostEnableEvent; public final class PostEnableMessages { private final List messages = new ArrayList<>(); - @Inject private FloodgateConfig config; - @Inject private FloodgateLogger logger; + @Inject FloodgateConfig config; + @Inject FloodgateLogger logger; @Inject @Named("commonScheduledPool") - private ScheduledExecutorService executorService; + ScheduledExecutorService executorService; public void add(String[] message, Object... args) { StringBuilder builder = new StringBuilder(); @@ -60,12 +61,8 @@ public final class PostEnableMessages { messages.add(MessageFormatter.format(builder.toString(), args)); } - @Inject - private void init() { - registerPrefixMessages(); - } - - private void registerPrefixMessages() { + @PostConstruct + void registerPrefixMessages() { String prefix = config.getRawUsernamePrefix(); if (prefix.isEmpty()) { diff --git a/spigot/src/main/java/org/geysermc/floodgate/SpigotPlatform.java b/spigot/src/main/java/org/geysermc/floodgate/SpigotPlatform.java index 94fc8be0..6f63fc72 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/SpigotPlatform.java +++ b/spigot/src/main/java/org/geysermc/floodgate/SpigotPlatform.java @@ -30,7 +30,6 @@ import org.bukkit.plugin.java.JavaPlugin; import org.geysermc.floodgate.api.handshake.HandshakeHandlers; import org.geysermc.floodgate.module.PaperListenerModule; import org.geysermc.floodgate.module.PluginMessageModule; -import org.geysermc.floodgate.module.ServerCommonModule; import org.geysermc.floodgate.module.SpigotAddonModule; import org.geysermc.floodgate.module.SpigotCommandModule; import org.geysermc.floodgate.module.SpigotListenerModule; diff --git a/spigot/src/main/java/org/geysermc/floodgate/addon/data/SpigotDataAddon.java b/spigot/src/main/java/org/geysermc/floodgate/addon/data/SpigotDataAddon.java index 6e5c79f7..0f7beedb 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/addon/data/SpigotDataAddon.java +++ b/spigot/src/main/java/org/geysermc/floodgate/addon/data/SpigotDataAddon.java @@ -25,10 +25,11 @@ package org.geysermc.floodgate.addon.data; -import com.google.inject.Inject; -import com.google.inject.name.Named; import io.netty.channel.Channel; import io.netty.util.AttributeKey; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.geysermc.floodgate.api.SimpleFloodgateApi; import org.geysermc.floodgate.api.inject.InjectorAddon; import org.geysermc.floodgate.api.logger.FloodgateLogger; @@ -36,23 +37,24 @@ import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.geysermc.floodgate.config.FloodgateConfig; import org.geysermc.floodgate.player.FloodgateHandshakeHandler; +@Singleton public final class SpigotDataAddon implements InjectorAddon { - @Inject private FloodgateHandshakeHandler handshakeHandler; - @Inject private FloodgateConfig config; - @Inject private SimpleFloodgateApi api; - @Inject private FloodgateLogger logger; + @Inject FloodgateHandshakeHandler handshakeHandler; + @Inject FloodgateConfig config; + @Inject SimpleFloodgateApi api; + @Inject FloodgateLogger logger; @Inject @Named("packetHandler") - private String packetHandlerName; + String packetHandlerName; @Inject @Named("kickMessageAttribute") - private AttributeKey kickMessageAttribute; + AttributeKey kickMessageAttribute; @Inject @Named("playerAttribute") - private AttributeKey playerAttribute; + AttributeKey playerAttribute; @Override public void onInject(Channel channel, boolean toServer) { diff --git a/spigot/src/main/java/org/geysermc/floodgate/inject/spigot/SpigotInjector.java b/spigot/src/main/java/org/geysermc/floodgate/inject/spigot/SpigotInjector.java index 17812624..38b3a569 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/inject/spigot/SpigotInjector.java +++ b/spigot/src/main/java/org/geysermc/floodgate/inject/spigot/SpigotInjector.java @@ -25,13 +25,13 @@ package org.geysermc.floodgate.inject.spigot; -import com.google.inject.Inject; -import com.google.inject.Singleton; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; import io.netty.channel.ChannelInitializer; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; @@ -45,7 +45,7 @@ import org.geysermc.floodgate.util.ReflectionUtils; @Singleton public final class SpigotInjector extends CommonPlatformInjector { - @Inject private FloodgateLogger logger; + @Inject FloodgateLogger logger; private Object serverConnection; private String injectedFieldName; diff --git a/spigot/src/main/java/org/geysermc/floodgate/module/PaperListenerModule.java b/spigot/src/main/java/org/geysermc/floodgate/listener/ConditionalListenerGlue.java similarity index 57% rename from spigot/src/main/java/org/geysermc/floodgate/module/PaperListenerModule.java rename to spigot/src/main/java/org/geysermc/floodgate/listener/ConditionalListenerGlue.java index fb7249fb..6cbdf5b8 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/module/PaperListenerModule.java +++ b/spigot/src/main/java/org/geysermc/floodgate/listener/ConditionalListenerGlue.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -23,24 +23,30 @@ * @link https://github.com/GeyserMC/Floodgate */ -package org.geysermc.floodgate.module; +package org.geysermc.floodgate.listener; -import com.google.inject.Singleton; -import com.google.inject.TypeLiteral; -import com.google.inject.multibindings.ProvidesIntoSet; +import io.avaje.inject.BeanScope; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.bukkit.event.Listener; -import org.geysermc.floodgate.listener.PaperProfileListener; -import org.geysermc.floodgate.register.ListenerRegister; +import org.geysermc.floodgate.platform.listener.ListenerRegistration; +import org.geysermc.floodgate.util.ReflectionUtils; -public class PaperListenerModule extends SpigotListenerModule { - @Override - protected void configure() { - bind(new TypeLiteral>() {}).asEagerSingleton(); - } +@Singleton +@SuppressWarnings({"rawtypes", "unchecked"}) +public class ConditionalListenerGlue { + @Inject ListenerRegistration registration; - @Singleton - @ProvidesIntoSet - public Listener paperProfileListener() { - return new PaperProfileListener(); + @Inject + void registerListener(BeanScope scope) { + boolean usePaperListener = ReflectionUtils.getClassSilently( + "com.destroystokyo.paper.event.profile.PreFillProfileEvent") != null; + + Listener listener = + usePaperListener ? + scope.get(PaperProfileListener.class) : + scope.get(SpigotListener.class); + + registration.register(listener); } } diff --git a/spigot/src/main/java/org/geysermc/floodgate/listener/PaperProfileListener.java b/spigot/src/main/java/org/geysermc/floodgate/listener/PaperProfileListener.java index 5672ead8..ecdf0e91 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/listener/PaperProfileListener.java +++ b/spigot/src/main/java/org/geysermc/floodgate/listener/PaperProfileListener.java @@ -27,7 +27,8 @@ package org.geysermc.floodgate.listener; import com.destroystokyo.paper.event.profile.PreFillProfileEvent; import com.destroystokyo.paper.profile.ProfileProperty; -import com.google.inject.Inject; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.HashSet; import java.util.Set; import java.util.UUID; @@ -36,8 +37,9 @@ import org.bukkit.event.Listener; import org.geysermc.floodgate.api.SimpleFloodgateApi; import org.geysermc.floodgate.api.player.FloodgatePlayer; +@Singleton public final class PaperProfileListener implements Listener { - @Inject private SimpleFloodgateApi api; + @Inject SimpleFloodgateApi api; @EventHandler public void onFill(PreFillProfileEvent event) { diff --git a/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListener.java b/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListener.java index 3574af44..96a20e1a 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListener.java +++ b/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListener.java @@ -25,7 +25,8 @@ package org.geysermc.floodgate.listener; -import com.google.inject.Inject; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.UUID; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -37,10 +38,11 @@ import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.geysermc.floodgate.util.LanguageManager; +@Singleton public final class SpigotListener implements Listener { - @Inject private SimpleFloodgateApi api; - @Inject private LanguageManager languageManager; - @Inject private FloodgateLogger logger; + @Inject SimpleFloodgateApi api; + @Inject LanguageManager languageManager; + @Inject FloodgateLogger logger; @EventHandler(priority = EventPriority.MONITOR) public void onPlayerLogin(PlayerLoginEvent event) { diff --git a/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListenerRegistration.java b/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListenerRegistration.java index d3052286..cd4b4bf2 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListenerRegistration.java +++ b/spigot/src/main/java/org/geysermc/floodgate/listener/SpigotListenerRegistration.java @@ -25,7 +25,7 @@ package org.geysermc.floodgate.listener; -import com.google.inject.Inject; +import jakarta.inject.Inject; import lombok.RequiredArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.event.Listener; diff --git a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotAddonModule.java b/spigot/src/main/java/org/geysermc/floodgate/module/SpigotAddonModule.java deleted file mode 100644 index d5a34b82..00000000 --- a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotAddonModule.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.multibindings.ProvidesIntoSet; -import org.geysermc.floodgate.addon.AddonManagerAddon; -import org.geysermc.floodgate.addon.DebugAddon; -import org.geysermc.floodgate.addon.PacketHandlerAddon; -import org.geysermc.floodgate.addon.data.SpigotDataAddon; -import org.geysermc.floodgate.api.inject.InjectorAddon; -import org.geysermc.floodgate.register.AddonRegister; - -public final class SpigotAddonModule extends AbstractModule { - @Override - protected void configure() { - bind(AddonRegister.class).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon managerAddon() { - return new AddonManagerAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon dataAddon() { - return new SpigotDataAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon debugAddon() { - return new DebugAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon packetHandlerAddon() { - return new PacketHandlerAddon(); - } -} diff --git a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotCommandModule.java b/spigot/src/main/java/org/geysermc/floodgate/module/SpigotCommandModule.java index 48d98b31..05ad4f1a 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotCommandModule.java +++ b/spigot/src/main/java/org/geysermc/floodgate/module/SpigotCommandModule.java @@ -28,9 +28,9 @@ package org.geysermc.floodgate.module; import cloud.commandframework.CommandManager; import cloud.commandframework.bukkit.BukkitCommandManager; import cloud.commandframework.execution.CommandExecutionCoordinator; -import com.google.inject.Provides; -import com.google.inject.Singleton; -import lombok.RequiredArgsConstructor; +import io.avaje.inject.Bean; +import io.avaje.inject.Factory; +import jakarta.inject.Inject; import lombok.SneakyThrows; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -42,18 +42,11 @@ import org.geysermc.floodgate.platform.command.CommandUtil; import org.geysermc.floodgate.player.FloodgateCommandPreprocessor; import org.geysermc.floodgate.player.UserAudience; -@RequiredArgsConstructor -public final class SpigotCommandModule extends CommandModule { - private final JavaPlugin plugin; +@Factory +public final class SpigotCommandModule { + @Inject JavaPlugin plugin; - @Override - protected void configure() { - super.configure(); - registerPermissions(); - } - - @Provides - @Singleton + @Bean @SneakyThrows public CommandManager commandManager(CommandUtil commandUtil) { CommandManager commandManager = new BukkitCommandManager<>( @@ -66,7 +59,8 @@ public final class SpigotCommandModule extends CommandModule { return commandManager; } - private void registerPermissions() { + @Inject + void registerPermissions() { PluginManager manager = Bukkit.getPluginManager(); for (Permission permission : Permission.values()) { if (manager.getPermission(permission.get()) != null) { diff --git a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotListenerModule.java b/spigot/src/main/java/org/geysermc/floodgate/module/SpigotListenerModule.java deleted file mode 100644 index ba9e64e6..00000000 --- a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotListenerModule.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.TypeLiteral; -import com.google.inject.multibindings.ProvidesIntoSet; -import org.bukkit.event.Listener; -import org.geysermc.floodgate.listener.SpigotListener; -import org.geysermc.floodgate.register.ListenerRegister; - -public class SpigotListenerModule extends AbstractModule { - @Override - protected void configure() { - bind(new TypeLiteral>() {}).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public Listener spigotListener() { - return new SpigotListener(); - } -} diff --git a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotPlatformModule.java b/spigot/src/main/java/org/geysermc/floodgate/module/SpigotPlatformModule.java index 65158cbc..0f8f5ad2 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/module/SpigotPlatformModule.java +++ b/spigot/src/main/java/org/geysermc/floodgate/module/SpigotPlatformModule.java @@ -27,9 +27,9 @@ package org.geysermc.floodgate.module; import com.google.inject.AbstractModule; import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.name.Named; import com.google.inject.name.Names; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.util.logging.Logger; import lombok.RequiredArgsConstructor; import org.bukkit.event.Listener; @@ -60,7 +60,7 @@ public final class SpigotPlatformModule extends AbstractModule { @Override protected void configure() { - bind(SpigotPlugin.class).toInstance(plugin); + bind(JavaPlugin.class).toInstance(plugin); bind(PlatformUtils.class).to(SpigotPlatformUtils.class); bind(CommonPlatformInjector.class).to(SpigotInjector.class); bind(Logger.class).annotatedWith(Names.named("logger")).toInstance(plugin.getLogger()); diff --git a/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinApplier.java b/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinApplier.java index 1ef5b696..7da8a576 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinApplier.java +++ b/spigot/src/main/java/org/geysermc/floodgate/pluginmessage/SpigotSkinApplier.java @@ -25,11 +25,11 @@ package org.geysermc.floodgate.pluginmessage; -import com.google.inject.Inject; -import com.google.inject.Singleton; import com.mojang.authlib.GameProfile; import com.mojang.authlib.properties.Property; import com.mojang.authlib.properties.PropertyMap; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -47,9 +47,9 @@ import org.geysermc.floodgate.util.SpigotVersionSpecificMethods; @Singleton public final class SpigotSkinApplier implements SkinApplier { - @Inject private SpigotVersionSpecificMethods versionSpecificMethods; - @Inject private JavaPlugin plugin; - @Inject private EventBus eventBus; + @Inject SpigotVersionSpecificMethods versionSpecificMethods; + @Inject JavaPlugin plugin; + @Inject EventBus eventBus; @Override public void applySkin(@NonNull FloodgatePlayer floodgatePlayer, @NonNull SkinData skinData) { diff --git a/spigot/src/main/java/org/geysermc/floodgate/util/SpigotHandshakeHandler.java b/spigot/src/main/java/org/geysermc/floodgate/util/SpigotHandshakeHandler.java index b425fb67..72e97fa8 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/util/SpigotHandshakeHandler.java +++ b/spigot/src/main/java/org/geysermc/floodgate/util/SpigotHandshakeHandler.java @@ -25,15 +25,14 @@ package org.geysermc.floodgate.util; -import com.google.inject.Inject; +import jakarta.inject.Inject; import java.util.UUID; import org.geysermc.floodgate.api.handshake.HandshakeData; import org.geysermc.floodgate.api.handshake.HandshakeHandler; import org.geysermc.floodgate.api.logger.FloodgateLogger; public class SpigotHandshakeHandler implements HandshakeHandler { - @Inject - private FloodgateLogger logger; + @Inject FloodgateLogger logger; @Override public void handle(HandshakeData data) { diff --git a/spigot/src/main/java/org/geysermc/floodgate/util/SpigotProtocolSupportHandler.java b/spigot/src/main/java/org/geysermc/floodgate/util/SpigotProtocolSupportHandler.java index b944a2f8..a8af904d 100644 --- a/spigot/src/main/java/org/geysermc/floodgate/util/SpigotProtocolSupportHandler.java +++ b/spigot/src/main/java/org/geysermc/floodgate/util/SpigotProtocolSupportHandler.java @@ -25,11 +25,11 @@ package org.geysermc.floodgate.util; -import com.google.inject.Inject; -import com.google.inject.name.Named; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.util.AttributeKey; +import jakarta.inject.Inject; +import jakarta.inject.Named; import java.lang.reflect.Method; import java.util.UUID; import org.geysermc.floodgate.api.packet.PacketHandler; @@ -81,7 +81,7 @@ public class SpigotProtocolSupportHandler implements PacketHandler { @Inject @Named("playerAttribute") - private AttributeKey playerAttribute; + AttributeKey playerAttribute; @Inject public void register(PacketHandlers packetHandlers) { diff --git a/velocity/src/main/java/org/geysermc/floodgate/VelocityPlatform.java b/velocity/src/main/java/org/geysermc/floodgate/VelocityPlatform.java index bd9b7f1d..b1bca13b 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/VelocityPlatform.java +++ b/velocity/src/main/java/org/geysermc/floodgate/VelocityPlatform.java @@ -26,15 +26,8 @@ package org.geysermc.floodgate; import com.google.inject.Inject; -import com.google.inject.Module; import com.velocitypowered.api.plugin.annotation.DataDirectory; import java.nio.file.Path; -import org.geysermc.floodgate.module.CommandModule; -import org.geysermc.floodgate.module.PluginMessageModule; -import org.geysermc.floodgate.module.ProxyCommonModule; -import org.geysermc.floodgate.module.VelocityAddonModule; -import org.geysermc.floodgate.module.VelocityListenerModule; -import org.geysermc.floodgate.module.VelocityPlatformModule; import org.geysermc.floodgate.util.ReflectionUtils; public class VelocityPlatform extends FloodgatePlatform { @@ -46,20 +39,7 @@ public class VelocityPlatform extends FloodgatePlatform { } @Override - protected Module[] loadStageModules() { - return new Module[]{ - new ProxyCommonModule(dataDirectory), - new VelocityPlatformModule(getGuice()) - }; - } - - @Override - protected Module[] postEnableStageModules() { - return new Module[]{ - new CommandModule(), - new VelocityListenerModule(), - new VelocityAddonModule(), - new PluginMessageModule() - }; + boolean isProxy() { + return true; } } diff --git a/velocity/src/main/java/org/geysermc/floodgate/addon/data/VelocityDataAddon.java b/velocity/src/main/java/org/geysermc/floodgate/addon/data/VelocityDataAddon.java index ebe0b833..82aac508 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/addon/data/VelocityDataAddon.java +++ b/velocity/src/main/java/org/geysermc/floodgate/addon/data/VelocityDataAddon.java @@ -25,11 +25,12 @@ package org.geysermc.floodgate.addon.data; -import com.google.inject.Inject; -import com.google.inject.name.Named; import com.velocitypowered.api.proxy.ProxyServer; import io.netty.channel.Channel; import io.netty.util.AttributeKey; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.geysermc.floodgate.api.ProxyFloodgateApi; import org.geysermc.floodgate.api.inject.InjectorAddon; import org.geysermc.floodgate.api.logger.FloodgateLogger; @@ -37,32 +38,33 @@ import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.geysermc.floodgate.config.ProxyFloodgateConfig; import org.geysermc.floodgate.player.FloodgateHandshakeHandler; +@Singleton public final class VelocityDataAddon implements InjectorAddon { - @Inject private FloodgateHandshakeHandler handshakeHandler; - @Inject private ProxyFloodgateConfig config; - @Inject private ProxyFloodgateApi api; - @Inject private ProxyServer proxy; - @Inject private FloodgateLogger logger; + @Inject FloodgateHandshakeHandler handshakeHandler; + @Inject ProxyFloodgateConfig config; + @Inject ProxyFloodgateApi api; + @Inject ProxyServer proxy; + @Inject FloodgateLogger logger; @Inject @Named("packetHandler") - private String packetHandler; + String packetHandler; @Inject @Named("packetDecoder") - private String packetDecoder; + String packetDecoder; @Inject @Named("packetEncoder") - private String packetEncoder; + String packetEncoder; @Inject @Named("kickMessageAttribute") - private AttributeKey kickMessageAttribute; + AttributeKey kickMessageAttribute; @Inject @Named("playerAttribute") - private AttributeKey playerAttribute; + AttributeKey playerAttribute; @Override public void onInject(Channel channel, boolean toServer) { diff --git a/velocity/src/main/java/org/geysermc/floodgate/inject/velocity/VelocityInjector.java b/velocity/src/main/java/org/geysermc/floodgate/inject/velocity/VelocityInjector.java index 4d122cf1..90d8f5d4 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/inject/velocity/VelocityInjector.java +++ b/velocity/src/main/java/org/geysermc/floodgate/inject/velocity/VelocityInjector.java @@ -33,12 +33,14 @@ import static org.geysermc.floodgate.util.ReflectionUtils.invoke; import com.velocitypowered.api.proxy.ProxyServer; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; +import jakarta.inject.Singleton; import java.lang.reflect.Method; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.geysermc.floodgate.inject.CommonPlatformInjector; @RequiredArgsConstructor +@Singleton public final class VelocityInjector extends CommonPlatformInjector { private final ProxyServer server; diff --git a/velocity/src/main/java/org/geysermc/floodgate/listener/VelocityListener.java b/velocity/src/main/java/org/geysermc/floodgate/listener/VelocityListener.java index 8000f520..2faef571 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/listener/VelocityListener.java +++ b/velocity/src/main/java/org/geysermc/floodgate/listener/VelocityListener.java @@ -34,8 +34,6 @@ import static org.geysermc.floodgate.util.ReflectionUtils.getValue; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.google.inject.Inject; -import com.google.inject.name.Named; import com.velocitypowered.api.event.PostOrder; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.connection.DisconnectEvent; @@ -47,6 +45,9 @@ import com.velocitypowered.api.util.GameProfile; import com.velocitypowered.api.util.GameProfile.Property; import io.netty.channel.Channel; import io.netty.util.AttributeKey; +import jakarta.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import java.lang.reflect.Field; import java.util.Collections; import java.util.Objects; @@ -56,8 +57,11 @@ import org.geysermc.floodgate.api.ProxyFloodgateApi; import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.api.player.FloodgatePlayer; import org.geysermc.floodgate.config.ProxyFloodgateConfig; +import org.geysermc.floodgate.register.ListenerRegister; import org.geysermc.floodgate.util.LanguageManager; +@ListenerRegister.Listener +@Singleton public final class VelocityListener { private static final Field INITIAL_MINECRAFT_CONNECTION; private static final Field INITIAL_CONNECTION_DELEGATE; @@ -90,18 +94,18 @@ public final class VelocityListener { .expireAfterAccess(20, TimeUnit.SECONDS) .build(); - @Inject private ProxyFloodgateConfig config; - @Inject private ProxyFloodgateApi api; - @Inject private LanguageManager languageManager; - @Inject private FloodgateLogger logger; + @Inject ProxyFloodgateConfig config; + @Inject ProxyFloodgateApi api; + @Inject LanguageManager languageManager; + @Inject FloodgateLogger logger; @Inject @Named("playerAttribute") - private AttributeKey playerAttribute; + AttributeKey playerAttribute; @Inject @Named("kickMessageAttribute") - private AttributeKey kickMessageAttribute; + AttributeKey kickMessageAttribute; @Subscribe(order = PostOrder.EARLY) public void onPreLogin(PreLoginEvent event) { diff --git a/velocity/src/main/java/org/geysermc/floodgate/logger/Slf4jFloodgateLogger.java b/velocity/src/main/java/org/geysermc/floodgate/logger/Slf4jFloodgateLogger.java index 17efe8a6..1b0a7d49 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/logger/Slf4jFloodgateLogger.java +++ b/velocity/src/main/java/org/geysermc/floodgate/logger/Slf4jFloodgateLogger.java @@ -27,8 +27,8 @@ package org.geysermc.floodgate.logger; import static org.geysermc.floodgate.util.MessageFormatter.format; -import com.google.inject.Inject; -import com.google.inject.Singleton; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.config.Configurator; import org.geysermc.floodgate.api.logger.FloodgateLogger; @@ -38,11 +38,11 @@ import org.slf4j.Logger; @Singleton public final class Slf4jFloodgateLogger implements FloodgateLogger { - @Inject private Logger logger; + @Inject Logger logger; private LanguageManager languageManager; @Inject - private void init(LanguageManager languageManager, FloodgateConfig config) { + void init(LanguageManager languageManager, FloodgateConfig config) { this.languageManager = languageManager; if (config.isDebug() && !logger.isDebugEnabled()) { Configurator.setLevel(logger.getName(), Level.DEBUG); diff --git a/velocity/src/main/java/org/geysermc/floodgate/module/VelocityAddonModule.java b/velocity/src/main/java/org/geysermc/floodgate/module/VelocityAddonModule.java deleted file mode 100644 index 8c89ab7e..00000000 --- a/velocity/src/main/java/org/geysermc/floodgate/module/VelocityAddonModule.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.multibindings.ProvidesIntoSet; -import org.geysermc.floodgate.addon.AddonManagerAddon; -import org.geysermc.floodgate.addon.DebugAddon; -import org.geysermc.floodgate.addon.PacketHandlerAddon; -import org.geysermc.floodgate.addon.data.VelocityDataAddon; -import org.geysermc.floodgate.api.inject.InjectorAddon; -import org.geysermc.floodgate.register.AddonRegister; - -public final class VelocityAddonModule extends AbstractModule { - @Override - protected void configure() { - bind(AddonRegister.class).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon managerAddon() { - return new AddonManagerAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon dataAddon() { - return new VelocityDataAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon debugAddon() { - return new DebugAddon(); - } - - @Singleton - @ProvidesIntoSet - public InjectorAddon packetHandlerAddon() { - return new PacketHandlerAddon(); - } -} diff --git a/velocity/src/main/java/org/geysermc/floodgate/module/VelocityListenerModule.java b/velocity/src/main/java/org/geysermc/floodgate/module/VelocityListenerModule.java deleted file mode 100644 index 3b0c8e6a..00000000 --- a/velocity/src/main/java/org/geysermc/floodgate/module/VelocityListenerModule.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Floodgate - */ - -package org.geysermc.floodgate.module; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.TypeLiteral; -import com.google.inject.multibindings.ProvidesIntoSet; -import org.geysermc.floodgate.listener.VelocityListener; -import org.geysermc.floodgate.platform.pluginmessage.PluginMessageUtils; -import org.geysermc.floodgate.register.ListenerRegister; - -public final class VelocityListenerModule extends AbstractModule { - @Override - protected void configure() { - bind(new TypeLiteral>() {}).asEagerSingleton(); - } - - @Singleton - @ProvidesIntoSet - public Object velocityListener() { - return new VelocityListener(); - } - - @Singleton - @ProvidesIntoSet - public Object pluginMessageListener(PluginMessageUtils handler) { - return handler; // Plugin message handler is also the listener - } -} diff --git a/velocity/src/main/java/org/geysermc/floodgate/module/VelocityPlatformModule.java b/velocity/src/main/java/org/geysermc/floodgate/module/VelocityPlatformModule.java index fb412b47..079b8d29 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/module/VelocityPlatformModule.java +++ b/velocity/src/main/java/org/geysermc/floodgate/module/VelocityPlatformModule.java @@ -27,64 +27,41 @@ package org.geysermc.floodgate.module; import cloud.commandframework.CommandManager; import cloud.commandframework.execution.CommandExecutionCoordinator; -import cloud.commandframework.velocity.CloudInjectionModule; import cloud.commandframework.velocity.VelocityCommandManager; -import com.google.inject.AbstractModule; -import com.google.inject.Injector; -import com.google.inject.Key; import com.google.inject.Provides; -import com.google.inject.Singleton; -import com.google.inject.name.Named; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.event.EventManager; import com.velocitypowered.api.proxy.ProxyServer; -import lombok.RequiredArgsConstructor; +import io.avaje.inject.Bean; +import io.avaje.inject.Factory; +import jakarta.inject.Named; +import jakarta.inject.Singleton; import org.geysermc.floodgate.VelocityPlugin; -import org.geysermc.floodgate.api.logger.FloodgateLogger; import org.geysermc.floodgate.inject.CommonPlatformInjector; import org.geysermc.floodgate.inject.velocity.VelocityInjector; import org.geysermc.floodgate.listener.VelocityListenerRegistration; -import org.geysermc.floodgate.logger.Slf4jFloodgateLogger; import org.geysermc.floodgate.platform.command.CommandUtil; import org.geysermc.floodgate.platform.listener.ListenerRegistration; import org.geysermc.floodgate.platform.pluginmessage.PluginMessageUtils; -import org.geysermc.floodgate.platform.util.PlatformUtils; import org.geysermc.floodgate.player.FloodgateCommandPreprocessor; import org.geysermc.floodgate.player.UserAudience; import org.geysermc.floodgate.pluginmessage.PluginMessageManager; import org.geysermc.floodgate.pluginmessage.PluginMessageRegistration; import org.geysermc.floodgate.pluginmessage.VelocityPluginMessageRegistration; import org.geysermc.floodgate.pluginmessage.VelocityPluginMessageUtils; -import org.geysermc.floodgate.skin.SkinApplier; -import org.geysermc.floodgate.util.VelocityCommandUtil; -import org.geysermc.floodgate.util.VelocityPlatformUtils; -import org.geysermc.floodgate.util.VelocitySkinApplier; -@RequiredArgsConstructor -public final class VelocityPlatformModule extends AbstractModule { - private final Injector guice; - - @Override - protected void configure() { - bind(CommandUtil.class).to(VelocityCommandUtil.class); - bind(PlatformUtils.class).to(VelocityPlatformUtils.class); - bind(FloodgateLogger.class).to(Slf4jFloodgateLogger.class); - bind(SkinApplier.class).to(VelocitySkinApplier.class); - } - - @Provides +@Factory +public final class VelocityPlatformModule { + @Bean @Singleton - public CommandManager commandManager(CommandUtil commandUtil) { - Injector child = guice.createChildInjector(new CloudInjectionModule<>( - UserAudience.class, + public CommandManager commandManager(CommandUtil commandUtil, ProxyServer proxy) { + CommandManager commandManager = new VelocityCommandManager<>( + null, + proxy, CommandExecutionCoordinator.simpleCoordinator(), commandUtil::getUserAudience, audience -> (CommandSource) audience.source() - )); - - CommandManager commandManager = - child.getInstance(new Key>() {}); - + ); commandManager.registerCommandPreProcessor(new FloodgateCommandPreprocessor<>(commandUtil)); return commandManager; } diff --git a/velocity/src/main/java/org/geysermc/floodgate/pluginmessage/VelocityPluginMessageUtils.java b/velocity/src/main/java/org/geysermc/floodgate/pluginmessage/VelocityPluginMessageUtils.java index f6a8b75f..fc67455f 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/pluginmessage/VelocityPluginMessageUtils.java +++ b/velocity/src/main/java/org/geysermc/floodgate/pluginmessage/VelocityPluginMessageUtils.java @@ -25,7 +25,6 @@ package org.geysermc.floodgate.pluginmessage; -import com.google.inject.Inject; import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.connection.PluginMessageEvent; import com.velocitypowered.api.event.connection.PluginMessageEvent.ForwardResult; @@ -35,6 +34,7 @@ import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.messages.ChannelIdentifier; import com.velocitypowered.api.proxy.messages.ChannelMessageSource; import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier; +import jakarta.inject.Inject; import java.util.UUID; import lombok.RequiredArgsConstructor; import net.kyori.adventure.text.Component; diff --git a/velocity/src/main/java/org/geysermc/floodgate/util/VelocityCommandUtil.java b/velocity/src/main/java/org/geysermc/floodgate/util/VelocityCommandUtil.java index a2c355f3..cebce965 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/util/VelocityCommandUtil.java +++ b/velocity/src/main/java/org/geysermc/floodgate/util/VelocityCommandUtil.java @@ -25,10 +25,11 @@ package org.geysermc.floodgate.util; -import com.google.inject.Inject; import com.velocitypowered.api.command.CommandSource; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.ProxyServer; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.Collection; import java.util.Optional; import java.util.UUID; @@ -39,11 +40,14 @@ import org.geysermc.floodgate.platform.command.CommandUtil; import org.geysermc.floodgate.player.UserAudience; import org.geysermc.floodgate.player.UserAudience.ConsoleAudience; import org.geysermc.floodgate.player.UserAudience.PlayerAudience; +import org.geysermc.floodgate.register.ListenerRegister; +@ListenerRegister.Listener +@Singleton public final class VelocityCommandUtil extends CommandUtil { private static UserAudience console; - @Inject private ProxyServer server; + @Inject ProxyServer server; @Inject public VelocityCommandUtil(LanguageManager manager, FloodgateApi api) { diff --git a/velocity/src/main/java/org/geysermc/floodgate/util/VelocityPlatformUtils.java b/velocity/src/main/java/org/geysermc/floodgate/util/VelocityPlatformUtils.java index 0340cfac..254e8b9f 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/util/VelocityPlatformUtils.java +++ b/velocity/src/main/java/org/geysermc/floodgate/util/VelocityPlatformUtils.java @@ -25,14 +25,13 @@ package org.geysermc.floodgate.util; -import com.google.inject.Inject; import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.proxy.ProxyServer; +import jakarta.inject.Inject; import org.geysermc.floodgate.platform.util.PlatformUtils; public final class VelocityPlatformUtils extends PlatformUtils { - @Inject - private ProxyServer server; + @Inject ProxyServer server; @Override public AuthType authType() { diff --git a/velocity/src/main/java/org/geysermc/floodgate/util/VelocitySkinApplier.java b/velocity/src/main/java/org/geysermc/floodgate/util/VelocitySkinApplier.java index f9818cbc..067595c9 100644 --- a/velocity/src/main/java/org/geysermc/floodgate/util/VelocitySkinApplier.java +++ b/velocity/src/main/java/org/geysermc/floodgate/util/VelocitySkinApplier.java @@ -25,10 +25,10 @@ package org.geysermc.floodgate.util; -import com.google.inject.Inject; -import com.google.inject.Singleton; import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.util.GameProfile.Property; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import java.util.ArrayList; import java.util.List; import org.checkerframework.checker.nullness.qual.NonNull; @@ -42,8 +42,8 @@ import org.geysermc.floodgate.skin.SkinDataImpl; @Singleton public class VelocitySkinApplier implements SkinApplier { - @Inject private ProxyServer server; - @Inject private EventBus eventBus; + @Inject ProxyServer server; + @Inject EventBus eventBus; @Override public void applySkin(@NonNull FloodgatePlayer floodgatePlayer, @NonNull SkinData skinData) {