diff --git a/common/src/main/java/me/lucko/luckperms/common/extension/SimpleExtensionManager.java b/common/src/main/java/me/lucko/luckperms/common/extension/SimpleExtensionManager.java index df7556846..bf2e0a1cd 100644 --- a/common/src/main/java/me/lucko/luckperms/common/extension/SimpleExtensionManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/extension/SimpleExtensionManager.java @@ -39,7 +39,6 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.net.URLClassLoader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.NoSuchFileException; diff --git a/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java b/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java index 5f6d135ad..ccb789a87 100644 --- a/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java +++ b/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java @@ -28,7 +28,6 @@ package me.lucko.luckperms.common.sender; import com.google.common.collect.Iterables; import me.lucko.luckperms.common.command.access.CommandPermission; import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.config.generic.key.ConfigKey; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.JoinConfiguration; diff --git a/common/src/test/java/me/lucko/luckperms/common/sender/AbstractSenderTest.java b/common/src/test/java/me/lucko/luckperms/common/sender/AbstractSenderTest.java index 6dfb8cd64..0c3fda6e8 100644 --- a/common/src/test/java/me/lucko/luckperms/common/sender/AbstractSenderTest.java +++ b/common/src/test/java/me/lucko/luckperms/common/sender/AbstractSenderTest.java @@ -25,9 +25,9 @@ package me.lucko.luckperms.common.sender; +import com.google.common.collect.ImmutableList; import me.lucko.luckperms.common.locale.Message; import net.kyori.adventure.text.Component; -import com.google.common.collect.ImmutableList; import org.junit.jupiter.api.Test; import java.util.List; diff --git a/fabric/build.gradle b/fabric/build.gradle index febb260fa..01df64565 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -13,8 +13,8 @@ repositories { dependencies { // https://modmuss50.me/fabric.html - minecraft 'com.mojang:minecraft:1.21.5' - mappings 'net.fabricmc:yarn:1.21.5+build.1:v2' + minecraft 'com.mojang:minecraft:1.21.6' + mappings 'net.fabricmc:yarn:1.21.6+build.1:v2' modImplementation 'net.fabricmc:fabric-loader:0.16.14' Set apiModules = [ @@ -26,10 +26,10 @@ dependencies { ] apiModules.forEach { - modImplementation(fabricApi.module(it, '0.123.0+1.21.5')) + modImplementation(fabricApi.module(it, '0.127.0+1.21.6')) } - include(modImplementation('me.lucko:fabric-permissions-api:0.3.3')) + include(modImplementation('me.lucko:fabric-permissions-api:0.4.0')) implementation project(':common') } diff --git a/fabric/src/main/java/me/lucko/luckperms/fabric/FabricSenderFactory.java b/fabric/src/main/java/me/lucko/luckperms/fabric/FabricSenderFactory.java index 528621da8..6b3cdb072 100644 --- a/fabric/src/main/java/me/lucko/luckperms/fabric/FabricSenderFactory.java +++ b/fabric/src/main/java/me/lucko/luckperms/fabric/FabricSenderFactory.java @@ -25,6 +25,7 @@ package me.lucko.luckperms.fabric; +import com.mojang.serialization.JsonOps; import me.lucko.fabric.api.permissions.v0.Permissions; import me.lucko.luckperms.common.locale.TranslationManager; import me.lucko.luckperms.common.sender.Sender; @@ -39,6 +40,7 @@ import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.rcon.RconCommandOutput; import net.minecraft.text.Text; +import net.minecraft.text.TextCodecs; import java.util.Locale; import java.util.UUID; @@ -118,6 +120,9 @@ public class FabricSenderFactory extends SenderFactory { private static final String JAR_NAME = "luckperms-forge.jarinjar"; private static final String BOOTSTRAP_CLASS = "me.lucko.luckperms.forge.LPForgeBootstrap"; - private final ModContainer container; + private final FMLModContainer container; private JarInJarClassLoader loader; private LoaderBootstrap plugin; - public ForgeLoaderPlugin() { - this.container = ModList.get().getModContainerByObject(this).orElse(null); - - markAsNotRequiredClientSide(); + public ForgeLoaderPlugin(FMLJavaModLoadingContext ctx) { + this.container = ctx.getContainer(); + ctx.registerDisplayTest(IExtensionPoint.DisplayTest.IGNORE_SERVER_VERSION); if (FMLEnvironment.dist.isClient()) { LOGGER.info("Skipping LuckPerms init (not supported on the client!)"); @@ -64,7 +61,7 @@ public class ForgeLoaderPlugin implements Supplier { } this.loader = new JarInJarClassLoader(getClass().getClassLoader(), JAR_NAME); - FMLJavaModLoadingContext.get().getModEventBus().addListener(this::onCommonSetup); + FMLCommonSetupEvent.getBus(ctx.getModBusGroup()).addListener(this::onCommonSetup); } @Override @@ -77,21 +74,4 @@ public class ForgeLoaderPlugin implements Supplier { this.plugin.onLoad(); } - private static void markAsNotRequiredClientSide() { - try { - // workaround as we don't compile against java 17 - ModLoadingContext.class.getDeclaredMethod("registerExtensionPoint", Class.class, Supplier.class) - .invoke( - ModLoadingContext.get(), - IExtensionPoint.DisplayTest.class, - (Supplier) () -> new IExtensionPoint.DisplayTest( - () -> IExtensionPoint.DisplayTest.IGNORESERVERONLY, - (a, b) -> true - ) - ); - } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { - throw new IllegalStateException(e); - } - } - } diff --git a/forge/src/main/java/me/lucko/luckperms/forge/ForgeCommandExecutor.java b/forge/src/main/java/me/lucko/luckperms/forge/ForgeCommandExecutor.java index 43adc0e0d..7cc1d3337 100644 --- a/forge/src/main/java/me/lucko/luckperms/forge/ForgeCommandExecutor.java +++ b/forge/src/main/java/me/lucko/luckperms/forge/ForgeCommandExecutor.java @@ -37,7 +37,7 @@ import net.minecraft.commands.Commands; import net.minecraft.commands.arguments.EntityArgument; import net.minecraft.server.level.ServerPlayer; import net.minecraftforge.event.RegisterCommandsEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import java.util.List; import java.util.ListIterator; diff --git a/forge/src/main/java/me/lucko/luckperms/forge/ForgeSenderFactory.java b/forge/src/main/java/me/lucko/luckperms/forge/ForgeSenderFactory.java index 5b2c31f4e..4545c8930 100644 --- a/forge/src/main/java/me/lucko/luckperms/forge/ForgeSenderFactory.java +++ b/forge/src/main/java/me/lucko/luckperms/forge/ForgeSenderFactory.java @@ -26,6 +26,7 @@ package me.lucko.luckperms.forge; import com.mojang.brigadier.ParseResults; +import com.mojang.serialization.JsonOps; import me.lucko.luckperms.common.cacheddata.result.TristateResult; import me.lucko.luckperms.common.locale.TranslationManager; import me.lucko.luckperms.common.query.QueryOptionsImpl; @@ -41,7 +42,7 @@ import net.luckperms.api.util.Tristate; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.RegistryAccess; -import net.minecraft.network.chat.Component.Serializer; +import net.minecraft.network.chat.ComponentSerialization; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.rcon.RconConsoleSource; import net.minecraft.world.entity.player.Player; @@ -118,7 +119,10 @@ public class ForgeSenderFactory extends SenderFactory listeners = new ArrayList<>(); /** * The plugin instance @@ -116,7 +118,6 @@ public final class LPForgeBootstrap implements LuckPermsBootstrap, LoaderBootstr this.logger = new Log4jPluginLogger(LogManager.getLogger(LPForgeBootstrap.ID)); this.schedulerAdapter = new ForgeSchedulerAdapter(this); this.classPathAppender = new JarInJarClassPathAppender(getClass().getClassLoader()); - this.forgeEventBus = new ForgeEventBusFacade(); this.plugin = new LPForgePlugin(this); } @@ -143,7 +144,16 @@ public final class LPForgeBootstrap implements LuckPermsBootstrap, LoaderBootstr } public void registerListeners(Object target) { - this.forgeEventBus.register(target); + Collection listeners = BusGroup.DEFAULT.register(MethodHandles.lookup(), target); + this.listeners.addAll(listeners); + } + + public void unregisterListeners() { + if (this.listeners.isEmpty()) { + return; + } + BusGroup.DEFAULT.unregister(this.listeners); + this.listeners.clear(); } // lifecycle @@ -157,11 +167,11 @@ public final class LPForgeBootstrap implements LuckPermsBootstrap, LoaderBootstr this.loadLatch.countDown(); } - this.forgeEventBus.register(this); + registerListeners(this); this.plugin.registerEarlyListeners(); } - @SubscribeEvent(priority = EventPriority.HIGHEST) + @SubscribeEvent(priority = Priority.HIGHEST) public void onServerAboutToStart(ServerAboutToStartEvent event) { this.server = event.getServer(); try { @@ -171,10 +181,10 @@ public final class LPForgeBootstrap implements LuckPermsBootstrap, LoaderBootstr } } - @SubscribeEvent(priority = EventPriority.LOWEST) + @SubscribeEvent(priority = Priority.LOWEST) public void onServerStopping(ServerStoppingEvent event) { this.plugin.disable(); - this.forgeEventBus.unregisterAll(); + unregisterListeners(); this.server = null; } diff --git a/forge/src/main/java/me/lucko/luckperms/forge/capabilities/UserCapabilityListener.java b/forge/src/main/java/me/lucko/luckperms/forge/capabilities/UserCapabilityListener.java index 7adab8ffd..3b4886ab0 100644 --- a/forge/src/main/java/me/lucko/luckperms/forge/capabilities/UserCapabilityListener.java +++ b/forge/src/main/java/me/lucko/luckperms/forge/capabilities/UserCapabilityListener.java @@ -36,7 +36,7 @@ import net.minecraftforge.common.capabilities.RegisterCapabilitiesEvent; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.AttachCapabilitiesEvent; import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/forge/src/main/java/me/lucko/luckperms/forge/context/ForgePlayerCalculator.java b/forge/src/main/java/me/lucko/luckperms/forge/context/ForgePlayerCalculator.java index 323600b82..43ff5cd34 100644 --- a/forge/src/main/java/me/lucko/luckperms/forge/context/ForgePlayerCalculator.java +++ b/forge/src/main/java/me/lucko/luckperms/forge/context/ForgePlayerCalculator.java @@ -42,7 +42,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.level.GameType; import net.minecraft.world.level.storage.ServerLevelData; import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import org.checkerframework.checker.nullness.qual.NonNull; import java.util.Set; @@ -68,7 +68,7 @@ public class ForgePlayerCalculator implements ContextCalculator { @Override public void calculate(@NonNull ServerPlayer target, @NonNull ContextConsumer consumer) { - ServerLevel level = target.serverLevel(); + ServerLevel level = target.level(); if (this.dimensionType) { consumer.accept(DefaultContextKeys.DIMENSION_TYPE_KEY, getContextKey(level.dimension().location())); } diff --git a/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgeConnectionListener.java b/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgeConnectionListener.java index 7b78846a8..287076ff2 100644 --- a/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgeConnectionListener.java +++ b/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgeConnectionListener.java @@ -45,8 +45,8 @@ import net.minecraft.server.network.ServerConfigurationPacketListenerImpl; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.event.entity.player.PlayerEvent.PlayerLoggedInEvent; import net.minecraftforge.event.network.GatherLoginConfigurationTasksEvent; -import net.minecraftforge.eventbus.api.EventPriority; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.listener.Priority; +import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import java.util.UUID; @@ -117,7 +117,7 @@ public class ForgeConnectionListener extends AbstractConnectionListener { } } - @SubscribeEvent(priority = EventPriority.HIGHEST) + @SubscribeEvent(priority = Priority.HIGHEST) public void onPlayerLoggedIn(PlayerLoggedInEvent event) { ServerPlayer player = (ServerPlayer) event.getEntity(); GameProfile profile = player.getGameProfile(); @@ -152,7 +152,7 @@ public class ForgeConnectionListener extends AbstractConnectionListener { this.plugin.getContextManager().signalContextUpdate(player); } - @SubscribeEvent(priority = EventPriority.LOWEST) + @SubscribeEvent(priority = Priority.LOWEST) public void onPlayerLoggedOut(PlayerEvent.PlayerLoggedOutEvent event) { ServerPlayer player = (ServerPlayer) event.getEntity(); handleDisconnect(player.getGameProfile().getId()); diff --git a/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgePlatformListener.java b/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgePlatformListener.java index 5f06396a3..f8de3d790 100644 --- a/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgePlatformListener.java +++ b/forge/src/main/java/me/lucko/luckperms/forge/listeners/ForgePlatformListener.java @@ -38,7 +38,7 @@ import net.minecraft.server.players.ServerOpList; import net.minecraftforge.event.AddReloadListenerEvent; import net.minecraftforge.event.CommandEvent; import net.minecraftforge.event.server.ServerStartedEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import java.io.IOException; import java.util.Locale; @@ -51,7 +51,7 @@ public class ForgePlatformListener { } @SubscribeEvent - public void onCommand(CommandEvent event) { + public boolean onCommand(CommandEvent event) { CommandContextBuilder context = event.getParseResults().getContext(); if (!this.plugin.getConfiguration().get(ConfigKeys.OPS_ENABLED)) { @@ -63,11 +63,12 @@ public class ForgePlatformListener { String name = node.getNode().getName().toLowerCase(Locale.ROOT); if (name.equals("op") || name.equals("deop")) { Message.OP_DISABLED.send(this.plugin.getSenderFactory().wrap(context.getSource())); - event.setCanceled(true); - return; + return true; // cancel } } } + + return false; // don't cancel } @SubscribeEvent diff --git a/forge/src/main/java/me/lucko/luckperms/forge/service/ForgePermissionHandlerListener.java b/forge/src/main/java/me/lucko/luckperms/forge/service/ForgePermissionHandlerListener.java index c4fa08aeb..c2b9e6231 100644 --- a/forge/src/main/java/me/lucko/luckperms/forge/service/ForgePermissionHandlerListener.java +++ b/forge/src/main/java/me/lucko/luckperms/forge/service/ForgePermissionHandlerListener.java @@ -29,7 +29,7 @@ import me.lucko.luckperms.common.command.access.CommandPermission; import me.lucko.luckperms.forge.LPForgePlugin; import net.minecraftforge.common.ForgeConfig; import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import net.minecraftforge.server.permission.events.PermissionGatherEvent; import net.minecraftforge.server.permission.handler.DefaultPermissionHandler; import net.minecraftforge.server.permission.nodes.PermissionNode; diff --git a/forge/src/main/java/me/lucko/luckperms/forge/util/ForgeEventBusFacade.java b/forge/src/main/java/me/lucko/luckperms/forge/util/ForgeEventBusFacade.java deleted file mode 100644 index a13337240..000000000 --- a/forge/src/main/java/me/lucko/luckperms/forge/util/ForgeEventBusFacade.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * This file is part of LuckPerms, licensed under the MIT License. - * - * Copyright (c) lucko (Luck) - * Copyright (c) contributors - * - * 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. - */ - -package me.lucko.luckperms.forge.util; - -import me.lucko.luckperms.common.loader.JarInJarClassLoader; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.eventbus.api.Event; -import net.minecraftforge.eventbus.api.GenericEvent; -import net.minecraftforge.eventbus.api.IEventBus; -import net.minecraftforge.eventbus.api.IGenericEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.event.IModBusEvent; -import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; - -import java.lang.invoke.CallSite; -import java.lang.invoke.LambdaMetafactory; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Consumer; - -/** - * A utility for registering Forge listeners for methods in a jar-in-jar. - * - *

This differs from {@link IEventBus#register} as reflection is used for invoking the registered listeners - * instead of ASM, which is incompatible with {@link JarInJarClassLoader}

- */ -public class ForgeEventBusFacade { - private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); - - private final List listeners = new ArrayList<>(); - - /** - * Register listeners for all methods annotated with {@link SubscribeEvent} on the target object. - */ - public void register(Object target) { - for (Method method : target.getClass().getMethods()) { - // Ignore static methods, Support for these could be added, but they are not used in LuckPerms - if (Modifier.isStatic(method.getModifiers())) { - continue; - } - - // Methods require a SubscribeEvent annotation in order to be registered - SubscribeEvent subscribeEvent = method.getAnnotation(SubscribeEvent.class); - if (subscribeEvent == null) { - continue; - } - - EventType type = determineListenerType(method); - Consumer invoker = createInvokerFunction(method, target, type); - - // Determine the 'IEventBus' that this eventType should be registered to. - IEventBus eventBus; - if (IModBusEvent.class.isAssignableFrom(type.eventType)) { - eventBus = FMLJavaModLoadingContext.get().getModEventBus(); - } else { - eventBus = MinecraftForge.EVENT_BUS; - } - - if (IGenericEvent.class.isAssignableFrom(type.eventType)) { - addGenericListener(eventBus, type.genericType, subscribeEvent, type.eventType, invoker); - } else { - addListener(eventBus, subscribeEvent, type.eventType, invoker); - } - - this.listeners.add(new ListenerRegistration(invoker, eventBus, target)); - } - } - - /** - * Unregister previously registered listeners on the target object. - * - * @param target the target listener - */ - public void unregister(Object target) { - this.listeners.removeIf(listener -> { - if (listener.target == target) { - listener.close(); - return true; - } else { - return false; - } - }); - } - - /** - * Unregister all listeners created through this interface. - */ - public void unregisterAll() { - for (ListenerRegistration listener : this.listeners) { - listener.close(); - } - this.listeners.clear(); - } - - /** - * A listener registration. - */ - private static final class ListenerRegistration implements AutoCloseable { - /** The lambda invoker function */ - private final Consumer invoker; - /** The event bus that the invoker was registered to */ - private final IEventBus eventBus; - /** The target listener class */ - private final Object target; - - private ListenerRegistration(Consumer invoker, IEventBus eventBus, Object target) { - this.invoker = invoker; - this.eventBus = eventBus; - this.target = target; - } - - @Override - public void close() { - this.eventBus.unregister(this.invoker); - } - } - - private static Consumer createInvokerFunction(Method method, Object target, EventType type) { - // Use the 'LambdaMetafactory' to generate a consumer which can be passed directly to an 'IEventBus' - // when registering a listener, this reduces the overhead involved when reflectively invoking methods. - try { - MethodHandle methodHandle = LOOKUP.unreflect(method); - CallSite callSite = LambdaMetafactory.metafactory( - LOOKUP, - "accept", - MethodType.methodType(Consumer.class, target.getClass()), - MethodType.methodType(void.class, Object.class), - methodHandle, - MethodType.methodType(void.class, type.eventType) - ); - - return (Consumer) callSite.getTarget().bindTo(target).invokeExact(); - } catch (Throwable t) { - throw new RuntimeException("Error whilst registering " + method, t); - } - } - - public static EventType determineListenerType(Method method) { - // Get the parameter types, this includes generic information which is required for GenericEvent - Type[] parameterTypes = method.getGenericParameterTypes(); - if (parameterTypes.length != 1) { - throw new IllegalArgumentException("" - + "Method " + method + " has @SubscribeEvent annotation. " - + "It has " + parameterTypes.length + " arguments, " - + "but event handler methods require a single argument only." - ); - } - - Type parameterType = parameterTypes[0]; - Class eventType; - Class genericType; - - if (parameterType instanceof Class) { // Non-generic event - eventType = (Class) parameterType; - genericType = null; - } else if (parameterType instanceof ParameterizedType) { // Generic event - ParameterizedType parameterizedType = (ParameterizedType) parameterType; - - // Get the event class - Type rawType = parameterizedType.getRawType(); - if (rawType instanceof Class) { - eventType = (Class) rawType; - } else { - throw new UnsupportedOperationException("Raw Type " + rawType.getClass() + " is not supported"); - } - - // Find the type of 'T' in 'GenericEvent' - Type[] typeArguments = parameterizedType.getActualTypeArguments(); - if (typeArguments.length != 1) { - throw new IllegalArgumentException("" - + "Method " + method + " has @SubscribeEvent annotation. " - + "It has a " + eventType + " argument, " - + "but generic events require a single type argument only." - ); - } - - // Get the generic class - Type typeArgument = typeArguments[0]; - if (typeArgument instanceof Class) { - genericType = (Class) typeArgument; - } else { - throw new UnsupportedOperationException("Type Argument " + typeArgument.getClass() + " is not supported"); - } - } else { - throw new UnsupportedOperationException("Parameter Type " + parameterType.getClass() + " is not supported"); - } - - // Ensure 'genericType' is set if 'eventType' is a generic event - if (GenericEvent.class.isAssignableFrom(eventType) && genericType == null) { - throw new IllegalArgumentException("" - + "Method " + method + " has @SubscribeEvent annotation, " - + "but the generic argument type cannot be determined for " - + "for the GenericEvent subtype: " + eventType - ); - } - - // Ensure 'eventType' is a subclass of event - if (!Event.class.isAssignableFrom(eventType)) { - throw new IllegalArgumentException("" - + "Method " + method + " has @SubscribeEvent annotation, " - + "but takes an argument that is not an Event subtype: " + eventType - ); - } - - return new EventType(eventType, genericType); - } - - private static final class EventType { - private final Class eventType; - private final Class genericType; - - private EventType(Class eventType, Class genericType) { - this.eventType = eventType; - this.genericType = genericType; - } - } - - /** - * Handles casting generics for {@link IEventBus#addGenericListener}. - */ - @SuppressWarnings("unchecked") - private static , F> void addGenericListener(IEventBus eventBus, Class genericClassFilter, SubscribeEvent annotation, Class eventType, Consumer consumer) { - eventBus.addGenericListener((Class) genericClassFilter, annotation.priority(), annotation.receiveCanceled(), (Class) eventType, (Consumer) consumer); - } - - /** - * Handles casting generics for {@link IEventBus#addListener}. - */ - @SuppressWarnings("unchecked") - private static void addListener(IEventBus eventBus, SubscribeEvent annotation, Class eventType, Consumer consumer) { - eventBus.addListener(annotation.priority(), annotation.receiveCanceled(), (Class) eventType, (Consumer) consumer); - } - -} diff --git a/neoforge/gradle.properties b/neoforge/gradle.properties index 4324ac83c..ef072637e 100644 --- a/neoforge/gradle.properties +++ b/neoforge/gradle.properties @@ -1,2 +1,2 @@ -minecraftVersion=1.21.5 -neoForgeVersion=21.5.63-beta \ No newline at end of file +minecraftVersion=1.21.6 +neoForgeVersion=21.6.5-beta \ No newline at end of file diff --git a/neoforge/src/main/java/me/lucko/luckperms/neoforge/NeoForgeSenderFactory.java b/neoforge/src/main/java/me/lucko/luckperms/neoforge/NeoForgeSenderFactory.java index 1dbd1521d..a8b78c041 100644 --- a/neoforge/src/main/java/me/lucko/luckperms/neoforge/NeoForgeSenderFactory.java +++ b/neoforge/src/main/java/me/lucko/luckperms/neoforge/NeoForgeSenderFactory.java @@ -26,6 +26,7 @@ package me.lucko.luckperms.neoforge; import com.mojang.brigadier.ParseResults; +import com.mojang.serialization.JsonOps; import me.lucko.luckperms.common.cacheddata.result.TristateResult; import me.lucko.luckperms.common.locale.TranslationManager; import me.lucko.luckperms.common.model.User; @@ -41,7 +42,7 @@ import net.luckperms.api.util.Tristate; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.RegistryAccess; -import net.minecraft.network.chat.Component.Serializer; +import net.minecraft.network.chat.ComponentSerialization; import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.rcon.RconConsoleSource; import net.minecraft.world.entity.player.Player; @@ -116,7 +117,10 @@ public class NeoForgeSenderFactory extends SenderFactory @Override public void calculate(@NonNull ServerPlayer target, @NonNull ContextConsumer consumer) { - ServerLevel level = target.serverLevel(); + ServerLevel level = target.level(); if (this.dimensionType) { consumer.accept(DefaultContextKeys.DIMENSION_TYPE_KEY, getContextKey(level.dimension().location())); } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java b/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java index dde18f1cb..38fc86d22 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/listeners/SpongeConnectionListener.java @@ -31,16 +31,13 @@ import me.lucko.luckperms.common.locale.TranslationManager; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.plugin.util.AbstractConnectionListener; import me.lucko.luckperms.sponge.LPSpongePlugin; -import org.spongepowered.api.entity.living.player.server.ServerPlayer; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.Order; import org.spongepowered.api.event.filter.IsCancelled; import org.spongepowered.api.event.network.ServerSideConnectionEvent; import org.spongepowered.api.profile.GameProfile; -import org.spongepowered.api.util.Identifiable; import org.spongepowered.api.util.Tristate; -import java.lang.reflect.Method; import java.util.Collections; import java.util.HashSet; import java.util.Optional; diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/messaging/PluginMessageMessenger.java b/sponge/src/main/java/me/lucko/luckperms/sponge/messaging/PluginMessageMessenger.java index 42cfba16a..6d528084b 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/messaging/PluginMessageMessenger.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/messaging/PluginMessageMessenger.java @@ -31,12 +31,8 @@ import me.lucko.luckperms.sponge.LPSpongePlugin; import net.luckperms.api.messenger.IncomingMessageConsumer; import net.luckperms.api.messenger.Messenger; import org.spongepowered.api.ResourceKey; -import org.spongepowered.api.Server; import org.spongepowered.api.entity.living.player.server.ServerPlayer; -import org.spongepowered.api.network.EngineConnectionSide; -import org.spongepowered.api.network.EngineConnectionState; import org.spongepowered.api.network.ServerConnectionState; -import org.spongepowered.api.network.ServerSideConnection; import org.spongepowered.api.network.channel.ChannelBuf; import org.spongepowered.api.network.channel.raw.RawDataChannel; import org.spongepowered.api.network.channel.raw.play.RawPlayDataHandler;