Skip to content

Commit

Permalink
Merge pull request #33 from NikV2/master
Browse files Browse the repository at this point in the history
New features
  • Loading branch information
retrooper authored Aug 30, 2020
2 parents d5454b9 + d34e152 commit 3c3a00b
Show file tree
Hide file tree
Showing 5 changed files with 114 additions and 15 deletions.
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 @@ -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 3c3a00b

Please sign in to comment.