From 73ed3f541e6b1e56835be1c5e53b2e3676a70e58 Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sat, 24 Jul 2021 15:53:34 +0300 Subject: [PATCH 01/14] Migrated to API8 --- .gitignore | 83 ++++++++++++++++--- build.gradle | 45 ---------- build.gradle.kts | 77 +++++++++++++++++ gradle/wrapper/gradle-wrapper.properties | 2 +- .../packetgate/api/event/PacketEvent.java | 5 +- .../api/registry/PacketConnection.java | 18 ++-- .../packetgate/api/registry/PacketGate.java | 45 ++++------ .../packetgate/plugin/PluginPacketGate.java | 42 ++++------ .../interfaces/IMixinConnectionProtocol.java | 11 +++ .../IMixinServerConnectionListener.java | 13 +++ .../IMixingClientboundGameProfilePacket.java | 9 ++ .../MixinClientboundGameProfilePacket.java | 26 ++++++ .../plugin/mixin/MixinConnectionProtocol.java | 23 +++++ .../mixin/MixinServerConnectionListener.java | 29 +++++++ .../plugin/netty/ConnectionHandler.java | 15 ++-- .../netty/CustomChannelInitializer.java | 3 +- .../plugin/netty/IncomingPacketHandler.java | 6 +- .../plugin/netty/OutgoingPacketHandler.java | 6 +- src/main/resources/META-INF/packetgate_at.cfg | 3 - src/main/resources/mixins.packetgate.json | 18 ++++ 20 files changed, 339 insertions(+), 140 deletions(-) delete mode 100644 build.gradle create mode 100644 build.gradle.kts create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixingClientboundGameProfilePacket.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java delete mode 100644 src/main/resources/META-INF/packetgate_at.cfg create mode 100644 src/main/resources/mixins.packetgate.json diff --git a/.gitignore b/.gitignore index db35524..6143cab 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,76 @@ -# Intellij project files -*.iml -*.ipr -*.iws -.idea/ +# Build # +######### +MANIFEST.MF +dependency-reduced-pom.xml + +# Compiled # +############ +/bin +/build +/dist +/lib +/out +/run +/target +*.com +*.class +*.dll +*.exe +*.o +*.so + +# Databases # +############# +*.db +*.sql +*.sqlite + +# Packages # +############ +*.7z +*.dmg +*.gz +*.iso +*.rar +*.tar +*.zip -#Gradle -.gradletasknamecache -.gradle/ -build/ -bin/ +# Repository # +############## +.git +# Logging # +########### +/logs +*.log + +# Misc # +######## +*.bak + +# System # +########## .DS_Store +ehthumbs.db +Thumbs.db + +# Project # +########### +.classpath +.externalToolBuilders +/.gradle +.idea +.project +.settings +.factorypath +/eclipse +nbproject +atlassian-ide-plugin.xml +build.xml +nb-configuration.xml +*.iml +*.ipr +*.iws +/.apt_generated/ +*.launch +/.nb-gradle/ diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 3aab966..0000000 --- a/build.gradle +++ /dev/null @@ -1,45 +0,0 @@ -buildscript { - repositories { - maven { - name = 'forge' - url = 'http://files.minecraftforge.net/maven' - } - } - - dependencies { - classpath 'net.minecraftforge.gradle:ForgeGradle:2.3-SNAPSHOT' - } -} - -plugins { - id 'org.spongepowered.plugin' version '0.8.1' - id 'net.minecrell.vanillagradle.server' version '2.2-6' - id 'maven' -} - -group = 'eu.crushedpixel.sponge' -version = '0.1.2' - -sourceCompatibility = 1.8 -targetCompatibility = 1.8 - -dependencies { - compile 'org.spongepowered:spongeapi:7.1.0' -} - -minecraft { - version = '1.12.2' - mappings = 'snapshot_20180131' - makeObfSourceJar = false -} - -jar { - manifest.attributes( - 'FMLAT': 'packetgate_at.cfg', - 'ForceLoadAsMod': true - ) -} - -install { - dependsOn ':reobfJar' -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..4ae9360 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,77 @@ +import org.spongepowered.gradle.plugin.config.PluginLoaders +import org.spongepowered.plugin.metadata.PluginDependency + + +plugins { + `java-library` + id("org.spongepowered.gradle.plugin") version "1.1.1" + id("org.spongepowered.gradle.vanilla") version "0.2" +} + +group = "eu.crushedpixel.sponge" +version = "0.2.0" + +val javaTarget = 16 + +java { + sourceCompatibility = JavaVersion.toVersion(javaTarget) + targetCompatibility = JavaVersion.toVersion(javaTarget) +} + +repositories { + mavenCentral() +} + +dependencies { + compileOnly("org.spongepowered:mixin:0.8.3") +} + +minecraft { + version("1.16.5") +} + +sponge { + apiVersion("8.0.0") + plugin("packetgate") { + loader(PluginLoaders.JAVA_PLAIN) + displayName("PacketGate") + mainClass("eu.crushedpixel.sponge.packetgate.plugin.PluginPacketGate") + description("Sponge library to manipulate incoming and outgoing Packets. ") + links { + homepage("https://github.com/CrushedPixel/PacketGate") + source("https://github.com/CrushedPixel/PacketGate") + issues("https://github.com/CrushedPixel/PacketGate/issues") + } + contributor("CrushedPixel") { + description("Lead developer") + } + contributor("Masa") { + description("API8 port") + } + dependency("spongeapi") { + loadOrder(PluginDependency.LoadOrder.AFTER) + optional(false) + } + } +} + +tasks.withType { + manifest { + attributes["MixinConfigs"] = "mixins.packetgate.json" + } +} + +tasks.withType(JavaCompile::class).configureEach { + options.apply { + encoding = "utf-8" // Consistent source file encoding + if (JavaVersion.current().isJava10Compatible) { + release.set(javaTarget) + } + } +} + +// Make sure all tasks which produce archives (jar, sources jar, javadoc jar, etc) produce more consistent output +tasks.withType(AbstractArchiveTask::class).configureEach { + isReproducibleFileOrder = true + isPreserveFileTimestamps = false +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 41d78d8..e018203 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java index 105741b..50b51a0 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java @@ -1,6 +1,7 @@ package eu.crushedpixel.sponge.packetgate.api.event; -import net.minecraft.network.Packet; + +import net.minecraft.network.protocol.Packet; public class PacketEvent { @@ -15,7 +16,7 @@ public PacketEvent(Packet packet, boolean outgoing) { private final boolean outgoing; - public Packet getPacket() { + public Packet packet() { return packet; } diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java index 220da7d..6878727 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java @@ -4,11 +4,11 @@ import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener; import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.PacketListenerData; import io.netty.channel.Channel; -import net.minecraft.network.Packet; -import org.slf4j.Logger; +import net.minecraft.network.protocol.Packet; import java.util.List; import java.util.UUID; +import java.util.logging.Logger; public class PacketConnection extends ListenerOwner { @@ -16,7 +16,7 @@ public class PacketConnection extends ListenerOwner { private final Channel channel; - private UUID playerUUID; + private UUID playerUniqueId; public PacketConnection(Logger logger, Channel channel) { this.logger = logger; @@ -28,7 +28,7 @@ public void sendPacket(Packet packet) { } public void handlePacketEvent(PacketEvent event) { - List list = packetListeners.get(event.getPacket().getClass()); + List list = packetListeners.get(event.packet().getClass()); if (list == null) return; for (PacketListenerData data : list) { @@ -42,15 +42,15 @@ public void handlePacketEvent(PacketEvent event) { } } - public Channel getChannel() { + public Channel channel() { return channel; } - public UUID getPlayerUUID() { - return playerUUID; + public UUID playerUniqueId() { + return playerUniqueId; } - public void setPlayerUUID(UUID playerUUID) { - this.playerUUID = playerUUID; + public void setPlayerUniqueId(UUID playerUUID) { + this.playerUniqueId = playerUUID; } } diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java index 215ab07..6173266 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java @@ -5,24 +5,17 @@ import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener; import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.ListenerPriority; import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.PacketListenerData; -import eu.crushedpixel.sponge.packetgate.plugin.PluginPacketGate; -import net.minecraft.network.EnumConnectionState; -import net.minecraft.network.EnumPacketDirection; -import net.minecraft.network.Packet; +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinConnectionProtocol; +import net.minecraft.network.ConnectionProtocol; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketFlow; import org.spongepowered.api.entity.living.player.Player; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; +import java.util.*; public class PacketGate extends ListenerOwner { - private Set connections = new HashSet<>(); + private final Set connections = new HashSet<>(); public void registerConnection(PacketConnection connection) { // register all global packet listeners to the connection @@ -38,13 +31,13 @@ public void unregisterConnection(PacketConnection connection) { } public Optional connectionByPlayer(Player player) { - return connectionByUniqueId(player.getUniqueId()); + return connectionByUniqueId(player.uniqueId()); } public Optional connectionByUniqueId(UUID uniqueId) { return connections .stream() - .filter(connection -> uniqueId.equals(connection.getPlayerUUID())) + .filter(connection -> uniqueId.equals(connection.playerUniqueId())) .findFirst(); } @@ -60,26 +53,20 @@ public void registerListener(PacketListener packetListener, ListenerPriority pri // if no classes are specified, apply the listener to all Minecraft packet classes if (packetClasses.length == 0) { - for (EnumConnectionState state : EnumConnectionState.values()) { - try { - Field f = state.getClass().getDeclaredField("field_179247_h"); - f.setAccessible(true); - Map>>> directionMaps = - (Map>>>) f.get(state); - directionMaps.forEach((enumPacketDirection, integerClassBiMap) -> { - integerClassBiMap.forEach((id, clazz) -> { - classes.add(clazz); - }); + IMixinConnectionProtocol[] list = (IMixinConnectionProtocol[]) (Object) ConnectionProtocol.values(); + for (IMixinConnectionProtocol state : list) { + Map>>> directionMaps = (Map>>>) state.getFlows(); + directionMaps.forEach((enumPacketDirection, integerClassBiMap) -> { + integerClassBiMap.forEach((id, clazz) -> { + classes.add(clazz); }); - } catch (NoSuchFieldException | IllegalAccessException ex) { - System.out.println(ex.getMessage()); - } + }); } } else { // check if packet classes are valid for (Class clazz : packetClasses) { Preconditions.checkArgument(Packet.class.isAssignableFrom(clazz), - "Packet classes have to be subclasses of net.minecraft.network.Packet"); + "Packet classes have to be subclasses of net.minecraft.network.protocol.Packet"); classes.add(clazz); } diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java index 47e4c21..ea449d7 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java @@ -2,46 +2,40 @@ import com.google.inject.Inject; import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinServerConnectionListener; import eu.crushedpixel.sponge.packetgate.plugin.netty.CustomChannelInitializer; import io.netty.channel.ChannelFuture; -import net.minecraft.network.NetworkSystem; import net.minecraft.server.MinecraftServer; -import org.slf4j.Logger; import org.spongepowered.api.Sponge; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.Order; -import org.spongepowered.api.event.game.state.GameInitializationEvent; -import org.spongepowered.api.plugin.Plugin; +import org.spongepowered.api.event.lifecycle.LoadedGameEvent; +import org.spongepowered.plugin.jvm.Plugin; -import java.lang.reflect.Field; import java.util.List; +import java.util.logging.Logger; -@Plugin(id = PluginPacketGate.ID, version = PluginPacketGate.VERSION) +@Plugin(PluginPacketGate.ID) public class PluginPacketGate { static final String ID = "packetgate"; - static final String VERSION = "0.1.1"; @Inject private Logger logger; + private PacketGate packetGate; + @Listener(order = Order.FIRST) - public void init(GameInitializationEvent event) { - PacketGate packetGate = new PacketGate(); - Sponge.getServiceManager().setProvider(this, PacketGate.class, packetGate); - - NetworkSystem networkSystem = ((MinecraftServer) Sponge.getServer()).getNetworkSystem(); - try { - Field f = networkSystem.getClass().getDeclaredField("field_151274_e"); - f.setAccessible(true); - List endpoints = (List) f.get(networkSystem); - endpoints.forEach(channelFuture -> { - channelFuture.channel().pipeline().addFirst(new CustomChannelInitializer(logger, packetGate)); - logger.info("Successfully injected channel initializer into endpoint"); - }); - } catch (NoSuchFieldException | IllegalAccessException ex) { - System.out.println(ex.getMessage()); - } - } + public void init(final LoadedGameEvent event) { + packetGate = new PacketGate(); + Sponge.serviceProvider().provide(PacketGate.class); + IMixinServerConnectionListener connection = (IMixinServerConnectionListener) ((MinecraftServer) Sponge.server()).getConnection(); + + List channels = connection.getChannels(); + channels.forEach(channelFuture -> { + channelFuture.channel().pipeline().addFirst(new CustomChannelInitializer(logger, packetGate)); + logger.info("Successfully injected channel initializer into endpoint"); + }); + } } \ No newline at end of file diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java new file mode 100644 index 0000000..9470620 --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java @@ -0,0 +1,11 @@ +package eu.crushedpixel.sponge.packetgate.plugin.interfaces; + +import net.minecraft.network.protocol.PacketFlow; + +import java.util.Map; + +public interface IMixinConnectionProtocol { + + Map getFlows(); + +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java new file mode 100644 index 0000000..95ba19c --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java @@ -0,0 +1,13 @@ +package eu.crushedpixel.sponge.packetgate.plugin.interfaces; + +import io.netty.channel.ChannelFuture; +import net.minecraft.network.Connection; + +import java.util.List; + +public interface IMixinServerConnectionListener { + + List getChannels(); + List getConnections(); + +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixingClientboundGameProfilePacket.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixingClientboundGameProfilePacket.java new file mode 100644 index 0000000..260c3b2 --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixingClientboundGameProfilePacket.java @@ -0,0 +1,9 @@ +package eu.crushedpixel.sponge.packetgate.plugin.interfaces; + +import java.util.UUID; + +public interface IMixingClientboundGameProfilePacket { + + UUID uniqueId(); + String username(); +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java new file mode 100644 index 0000000..5673328 --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java @@ -0,0 +1,26 @@ +package eu.crushedpixel.sponge.packetgate.plugin.mixin; + +import com.mojang.authlib.GameProfile; +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixingClientboundGameProfilePacket; +import net.minecraft.network.protocol.login.ClientboundGameProfilePacket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.UUID; + +@Mixin(ClientboundGameProfilePacket.class) +public abstract class MixinClientboundGameProfilePacket implements IMixingClientboundGameProfilePacket { + + @Shadow + private GameProfile gameProfile; + + @Override + public UUID uniqueId() { + return this.gameProfile.getId(); + } + + @Override + public String username() { + return this.gameProfile.getName(); + } +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java new file mode 100644 index 0000000..8709fb9 --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java @@ -0,0 +1,23 @@ +package eu.crushedpixel.sponge.packetgate.plugin.mixin; + +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinConnectionProtocol; +import net.minecraft.network.ConnectionProtocol; +import net.minecraft.network.protocol.PacketFlow; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Map; + +@Mixin(ConnectionProtocol.class) +public abstract class MixinConnectionProtocol implements IMixinConnectionProtocol { + + @Shadow + @Final + private Map flows; + + @Override + public Map getFlows() { + return this.flows; + } +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java new file mode 100644 index 0000000..40e2ed1 --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java @@ -0,0 +1,29 @@ +package eu.crushedpixel.sponge.packetgate.plugin.mixin; + +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinServerConnectionListener; +import io.netty.channel.ChannelFuture; +import net.minecraft.network.Connection; +import net.minecraft.server.network.ServerConnectionListener; +import org.spongepowered.asm.mixin.*; + +import java.util.List; + +@Mixin(ServerConnectionListener.class) +public abstract class MixinServerConnectionListener implements IMixinServerConnectionListener { + + @Shadow + @Final + private List channels; + + @Shadow + @Final + private List connections; + + public List getChannels() { + return this.channels; + } + + public List getConnections() { + return this.connections; + } +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java index dd4f4ae..aa017d5 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java @@ -1,15 +1,13 @@ package eu.crushedpixel.sponge.packetgate.plugin.netty; -import com.mojang.authlib.GameProfile; import eu.crushedpixel.sponge.packetgate.api.registry.PacketConnection; import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixingClientboundGameProfilePacket; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelPromise; -import net.minecraft.network.login.server.SPacketLoginSuccess; - -import java.lang.reflect.Field; +import net.minecraft.network.protocol.login.ClientboundGameProfilePacket; @ChannelHandler.Sharable class ConnectionHandler extends ChannelDuplexHandler { @@ -43,12 +41,9 @@ public void channelActive(ChannelHandlerContext ctx) throws Exception { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (msg instanceof SPacketLoginSuccess) { - SPacketLoginSuccess packetLoginSuccess = (SPacketLoginSuccess)msg; - Field f = packetLoginSuccess.getClass().getDeclaredField("field_149602_a"); - f.setAccessible(true); - GameProfile profile = (GameProfile) f.get(packetLoginSuccess); - connection.setPlayerUUID(profile.getId()); + if (msg instanceof ClientboundGameProfilePacket packetLoginSuccess) { + IMixingClientboundGameProfilePacket packet = (IMixingClientboundGameProfilePacket) packetLoginSuccess; + connection.setPlayerUniqueId(packet.uniqueId()); } super.write(ctx, msg, promise); } diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java index b16f0d3..8d315fa 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java @@ -5,7 +5,8 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import org.slf4j.Logger; + +import java.util.logging.Logger; public class CustomChannelInitializer extends ChannelInboundHandlerAdapter { diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java index 5d6eb9c..bf7c5a5 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java @@ -4,7 +4,7 @@ import eu.crushedpixel.sponge.packetgate.api.registry.PacketConnection; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import net.minecraft.network.Packet; +import net.minecraft.network.protocol.Packet; class IncomingPacketHandler extends ChannelInboundHandlerAdapter { @@ -17,7 +17,7 @@ public IncomingPacketHandler(PacketConnection packetConnection) { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof Packet) { - PacketEvent event = new PacketEvent((Packet)msg, false); + PacketEvent event = new PacketEvent((Packet) msg, false); try { packetConnection.handlePacketEvent(event); @@ -26,7 +26,7 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception } if (event.isCancelled()) return; - msg = event.getPacket(); + msg = event.packet(); } super.channelRead(ctx, msg); diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java index 83f5fb0..0ef14b4 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java @@ -5,7 +5,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelOutboundHandlerAdapter; import io.netty.channel.ChannelPromise; -import net.minecraft.network.Packet; +import net.minecraft.network.protocol.Packet; class OutgoingPacketHandler extends ChannelOutboundHandlerAdapter { @@ -18,7 +18,7 @@ public OutgoingPacketHandler(PacketConnection packetConnection) { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg instanceof Packet) { - PacketEvent event = new PacketEvent((Packet)msg, true); + PacketEvent event = new PacketEvent((Packet) msg, true); try { packetConnection.handlePacketEvent(event); @@ -27,7 +27,7 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) } if (event.isCancelled()) return; - msg = event.getPacket(); + msg = event.packet(); } super.write(ctx, msg, promise); diff --git a/src/main/resources/META-INF/packetgate_at.cfg b/src/main/resources/META-INF/packetgate_at.cfg deleted file mode 100644 index b4021f6..0000000 --- a/src/main/resources/META-INF/packetgate_at.cfg +++ /dev/null @@ -1,3 +0,0 @@ -public-f net.minecraft.network.NetworkSystem field_151274_e # endpoints -public-f net.minecraft.network.EnumConnectionState field_179247_h # directionMaps -public net.minecraft.network.login.server.SPacketLoginSuccess field_149602_a # profile \ No newline at end of file diff --git a/src/main/resources/mixins.packetgate.json b/src/main/resources/mixins.packetgate.json new file mode 100644 index 0000000..1345eea --- /dev/null +++ b/src/main/resources/mixins.packetgate.json @@ -0,0 +1,18 @@ +{ + "required": true, + "minVersion": "0.8.3", + "package": "eu.crushedpixel.sponge.packetgate.plugin.mixin", + "refmap": "mixins.packetgate.refmap.json", + "target": "@env(DEFAULT)", + "compatibilityLevel": "JAVA_11", + "server": [ + "MixinConnectionProtocol", + "MixinServerConnectionListener" + ], + "injectors": { + "defaultRequire": 1 + }, + "mixins": [ + "MixinClientboundGameProfilePacket" + ] +} From a83ef3feb45bbcfd48c859bd12e6fe6717856c70 Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sat, 24 Jul 2021 15:56:56 +0300 Subject: [PATCH 02/14] Removed ServiceProvider --- .../crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java index ea449d7..b39bf20 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java @@ -28,7 +28,6 @@ public class PluginPacketGate { @Listener(order = Order.FIRST) public void init(final LoadedGameEvent event) { packetGate = new PacketGate(); - Sponge.serviceProvider().provide(PacketGate.class); IMixinServerConnectionListener connection = (IMixinServerConnectionListener) ((MinecraftServer) Sponge.server()).getConnection(); From eaa250acb948400bc47c4f6778e8a3861edfe248 Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sat, 24 Jul 2021 16:26:08 +0300 Subject: [PATCH 03/14] Added PacketGateAPI --- .../sponge/packetgate/api/PacketGateAPI.java | 17 +++++++++++++++++ .../packetgate/plugin/PluginPacketGate.java | 10 +++------- 2 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java new file mode 100644 index 0000000..c14c6b5 --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java @@ -0,0 +1,17 @@ +package eu.crushedpixel.sponge.packetgate.api; + +import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; +import eu.crushedpixel.sponge.packetgate.plugin.PluginPacketGate; + +public class PacketGateAPI { + + /** + * Get {@link PacketGate} + * + * @return PacketGate instance to use + */ + public PacketGate get() { + return PluginPacketGate.packetGate; + } + +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java index b39bf20..41b0273 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java @@ -15,21 +15,17 @@ import java.util.List; import java.util.logging.Logger; -@Plugin(PluginPacketGate.ID) +@Plugin("packetgate") public class PluginPacketGate { - static final String ID = "packetgate"; - @Inject private Logger logger; - private PacketGate packetGate; + public static PacketGate packetGate = new PacketGate(); @Listener(order = Order.FIRST) public void init(final LoadedGameEvent event) { - packetGate = new PacketGate(); - - IMixinServerConnectionListener connection = (IMixinServerConnectionListener) ((MinecraftServer) Sponge.server()).getConnection(); + IMixinServerConnectionListener connection = (IMixinServerConnectionListener) ((MinecraftServer) Sponge.server()).getConnection(); List channels = connection.getChannels(); channels.forEach(channelFuture -> { From 0a7b48627c05c931aa7bb37f41cac07be5f55b0c Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sat, 24 Jul 2021 17:04:24 +0300 Subject: [PATCH 04/14] Publish removed --- build.gradle.kts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4ae9360..c35040c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,6 +3,7 @@ import org.spongepowered.plugin.metadata.PluginDependency plugins { + `maven-publish` `java-library` id("org.spongepowered.gradle.plugin") version "1.1.1" id("org.spongepowered.gradle.vanilla") version "0.2" @@ -55,7 +56,7 @@ sponge { } } -tasks.withType { +tasks.withType { manifest { attributes["MixinConfigs"] = "mixins.packetgate.json" } @@ -74,4 +75,4 @@ tasks.withType(JavaCompile::class).configureEach { tasks.withType(AbstractArchiveTask::class).configureEach { isReproducibleFileOrder = true isPreserveFileTimestamps = false -} +} \ No newline at end of file From 0eb61896ebf176c6f1f8557ddb2b83e761c44f28 Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sat, 24 Jul 2021 17:50:08 +0300 Subject: [PATCH 05/14] Updated README --- README.md | 41 ++++++++++++++++------------------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 05c602e..333fe53 100644 --- a/README.md +++ b/README.md @@ -28,16 +28,9 @@ dependencies { The `PacketGate` library provides a `PacketGate` class that acts as the registry for `PacketListener`s and provides `PacketConnection`s for all online players. -You can get an instance of PacketGate using Sponge's `ServiceManager`: +You can get an instance of PacketGate using `PacketGateAPI`: ```java -Optional optional = Sponge.getServiceManager().provide(PacketGate.class); -if (optional.isPresent()) { - PacketGate packetGate = optional.get(); - // use PacketGate -} else { - // the PacketGate plugin is not installed on the server -} - +PacketGate packetGate = PacketGateAPI.get(); ``` ### Writing a PacketListener The `PacketListener` interface exposes two methods: `onPacketWrite` and `onPacketRead` which @@ -54,15 +47,15 @@ public class SwearWordListener extends PacketListenerAdapter { @Override public void onPacketRead(PacketEvent event, PacketConnection connection) { - if (!(event.getPacket() instanceof CPacketChatMessage)) return; - CPacketChatMessage packet = (CPacketChatMessage)event.getPacket(); + if (!(event.packet() instanceof ServerboundChatPacket)) return; + ServerboundChatPacket packet = (ServerboundChatPacket) event.packet(); if (packet.getMessage().contains("shit") || packet.getMessage().contains("damn")) { // cancel the event so the server will act like the client never sent it event.setCancelled(true); // get a Sponge player from the PacketConnection - Player player = Sponge.getServer().getPlayer(connection.getPlayerUUID()); + Player player = Sponge.getServer().getPlayer(connection.playerUniqueId()); // send the player some warning words player.sendMessage(Text.of("Please don't swear!")); @@ -74,7 +67,7 @@ public class SwearWordListener extends PacketListenerAdapter { You can also modify the packet instead of cancelling it, for example: ```java String censored = packet.getMessage().replaceAll("shit|damn", "****"); -event.setPacket(new CPacketChatMessage(censored)); +event.setPacket(new ServerboundChatPacket(censored)); ``` ### Registering a PacketListener @@ -84,10 +77,9 @@ the listener should listen to: ```java packetGate.registerListener( new ExampleListener(), - ListenerPriority.DEFAULT, - CPacketChatMessage.class, - SPacketChat.class); - + ListenerPriority.DEFAULT, + ServerboundChatPacket.class +); ``` A `PacketListener` can be registered globally or for a certain `PacketConnection` only. @@ -95,14 +87,13 @@ To retrieve the `PacketConnection` instance for a certain player, use `PacketGat ```java public void registerSwearWordListener(Player player) { - Sponge.getServiceManager().provide(PacketGate.class).ifPresent(packetGate -> { - PacketConnection connection = packetGate.connectionByPlayer(player).get(); - packetGate.registerListener( - new SwearWordListener(), - ListenerPriority.DEFAULT, - connection, - CPacketChatMessage.class); - } + PacketGate packetGate = PacketGateAPI.get(); + PacketConnection connection = packetGate.connectionByPlayer(player).get(); + packetGate.registerListener( + new SwearWordListener(), + ListenerPriority.DEFAULT, + connection, + CPacketChatMessage.class); } ``` From 7d73b168fcc1c1762d52ee50129ea75395f119d9 Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sat, 24 Jul 2021 17:50:37 +0300 Subject: [PATCH 06/14] Made getter static --- .../eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java index c14c6b5..6bc4fa6 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/PacketGateAPI.java @@ -10,7 +10,7 @@ public class PacketGateAPI { * * @return PacketGate instance to use */ - public PacketGate get() { + public static PacketGate get() { return PluginPacketGate.packetGate; } From 2512f0d20de9bdcbff1c0e59b0b0a2f293c25a8f Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sat, 24 Jul 2021 20:48:12 +0300 Subject: [PATCH 07/14] Mixing -> Mixing --- ...ilePacket.java => IMixinClientboundGameProfilePacket.java} | 2 +- .../plugin/mixin/MixinClientboundGameProfilePacket.java | 4 ++-- .../sponge/packetgate/plugin/netty/ConnectionHandler.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/{IMixingClientboundGameProfilePacket.java => IMixinClientboundGameProfilePacket.java} (70%) diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixingClientboundGameProfilePacket.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinClientboundGameProfilePacket.java similarity index 70% rename from src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixingClientboundGameProfilePacket.java rename to src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinClientboundGameProfilePacket.java index 260c3b2..2cd8e30 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixingClientboundGameProfilePacket.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinClientboundGameProfilePacket.java @@ -2,7 +2,7 @@ import java.util.UUID; -public interface IMixingClientboundGameProfilePacket { +public interface IMixinClientboundGameProfilePacket { UUID uniqueId(); String username(); diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java index 5673328..8930b77 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java @@ -1,7 +1,7 @@ package eu.crushedpixel.sponge.packetgate.plugin.mixin; import com.mojang.authlib.GameProfile; -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixingClientboundGameProfilePacket; +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinClientboundGameProfilePacket; import net.minecraft.network.protocol.login.ClientboundGameProfilePacket; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -9,7 +9,7 @@ import java.util.UUID; @Mixin(ClientboundGameProfilePacket.class) -public abstract class MixinClientboundGameProfilePacket implements IMixingClientboundGameProfilePacket { +public abstract class MixinClientboundGameProfilePacket implements IMixinClientboundGameProfilePacket { @Shadow private GameProfile gameProfile; diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java index aa017d5..cc9b30d 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java @@ -2,7 +2,7 @@ import eu.crushedpixel.sponge.packetgate.api.registry.PacketConnection; import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixingClientboundGameProfilePacket; +import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinClientboundGameProfilePacket; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -42,7 +42,7 @@ public void channelActive(ChannelHandlerContext ctx) throws Exception { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg instanceof ClientboundGameProfilePacket packetLoginSuccess) { - IMixingClientboundGameProfilePacket packet = (IMixingClientboundGameProfilePacket) packetLoginSuccess; + IMixinClientboundGameProfilePacket packet = (IMixinClientboundGameProfilePacket) packetLoginSuccess; connection.setPlayerUniqueId(packet.uniqueId()); } super.write(ctx, msg, promise); From c85744a3a481e9b25a86995d747ce7d0841b561f Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sun, 25 Jul 2021 17:01:44 +0300 Subject: [PATCH 08/14] Changed Java16 (non-LTS) -> Java 11 (LTS) for hot swapping support --- build.gradle.kts | 2 +- .../sponge/packetgate/plugin/netty/ConnectionHandler.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c35040c..7bd27e2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -12,7 +12,7 @@ plugins { group = "eu.crushedpixel.sponge" version = "0.2.0" -val javaTarget = 16 +val javaTarget = 11 java { sourceCompatibility = JavaVersion.toVersion(javaTarget) diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java index cc9b30d..9895af3 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java @@ -41,8 +41,8 @@ public void channelActive(ChannelHandlerContext ctx) throws Exception { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { - if (msg instanceof ClientboundGameProfilePacket packetLoginSuccess) { - IMixinClientboundGameProfilePacket packet = (IMixinClientboundGameProfilePacket) packetLoginSuccess; + if (msg instanceof ClientboundGameProfilePacket) { + IMixinClientboundGameProfilePacket packet = (IMixinClientboundGameProfilePacket) msg; connection.setPlayerUniqueId(packet.uniqueId()); } super.write(ctx, msg, promise); From 8c7f1918d73d3c7cab684e791854f28d6c16f245 Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Sun, 25 Jul 2021 17:18:06 +0300 Subject: [PATCH 09/14] Switched to log4j Logger --- .../sponge/packetgate/api/registry/PacketConnection.java | 2 +- .../sponge/packetgate/plugin/PluginPacketGate.java | 3 +-- .../packetgate/plugin/netty/CustomChannelInitializer.java | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java index 6878727..903599d 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java @@ -5,10 +5,10 @@ import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.PacketListenerData; import io.netty.channel.Channel; import net.minecraft.network.protocol.Packet; +import org.apache.logging.log4j.Logger; import java.util.List; import java.util.UUID; -import java.util.logging.Logger; public class PacketConnection extends ListenerOwner { diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java index 41b0273..8002a27 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java @@ -11,9 +11,8 @@ import org.spongepowered.api.event.Order; import org.spongepowered.api.event.lifecycle.LoadedGameEvent; import org.spongepowered.plugin.jvm.Plugin; - +import org.apache.logging.log4j.Logger; import java.util.List; -import java.util.logging.Logger; @Plugin("packetgate") public class PluginPacketGate { diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java index 8d315fa..15411f2 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/CustomChannelInitializer.java @@ -6,7 +6,7 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; -import java.util.logging.Logger; +import org.apache.logging.log4j.Logger; public class CustomChannelInitializer extends ChannelInboundHandlerAdapter { From acee869bc0bf29833652cb701acb8a70490a1570 Mon Sep 17 00:00:00 2001 From: Matias Paavilainen Date: Wed, 28 Jul 2021 20:45:33 +0300 Subject: [PATCH 10/14] Updated Mixins to use Accessors --- .../packetgate/api/registry/PacketGate.java | 8 ++--- .../packetgate/plugin/PluginPacketGate.java | 10 +++---- .../IMixinClientboundGameProfilePacket.java | 9 ------ .../interfaces/IMixinConnectionProtocol.java | 11 ------- .../IMixinServerConnectionListener.java | 13 --------- .../ClientboundGameProfilePacketAccessor.java | 13 +++++++++ .../mixin/ConnectionListenerAccessor.java | 20 +++++++++++++ .../mixin/ConnectionProtocolFlowAccessor.java | 15 ++++++++++ .../MixinClientboundGameProfilePacket.java | 26 ----------------- .../plugin/mixin/MixinConnectionProtocol.java | 23 --------------- .../mixin/MixinServerConnectionListener.java | 29 ------------------- .../plugin/netty/ConnectionHandler.java | 6 ++-- src/main/resources/mixins.packetgate.json | 6 ++-- 13 files changed, 63 insertions(+), 126 deletions(-) delete mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinClientboundGameProfilePacket.java delete mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java delete mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ClientboundGameProfilePacketAccessor.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionListenerAccessor.java create mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionProtocolFlowAccessor.java delete mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java delete mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java delete mode 100644 src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java index 6173266..9dba17f 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java @@ -5,7 +5,7 @@ import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener; import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.ListenerPriority; import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.PacketListenerData; -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinConnectionProtocol; +import eu.crushedpixel.sponge.packetgate.plugin.mixin.ConnectionProtocolFlowAccessor; import net.minecraft.network.ConnectionProtocol; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.PacketFlow; @@ -53,9 +53,9 @@ public void registerListener(PacketListener packetListener, ListenerPriority pri // if no classes are specified, apply the listener to all Minecraft packet classes if (packetClasses.length == 0) { - IMixinConnectionProtocol[] list = (IMixinConnectionProtocol[]) (Object) ConnectionProtocol.values(); - for (IMixinConnectionProtocol state : list) { - Map>>> directionMaps = (Map>>>) state.getFlows(); + ConnectionProtocolFlowAccessor[] list = (ConnectionProtocolFlowAccessor[]) (Object) ConnectionProtocol.values(); + for (ConnectionProtocolFlowAccessor state : list) { + Map>>> directionMaps = (Map>>>) state.accessor$flows(); directionMaps.forEach((enumPacketDirection, integerClassBiMap) -> { integerClassBiMap.forEach((id, clazz) -> { classes.add(clazz); diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java index 8002a27..4d46b76 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java @@ -2,16 +2,17 @@ import com.google.inject.Inject; import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinServerConnectionListener; +import eu.crushedpixel.sponge.packetgate.plugin.mixin.ConnectionListenerAccessor; import eu.crushedpixel.sponge.packetgate.plugin.netty.CustomChannelInitializer; import io.netty.channel.ChannelFuture; import net.minecraft.server.MinecraftServer; +import org.apache.logging.log4j.Logger; import org.spongepowered.api.Sponge; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.Order; import org.spongepowered.api.event.lifecycle.LoadedGameEvent; import org.spongepowered.plugin.jvm.Plugin; -import org.apache.logging.log4j.Logger; + import java.util.List; @Plugin("packetgate") @@ -24,9 +25,8 @@ public class PluginPacketGate { @Listener(order = Order.FIRST) public void init(final LoadedGameEvent event) { - IMixinServerConnectionListener connection = (IMixinServerConnectionListener) ((MinecraftServer) Sponge.server()).getConnection(); - - List channels = connection.getChannels(); + ConnectionListenerAccessor connection = (ConnectionListenerAccessor) ((MinecraftServer) Sponge.server()).getConnection(); + List channels = connection.accessor$channels(); channels.forEach(channelFuture -> { channelFuture.channel().pipeline().addFirst(new CustomChannelInitializer(logger, packetGate)); logger.info("Successfully injected channel initializer into endpoint"); diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinClientboundGameProfilePacket.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinClientboundGameProfilePacket.java deleted file mode 100644 index 2cd8e30..0000000 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinClientboundGameProfilePacket.java +++ /dev/null @@ -1,9 +0,0 @@ -package eu.crushedpixel.sponge.packetgate.plugin.interfaces; - -import java.util.UUID; - -public interface IMixinClientboundGameProfilePacket { - - UUID uniqueId(); - String username(); -} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java deleted file mode 100644 index 9470620..0000000 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinConnectionProtocol.java +++ /dev/null @@ -1,11 +0,0 @@ -package eu.crushedpixel.sponge.packetgate.plugin.interfaces; - -import net.minecraft.network.protocol.PacketFlow; - -import java.util.Map; - -public interface IMixinConnectionProtocol { - - Map getFlows(); - -} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java deleted file mode 100644 index 95ba19c..0000000 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/interfaces/IMixinServerConnectionListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package eu.crushedpixel.sponge.packetgate.plugin.interfaces; - -import io.netty.channel.ChannelFuture; -import net.minecraft.network.Connection; - -import java.util.List; - -public interface IMixinServerConnectionListener { - - List getChannels(); - List getConnections(); - -} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ClientboundGameProfilePacketAccessor.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ClientboundGameProfilePacketAccessor.java new file mode 100644 index 0000000..d295c2e --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ClientboundGameProfilePacketAccessor.java @@ -0,0 +1,13 @@ +package eu.crushedpixel.sponge.packetgate.plugin.mixin; + +import com.mojang.authlib.GameProfile; +import net.minecraft.network.protocol.login.ClientboundGameProfilePacket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ClientboundGameProfilePacket.class) +public interface ClientboundGameProfilePacketAccessor { + + @Accessor("gameProfile") GameProfile accessor$gameProfile(); + +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionListenerAccessor.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionListenerAccessor.java new file mode 100644 index 0000000..4f74b6c --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionListenerAccessor.java @@ -0,0 +1,20 @@ +package eu.crushedpixel.sponge.packetgate.plugin.mixin; + +import io.netty.channel.ChannelFuture; +import net.minecraft.network.Connection; +import net.minecraft.server.network.ServerConnectionListener; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.List; + +@Mixin(ServerConnectionListener.class) +public interface ConnectionListenerAccessor { + + @Accessor("channels") + List accessor$channels(); + + @Accessor("connections") + List accessor$connections(); + +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionProtocolFlowAccessor.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionProtocolFlowAccessor.java new file mode 100644 index 0000000..e318cfd --- /dev/null +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/ConnectionProtocolFlowAccessor.java @@ -0,0 +1,15 @@ +package eu.crushedpixel.sponge.packetgate.plugin.mixin; + +import net.minecraft.network.ConnectionProtocol; +import net.minecraft.network.protocol.PacketFlow; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(ConnectionProtocol.class) +public interface ConnectionProtocolFlowAccessor { + + @Accessor("flows") Map accessor$flows(); + +} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java deleted file mode 100644 index 8930b77..0000000 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinClientboundGameProfilePacket.java +++ /dev/null @@ -1,26 +0,0 @@ -package eu.crushedpixel.sponge.packetgate.plugin.mixin; - -import com.mojang.authlib.GameProfile; -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinClientboundGameProfilePacket; -import net.minecraft.network.protocol.login.ClientboundGameProfilePacket; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.UUID; - -@Mixin(ClientboundGameProfilePacket.class) -public abstract class MixinClientboundGameProfilePacket implements IMixinClientboundGameProfilePacket { - - @Shadow - private GameProfile gameProfile; - - @Override - public UUID uniqueId() { - return this.gameProfile.getId(); - } - - @Override - public String username() { - return this.gameProfile.getName(); - } -} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java deleted file mode 100644 index 8709fb9..0000000 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinConnectionProtocol.java +++ /dev/null @@ -1,23 +0,0 @@ -package eu.crushedpixel.sponge.packetgate.plugin.mixin; - -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinConnectionProtocol; -import net.minecraft.network.ConnectionProtocol; -import net.minecraft.network.protocol.PacketFlow; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import java.util.Map; - -@Mixin(ConnectionProtocol.class) -public abstract class MixinConnectionProtocol implements IMixinConnectionProtocol { - - @Shadow - @Final - private Map flows; - - @Override - public Map getFlows() { - return this.flows; - } -} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java deleted file mode 100644 index 40e2ed1..0000000 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/mixin/MixinServerConnectionListener.java +++ /dev/null @@ -1,29 +0,0 @@ -package eu.crushedpixel.sponge.packetgate.plugin.mixin; - -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinServerConnectionListener; -import io.netty.channel.ChannelFuture; -import net.minecraft.network.Connection; -import net.minecraft.server.network.ServerConnectionListener; -import org.spongepowered.asm.mixin.*; - -import java.util.List; - -@Mixin(ServerConnectionListener.class) -public abstract class MixinServerConnectionListener implements IMixinServerConnectionListener { - - @Shadow - @Final - private List channels; - - @Shadow - @Final - private List connections; - - public List getChannels() { - return this.channels; - } - - public List getConnections() { - return this.connections; - } -} diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java index 9895af3..f9c50dc 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/ConnectionHandler.java @@ -2,7 +2,7 @@ import eu.crushedpixel.sponge.packetgate.api.registry.PacketConnection; import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; -import eu.crushedpixel.sponge.packetgate.plugin.interfaces.IMixinClientboundGameProfilePacket; +import eu.crushedpixel.sponge.packetgate.plugin.mixin.ClientboundGameProfilePacketAccessor; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -42,8 +42,8 @@ public void channelActive(ChannelHandlerContext ctx) throws Exception { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg instanceof ClientboundGameProfilePacket) { - IMixinClientboundGameProfilePacket packet = (IMixinClientboundGameProfilePacket) msg; - connection.setPlayerUniqueId(packet.uniqueId()); + ClientboundGameProfilePacketAccessor packet = (ClientboundGameProfilePacketAccessor) msg; + connection.setPlayerUniqueId(packet.accessor$gameProfile().getId()); } super.write(ctx, msg, promise); } diff --git a/src/main/resources/mixins.packetgate.json b/src/main/resources/mixins.packetgate.json index 1345eea..3212782 100644 --- a/src/main/resources/mixins.packetgate.json +++ b/src/main/resources/mixins.packetgate.json @@ -6,13 +6,13 @@ "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_11", "server": [ - "MixinConnectionProtocol", - "MixinServerConnectionListener" + "ConnectionListenerAccessor", + "ConnectionProtocolFlowAccessor" ], "injectors": { "defaultRequire": 1 }, "mixins": [ - "MixinClientboundGameProfilePacket" + "ClientboundGameProfilePacketAccessor" ] } From b1323998248c438ded766e4909575bff43f3fe2c Mon Sep 17 00:00:00 2001 From: Elikill58 Date: Thu, 13 Jan 2022 20:31:21 +0100 Subject: [PATCH 11/14] Fix import change --- .../packetgate/plugin/PluginPacketGate.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java index 4d46b76..a004e5a 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java @@ -1,19 +1,21 @@ package eu.crushedpixel.sponge.packetgate.plugin; -import com.google.inject.Inject; -import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; -import eu.crushedpixel.sponge.packetgate.plugin.mixin.ConnectionListenerAccessor; -import eu.crushedpixel.sponge.packetgate.plugin.netty.CustomChannelInitializer; -import io.netty.channel.ChannelFuture; -import net.minecraft.server.MinecraftServer; +import java.util.List; + import org.apache.logging.log4j.Logger; import org.spongepowered.api.Sponge; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.Order; import org.spongepowered.api.event.lifecycle.LoadedGameEvent; -import org.spongepowered.plugin.jvm.Plugin; +import org.spongepowered.plugin.builtin.jvm.Plugin; -import java.util.List; +import com.google.inject.Inject; + +import eu.crushedpixel.sponge.packetgate.api.registry.PacketGate; +import eu.crushedpixel.sponge.packetgate.plugin.mixin.ConnectionListenerAccessor; +import eu.crushedpixel.sponge.packetgate.plugin.netty.CustomChannelInitializer; +import io.netty.channel.ChannelFuture; +import net.minecraft.server.MinecraftServer; @Plugin("packetgate") public class PluginPacketGate { From 4ba5db4a3c94f2a725f27eace9c7c3261b995bc9 Mon Sep 17 00:00:00 2001 From: Elikill58 Date: Thu, 13 Jan 2022 20:33:01 +0100 Subject: [PATCH 12/14] Fix all rawtypes warnings --- .../sponge/packetgate/api/event/PacketEvent.java | 8 ++++---- .../packetgate/api/registry/ListenerOwner.java | 6 +++--- .../packetgate/api/registry/PacketConnection.java | 6 +++++- .../packetgate/api/registry/PacketGate.java | 15 ++++++++------- .../plugin/netty/IncomingPacketHandler.java | 2 +- .../plugin/netty/OutgoingPacketHandler.java | 2 +- 6 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java index 50b51a0..2e2fce8 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/event/PacketEvent.java @@ -5,22 +5,22 @@ public class PacketEvent { - public PacketEvent(Packet packet, boolean outgoing) { + public PacketEvent(Packet packet, boolean outgoing) { this.packet = packet; this.outgoing = outgoing; } - private Packet packet; + private Packet packet; private boolean cancelled = false; private final boolean outgoing; - public Packet packet() { + public Packet packet() { return packet; } - public void setPacket(Packet packet) { + public void setPacket(Packet packet) { this.packet = packet; } diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/ListenerOwner.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/ListenerOwner.java index b64f7cd..82a4121 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/ListenerOwner.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/ListenerOwner.java @@ -11,10 +11,10 @@ public abstract class ListenerOwner { - protected final Map> packetListeners = new ConcurrentHashMap<>(); + protected final Map, List> packetListeners = new ConcurrentHashMap<>(); - void register(PacketListenerData packetListenerData, Class... classes) { - for (Class clazz : classes) { + void register(PacketListenerData packetListenerData, Class... classes) { + for (Class clazz : classes) { List list = packetListeners.get(clazz); if (list == null) list = new CopyOnWriteArrayList<>(); list.add(packetListenerData); diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java index 903599d..18853ed 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketConnection.java @@ -23,7 +23,7 @@ public PacketConnection(Logger logger, Channel channel) { this.channel = channel; } - public void sendPacket(Packet packet) { + public void sendPacket(Packet packet) { channel.write(packet); } @@ -53,4 +53,8 @@ public UUID playerUniqueId() { public void setPlayerUniqueId(UUID playerUUID) { this.playerUniqueId = playerUUID; } + + public Logger getLogger() { + return logger; + } } diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java index 9dba17f..5bfdf1f 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java @@ -42,14 +42,15 @@ public Optional connectionByUniqueId(UUID uniqueId) { } public void registerListener(PacketListener packetListener, ListenerPriority priority, - Class... packetClasses) { + Class... packetClasses) { registerListener(packetListener, priority, null, packetClasses); } - public void registerListener(PacketListener packetListener, ListenerPriority priority, + @SuppressWarnings("unchecked") + public void registerListener(PacketListener packetListener, ListenerPriority priority, PacketConnection connection, - Class... packetClasses) { - List classes = new ArrayList<>(); + Class... packetClasses) { + List> classes = new ArrayList<>(); // if no classes are specified, apply the listener to all Minecraft packet classes if (packetClasses.length == 0) { @@ -64,7 +65,7 @@ public void registerListener(PacketListener packetListener, ListenerPriority pri } } else { // check if packet classes are valid - for (Class clazz : packetClasses) { + for (Class clazz : packetClasses) { Preconditions.checkArgument(Packet.class.isAssignableFrom(clazz), "Packet classes have to be subclasses of net.minecraft.network.protocol.Packet"); @@ -74,7 +75,7 @@ public void registerListener(PacketListener packetListener, ListenerPriority pri PacketListenerData packetListenerData = new PacketListenerData(packetListener, priority); - Class[] array = classes.toArray(new Class[classes.size()]); + Class[] array = classes.toArray(new Class[classes.size()]); if (connection != null) { connection.register(packetListenerData, array); @@ -92,7 +93,7 @@ public void unregisterListener(PacketListener packetListener) { } @Override - void register(PacketListenerData packetListenerData, Class... classes) { + void register(PacketListenerData packetListenerData, Class... classes) { super.register(packetListenerData, classes); connections.forEach(packetConnection -> packetConnection.register(packetListenerData, classes)); } diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java index bf7c5a5..67a36a2 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/IncomingPacketHandler.java @@ -17,7 +17,7 @@ public IncomingPacketHandler(PacketConnection packetConnection) { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { if (msg instanceof Packet) { - PacketEvent event = new PacketEvent((Packet) msg, false); + PacketEvent event = new PacketEvent((Packet) msg, false); try { packetConnection.handlePacketEvent(event); diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java index 0ef14b4..0a19e8b 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/netty/OutgoingPacketHandler.java @@ -18,7 +18,7 @@ public OutgoingPacketHandler(PacketConnection packetConnection) { @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (msg instanceof Packet) { - PacketEvent event = new PacketEvent((Packet) msg, true); + PacketEvent event = new PacketEvent((Packet) msg, true); try { packetConnection.handlePacketEvent(event); From f387f00a58c3e5191dd827e22d1ab44c01792e57 Mon Sep 17 00:00:00 2001 From: Elikill58 Date: Thu, 13 Jan 2022 20:43:31 +0100 Subject: [PATCH 13/14] Fix compilation for final release --- build.gradle.kts | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7bd27e2..f7e3043 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,24 +1,17 @@ import org.spongepowered.gradle.plugin.config.PluginLoaders -import org.spongepowered.plugin.metadata.PluginDependency - +import org.spongepowered.gradle.vanilla.repository.MinecraftPlatform +import org.spongepowered.plugin.metadata.model.PluginDependency plugins { `maven-publish` `java-library` - id("org.spongepowered.gradle.plugin") version "1.1.1" + id("org.spongepowered.gradle.plugin") version "2.0.0" id("org.spongepowered.gradle.vanilla") version "0.2" } group = "eu.crushedpixel.sponge" version = "0.2.0" -val javaTarget = 11 - -java { - sourceCompatibility = JavaVersion.toVersion(javaTarget) - targetCompatibility = JavaVersion.toVersion(javaTarget) -} - repositories { mavenCentral() } @@ -29,14 +22,20 @@ dependencies { minecraft { version("1.16.5") + platform(MinecraftPlatform.SERVER) + injectRepositories(false) } sponge { apiVersion("8.0.0") + license("NO_LICENCE_YET") plugin("packetgate") { - loader(PluginLoaders.JAVA_PLAIN) + loader { + name(PluginLoaders.JAVA_PLAIN) + version("1.0") + } displayName("PacketGate") - mainClass("eu.crushedpixel.sponge.packetgate.plugin.PluginPacketGate") + entrypoint("eu.crushedpixel.sponge.packetgate.plugin.PluginPacketGate") description("Sponge library to manipulate incoming and outgoing Packets. ") links { homepage("https://github.com/CrushedPixel/PacketGate") @@ -66,7 +65,7 @@ tasks.withType(JavaCompile::class).configureEach { options.apply { encoding = "utf-8" // Consistent source file encoding if (JavaVersion.current().isJava10Compatible) { - release.set(javaTarget) + release.set(11) } } } From a64dcb0a1c0a980110dae0639bf151650efbbdec Mon Sep 17 00:00:00 2001 From: Elikill58 Date: Sat, 15 Jan 2022 13:30:38 +0100 Subject: [PATCH 14/14] Add github workflow (#2) * Add workflow * Use gradle command * Update build.yml * Change build directory * Fix wrong packetSet --- .github/workflows/build.yml | 32 +++++++++++++++++ .../packetgate/api/registry/PacketGate.java | 34 +++++++++++++------ .../packetgate/plugin/PluginPacketGate.java | 9 +++++ 3 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..bb05378 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,32 @@ +name: Build api8 + +on: + push: + branches: [ api8 ] + pull_request: + branches: [ api8 ] + +jobs: + build: + name: Build + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + name: Checkout repo + + - name: Set up JDK 11 (LTS) + uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'adopt' + cache: gradle + + - name: Build with Gradle + run: gradle build + + - uses: actions/upload-artifact@v2 + name: Upload Artifact + with: + name: PacketGate.jar + path: build/libs/PacketGate-*.jar diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java index 5bfdf1f..6ff8e37 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/api/registry/PacketGate.java @@ -1,17 +1,24 @@ package eu.crushedpixel.sponge.packetgate.api.registry; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +import org.spongepowered.api.entity.living.player.Player; + import com.google.common.base.Preconditions; -import com.google.common.collect.BiMap; + import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener; import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.ListenerPriority; import eu.crushedpixel.sponge.packetgate.api.listener.PacketListener.PacketListenerData; import eu.crushedpixel.sponge.packetgate.plugin.mixin.ConnectionProtocolFlowAccessor; +import it.unimi.dsi.fastutil.objects.Object2IntMap; import net.minecraft.network.ConnectionProtocol; import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.PacketFlow; -import org.spongepowered.api.entity.living.player.Player; - -import java.util.*; public class PacketGate extends ListenerOwner { @@ -46,7 +53,7 @@ public void registerListener(PacketListener packetListener, ListenerPriority pri registerListener(packetListener, priority, null, packetClasses); } - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") public void registerListener(PacketListener packetListener, ListenerPriority priority, PacketConnection connection, Class... packetClasses) { @@ -56,11 +63,16 @@ public void registerListener(PacketListener packetListener, ListenerPriority pri if (packetClasses.length == 0) { ConnectionProtocolFlowAccessor[] list = (ConnectionProtocolFlowAccessor[]) (Object) ConnectionProtocol.values(); for (ConnectionProtocolFlowAccessor state : list) { - Map>>> directionMaps = (Map>>>) state.accessor$flows(); - directionMaps.forEach((enumPacketDirection, integerClassBiMap) -> { - integerClassBiMap.forEach((id, clazz) -> { - classes.add(clazz); - }); + state.accessor$flows().forEach((enumPacketDirection, val) -> { + try { + Field classIdField = val.getClass().getDeclaredField("classToId"); + classIdField.setAccessible(true); + ((Object2IntMap>) classIdField.get(val)).forEach((clazz, id) -> { + classes.add(clazz); + }); + } catch(Exception e) { + e.printStackTrace(); + } }); } } else { diff --git a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java index a004e5a..e3586dc 100644 --- a/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java +++ b/src/main/java/eu/crushedpixel/sponge/packetgate/plugin/PluginPacketGate.java @@ -23,8 +23,17 @@ public class PluginPacketGate { @Inject private Logger logger; + private static PluginPacketGate instance; public static PacketGate packetGate = new PacketGate(); + public static Logger getLogger() { + return instance.logger; + } + + public PluginPacketGate() { + instance = this; + } + @Listener(order = Order.FIRST) public void init(final LoadedGameEvent event) { ConnectionListenerAccessor connection = (ConnectionListenerAccessor) ((MinecraftServer) Sponge.server()).getConnection();