Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/retrooper/packetevents in…
Browse files Browse the repository at this point in the history
…to master
  • Loading branch information
retrooper committed Sep 1, 2020
2 parents 3f85f49 + 3c3a00b commit c645124
Show file tree
Hide file tree
Showing 9 changed files with 130 additions and 28 deletions.
6 changes: 2 additions & 4 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
name: Generate and deploy JavaDocs

on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
release:
types: [published]

jobs:
build:
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>io.github.retrooper</groupId>
<artifactId>packetevents</artifactId>
<version>1.6.1</version>
<version>1.6.2</version>

<!-- You can build the project with this: "mvn clean compile assembly:single" -->
<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import io.github.retrooper.packetevents.packetwrappers.in.useentity.WrappedPacketInUseEntity;
import io.github.retrooper.packetevents.packetwrappers.out.entityvelocity.WrappedPacketOutEntityVelocity;
import org.bukkit.plugin.java.JavaPlugin;

public class MainExample extends JavaPlugin implements PacketListener {

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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) {

}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

public final class WrappedPacketInEntityAction extends WrappedPacket {
private static final HashMap<String, PlayerAction> cachedPlayerActionNames = new HashMap<String, PlayerAction>();
private static final HashMap<Integer, PlayerAction> cachedPlayerActionIDs = new HashMap<Integer, PlayerAction>();
private static Class<?> entityActionClass;
@Nullable
private static Class<?> enumPlayerActionClass;
Expand All @@ -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
Expand All @@ -54,23 +64,19 @@ 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();

this.action = cachedPlayerActionNames.get(enumName);
}


this.entityId = entityId;
this.jumpBoost = jumpBoost;
if (animationIndex != -1) {
this.action = PlayerAction.values()[animationIndex];
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -17,7 +17,6 @@
public final class PlayerUtils {

private final HashMap<UUID, ClientVersion> clientVersionsMap = new HashMap<UUID, ClientVersion>();
private final PacketEventsSettings settings = new PacketEventsSettings();

public int getPing(final Player player) {
return NMSUtils.getPlayerPing(player);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit c645124

Please sign in to comment.