Compare commits

...
4 Commits
Author SHA1 Message Date
Retrooper 636e246c70 attempt to fix error 2020-07-20 16:09:18 +08:00
Retrooper 0d5c7b5250 uninject exception error handled 2020-07-20 15:39:39 +08:00
Retrooper 1b5f066eb0 small error fix, this build will be 1.5.4.1 release 2020-07-20 14:33:18 +08:00
Retrooper ffe224c4bf 1.5.4.1 release
* PlayerUninjectEvent#isSync now documented
* Shutdown bugs fixed(unending shutdown)
* Code cleanup & Imports optimized
2020-07-20 14:20:45 +08:00
11 changed files with 101 additions and 96 deletions

No files matched your search

+1 -1
View File
@@ -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;
}
}