Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
636e246c70 | ||
|
|
0d5c7b5250 | ||
|
|
1b5f066eb0 | ||
|
|
ffe224c4bf |
No files matched your search
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>io.github.retrooper</groupId>
|
||||
<artifactId>packetevents</artifactId>
|
||||
<version>1.5.4</version>
|
||||
<version>1.5.4.1</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>packetevents</name>
|
||||
|
||||
|
||||
@@ -18,16 +18,12 @@ import org.bukkit.event.player.PlayerMoveEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public final class PacketEvents implements PacketListener, Listener {
|
||||
private static Plugin plugin;
|
||||
private static final PacketEventsAPI packetEventsAPI = new PacketEventsAPI();
|
||||
private static final PacketEvents instance = new PacketEvents();
|
||||
private static boolean hasLoaded;
|
||||
private static boolean hasLoaded, hasStarted;
|
||||
private static final Settings settings = new Settings();
|
||||
public static final List<Player> pendingUninjections = new ArrayList<Player>();
|
||||
|
||||
/**
|
||||
* Call this before start()
|
||||
@@ -46,14 +42,17 @@ public final class PacketEvents implements PacketListener, Listener {
|
||||
if (!hasLoaded) {
|
||||
load();
|
||||
}
|
||||
plugin = pl;
|
||||
//Register Bukkit and PacketListener
|
||||
getAPI().getEventManager().registerListener(instance);
|
||||
if (!hasStarted) {
|
||||
plugin = pl;
|
||||
//Register Bukkit and PacketListener
|
||||
getAPI().getEventManager().registerListener(instance);
|
||||
|
||||
Bukkit.getPluginManager().registerEvents(instance, plugin);
|
||||
Bukkit.getPluginManager().registerEvents(instance, plugin);
|
||||
|
||||
for (final Player p : OnlinePlayerUtilities.getOnlinePlayers()) {
|
||||
getAPI().getPlayerUtils().injectPlayer(p);
|
||||
for (final Player p : OnlinePlayerUtilities.getOnlinePlayers()) {
|
||||
getAPI().getPlayerUtils().injectPlayer(p);
|
||||
}
|
||||
hasStarted = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,27 +60,26 @@ public final class PacketEvents implements PacketListener, Listener {
|
||||
* Stop all tasks and unregisters all PacketEvents' listeners
|
||||
*/
|
||||
public static void stop() {
|
||||
for (final Player p : OnlinePlayerUtilities.getOnlinePlayers()) {
|
||||
if(!pendingUninjections.contains(p)) {
|
||||
getAPI().getPlayerUtils().uninjectPlayerNow(p);}
|
||||
}
|
||||
getAPI().getEventManager().unregisterAllListeners();
|
||||
if (hasStarted) {
|
||||
for (final Player p : OnlinePlayerUtilities.getOnlinePlayers()) {
|
||||
|
||||
PacketType.Client.packetIds.clear();
|
||||
PacketType.Server.packetIds.clear();
|
||||
int i = 0;
|
||||
long init = System.currentTimeMillis();
|
||||
while(pendingUninjections.size() > 0) {
|
||||
if(i++ == 0) {
|
||||
System.out.println("PacketEvents is attempting to uninject some players.");
|
||||
}
|
||||
else if(System.currentTimeMillis() - init > 1000L) {
|
||||
init = System.currentTimeMillis();
|
||||
System.out.println("PacketEvents is still attempting to uninject some players...");
|
||||
getAPI().getPlayerUtils().uninjectPlayerNow(p);
|
||||
}
|
||||
getAPI().getEventManager().unregisterAllListeners();
|
||||
|
||||
PacketType.Client.packetIds.clear();
|
||||
PacketType.Server.packetIds.clear();
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean hasLoaded() {
|
||||
return hasLoaded;
|
||||
}
|
||||
|
||||
public static boolean hasStarted() {
|
||||
return hasStarted;
|
||||
}
|
||||
|
||||
public static PacketEventsAPI getAPI() {
|
||||
return packetEventsAPI;
|
||||
}
|
||||
@@ -108,9 +106,7 @@ public final class PacketEvents implements PacketListener, Listener {
|
||||
@EventHandler
|
||||
public void onQuit(final PlayerQuitEvent e) {
|
||||
getAPI().getPlayerUtils().clearClientVersion(e.getPlayer());
|
||||
pendingUninjections.add(e.getPlayer());
|
||||
getAPI().getPlayerUtils().uninjectPlayer(e.getPlayer());
|
||||
|
||||
getAPI().getPlayerUtils().uninjectPlayerNow(e.getPlayer());
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
||||
@@ -60,13 +60,13 @@ public enum ClientVersion {
|
||||
VERSION_LOOKUP.put(735, v_1_16);
|
||||
VERSION_LOOKUP.put(736, v_1_16_1);
|
||||
}
|
||||
|
||||
|
||||
public static ClientVersion fromProtocolVersion(int protocolVersion) {
|
||||
if(protocolVersion == -1 && PacketEvents.getSettings().doAutoResolveClientProtocolVersion()) {
|
||||
protocolVersion = ServerVersion.getVersion().toProtocolVersion();
|
||||
if (protocolVersion == -1 && PacketEvents.getSettings().doAutoResolveClientProtocolVersion()) {
|
||||
protocolVersion = ServerVersion.getVersion().toProtocolVersion();
|
||||
}
|
||||
final ClientVersion lookedUp = VERSION_LOOKUP.get(protocolVersion);
|
||||
if(lookedUp != null) {
|
||||
if (lookedUp != null) {
|
||||
return lookedUp;
|
||||
}
|
||||
return protocolVersion > 736 ? HIGHER_THAN_V_1_16_1 : INVALID;
|
||||
|
||||
@@ -98,47 +98,47 @@ public enum ServerVersion {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public int toProtocolVersion() {
|
||||
if(this.equals(ServerVersion.v_1_7_10)) {
|
||||
return 5;
|
||||
}
|
||||
if(this.name().startsWith("v_1_8")) {
|
||||
return 47;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_9)) {
|
||||
return 107;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_9_4)) {
|
||||
return 110;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_10)) {
|
||||
return 210;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_11)) {
|
||||
return 315;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_11)) {
|
||||
return 315;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_12)) {
|
||||
return 335;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_13)) {
|
||||
return 393;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_13_2)) {
|
||||
return 404;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_14)) {
|
||||
return 477;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_15)) {
|
||||
return 573;
|
||||
}
|
||||
if(this.equals(ServerVersion.v_1_16_1)) {
|
||||
return 735;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_7_10)) {
|
||||
return 5;
|
||||
}
|
||||
if (this.name().startsWith("v_1_8")) {
|
||||
return 47;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_9)) {
|
||||
return 107;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_9_4)) {
|
||||
return 110;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_10)) {
|
||||
return 210;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_11)) {
|
||||
return 315;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_11)) {
|
||||
return 315;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_12)) {
|
||||
return 335;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_13)) {
|
||||
return 393;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_13_2)) {
|
||||
return 404;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_14)) {
|
||||
return 477;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_15)) {
|
||||
return 573;
|
||||
}
|
||||
if (this.equals(ServerVersion.v_1_16_1)) {
|
||||
return 735;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,12 @@ public final class PlayerUninjectEvent extends PacketEvent {
|
||||
this.cancelled = val;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether the uninjection was called synchronously or asynchronously.
|
||||
* The event is still called synchronously.
|
||||
* By default all uninjections are called aynchronously in this build.
|
||||
* @return If the uninjection was done async or sync
|
||||
*/
|
||||
public boolean isSync() {
|
||||
return sync;
|
||||
}
|
||||
|
||||
@@ -1,13 +1,7 @@
|
||||
package io.github.retrooper.packetevents.example;
|
||||
|
||||
import io.github.retrooper.packetevents.PacketEvents;
|
||||
import io.github.retrooper.packetevents.annotations.PacketHandler;
|
||||
import io.github.retrooper.packetevents.event.PacketListener;
|
||||
import io.github.retrooper.packetevents.event.impl.PacketReceiveEvent;
|
||||
import io.github.retrooper.packetevents.event.impl.PacketSendEvent;
|
||||
import io.github.retrooper.packetevents.event.impl.PlayerInjectEvent;
|
||||
import io.github.retrooper.packetevents.packet.PacketType;
|
||||
import io.github.retrooper.packetevents.packetwrappers.out.keepalive.WrappedPacketOutKeepAlive;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
public class MainExample extends JavaPlugin implements PacketListener {
|
||||
|
||||
@@ -7,6 +7,7 @@ import io.github.retrooper.packetevents.event.impl.PlayerInjectEvent;
|
||||
import io.github.retrooper.packetevents.event.impl.PlayerUninjectEvent;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.concurrent.Future;
|
||||
|
||||
public class NettyPacketHandler {
|
||||
@@ -33,19 +34,24 @@ public class NettyPacketHandler {
|
||||
}
|
||||
|
||||
public static Future<?> uninjectPlayer(final Player player) {
|
||||
final PlayerUninjectEvent uninjectEvent = new PlayerUninjectEvent(player, false);
|
||||
PacketEvents.getAPI().getEventManager().callEvent(uninjectEvent);
|
||||
if (!uninjectEvent.isCancelled()) {
|
||||
if (v1_7_nettyMode) {
|
||||
return NettyPacketHandler_7.uninjectPlayer(player);
|
||||
} else {
|
||||
return NettyPacketHandler_8.uninjectPlayer(player);
|
||||
try {
|
||||
final PlayerUninjectEvent uninjectEvent = new PlayerUninjectEvent(player, false);
|
||||
PacketEvents.getAPI().getEventManager().callEvent(uninjectEvent);
|
||||
if (!uninjectEvent.isCancelled()) {
|
||||
if (v1_7_nettyMode) {
|
||||
return NettyPacketHandler_7.uninjectPlayer(player);
|
||||
} else {
|
||||
return NettyPacketHandler_8.uninjectPlayer(player);
|
||||
}
|
||||
}
|
||||
} catch(Exception e) {
|
||||
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void uninjectPlayerNow(final Player player) {
|
||||
try {
|
||||
final PlayerUninjectEvent uninjectEvent = new PlayerUninjectEvent(player, true);
|
||||
PacketEvents.getAPI().getEventManager().callEvent(uninjectEvent);
|
||||
if (!uninjectEvent.isCancelled()) {
|
||||
@@ -56,6 +62,11 @@ public class NettyPacketHandler {
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(Exception e)
|
||||
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public static Object write(final Player sender, final Object packet) {
|
||||
final String packetName = packet.getClass().getSimpleName();
|
||||
|
||||
@@ -39,7 +39,6 @@ final class NettyPacketHandler_7 {
|
||||
@Override
|
||||
public void run() {
|
||||
channel.pipeline().remove(PacketEvents.getHandlerName(player.getName()));
|
||||
PacketEvents.pendingUninjections.remove(player);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -39,7 +39,6 @@ final class NettyPacketHandler_8 {
|
||||
@Override
|
||||
public void run() {
|
||||
channel.pipeline().remove(PacketEvents.getHandlerName(player.getName()));
|
||||
PacketEvents.pendingUninjections.remove(player);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -76,12 +76,12 @@ public final class Reflection {
|
||||
final FieldWithIndex fwi = new FieldWithIndex(cls, index);
|
||||
if (!fieldWithIndexHashMap.containsKey(fwi)) {
|
||||
final Field[] fields = getFields(cls);
|
||||
if(fields.length <= index) {
|
||||
if (fields.length <= index) {
|
||||
return null;
|
||||
}
|
||||
final Field field = fields[index];
|
||||
fieldWithIndexHashMap.put(fwi, field);
|
||||
return field;
|
||||
return field;
|
||||
} else {
|
||||
return fieldWithIndexHashMap.get(fwi);
|
||||
}
|
||||
|
||||
@@ -32,13 +32,13 @@ public class Settings {
|
||||
public void setIdentifier(final String identifier) {
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
|
||||
public boolean doAutoResolveClientProtocolVersion() {
|
||||
return autoResolveClientProtocolVersion;
|
||||
}
|
||||
|
||||
|
||||
public void setDoAutoResolveClientProtocolVersion(boolean autoResolveClientProtocolVersion) {
|
||||
this.autoResolveClientProtocolVersion = autoResolveClientProtocolVersion;
|
||||
this.autoResolveClientProtocolVersion = autoResolveClientProtocolVersion;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user