From 5ed9038f7bd950d2721575e9152fe2f28d612be1 Mon Sep 17 00:00:00 2001 From: SamJakob Date: Fri, 28 Aug 2020 12:22:33 +0100 Subject: [PATCH 1/4] Only update JavaDoc on published release --- .github/workflows/maven.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index ab9244d460..8c46c63836 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -1,10 +1,8 @@ name: Generate and deploy JavaDocs on: - push: - branches: [ master ] - pull_request: - branches: [ master ] + release: + types: [published] jobs: build: From 427a0fff4ad6ab16b0adf096a6a257479e802b72 Mon Sep 17 00:00:00 2001 From: Retrooper Date: Sun, 30 Aug 2020 15:38:17 +0800 Subject: [PATCH 2/4] * NPE fix for WrappedPacketInEntityAction in 1.8+ --- .../io/github/retrooper/packetevents/example/MainExample.java | 1 - .../in/entityaction/WrappedPacketInEntityAction.java | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/io/github/retrooper/packetevents/example/MainExample.java b/src/main/java/io/github/retrooper/packetevents/example/MainExample.java index 450dfbb6cf..6dcf91ed4a 100644 --- a/src/main/java/io/github/retrooper/packetevents/example/MainExample.java +++ b/src/main/java/io/github/retrooper/packetevents/example/MainExample.java @@ -13,7 +13,6 @@ import io.github.retrooper.packetevents.packetwrappers.in.useentity.WrappedPacketInUseEntity; import io.github.retrooper.packetevents.packetwrappers.out.chat.WrappedPacketOutChat; import org.bukkit.plugin.java.JavaPlugin; - public class MainExample extends JavaPlugin implements PacketListener { @Override diff --git a/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java b/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java index 12e0ea212d..29e4f39d02 100644 --- a/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java +++ b/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java @@ -62,7 +62,7 @@ protected void setup() { } else { final Object enumObj = Reflection.getField(entityActionClass, enumPlayerActionClass, 0).get(packet); final String enumName = enumObj.toString(); - + this.action = cachedPlayerActionNames.get(enumName); } From d5454b918a28335ba7b92c974200e2e5ade02b81 Mon Sep 17 00:00:00 2001 From: Retrooper Date: Sun, 30 Aug 2020 16:15:28 +0800 Subject: [PATCH 3/4] 1.6.2 release * Issues with WrappedPacketInEntityAction on 1.7.10 --- pom.xml | 2 +- .../WrappedPacketInEntityAction.java | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 1830302e0a..f48c787b11 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.retrooper packetevents - 1.6.1 + 1.6.2 diff --git a/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java b/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java index 29e4f39d02..d519627a34 100644 --- a/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java +++ b/src/main/java/io/github/retrooper/packetevents/packetwrappers/in/entityaction/WrappedPacketInEntityAction.java @@ -15,6 +15,7 @@ public final class WrappedPacketInEntityAction extends WrappedPacket { private static final HashMap cachedPlayerActionNames = new HashMap(); + private static final HashMap cachedPlayerActionIDs = new HashMap(); private static Class entityActionClass; @Nullable private static Class enumPlayerActionClass; @@ -41,6 +42,15 @@ public static void load() { cachedPlayerActionNames.put("PRESS_SHIFT_KEY", PlayerAction.START_SNEAKING); cachedPlayerActionNames.put("RELEASE_SHIFT_KEY", PlayerAction.STOP_SNEAKING); cachedPlayerActionNames.put("RIDING_JUMP", PlayerAction.START_RIDING_JUMP); + + cachedPlayerActionIDs.put(1, PlayerAction.START_SNEAKING); + cachedPlayerActionIDs.put(2, PlayerAction.STOP_SNEAKING); + cachedPlayerActionIDs.put(3, PlayerAction.STOP_SLEEPING); + cachedPlayerActionIDs.put(4, PlayerAction.START_SPRINTING); + cachedPlayerActionIDs.put(5, PlayerAction.STOP_SPRINTING); + cachedPlayerActionIDs.put(6, PlayerAction.START_RIDING_JUMP); //riding jump + cachedPlayerActionIDs.put(7, PlayerAction.OPEN_INVENTORY); //horse interaction + } @Override @@ -54,11 +64,10 @@ protected void setup() { jumpBoost = Reflection.getField(entityActionClass, int.class, 1).getInt(packet); } - int animationIndex = -1; - //1.7.10 if (isLowerThan_v_1_8) { - animationIndex = Reflection.getField(entityActionClass, int.class, 1).getInt(packet); // TODO: += if packetdataserializer.version < 16 + int animationIndex = Reflection.getField(entityActionClass, int.class, 1).getInt(packet); // TODO: += if packetdataserializer.version < 16 + this.action = cachedPlayerActionIDs.get(animationIndex); } else { final Object enumObj = Reflection.getField(entityActionClass, enumPlayerActionClass, 0).get(packet); final String enumName = enumObj.toString(); @@ -68,9 +77,6 @@ protected void setup() { this.entityId = entityId; this.jumpBoost = jumpBoost; - if (animationIndex != -1) { - this.action = PlayerAction.values()[animationIndex]; - } } catch (IllegalAccessException e) { e.printStackTrace(); } From d34e152b98d2d6c9d635a3cd723424bf252468e3 Mon Sep 17 00:00:00 2001 From: Nik <61439310+NikV2@users.noreply.github.com> Date: Sun, 30 Aug 2020 17:52:37 +0300 Subject: [PATCH 4/4] commit --- .../handler/NettyPacketHandler.java | 39 ++++++++++++++----- .../handler/NettyPacketHandler_7.java | 32 ++++++++++++++- .../handler/NettyPacketHandler_8.java | 32 ++++++++++++++- .../settings/PacketEventsSettings.java | 15 +++++++ .../packetevents/utils/api/PlayerUtils.java | 11 ++++-- 5 files changed, 114 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler.java b/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler.java index 3468f57211..d5f68257f2 100644 --- a/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler.java +++ b/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler.java @@ -24,17 +24,38 @@ public class NettyPacketHandler { } public static void injectPlayer(final Player player) { - final PlayerInjectEvent injectEvent = new PlayerInjectEvent(player); - PacketEvents.getAPI().getEventManager().callEvent(injectEvent); - if (!injectEvent.isCancelled()) { - if (v1_7_nettyMode) { - NettyPacketHandler_7.injectPlayer(player); - } else { - NettyPacketHandler_8.injectPlayer(player); + try { + final PlayerInjectEvent injectEvent = new PlayerInjectEvent(player); + PacketEvents.getAPI().getEventManager().callEvent(injectEvent); + if (!injectEvent.isCancelled()) { + if (v1_7_nettyMode) { + NettyPacketHandler_7.injectPlayer(player); + } else { + NettyPacketHandler_8.injectPlayer(player); + } } + } catch (Exception ignored) { + } } + public static Future injectPlayerAsync(final Player player) { + try { + final PlayerInjectEvent injectEvent = new PlayerInjectEvent(player); + PacketEvents.getAPI().getEventManager().callEvent(injectEvent); + if (!injectEvent.isCancelled()) { + if (v1_7_nettyMode) { + return NettyPacketHandler_7.injectPlayerAsync(player); + } else { + return NettyPacketHandler_8.injectPlayerAsync(player); + } + } + } catch (Exception ignored) { + + } + return null; + } + public static Future uninjectPlayerAsync(final Player player) { try { final PlayerUninjectEvent uninjectEvent = new PlayerUninjectEvent(player); @@ -63,8 +84,8 @@ public static void uninjectPlayer(final Player player) { NettyPacketHandler_8.uninjectPlayer(player); } } - } catch (Exception ex) { - //Failed, but that is alright + } catch (Exception ignored) { + } } diff --git a/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_7.java b/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_7.java index bb83fa8654..db89daf59e 100644 --- a/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_7.java +++ b/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_7.java @@ -5,7 +5,11 @@ import io.github.retrooper.packetevents.PacketEvents; import io.github.retrooper.packetevents.utils.NMSUtils; -import net.minecraft.util.io.netty.channel.*; +import net.minecraft.util.io.netty.channel.Channel; +import net.minecraft.util.io.netty.channel.ChannelDuplexHandler; +import net.minecraft.util.io.netty.channel.ChannelHandlerContext; +import net.minecraft.util.io.netty.channel.ChannelPipeline; +import net.minecraft.util.io.netty.channel.ChannelPromise; import org.bukkit.entity.Player; import java.util.concurrent.Future; @@ -36,6 +40,32 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) pipeline.addBefore("packet_handler", PacketEvents.getHandlerName(player.getName()), channelDuplexHandler); } + public static Future injectPlayerAsync(final Player player) { + final ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + Object packet = NettyPacketHandler.read(player, msg); + if (packet == null) { + return; + } + super.channelRead(ctx, msg); + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + Object packet = NettyPacketHandler.write(player, msg); + if (packet == null) { + return; + } + super.write(ctx, msg, promise); + } + }; + final ChannelPipeline pipeline = ((Channel) NMSUtils.getChannel(player)).pipeline(); + return pipeline.channel().eventLoop().submit(() -> { + pipeline.addBefore("packet_handler", PacketEvents.getHandlerName(player.getName()), channelDuplexHandler); + }); + } + public static void uninjectPlayer(final Player player) { final Channel channel = (Channel) NMSUtils.getChannel(player); channel.pipeline().remove(PacketEvents.getHandlerName(player.getName())); diff --git a/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_8.java b/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_8.java index 88ca6b42bd..3e856ae13d 100644 --- a/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_8.java +++ b/src/main/java/io/github/retrooper/packetevents/handler/NettyPacketHandler_8.java @@ -5,7 +5,11 @@ import io.github.retrooper.packetevents.PacketEvents; import io.github.retrooper.packetevents.utils.NMSUtils; -import io.netty.channel.*; +import io.netty.channel.Channel; +import io.netty.channel.ChannelDuplexHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPromise; import org.bukkit.entity.Player; import java.util.concurrent.Future; @@ -36,6 +40,32 @@ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) pipeline.addBefore("packet_handler", PacketEvents.getHandlerName(player.getName()), channelDuplexHandler); } + public static Future injectPlayerAsync(final Player player) { + final ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + Object packet = NettyPacketHandler.read(player, msg); + if (packet == null) { + return; + } + super.channelRead(ctx, msg); + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + Object packet = NettyPacketHandler.write(player, msg); + if (packet == null) { + return; + } + super.write(ctx, msg, promise); + } + }; + final ChannelPipeline pipeline = ((Channel) NMSUtils.getChannel(player)).pipeline(); + return pipeline.channel().eventLoop().submit(() -> { + pipeline.addBefore("packet_handler", PacketEvents.getHandlerName(player.getName()), channelDuplexHandler); + }); + } + public static void uninjectPlayer(final Player player) { final Channel channel = (Channel) NMSUtils.getChannel(player); channel.pipeline().remove(PacketEvents.getHandlerName(player.getName())); diff --git a/src/main/java/io/github/retrooper/packetevents/settings/PacketEventsSettings.java b/src/main/java/io/github/retrooper/packetevents/settings/PacketEventsSettings.java index d86b8e0fbb..5b1b51ba22 100644 --- a/src/main/java/io/github/retrooper/packetevents/settings/PacketEventsSettings.java +++ b/src/main/java/io/github/retrooper/packetevents/settings/PacketEventsSettings.java @@ -13,6 +13,7 @@ public class PacketEventsSettings { private String identifier = ""; private boolean autoResolveClientProtocolVersion; private boolean uninjectAsync = false; + private boolean injectAsync = false; /** * If PacketEvents fails to detect your server version, it will use the recommended version @@ -96,4 +97,18 @@ public void setUninjectAsync(boolean uninjectAsync) { public boolean isUninjectAsync() { return this.uninjectAsync; } + + public boolean isInjectAsync() { + return this.injectAsync; + } + + /** + * Would you like PacketEvents to Inject players Asynchronously? + * WARNING! This might make reloading unsupported + * + * @param injectAsync boolean + */ + public void setInjectAsync(boolean injectAsync) { + this.injectAsync = injectAsync; + } } \ No newline at end of file diff --git a/src/main/java/io/github/retrooper/packetevents/utils/api/PlayerUtils.java b/src/main/java/io/github/retrooper/packetevents/utils/api/PlayerUtils.java index ad3f081e59..4388af2a72 100644 --- a/src/main/java/io/github/retrooper/packetevents/utils/api/PlayerUtils.java +++ b/src/main/java/io/github/retrooper/packetevents/utils/api/PlayerUtils.java @@ -3,10 +3,10 @@ */ package io.github.retrooper.packetevents.utils.api; +import io.github.retrooper.packetevents.PacketEvents; import io.github.retrooper.packetevents.enums.ClientVersion; import io.github.retrooper.packetevents.handler.NettyPacketHandler; import io.github.retrooper.packetevents.packetwrappers.Sendable; -import io.github.retrooper.packetevents.settings.PacketEventsSettings; import io.github.retrooper.packetevents.utils.NMSUtils; import io.github.retrooper.packetevents.utils.versionlookup.VersionLookupUtils; import org.bukkit.entity.Player; @@ -17,7 +17,6 @@ public final class PlayerUtils { private final HashMap clientVersionsMap = new HashMap(); - private final PacketEventsSettings settings = new PacketEventsSettings(); public int getPing(final Player player) { return NMSUtils.getPlayerPing(player); @@ -52,11 +51,15 @@ public void clearClientVersion(final Player player) { } public void injectPlayer(final Player player) { - NettyPacketHandler.injectPlayer(player); + if (PacketEvents.getSettings().isInjectAsync()) { + NettyPacketHandler.injectPlayerAsync(player); + } else { + NettyPacketHandler.injectPlayer(player); + } } public void uninjectPlayer(final Player player) { - if (settings.isUninjectAsync()) { + if (PacketEvents.getSettings().isUninjectAsync()) { NettyPacketHandler.uninjectPlayerAsync(player); } else { NettyPacketHandler.uninjectPlayer(player);