Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
792fe16124 | ||
|
|
3c92108c44 | ||
|
|
3b71327245 | ||
|
|
6d70978285 | ||
|
|
953ad680ee | ||
|
|
765f2fad92 | ||
|
|
bede734af7 | ||
|
|
31853376d6 | ||
|
|
3a100ce325 | ||
|
|
bbb2ef0668 | ||
|
|
9f697673c0 | ||
|
|
b1deb8629b | ||
|
|
70d0400c67 | ||
|
|
b0c08ce813 | ||
|
|
3af91fcac9 | ||
|
|
d1c2fe4169 | ||
|
|
1900d37c94 | ||
|
|
5d17a2a613 | ||
|
|
4a93603614 | ||
|
|
9a1a59f15f | ||
|
|
0c350a3f27 |
No files matched your search
@@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>io.github.retrooper</groupId>
|
||||
<artifactId>packetevents</artifactId>
|
||||
<version>1.5.3</version>
|
||||
<version>1.5.4</version>
|
||||
<packaging>jar</packaging>
|
||||
<name>packetevents</name>
|
||||
|
||||
|
||||
@@ -18,12 +18,16 @@ 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 final Settings settings = new Settings();
|
||||
public static final List<Player> pendingUninjections = new ArrayList<Player>();
|
||||
|
||||
/**
|
||||
* Call this before start()
|
||||
@@ -31,6 +35,7 @@ public final class PacketEvents implements PacketListener, Listener {
|
||||
public static void load() {
|
||||
PacketTypeClasses.Client.load();
|
||||
PacketTypeClasses.Server.load();
|
||||
ClientVersion.prepareLookUp();
|
||||
hasLoaded = true;
|
||||
}
|
||||
|
||||
@@ -48,7 +53,7 @@ public final class PacketEvents implements PacketListener, Listener {
|
||||
Bukkit.getPluginManager().registerEvents(instance, plugin);
|
||||
|
||||
for (final Player p : OnlinePlayerUtilities.getOnlinePlayers()) {
|
||||
getAPI().getPlayerUtilities().injectPlayer(p);
|
||||
getAPI().getPlayerUtils().injectPlayer(p);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,14 +61,25 @@ 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()) {
|
||||
getAPI().getPlayerUtils().uninjectPlayerNow(p);
|
||||
if(!pendingUninjections.contains(p)) {
|
||||
getAPI().getPlayerUtils().uninjectPlayerNow(p);}
|
||||
}
|
||||
getAPI().getEventManager().unregisterAllListeners();
|
||||
|
||||
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...");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static PacketEventsAPI getAPI() {
|
||||
@@ -92,7 +108,9 @@ 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());
|
||||
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
||||
@@ -1,74 +1,75 @@
|
||||
package io.github.retrooper.packetevents.enums;
|
||||
|
||||
import io.github.retrooper.packetevents.PacketEvents;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum ClientVersion {
|
||||
LESS_THAN_V_1_7_10, v_1_7_10, v_1_8, v_1_9, v_1_9_1, v_1_9_2, v_1_9_3, v_1_10, v_1_11, v_1_11_1, v_1_12, v_1_12_1, v_1_12_2,
|
||||
v_1_13, v_1_13_1, v_1_13_2, v_1_14, v_1_14_1, v_1_14_2, v_1_14_3, v_1_14_4, v_1_15, v_1_15_1, v_1_15_2, v_1_16, v_1_16_1, HIGHER_THAN_V_1_16_1, INVALID, ACCESS_FAILURE;
|
||||
v_1_13, v_1_13_1, v_1_13_2, v_1_14, v_1_14_1, v_1_14_2, v_1_14_3, v_1_14_4, v_1_15_PRE_1, v_1_15_PRE_2, v_1_15_PRE_3, v_1_15_PRE_4, v_1_15_PRE_5, v_1_15_PRE_6, v_1_15_PRE_7,
|
||||
v_1_15, v_1_15_1, v_1_15_2, v_1_16, v_1_16_PRE_1, v_1_16_PRE_2, v_1_16_PRE_3, v_1_16_PRE_4, v_1_16_PRE_5, v_1_16_PRE_6, v_1_16_PRE_7, v_1_16_PRE_8, v_1_16_RC_1, v_1_16_1, HIGHER_THAN_V_1_16_1, INVALID, ACCESS_FAILURE;
|
||||
|
||||
public static ClientVersion fromProtocolVersion(final int protocolVersion) {
|
||||
int remainder = -1;
|
||||
switch (protocolVersion) {
|
||||
case -1:
|
||||
return ACCESS_FAILURE;
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
return LESS_THAN_V_1_7_10;
|
||||
case 47://ranging from 1.8->1.8.9
|
||||
return v_1_8;
|
||||
case 107:
|
||||
return v_1_9;
|
||||
case 108:
|
||||
return v_1_9_1;
|
||||
case 109:
|
||||
return v_1_9_2;
|
||||
case 110:
|
||||
return v_1_9_3; //can be 1.9.3 or 1.9.4
|
||||
case 210:
|
||||
return v_1_10; //could be 1.10,1.10.1, 1.10.2
|
||||
case 315:
|
||||
return v_1_11;
|
||||
case 316: //could be 11.1 or 11.2
|
||||
return v_1_11_1;
|
||||
case 335:
|
||||
return v_1_12;
|
||||
case 338:
|
||||
return v_1_12_1;
|
||||
case 340:
|
||||
return v_1_12_2;
|
||||
case 393:
|
||||
return v_1_13;
|
||||
case 401:
|
||||
return v_1_13_1;
|
||||
case 404:
|
||||
return v_1_13_2;
|
||||
case 477:
|
||||
return v_1_14;
|
||||
case 480:
|
||||
return v_1_14_1;
|
||||
case 485:
|
||||
return v_1_14_2;
|
||||
case 490:
|
||||
return v_1_14_3;
|
||||
case 498:
|
||||
return v_1_14_4;
|
||||
case 573:
|
||||
return v_1_15;
|
||||
case 575:
|
||||
return v_1_15_1;
|
||||
case 578:
|
||||
return v_1_15_2;
|
||||
case 735:
|
||||
return v_1_16;
|
||||
case 736:
|
||||
return v_1_16_1;
|
||||
default:
|
||||
remainder = protocolVersion;
|
||||
private static final Map<Integer, ClientVersion> VERSION_LOOKUP = new HashMap<>();
|
||||
|
||||
public static void prepareLookUp() {
|
||||
VERSION_LOOKUP.put(-1, ACCESS_FAILURE);
|
||||
VERSION_LOOKUP.put(1, LESS_THAN_V_1_7_10);
|
||||
VERSION_LOOKUP.put(2, LESS_THAN_V_1_7_10);
|
||||
VERSION_LOOKUP.put(3, LESS_THAN_V_1_7_10);
|
||||
VERSION_LOOKUP.put(4, LESS_THAN_V_1_7_10);
|
||||
VERSION_LOOKUP.put(5, v_1_7_10);
|
||||
VERSION_LOOKUP.put(47, v_1_8);
|
||||
VERSION_LOOKUP.put(107, v_1_9);
|
||||
VERSION_LOOKUP.put(108, v_1_9_1);
|
||||
VERSION_LOOKUP.put(109, v_1_9_2);
|
||||
VERSION_LOOKUP.put(110, v_1_9_3);
|
||||
VERSION_LOOKUP.put(210, v_1_10);
|
||||
VERSION_LOOKUP.put(315, v_1_11);
|
||||
VERSION_LOOKUP.put(316, v_1_11_1);
|
||||
VERSION_LOOKUP.put(335, v_1_12);
|
||||
VERSION_LOOKUP.put(338, v_1_12_1);
|
||||
VERSION_LOOKUP.put(340, v_1_12_2);
|
||||
VERSION_LOOKUP.put(393, v_1_13);
|
||||
VERSION_LOOKUP.put(401, v_1_13_1);
|
||||
VERSION_LOOKUP.put(404, v_1_13_2);
|
||||
VERSION_LOOKUP.put(477, v_1_14);
|
||||
VERSION_LOOKUP.put(480, v_1_14_1);
|
||||
VERSION_LOOKUP.put(485, v_1_14_2);
|
||||
VERSION_LOOKUP.put(490, v_1_14_3);
|
||||
VERSION_LOOKUP.put(498, v_1_14_4);
|
||||
VERSION_LOOKUP.put(565, v_1_15_PRE_1);
|
||||
VERSION_LOOKUP.put(566, v_1_15_PRE_2);
|
||||
VERSION_LOOKUP.put(567, v_1_15_PRE_3);
|
||||
VERSION_LOOKUP.put(569, v_1_15_PRE_4);
|
||||
VERSION_LOOKUP.put(570, v_1_15_PRE_5);
|
||||
VERSION_LOOKUP.put(571, v_1_15_PRE_6);
|
||||
VERSION_LOOKUP.put(572, v_1_15_PRE_7);
|
||||
VERSION_LOOKUP.put(573, v_1_15);
|
||||
VERSION_LOOKUP.put(575, v_1_15_1);
|
||||
VERSION_LOOKUP.put(578, v_1_15_2);
|
||||
VERSION_LOOKUP.put(721, v_1_16_PRE_1);
|
||||
VERSION_LOOKUP.put(722, v_1_16_PRE_2);
|
||||
VERSION_LOOKUP.put(725, v_1_16_PRE_3);
|
||||
VERSION_LOOKUP.put(727, v_1_16_PRE_4);
|
||||
VERSION_LOOKUP.put(729, v_1_16_PRE_5);
|
||||
VERSION_LOOKUP.put(730, v_1_16_PRE_6);
|
||||
VERSION_LOOKUP.put(732, v_1_16_PRE_7);
|
||||
VERSION_LOOKUP.put(733, v_1_16_PRE_8);
|
||||
VERSION_LOOKUP.put(734, v_1_16_RC_1);
|
||||
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 (remainder > 578) {
|
||||
return HIGHER_THAN_V_1_16_1;
|
||||
final ClientVersion lookedUp = VERSION_LOOKUP.get(protocolVersion);
|
||||
if(lookedUp != null) {
|
||||
return lookedUp;
|
||||
}
|
||||
return INVALID;
|
||||
return protocolVersion > 736 ? HIGHER_THAN_V_1_16_1 : INVALID;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -98,5 +98,48 @@ 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;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,6 +3,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;
|
||||
|
||||
@@ -39,6 +39,7 @@ final class NettyPacketHandler_7 {
|
||||
@Override
|
||||
public void run() {
|
||||
channel.pipeline().remove(PacketEvents.getHandlerName(player.getName()));
|
||||
PacketEvents.pendingUninjections.remove(player);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ final class NettyPacketHandler_8 {
|
||||
@Override
|
||||
public void run() {
|
||||
channel.pipeline().remove(PacketEvents.getHandlerName(player.getName()));
|
||||
PacketEvents.pendingUninjections.remove(player);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -75,17 +75,16 @@ public final class Reflection {
|
||||
public static Field getField(final Class<?> cls, final int index) {
|
||||
final FieldWithIndex fwi = new FieldWithIndex(cls, index);
|
||||
if (!fieldWithIndexHashMap.containsKey(fwi)) {
|
||||
int i = 0;
|
||||
for (final Field f : getFields(cls)) {
|
||||
if (index == i++) {
|
||||
fieldWithIndexHashMap.put(fwi, f);
|
||||
return f;
|
||||
}
|
||||
final Field[] fields = getFields(cls);
|
||||
if(fields.length <= index) {
|
||||
return null;
|
||||
}
|
||||
final Field field = fields[index];
|
||||
fieldWithIndexHashMap.put(fwi, field);
|
||||
return field;
|
||||
} else {
|
||||
return fieldWithIndexHashMap.get(fwi);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//METHODS
|
||||
@@ -187,4 +186,4 @@ public final class Reflection {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import io.github.retrooper.packetevents.enums.ServerVersion;
|
||||
public class Settings {
|
||||
private ServerVersion defaultServerVersion;
|
||||
private String identifier = "";
|
||||
private boolean autoResolveClientProtocolVersion;
|
||||
|
||||
/**
|
||||
* If PacketEvents fails to detect your server version, it will use the recommended version
|
||||
@@ -31,4 +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;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user