Compare commits

...
1 Commits
Author SHA1 Message Date
retrooper 17e9d667a8 1.5.8 Release
* v_1_16_1 and v_1_16_2 added in ClientVersion & ServerVersion
* Settings class renamed to PacketEventsSettings
* WrappedPacketInSettings wrapper created, for the client settings packet
* WrappedPacketInEntityAction code duplication fix
2020-08-17 19:34:56 +02:00
9 changed files with 195 additions and 115 deletions

No files matched your search

-44
View File
@@ -1,44 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>SPIGOT</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.github.spigot:1.7.10:1.7.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.github.spigot:1.8.8:1.8.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.comphenix.protocol:ProtocolLib:4.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: cglib:cglib-nodep:3.2.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.comphenix.executors:BukkitExecutors:1.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-common:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.18" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-bukkit:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-bukkit-legacy:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-bungee:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-fabric:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-sponge:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-sponge-legacy:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: us.myles:viaversion-velocity:3.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.15-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.ProtocolSupport:ProtocolSupport:4fdd683" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-lang3:3.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: it.unimi.dsi:fastutil:8.2.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.5" level="project" />
</component>
</module>
+14 -37
View File
@@ -6,7 +6,7 @@
<groupId>io.github.retrooper</groupId>
<artifactId>packetevents</artifactId>
<version>1.5.7</version>
<version>1.5.8</version>
<packaging>jar</packaging>
<name>packetevents</name>
@@ -15,28 +15,6 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- You can build the project with this: "mvn clean compile assembly:single" -->
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spigot-repo</id>
@@ -64,26 +42,26 @@
<dependencies>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.8.8</artifactId>
<version>1.8.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.7.10</artifactId>
<version>1.7.10</version>
<scope>provided</scope>
</dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.8.8</artifactId>
<version>1.8.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.github.spigot</groupId>
<artifactId>1.7.10</artifactId>
<version>1.7.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.comphenix.protocol</groupId>
<artifactId>ProtocolLib</artifactId>
<version>4.5.0</version>
<scope>provided</scope>
</dependency>
<!-- ViaVersion API-->
</dependency>
<dependency>
<groupId>us.myles</groupId>
<artifactId>viaversion</artifactId>
@@ -91,7 +69,6 @@
<scope>provided</scope>
</dependency>
<!-- ProtocolSupport API-->
<dependency>
<groupId>com.github.ProtocolSupport</groupId>
<artifactId>ProtocolSupport</artifactId>
@@ -1,12 +1,16 @@
package io.github.retrooper.packetevents;
import io.github.retrooper.packetevents.annotations.PacketHandler;
import io.github.retrooper.packetevents.api.PacketEventsAPI;
import io.github.retrooper.packetevents.enums.ClientVersion;
import io.github.retrooper.packetevents.enums.ServerVersion;
import io.github.retrooper.packetevents.event.PacketListener;
import io.github.retrooper.packetevents.event.impl.BukkitMoveEvent;
import io.github.retrooper.packetevents.event.impl.PacketReceiveEvent;
import io.github.retrooper.packetevents.packet.PacketType;
import io.github.retrooper.packetevents.packet.PacketTypeClasses;
import io.github.retrooper.packetevents.settings.Settings;
import io.github.retrooper.packetevents.packetwrappers.in.settings.WrappedPacketInSettings;
import io.github.retrooper.packetevents.settings.PacketEventsSettings;
import io.github.retrooper.packetevents.utils.onlineplayers.OnlinePlayerUtilities;
import io.github.retrooper.packetevents.utils.versionlookup.VersionLookupUtils;
import org.bukkit.Bukkit;
@@ -18,17 +22,24 @@ import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.Plugin;
import java.util.HashMap;
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, hasStarted;
private static final Settings settings = new Settings();
private static final PacketEventsSettings settings = new PacketEventsSettings();
/**
* Call this before start()
*/
public static void load() {
//SERVER VERSION LOADING
//Server Version reversed values caching
ServerVersion.reversedValues = ServerVersion.reverse(ServerVersion.values());
PacketTypeClasses.Client.load();
PacketTypeClasses.Server.load();
ClientVersion.prepareLookUp();
@@ -92,11 +103,10 @@ public final class PacketEvents implements PacketListener, Listener {
return "pe-" + getSettings().getIdentifier() + "-" + name;
}
public static Settings getSettings() {
public static PacketEventsSettings getSettings() {
return settings;
}
@EventHandler
public void onJoin(final PlayerJoinEvent e) {
getAPI().getPlayerUtils().injectPlayer(e.getPlayer());
@@ -8,10 +8,9 @@ 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_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;
private static final Map<Integer, ClientVersion> VERSION_LOOKUP = new HashMap<>();
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, v_1_16_2, HIGHER_THAN_V_1_16_2, INVALID, ACCESS_FAILURE;
private static final Map<Integer, ClientVersion> VERSION_LOOKUP = new HashMap<Integer, ClientVersion>();
public static void prepareLookUp() {
VERSION_LOOKUP.put(-1, ACCESS_FAILURE);
VERSION_LOOKUP.put(1, LESS_THAN_V_1_7_10);
@@ -59,6 +58,7 @@ public enum ClientVersion {
VERSION_LOOKUP.put(734, v_1_16_RC_1);
VERSION_LOOKUP.put(735, v_1_16);
VERSION_LOOKUP.put(736, v_1_16_1);
VERSION_LOOKUP.put(737, v_1_16_2);
}
public static ClientVersion fromProtocolVersion(int protocolVersion) {
@@ -69,7 +69,7 @@ public enum ClientVersion {
if (lookedUp != null) {
return lookedUp;
}
return protocolVersion > 736 ? HIGHER_THAN_V_1_16_1 : INVALID;
return protocolVersion > 737 ? HIGHER_THAN_V_1_16_2 : INVALID;
}
/**
@@ -90,10 +90,10 @@ public enum ClientVersion {
* @return
*/
public boolean isLowerThan(final ClientVersion version) {
if (version == this) return false;
final int len = values().length;
if (this == version) return false;
final int len = ClientVersion.values().length;
for (byte i = 0; i < len; i++) {
final ClientVersion v = values()[i];
final ClientVersion v = ClientVersion.values()[i];
if (v == this) {
return true;
} else if (v == version) {
@@ -3,21 +3,18 @@ package io.github.retrooper.packetevents.enums;
import io.github.retrooper.packetevents.PacketEvents;
import org.bukkit.Bukkit;
import java.util.HashMap;
/**
* @author retrooper
*/
public enum ServerVersion {
v_1_7_10, v_1_8, v_1_8_3, v_1_8_8, v_1_9, v_1_9_4, v_1_10, v_1_11, v_1_12, v_1_13, v_1_13_2, v_1_14, v_1_15, v_1_16_1,
v_1_7_10, v_1_8, v_1_8_3, v_1_8_8, v_1_9, v_1_9_4, v_1_10, v_1_11, v_1_12, v_1_13, v_1_13_2, v_1_14, v_1_15, v_1_16, v_1_16_1, v_1_16_2,
ERROR, EMPTY;
private static final ServerVersion[] reversedValues;
public static ServerVersion[] reversedValues;
private static final String nmsVersionSuffix = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
private static ServerVersion cachedVersion;
static {
reversedValues = reverse(values());
}
private static ServerVersion getVers() {
for (final ServerVersion val : reversedValues) {
String valName = val.name().substring(2).replace("_", ".");
@@ -38,7 +35,7 @@ public enum ServerVersion {
}
private static ServerVersion[] reverse(final ServerVersion[] arr) {
public static ServerVersion[] reverse(final ServerVersion[] arr) {
ServerVersion[] array = arr.clone();
if (array == null) {
return null;
@@ -86,10 +83,10 @@ public enum ServerVersion {
* @return
*/
public boolean isLowerThan(final ServerVersion version) {
if (version == this) return false;
final int len = values().length;
if (this == version) return false;
final int len = ServerVersion.values().length;
for (byte i = 0; i < len; i++) {
final ServerVersion v = values()[i];
final ServerVersion v = ServerVersion.values()[i];
if (v == this) {
return true;
} else if (v == version) {
@@ -118,9 +115,6 @@ public enum ServerVersion {
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;
}
@@ -136,10 +130,15 @@ public enum ServerVersion {
if (this.equals(ServerVersion.v_1_15)) {
return 573;
}
if (this.equals(ServerVersion.v_1_16_1)) {
if (this.equals(ServerVersion.v_1_16)) {
return 735;
}
if(this.equals(ServerVersion.v_1_16_1)) {
return 736;
}
if(this.equals(ServerVersion.v_1_16_2)) {
return 737;
}
return -1;
}
}
@@ -8,6 +8,7 @@ import io.github.retrooper.packetevents.packet.PacketType;
import io.github.retrooper.packetevents.packetwrappers.in.armanimation.WrappedPacketInArmAnimation;
import io.github.retrooper.packetevents.packetwrappers.in.custompayload.WrappedPacketInCustomPayload;
import io.github.retrooper.packetevents.packetwrappers.in.helditemslot.WrappedPacketInHeldItemSlot;
import io.github.retrooper.packetevents.packetwrappers.in.settings.WrappedPacketInSettings;
import org.bukkit.plugin.java.JavaPlugin;
public class MainExample extends JavaPlugin implements PacketListener {
@@ -17,12 +17,7 @@ public final class WrappedPacketInEntityAction extends WrappedPacket {
try {
entityActionClass = NMSUtils.getNMSClass("PacketPlayInEntityAction");
if (version.isHigherThan(ServerVersion.v_1_7_10)) {
for (final Class<?> sub : entityActionClass.getDeclaredClasses()) {
if (sub.getSimpleName().equals("EnumPlayerAction")) {
enumPlayerActionClass = sub;
break;
}
}
enumPlayerActionClass = Reflection.getSubClass(entityActionClass, "EnumPlayerAction");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
@@ -0,0 +1,142 @@
package io.github.retrooper.packetevents.packetwrappers.in.settings;
import io.github.retrooper.packetevents.annotations.Nullable;
import io.github.retrooper.packetevents.enums.ServerVersion;
import io.github.retrooper.packetevents.packetwrappers.api.WrappedPacket;
import io.github.retrooper.packetevents.reflectionutils.Reflection;
import io.github.retrooper.packetevents.utils.NMSUtils;
import java.util.HashMap;
public class WrappedPacketInSettings extends WrappedPacket {
private static Class<?> packetClass;
private static Class<?> chatVisibilityEnumClass;
static {
try {
packetClass = NMSUtils.getNMSClass("PacketPlayInSettings");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
chatVisibilityEnumClass = NMSUtils.getNMSClass("EnumChatVisibility");
} catch (ClassNotFoundException e) {
Class<?> entityHumanClass = NMSUtils.getNMSClassWithoutException("EntityHuman");
//They are just on an outdated version
chatVisibilityEnumClass = Reflection.getSubClass(entityHumanClass, "EnumChatVisibility");
}
}
public enum ChatVisibility {
ENABLED, COMMANDS_ONLY, HIDDEN
}
public enum DisplayedSkinPart {
CAPE, JACKET, LEFT_SLEEVE, RIGHT_SLEEVE, LEFT_PANTS, RIGHT_PANTS, HAT
}
private String locale;
private byte viewDistance;
private ChatVisibility chatVisibility;
private boolean chatColors;
private HashMap<DisplayedSkinPart, Boolean> displayedSkinParts;
public WrappedPacketInSettings(final Object packet) {
super(packet);
}
@Override
protected void setup() {
try {
//LOCALE
this.locale = Reflection.getField(packetClass, String.class, 0).get(packet).toString();
//VIEW DISTANCE
this.viewDistance = (byte) Reflection.getField(packetClass, int.class, 0).getInt(packet);
//CHAT VISIBILITY
Object chatVisibilityEnumObject = Reflection.getField(packetClass, chatVisibilityEnumClass, 0).get(packet);
String enumValueAsString = chatVisibilityEnumObject.toString();
if(enumValueAsString.equals("FULL")) {
chatVisibility = ChatVisibility.ENABLED;
}
else if(enumValueAsString.equals("SYSTEM")) {
chatVisibility = ChatVisibility.COMMANDS_ONLY;
}
else {
chatVisibility = ChatVisibility.HIDDEN;
}
//CHAT COLORS
this.chatColors = Reflection.getField(packetClass, boolean.class, 0).getBoolean(packet);
//DISPLAYED SKIN PARTS
this.displayedSkinParts = new HashMap<DisplayedSkinPart, Boolean>();
if(version.isLowerThan(ServerVersion.v_1_8)) {
//in 1.7.10 only the cape display skin part is sent
boolean capeEnabled = Reflection.getField(packetClass, boolean.class, 1).getBoolean(packet);
displayedSkinParts.put(DisplayedSkinPart.CAPE, capeEnabled);
}
else {
//in 1.8, all the skin parts are sent
int skinPartFlags = Reflection.getField(packetClass, int.class, 1).getInt(packet);
displayedSkinParts.put(DisplayedSkinPart.CAPE, (skinPartFlags & 0x01) != 0);
displayedSkinParts.put(DisplayedSkinPart.JACKET, (skinPartFlags & 0x02) != 0);
displayedSkinParts.put(DisplayedSkinPart.LEFT_SLEEVE, (skinPartFlags & 0x04) != 0);
displayedSkinParts.put(DisplayedSkinPart.RIGHT_SLEEVE, (skinPartFlags & 0x08) != 0);
displayedSkinParts.put(DisplayedSkinPart.LEFT_PANTS, (skinPartFlags & 0x10) != 0);
displayedSkinParts.put(DisplayedSkinPart.RIGHT_PANTS, (skinPartFlags & 0x20) != 0);
displayedSkinParts.put(DisplayedSkinPart.HAT, (skinPartFlags & 0x40) != 0);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static Class<?> getChatVisibilityEnumClass() {
return chatVisibilityEnumClass;
}
public String getLocale() {
return locale;
}
public byte getViewDistance() {
return viewDistance;
}
public ChatVisibility getChatVisibility() {
return chatVisibility;
}
public boolean isChatColors() {
return chatColors;
}
/**
* It is possible for some keys to not exist.
* If that is the case, the server version is 1.7.10.
* 1.7.10 only sends the cape skin part.
*/
@Nullable
public HashMap<DisplayedSkinPart, Boolean> getDisplayedSkinPartsMap() {
return displayedSkinParts;
}
/**
* On 1.7.10, some skin parts will default to 'false' as 1.7.10
* only sends the 'cape' skin part.
* @param part
* @return
*/
public boolean isDisplaySkinPartEnabled(DisplayedSkinPart part) {
//1.7.10, we will default the other skin parts to return false.
if(!displayedSkinParts.containsKey(part)) {
return false;
}
return displayedSkinParts.get(part);
}
}
@@ -2,7 +2,7 @@ package io.github.retrooper.packetevents.settings;
import io.github.retrooper.packetevents.enums.ServerVersion;
public class Settings {
public class PacketEventsSettings {
private ServerVersion defaultServerVersion;
private String identifier = "";
private boolean autoResolveClientProtocolVersion;