diff --git a/README.md b/README.md
index 3b2f6ce2..7b4b1dcb 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,6 @@ Messages in the plugin can be displayed in multiple languages. (Default: English
✅ For the list of compatible versions, **[see wiki](https://wiki.mtvehicles.eu/faq.html#_5-i-am-getting-an-internal-error-occurred-error)**.
✅ We support **latest patch versions** – e.g. 1.16.5 is supported, but 1.16.1 is not.
✅ We only support **Spigot/Paper**. Other forks such as Purpur and Leaf are not supported.
-❌ We don't support 1.14.x due to compatibility issues.
❌ 1.12.1 and lower is NOT a will NOT be supported!
---
diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index c597cb5a..9de4d1a5 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -3,7 +3,7 @@
4.0.0
nl.mtvehicles.core
MTVehicles
- 2.5.8
+ 2.5.9
src/main/java
@@ -16,15 +16,15 @@
maven-compiler-plugin
- 3.7.0
+ 3.15.0
- 1.8
- 1.8
+ ${maven.compiler.source}
+ ${maven.compiler.target}
maven-shade-plugin
- 3.2.4
+ 3.6.2
shade
@@ -104,9 +104,9 @@
- io.papermc.paper
+ com.destroystokyo.paper
paper-api
- 1.20-R0.1-SNAPSHOT
+ 1.16.5-R0.1-SNAPSHOT
provided
@@ -115,120 +115,6 @@
1.12.2-R0.1-SNAPSHOT
provided
-
- org.spigotmc.
- spigot
- 1.13.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..
- spigot
- 1.15.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...
- spigot
- 1.16.5-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc....
- spigot
- 1.17.1-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.....
- spigot
- 1.18.1-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc......
- spigot
- 1.18.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.......
- spigot
- 1.19-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc........
- spigot
- 1.19.3-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.........
- spigot
- 1.19.4-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..........
- spigot
- 1.20-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...........
- spigot
- 1.20.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc............
- spigot
- 1.20.4-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.............
- spigot
- 1.20.6-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..............
- spigot
- 1.21.1-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...............
- spigot
- 1.21.3-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc................
- spigot
- 1.21.4-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.................
- spigot
- 1.21.5-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..................
- spigot
- 1.21.8-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...................
- spigot
- 1.21.10-R0.1-SNAPSHOT
- provided
-
org.projectlombok
lombok
@@ -244,13 +130,13 @@
me.clip
placeholderapi
- 2.11.6
+ 2.12.2
provided
com.github.SkriptLang
Skript
- 2.12.0
+ 2.15.0
provided
@@ -262,8 +148,8 @@
- 16
- 16
+ 1.8
+ 1.8
UTF-8
UTF-8
diff --git a/jitpack.yml b/jitpack.yml
index c3805ef4..727c9abd 100644
--- a/jitpack.yml
+++ b/jitpack.yml
@@ -1,2 +1,2 @@
jdk:
- - temurin21
+ - openjdk21
diff --git a/pom.xml b/pom.xml
index f04b019c..d52a4567 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
nl.mtvehicles.core
MTVehicles
- 2.5.8
+ 2.5.9
@@ -57,133 +57,17 @@
- io.papermc.paper
+ com.destroystokyo.paper
paper-api
- 1.20-R0.1-SNAPSHOT
+ 1.16.5-R0.1-SNAPSHOT
provided
-
-
org.spigotmc
spigot
1.12.2-R0.1-SNAPSHOT
provided
-
- org.spigotmc.
- spigot
- 1.13.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..
- spigot
- 1.15.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...
- spigot
- 1.16.5-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc....
- spigot
- 1.17.1-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.....
- spigot
- 1.18.1-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc......
- spigot
- 1.18.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.......
- spigot
- 1.19-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc........
- spigot
- 1.19.3-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.........
- spigot
- 1.19.4-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..........
- spigot
- 1.20-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...........
- spigot
- 1.20.2-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc............
- spigot
- 1.20.4-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.............
- spigot
- 1.20.6-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..............
- spigot
- 1.21.1-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...............
- spigot
- 1.21.3-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc................
- spigot
- 1.21.4-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc.................
- spigot
- 1.21.5-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc..................
- spigot
- 1.21.8-R0.1-SNAPSHOT
- provided
-
-
- org.spigotmc...................
- spigot
- 1.21.10-R0.1-SNAPSHOT
- provided
-
org.jetbrains
annotations
@@ -199,7 +83,7 @@
de.tr7zw
item-nbt-api
- 2.15.3-SNAPSHOT
+ 2.15.7
@@ -216,13 +100,13 @@
me.clip
placeholderapi
- 2.11.6
+ 2.12.2
provided
com.github.SkriptLang
Skript
- 2.12.0
+ 2.15.2
provided
@@ -240,7 +124,8 @@
maven-compiler-plugin
3.15.0
- 21
+ ${maven.compiler.source}
+ ${maven.compiler.target}
@@ -290,8 +175,8 @@
- 21
- 21
+ 1.8
+ 1.8
UTF-8
UTF-8
diff --git a/src/main/java/nl/mtvehicles/core/infrastructure/enums/ServerVersion.java b/src/main/java/nl/mtvehicles/core/infrastructure/enums/ServerVersion.java
index f5f9f6de..2040bb8d 100644
--- a/src/main/java/nl/mtvehicles/core/infrastructure/enums/ServerVersion.java
+++ b/src/main/java/nl/mtvehicles/core/infrastructure/enums/ServerVersion.java
@@ -1,193 +1,188 @@
package nl.mtvehicles.core.infrastructure.enums;
import nl.mtvehicles.core.infrastructure.annotations.VersionSpecific;
+import nl.mtvehicles.core.movement.PacketHandler;
+import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
/**
- * Enum of supported server versions (used for different NMS and Spigot API changes)
+ * Enum of supported server versions (used for different NMS and Spigot API
+ * changes)
*/
@VersionSpecific
public enum ServerVersion {
/**
* 1.12-1.12.2
*/
- v1_12,
+ v1_12_R1(PacketHandler::movement_1_12_R1),
/**
* 1.13.1-1.13.2
*/
- v1_13,
+ v1_13_R2(PacketHandler::movement_1_13_R2),
+ /**
+ * 1.14-1.14.4
+ */
+ v1_14_R1(PacketHandler::movement_1_14_R1),
/**
* 1.15-1.15.2
*/
- v1_15,
+ v1_15_R1(PacketHandler::movement_1_15_R1),
/**
* 1.16.4-1.16.5
*/
- v1_16,
+ v1_16_R3(PacketHandler::movement_1_16_R3),
/**
* 1.17-1.17.1
*/
- v1_17,
+ v1_17_R1(PacketHandler::movement_1_17_R1),
/**
* 1.18-1.18.1
*/
- v1_18_R1,
+ v1_18_R1(PacketHandler::movement_1_18_R1),
/**
* 1.18.2
*/
- v1_18_R2,
+ v1_18_R2(PacketHandler::movement_1_18_R2),
/**
* 1.19-1.19.2
+ *
* @since 2.4.3
*/
- v1_19_R1,
+ v1_19_R1(PacketHandler::movement_1_19_R1),
/**
* 1.19.3
+ *
* @since 2.5.0
*/
- v1_19_R2,
+ v1_19_R2(PacketHandler::movement_1_19_R2),
/**
* 1.19.4
+ *
* @since 2.5.0
*/
- v1_19_R3,
+ v1_19_R3(PacketHandler::movement_1_19_R3),
/**
* 1.20 and 1.20.1
+ *
* @since 2.5.6
*/
- v1_20_R1,
+ v1_20_R1(PacketHandler::movement_1_20_R1),
/**
* 1.20.2
+ *
* @since 2.5.2
*/
- v1_20_R2,
+ v1_20_R2(PacketHandler::movement_1_20_R2),
/**
* 1.20.3 and 1.20.4
+ *
* @since 2.5.2
*/
- v1_20_R3,
+ v1_20_R3(PacketHandler::movement_1_20_R3),
/**
* 1.20.5 and 1.20.6
+ *
* @since 2.5.4
*/
- v1_20_R4,
+ v1_20_R4(PacketHandler::movement_1_20_R4),
/**
* 1.21 and 1.21.1
+ *
* @since 2.5.4
*/
- v1_21_R1,
+ v1_21_R1(PacketHandler::movement_1_21_R1),
/**
* 1.21.2 and 1.21.3
+ *
* @since 2.5.5
*/
- v1_21_R2,
+ v1_21_R2(PacketHandler::movement_1_21_R2),
/**
* 1.21.4
+ *
* @since 2.5.5
*/
- v1_21_R3,
+ v1_21_R3(PacketHandler::movement_1_21_R3),
/**
* 1.21.5
+ *
* @since 2.5.6
*/
- v1_21_R4,
+ v1_21_R4(PacketHandler::movement_1_21_R4),
/**
* 1.21.6, 1.21.7 and 1.21.8
*
* @since 2.5.6
*/
- v1_21_R5,
+ v1_21_R5(PacketHandler::movement_1_21_R5),
/**
* 1.21.9 and 1.21.10
+ *
* @since 2.5.8
*/
- v1_21_R6;
-
- public boolean is1_12(){
- return this.equals(v1_12);
- }
-
- public boolean is1_13(){
- return this.equals(v1_13);
- }
-
- public boolean is1_15(){
- return this.equals(v1_15);
- }
-
- public boolean is1_16(){
- return this.equals(v1_16);
- }
-
- public boolean is1_17(){
- return this.equals(v1_17);
- }
-
- public boolean is1_18_R1(){
- return this.equals(v1_18_R1);
- }
+ v1_21_R6(PacketHandler::movement_1_21_R6),
+ /**
+ * 1.21.11
+ *
+ * @since 2.5.9
+ */
+ v1_21_R7(PacketHandler::movement_1_21_R7),
+ /**
+ * 26.1
+ *
+ * @since 2.5.9
+ */
+ v26_1(PacketHandler::movement_26_1);
- public boolean is1_18_R2(){
- return this.equals(v1_18_R2);
+ /**
+ * Function interface for packet movement handlers
+ */
+ public interface MovementHandler {
+ void handle(Player player);
}
- public boolean is1_19(){
- return this.equals(v1_19_R1);
- }
+ private final MovementHandler movementHandler;
- public boolean is1_19_R2(){
- return this.equals(v1_19_R2);
+ ServerVersion(MovementHandler movementHandler) {
+ this.movementHandler = movementHandler;
}
- public boolean is1_19_R3(){return this.equals(v1_19_R3);}
-
- public boolean is1_20_R1() {return this.equals(v1_20_R1);}
-
- public boolean is1_20_R2() {return this.equals(v1_20_R2);}
-
- public boolean is1_20_R3() {
- return this.equals(v1_20_R3);
+ /**
+ * Get the movement handler for this server version
+ *
+ * @return The movement handler for this version
+ */
+ public MovementHandler getMovementHandler() {
+ return this.movementHandler;
}
- public boolean is1_20_R4(){return this.equals(v1_20_R4);}
-
- public boolean is1_21_R1(){return this.equals(v1_21_R1);}
-
- public boolean is1_21_R2(){return this.equals(v1_21_R2);}
-
- public boolean is1_21_R3(){return this.equals(v1_21_R3);}
-
- public boolean is1_21_R4(){return this.equals(v1_21_R4);}
-
- public boolean is1_21_R5(){return this.equals(v1_21_R5);}
-
- public boolean is1_21_R6(){return this.equals(v1_21_R6);}
-
/**
* Check whether the server version is older than the given one
*/
- public boolean isOlderThan(@NotNull ServerVersion version){
+ public boolean isOlderThan(@NotNull ServerVersion version) {
return this.ordinal() < version.ordinal();
}
/**
- * Check whether the server version is older than the given one or whether it is the same
+ * Check whether the server version is older than the given one or whether it is
+ * the same
*/
- public boolean isOlderOrEqualTo(@NotNull ServerVersion version){
+ public boolean isOlderOrEqualTo(@NotNull ServerVersion version) {
return this.ordinal() <= version.ordinal();
}
/**
* Check whether the server version is newer than the given one
*/
- public boolean isNewerThan(@NotNull ServerVersion version){
+ public boolean isNewerThan(@NotNull ServerVersion version) {
return this.ordinal() > version.ordinal();
}
/**
- * Check whether the server version is newer than the given one or whether it is the same
+ * Check whether the server version is newer than the given one or whether it is
+ * the same
*/
- public boolean isNewerOrEqualTo(@NotNull ServerVersion version){
+ public boolean isNewerOrEqualTo(@NotNull ServerVersion version) {
return this.ordinal() >= version.ordinal();
}
diff --git a/src/main/java/nl/mtvehicles/core/infrastructure/modules/VersionModule.java b/src/main/java/nl/mtvehicles/core/infrastructure/modules/VersionModule.java
index 6278f4ba..9c926f39 100644
--- a/src/main/java/nl/mtvehicles/core/infrastructure/modules/VersionModule.java
+++ b/src/main/java/nl/mtvehicles/core/infrastructure/modules/VersionModule.java
@@ -16,14 +16,13 @@
* Module containing information about the plugin and server version
*/
public class VersionModule {
- private static @Getter
- @Setter
- VersionModule instance;
+ private static @Getter @Setter VersionModule instance;
/**
* The plugin's current version
*
- * @deprecated Use {@link #getPluginVersion()} to access the variable. (This variable may be private in future versions.)
+ * @deprecated Use {@link #getPluginVersion()} to access the variable. (This
+ * variable may be private in future versions.)
* @see #getPluginVersion()
*/
@Deprecated
@@ -37,173 +36,215 @@ public class VersionModule {
*/
public static boolean isDevRelease;
/**
- * The server's minecraft version (e.g. '1_16_R3')
+ * The server's software (e.g. 'Paper')
*/
- private static String serverVersion;
+ private static String serverSoftware;
/**
- * The server's software (e.g. 'Paper')
+ * Server Version
*/
- public static String serverSoftware;
+ private static ServerVersion serverVersion;
+
private Logger logger = Main.instance.getLogger();
public VersionModule() {
PluginDescriptionFile pdf = Main.instance.getDescription();
pluginVersionString = pdf.getVersion();
- //Pre-releases should thus be named "vX.Y.Z-preU" etc... (Instead of pre, dev for developing and rc for release candidates are acceptable too.)
- isPreRelease = pluginVersionString.toLowerCase().contains("pre") || pluginVersionString.toLowerCase().contains("rc") || pluginVersionString.toLowerCase().contains("dev");
+ // Pre-releases should thus be named "vX.Y.Z-preU" etc... (Instead of pre, dev
+ // for developing and rc for release candidates are acceptable too.)
+ isPreRelease = pluginVersionString.toLowerCase().contains("pre")
+ || pluginVersionString.toLowerCase().contains("rc")
+ || pluginVersionString.toLowerCase().contains("dev");
isDevRelease = pluginVersionString.toLowerCase().contains("dev");
serverSoftware = Bukkit.getName();
- //Check Server Version
- if(!serverSoftware.contains("Arclight")){
+ // Check Server Version
+ if (!serverSoftware.contains("Arclight")) {
+ String serverVersionString;
try {
- serverVersion = Bukkit.getServer().getMinecraftVersion();
- } catch (NoSuchMethodError e){
- serverVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
+ serverVersionString = Bukkit.getServer().getMinecraftVersion();
+ } catch (NoSuchMethodError e) {
+ String packageName = Bukkit.getServer().getClass().getPackage().getName();
+ if(packageName.split("\\.").length < 4) {
+ serverVersionString = Bukkit.getServer().getBukkitVersion().split("-")[0];
+ } else {
+ serverVersionString = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
+ }
}
+ selectServerVersion(serverVersionString);
}
}
/**
* The correct approach to get the plugin's version (as String – e.g. '2.4.2')
+ *
* @since 2.5.8
*/
- public static String getPluginVersion(){
+ public static String getPluginVersion() {
return pluginVersionString;
}
/**
* Get the server version as enum
+ *
* @return Server version
*/
- @VersionSpecific
- public static ServerVersion getServerVersion(){
- ServerVersion returns = null;
- switch (serverVersion) {
+ public static ServerVersion getServerVersion() {
+ return serverVersion;
+ }
+
+ /**
+ * Select the server version based on a string
+ *
+ * @param serverVersionString Server version string
+ */
+ private static void selectServerVersion(String serverVersionString) {
+ switch (serverVersionString) {
case "1.12":
case "1.12.1":
case "1.12.2":
case "v1_12_R1":
- returns = ServerVersion.v1_12;
+ serverVersion = ServerVersion.v1_12_R1;
break;
case "1.13.1":
case "1.13.2":
case "v1_13_R2":
- returns = ServerVersion.v1_13;
+ serverVersion = ServerVersion.v1_13_R2;
+ break;
+ case "1.14":
+ case "1.14.1":
+ case "1.14.2":
+ case "1.14.3":
+ case "1.14.4":
+ case "v1_14_R1":
+ serverVersion = ServerVersion.v1_14_R1;
break;
case "1.15":
case "1.15.1":
case "1.15.2":
case "v1_15_R1":
- returns = ServerVersion.v1_15;
+ serverVersion = ServerVersion.v1_15_R1;
break;
case "1.16.4":
case "1.16.5":
case "v1_16_R3":
- returns = ServerVersion.v1_16;
+ serverVersion = ServerVersion.v1_16_R3;
break;
case "1.17":
case "1.17.1":
case "v1_17_R1":
- returns = ServerVersion.v1_17;
+ serverVersion = ServerVersion.v1_17_R1;
break;
case "1.18":
case "1.18.1":
case "v1_18_R1":
- returns = ServerVersion.v1_18_R1;
+ serverVersion = ServerVersion.v1_18_R1;
break;
case "1.18.2":
case "v1_18_R2":
- returns = ServerVersion.v1_18_R2;
+ serverVersion = ServerVersion.v1_18_R2;
break;
case "1.19":
case "1.19.1":
case "1.19.2":
case "v1_19_R1":
- returns = ServerVersion.v1_19_R1;
+ serverVersion = ServerVersion.v1_19_R1;
break;
case "1.19.3":
case "v1_19_R2":
- returns = ServerVersion.v1_19_R2;
+ serverVersion = ServerVersion.v1_19_R2;
break;
case "1.19.4":
case "v1_19_R3":
- returns = ServerVersion.v1_19_R3;
+ serverVersion = ServerVersion.v1_19_R3;
break;
case "1.20":
case "1.20.1":
case "v1_20_R1":
- returns = ServerVersion.v1_20_R1;
+ serverVersion = ServerVersion.v1_20_R1;
break;
case "1.20.2":
case "1.20.3":
case "v1_20_R2":
- returns = ServerVersion.v1_20_R2;
+ serverVersion = ServerVersion.v1_20_R2;
break;
case "1.20.4":
case "1.20.5":
case "v1_20_R3":
- returns = ServerVersion.v1_20_R3;
+ serverVersion = ServerVersion.v1_20_R3;
break;
case "1.20.6":
case "v1_20_R4":
- returns = ServerVersion.v1_20_R4;
+ serverVersion = ServerVersion.v1_20_R4;
break;
case "1.21":
case "1.21.1":
case "1.21.2":
case "v1_21_R1":
- returns = ServerVersion.v1_21_R1;
+ serverVersion = ServerVersion.v1_21_R1;
break;
case "1.21.3":
case "v1_21_R2":
- returns = ServerVersion.v1_21_R2;
+ serverVersion = ServerVersion.v1_21_R2;
break;
case "1.21.4":
case "v1_21_R3":
- returns = ServerVersion.v1_21_R3;
+ serverVersion = ServerVersion.v1_21_R3;
break;
case "1.21.5":
case "v1_21_R4":
- returns = ServerVersion.v1_21_R4;
- break;
+ serverVersion = ServerVersion.v1_21_R4;
+ break;
case "1.21.6":
case "1.21.7":
case "1.21.8":
case "v1_21_R5":
- returns = ServerVersion.v1_21_R5;
+ serverVersion = ServerVersion.v1_21_R5;
break;
case "1.21.9":
case "1.21.10":
case "v1_21_R6":
- returns = ServerVersion.v1_21_R6;
+ serverVersion = ServerVersion.v1_21_R6;
+ break;
+ case "1.21.11":
+ case "v1_21_R7":
+ serverVersion = ServerVersion.v1_21_R7;
+ break;
+ case "26.1":
+ case "26.1.1":
+ case "26.1.2":
+ serverVersion = ServerVersion.v26_1;
break;
}
- return returns;
}
/**
* Check whether the server version is supported by the plugin.
* Otherwise, send a warning and disable the plugin.
+ *
* @return True if the server version is supported
*/
@VersionSpecific
- public boolean isSupportedVersion(){
+ public boolean isSupportedVersion() {
List highestVersions = Arrays.asList(
- "1.12.2", "1.13.2", "1.15.2", "1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8", "1.21.9", "1.21.10",
- "v1_21_R6", "v1_21_R5", "v1_21_R4", "v1_21_R3", "v1_21_R2", "v1_21_R1", "v1_20_R4", "v1_19_R3", "v1_18_R2", "v1_17_R1", "v1_16_R3", "v1_15_R1", "v1_13_R2", "v1_12_R1"
+ "1.12.2", "1.13.2", "1.15.2", "1.16.5", "1.17.1", "1.18.2", "1.19.4", "1.20.6", "1.21.11", "26.1.2",
+ "v1_21_R7", "v1_20_R4", "v1_19_R3", "v1_18_R2", "v1_17_R1", "v1_16_R3", "v1_15_R1", "v1_14_R1", "v1_13_R2", "v1_12_R1"
);
-
- //Check Server Version
- if(!serverSoftware.contains("Arclight")){
+ String serverVersionString = null;
+ // Check Server Version
+ if (!serverSoftware.contains("Arclight")) {
try {
- serverVersion = Bukkit.getServer().getMinecraftVersion();
- } catch (NoSuchMethodError e){
- serverVersion = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
+ serverVersionString = Bukkit.getServer().getMinecraftVersion();
+ } catch (NoSuchMethodError e) {
+ String packageName = Bukkit.getServer().getClass().getPackage().getName();
+ if(packageName.split("\\.").length < 4) {
+ serverVersionString = Bukkit.getServer().getBukkitVersion().split("-")[0];
+ } else {
+ serverVersionString = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
+ }
}
}
@@ -216,18 +257,21 @@ public boolean isSupportedVersion(){
return false;
}
- else if (!highestVersions.contains(serverVersion)) {
+ else if (!highestVersions.contains(serverVersionString)) {
logger.warning("--------------------------");
- logger.warning("Your Server does not run the latest patch version (e.g. you may be running 1.18 instead of 1.18.2 etc...).");
+ logger.warning(
+ "Your Server does not run the latest patch version (e.g. you may be running 1.18 instead of 1.18.2 etc...).");
logger.warning("The plugin WILL load but it MAY NOT work properly. UPDATE.");
logger.warning("Check the supported versions here: https://wiki.mtvehicles.eu/faq.html");
logger.warning("--------------------------");
}
- else if (!serverSoftware.equals("Spigot") && !serverSoftware.equals("Paper") && !serverSoftware.equals("CraftBukkit")){
+ else if (!serverSoftware.equals("Spigot") && !serverSoftware.equals("Paper")
+ && !serverSoftware.equals("CraftBukkit")) {
logger.warning("--------------------------");
logger.warning("Your Server is not running Spigot, nor Paper (" + serverSoftware + " detected).");
- logger.warning("The plugin WILL load but it MAY NOT work properly. Full support is guaranteed only on Spigot/Paper.");
+ logger.warning(
+ "The plugin WILL load but it MAY NOT work properly. Full support is guaranteed only on Spigot/Paper.");
logger.warning("We'll be more than happy to help you on our Discord server (https://discord.gg/vehicle).");
logger.warning("--------------------------");
}
diff --git a/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemFactory.java b/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemFactory.java
index 0b264285..a9b8c163 100644
--- a/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemFactory.java
+++ b/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemFactory.java
@@ -3,6 +3,8 @@
import de.tr7zw.changeme.nbtapi.NBTItem;
import nl.mtvehicles.core.Main;
import nl.mtvehicles.core.infrastructure.annotations.VersionSpecific;
+import nl.mtvehicles.core.infrastructure.enums.ServerVersion;
+
import org.bukkit.*;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.inventory.ItemFlag;
@@ -48,7 +50,7 @@ public ItemFactory clone() {
@VersionSpecific
public ItemFactory setDurability(int durability) {
- if (getServerVersion().is1_12()) this.item.setDurability((short) durability);
+ if (getServerVersion() == ServerVersion.v1_12_R1) this.item.setDurability((short) durability);
else {
ItemMeta im = this.item.getItemMeta();
((org.bukkit.inventory.meta.Damageable) im).setDamage(durability);
diff --git a/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemUtils.java b/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemUtils.java
index b5d85e82..addbe223 100644
--- a/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemUtils.java
+++ b/src/main/java/nl/mtvehicles/core/infrastructure/utils/ItemUtils.java
@@ -5,6 +5,7 @@
import nl.mtvehicles.core.infrastructure.dataconfig.MessagesConfig;
import nl.mtvehicles.core.infrastructure.dataconfig.VehicleDataConfig;
import nl.mtvehicles.core.infrastructure.enums.Message;
+import nl.mtvehicles.core.infrastructure.enums.ServerVersion;
import nl.mtvehicles.core.infrastructure.vehicle.Vehicle;
import nl.mtvehicles.core.infrastructure.vehicle.VehicleUtils;
import nl.mtvehicles.core.infrastructure.modules.ConfigModule;
@@ -291,7 +292,7 @@ public static ItemStack getMenuItem(@NotNull Material material, int amount, int
*/
@VersionSpecific
public static Material getStainedGlassPane(){
- if (getServerVersion().is1_12()) return Material.matchMaterial("STAINED_GLASS_PANE");
+ if (getServerVersion() == ServerVersion.v1_12_R1) return Material.matchMaterial("STAINED_GLASS_PANE");
else return Material.matchMaterial("WHITE_STAINED_GLASS_PANE");
}
diff --git a/src/main/java/nl/mtvehicles/core/listeners/JerryCanClickListener.java b/src/main/java/nl/mtvehicles/core/listeners/JerryCanClickListener.java
index a54cef28..037f2eaa 100644
--- a/src/main/java/nl/mtvehicles/core/listeners/JerryCanClickListener.java
+++ b/src/main/java/nl/mtvehicles/core/listeners/JerryCanClickListener.java
@@ -6,6 +6,7 @@
import nl.mtvehicles.core.events.JerryCanClickEvent;
import nl.mtvehicles.core.infrastructure.annotations.VersionSpecific;
import nl.mtvehicles.core.infrastructure.enums.Message;
+import nl.mtvehicles.core.infrastructure.enums.ServerVersion;
import nl.mtvehicles.core.infrastructure.utils.TextUtils;
import nl.mtvehicles.core.infrastructure.models.MTVListener;
import nl.mtvehicles.core.infrastructure.modules.ConfigModule;
@@ -109,7 +110,7 @@ private boolean canAffordFuel(int litres) {
private void playJerryCanSound() {
if (!ConfigModule.defaultConfig.jerryCanPlaySound()) return;
- String soundName = VersionModule.getServerVersion().is1_12() ? "BLOCK_NOTE_PLING" : "BLOCK_NOTE_BLOCK_PLING";
+ String soundName = VersionModule.getServerVersion() == ServerVersion.v1_12_R1 ? "BLOCK_NOTE_PLING" : "BLOCK_NOTE_BLOCK_PLING";
try {
player.getWorld().playSound(player.getLocation(), Sound.valueOf(soundName), 3.0F, 0.5F);
} catch (IllegalArgumentException e) {
diff --git a/src/main/java/nl/mtvehicles/core/listeners/VehicleClickListener.java b/src/main/java/nl/mtvehicles/core/listeners/VehicleClickListener.java
index 6ee41cd0..1f66e72a 100644
--- a/src/main/java/nl/mtvehicles/core/listeners/VehicleClickListener.java
+++ b/src/main/java/nl/mtvehicles/core/listeners/VehicleClickListener.java
@@ -11,6 +11,8 @@
import nl.mtvehicles.core.infrastructure.vehicle.Vehicle;
import nl.mtvehicles.core.infrastructure.vehicle.VehicleUtils;
import nl.mtvehicles.core.infrastructure.modules.ConfigModule;
+
+import org.bukkit.GameMode;
import org.bukkit.entity.Entity;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -41,6 +43,8 @@ public void onPlayerInteractAtEntity(PlayerInteractAtEntityEvent event) {
if (entity.getCustomName().startsWith("VEHICLE")) return;
+ if(player.getGameMode() == GameMode.SPECTATOR) return;
+
final String playerName = player.getName();
final long currentTime = System.currentTimeMillis();
final long lastUsed = lastUsage.getOrDefault(playerName, 0L);
diff --git a/src/main/java/nl/mtvehicles/core/movement/MovementManager.java b/src/main/java/nl/mtvehicles/core/movement/MovementManager.java
index f43d7ea0..8b12e686 100644
--- a/src/main/java/nl/mtvehicles/core/movement/MovementManager.java
+++ b/src/main/java/nl/mtvehicles/core/movement/MovementManager.java
@@ -1,6 +1,5 @@
package nl.mtvehicles.core.movement;
-import nl.mtvehicles.core.infrastructure.annotations.VersionSpecific;
import org.bukkit.entity.Player;
import static nl.mtvehicles.core.infrastructure.modules.VersionModule.getServerVersion;
@@ -12,27 +11,7 @@ public class MovementManager {
/**
* Select a packet handler for a player
*/
- @VersionSpecific
public static void MovementSelector(Player player) {
- if (getServerVersion().is1_12()) PacketHandler.movement_1_12(player);
- else if (getServerVersion().is1_13()) PacketHandler.movement_1_13(player);
- else if (getServerVersion().is1_15()) PacketHandler.movement_1_15(player);
- else if (getServerVersion().is1_16()) PacketHandler.movement_1_16(player);
- else if (getServerVersion().is1_17()) PacketHandler.movement_1_17(player);
- else if (getServerVersion().is1_18_R1()) PacketHandler.movement_1_18_R1(player);
- else if (getServerVersion().is1_18_R2()) PacketHandler.movement_1_18_R2(player);
- else if (getServerVersion().is1_19()) PacketHandler.movement_1_19(player);
- else if (getServerVersion().is1_19_R2()) PacketHandler.movement_1_19_R2(player);
- else if (getServerVersion().is1_19_R3()) PacketHandler.movement_1_19_R3(player);
- else if (getServerVersion().is1_20_R1()) PacketHandler.movement_1_20_R1(player);
- else if (getServerVersion().is1_20_R2()) PacketHandler.movement_1_20_R2(player);
- else if (getServerVersion().is1_20_R3()) PacketHandler.movement_1_20_R3(player);
- else if (getServerVersion().is1_20_R4()) PacketHandler.movement_1_20_R4(player);
- else if (getServerVersion().is1_21_R1()) PacketHandler.movement_1_21_R1(player);
- else if (getServerVersion().is1_21_R2()) PacketHandler.movement_1_21_R2(player);
- else if (getServerVersion().is1_21_R3()) PacketHandler.movement_1_21_R3(player);
- else if (getServerVersion().is1_21_R4()) PacketHandler.movement_1_21_R4(player);
- else if (getServerVersion().is1_21_R5()) PacketHandler.movement_1_21_R5(player);
- else if (getServerVersion().is1_21_R6()) PacketHandler.movement_1_21_R6(player);
+ getServerVersion().getMovementHandler().handle(player);
}
}
diff --git a/src/main/java/nl/mtvehicles/core/movement/PacketHandler.java b/src/main/java/nl/mtvehicles/core/movement/PacketHandler.java
index 1af227d5..72a446c2 100644
--- a/src/main/java/nl/mtvehicles/core/movement/PacketHandler.java
+++ b/src/main/java/nl/mtvehicles/core/movement/PacketHandler.java
@@ -3,10 +3,7 @@
import io.netty.channel.Channel;
import io.netty.channel.ChannelDuplexHandler;
import io.netty.channel.ChannelHandlerContext;
-import net.minecraft.server.level.EntityPlayer;
-import net.minecraft.server.network.PlayerConnection;
import nl.mtvehicles.core.Main;
-import nl.mtvehicles.core.infrastructure.annotations.ToDo;
import nl.mtvehicles.core.infrastructure.annotations.VersionSpecific;
import nl.mtvehicles.core.infrastructure.enums.ServerVersion;
import nl.mtvehicles.core.movement.versions.VehicleMovement1_12;
@@ -14,7 +11,7 @@
import org.bukkit.entity.Player;
import java.lang.reflect.Field;
-import java.util.NoSuchElementException;
+import java.lang.reflect.Method;
import static nl.mtvehicles.core.infrastructure.modules.VersionModule.getServerVersion;
@@ -24,177 +21,173 @@
@VersionSpecific
public class PacketHandler {
-
-/**
- * Packet handler for vehicle steering in 1.21.9 and 1.21.10
+ /**
+ * Generic packet handler using reflection.
* @param player Player whose steering is being regarded
+ * @param useRepeatingTask Whether to use repeating task or not (for 1.21.2+)
+ * @param playerConnectionFieldName Name of the field to get PlayerConnection from EntityPlayer
+ * @param networkManagerFieldName Name of the field to get NetworkManager from PlayerConnection
+ * @param channelFieldName Name of the field to get Channel from NetworkManager
*/
- public static void movement_1_21_R6(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- private net.minecraft.network.protocol.game.PacketPlayInSteerVehicle lastPacket = null;
- private int taskId = -1;
-
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- lastPacket = ppisv;
-
- if (taskId != -1) {
- Bukkit.getScheduler().cancelTask(taskId);
- }
+ private static void setupPacketHandler(Player player, boolean useRepeatingTask,
+ String playerConnectionFieldName,
+ String networkManagerFieldName,
+ String channelFieldName) {
+
+ final Class> packetClass;
+ try {
+ String version = getServerVersion().name();
+ if(getServerVersion().isNewerOrEqualTo(ServerVersion.v26_1)) {
+ packetClass = Class.forName("net.minecraft.network.protocol.game.ServerboundPlayerInputPacket");
+ }
+ else if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_17_R1)) {
+ packetClass = Class.forName("net.minecraft.network.protocol.game.PacketPlayInSteerVehicle");
+ } else {
+ packetClass = Class.forName("net.minecraft.server." + version + ".PacketPlayInSteerVehicle");
+ }
+ } catch (ClassNotFoundException e) {
+ unexpectedException(e);
+ return;
+ }
+ ChannelDuplexHandler channelDuplexHandler;
+ if (useRepeatingTask) {
+ // Repeating task pattern for 1.21.2+
+ channelDuplexHandler = new ChannelDuplexHandler() {
+ private Object lastPacket = null;
+ private int taskId = -1;
+
+ @Override
+ public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
+ super.channelRead(channelHandlerContext, packet);
+ if (packetClass.isInstance(packet)) {
+ lastPacket = packet;
+
+ if (taskId != -1) {
+ Bukkit.getScheduler().cancelTask(taskId);
+ }
- taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.instance, () -> {
- if (player.isInsideVehicle()) {
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, lastPacket);
+ taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.instance, () -> {
+ if (player.isInsideVehicle()) {
+ VehicleMovement movement = new VehicleMovement();
+ movement.vehicleMovement(player, lastPacket);
+ } else {
+ Bukkit.getScheduler().cancelTask(taskId);
+ taskId = -1;
+ }
+ }, 0L, 1L);
+ }
+ }
+ };
+ } else {
+ channelDuplexHandler = new ChannelDuplexHandler() {
+ @Override
+ public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
+ super.channelRead(channelHandlerContext, packet);
+ if (packetClass.isInstance(packet)) {
+ // Special handling for 1.12
+ if (getServerVersion().name().equals("v1_12_R1")) {
+ VehicleMovement1_12 movement = new VehicleMovement1_12();
+ movement.vehicleMovement(player, packet);
} else {
- Bukkit.getScheduler().cancelTask(taskId);
- taskId = -1;
+ VehicleMovement movement = new VehicleMovement();
+ movement.vehicleMovement(player, packet);
}
- }, 0L, 1L);
+ }
}
- }
- };
+ };
+ }
Channel channel = null;
try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_21_R6.entity.CraftPlayer) player).getHandle();
+ // Build versioned CraftPlayer class name
+ String version = getServerVersion().name();
+ String craftPlayerClassName = "org.bukkit.craftbukkit." + version + ".entity.CraftPlayer";
+ if(getServerVersion().isNewerOrEqualTo(ServerVersion.v26_1)) {
+ craftPlayerClassName = "org.bukkit.craftbukkit.entity.CraftPlayer";
+ }
+ Class> craftPlayerClass = Class.forName(craftPlayerClassName);
- Field playerConnectionField = entityPlayer.getClass().getField("g");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("e");
+ // Get EntityPlayer handle
+ Method getHandleMethod = craftPlayerClass.getMethod("getHandle");
+ Object entityPlayer = getHandleMethod.invoke(player);
+
+ // Get PlayerConnection
+ Field playerConnectionField = entityPlayer.getClass().getDeclaredField(playerConnectionFieldName);
+ playerConnectionField.setAccessible(true);
+ Object playerConnection = playerConnectionField.get(entityPlayer);
+
+ // Get NetworkManager
+ Field networkManagerField;
+ if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_20_R2)) {
+ networkManagerField = Class.forName("net.minecraft.server.network.ServerCommonPacketListenerImpl")
+ .getDeclaredField(networkManagerFieldName);
+ } else {
+ networkManagerField = playerConnection.getClass().getDeclaredField(networkManagerFieldName);
+ }
networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
+ Object networkManager = networkManagerField.get(playerConnection);
+
+ Field channelField = networkManager.getClass().getDeclaredField(channelFieldName);
+ channelField.setAccessible(true);
channel = (Channel) channelField.get(networkManager);
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
+ channel.pipeline().addBefore("packet_handler", player.getName(), channelDuplexHandler);
+
+ } catch (IllegalArgumentException e) {
+ // In case of plugin reload, prevent duplicate handler name exception
if (channel == null) {
unexpectedException(e);
return;
}
- if (!channel.pipeline().names().contains(player.getName())) return;
+ if (!channel.pipeline().names().contains(player.getName()))
+ return;
channel.pipeline().remove(player.getName());
- movement_1_21_R6(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
+ setupPacketHandler(player, useRepeatingTask, playerConnectionFieldName, networkManagerFieldName,
+ channelFieldName);
+ } catch (Exception e) {
unexpectedException(e);
}
}
+
/**
- * Packet handler for vehicle steering in 1.21.6, 1.21.7 and 1.21.8
+ * Packet handler for vehicle steering in 26.1
+ *
* @param player Player whose steering is being regarded
*/
- public static void movement_1_21_R5(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- private net.minecraft.network.protocol.game.PacketPlayInSteerVehicle lastPacket = null;
- private int taskId = -1;
-
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- lastPacket = ppisv;
-
- if (taskId != -1) {
- Bukkit.getScheduler().cancelTask(taskId);
- }
-
- taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.instance, () -> {
- if (player.isInsideVehicle()) {
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, lastPacket);
- } else {
- Bukkit.getScheduler().cancelTask(taskId);
- taskId = -1;
- }
- }, 0L, 1L);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_21_R5.entity.CraftPlayer) player).getHandle();
+ public static void movement_26_1(Player player) {
+ setupPacketHandler(player, true, "connection", "connection", "channel");
+ }
+
+ /**
+ * Packet handler for vehicle steering in 1.21.11
+ *
+ * @param player Player whose steering is being regarded
+ */
+ public static void movement_1_21_R7(Player player) {
+ setupPacketHandler(player, true, "g", "e", "k");
+ }
- Field playerConnectionField = entityPlayer.getClass().getField("g");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("e");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
+ /**
+ * Packet handler for vehicle steering in 1.21.9 and 1.21.10
+ * @param player Player whose steering is being regarded
+ */
+ public static void movement_1_21_R6(Player player) {
+ setupPacketHandler(player, true, "g", "e", "n");
+ }
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_21_R5(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ /**
+ * Packet handler for vehicle steering in 1.21.6, 1.21.7 and 1.21.8
+ * @param player Player whose steering is being regarded
+ */
+ public static void movement_1_21_R5(Player player) {
+ setupPacketHandler(player, true, "g", "e", "n");
}
+
/**
* Packet handler for vehicle steering in 1.21.5
* @param player Player whose steering is being regarded
*/
public static void movement_1_21_R4(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- private net.minecraft.network.protocol.game.PacketPlayInSteerVehicle lastPacket = null;
- private int taskId = -1;
-
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- lastPacket = ppisv;
-
- if (taskId != -1) {
- Bukkit.getScheduler().cancelTask(taskId);
- }
-
- taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.instance, () -> {
- if (player.isInsideVehicle()) {
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, lastPacket);
- } else {
- Bukkit.getScheduler().cancelTask(taskId);
- taskId = -1;
- }
- }, 0L, 1L);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_21_R4.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("f");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("e");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_21_R4(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, true, "f", "e", "n");
}
/**
@@ -202,57 +195,7 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_21_R3(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- private net.minecraft.network.protocol.game.PacketPlayInSteerVehicle lastPacket = null;
- private int taskId = -1;
-
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- lastPacket = ppisv;
-
- if (taskId != -1) {
- Bukkit.getScheduler().cancelTask(taskId);
- }
-
- taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.instance, () -> {
- if (player.isInsideVehicle()) {
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, lastPacket);
- } else {
- Bukkit.getScheduler().cancelTask(taskId);
- taskId = -1;
- }
- }, 0L, 1L);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_21_R3.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("f");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("e");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_21_R3(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, true, "f", "e", "n");
}
/**
@@ -260,57 +203,7 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_21_R2(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- private net.minecraft.network.protocol.game.PacketPlayInSteerVehicle lastPacket = null;
- private int taskId = -1;
-
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- lastPacket = ppisv;
-
- if (taskId != -1) {
- Bukkit.getScheduler().cancelTask(taskId);
- }
-
- taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.instance, () -> {
- if (player.isInsideVehicle()) {
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, lastPacket);
- } else {
- Bukkit.getScheduler().cancelTask(taskId);
- taskId = -1;
- }
- }, 0L, 1L);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_21_R2.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("f");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("e");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_21_R2(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, true, "f", "e", "n");
}
/**
@@ -318,84 +211,15 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_21_R1(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_21_R1.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("c");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("e");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_21_R1(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, false, "c", "e", "n");
}
-
/**
* Packet handler for vehicle steering in 1.20.5 and 1.20.6
* @param player Player whose steering is being regarded
*/
public static void movement_1_20_R4(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_20_R4.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("c");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("e");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_20_R4(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, false, "c", "e", "n");
}
/**
@@ -403,42 +227,7 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_20_R3(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_20_R3.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("c");
- playerConnectionField.setAccessible(true);
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("c");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_20_R3(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, false, "c", "c", "n");
}
/**
@@ -446,83 +235,15 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_20_R2(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_20_R2.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("c");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = net.minecraft.server.network.ServerCommonPacketListenerImpl.class.getDeclaredField("c");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("n");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_20_R2(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, false, "c", "c", "n");
}
/**
* Packet handler for vehicle steering in 1.20 and 1.20.1
* @param player Player whose steering is being regarded
*/
- public static void movement_1_20_R1(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_20_R1.entity.CraftPlayer) player).getHandle();
-
- Field playerConnectionField = entityPlayer.getClass().getField("c");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = playerConnection.getClass().getDeclaredField("h");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("m");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_20_R1(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ public static void movement_1_20_R1(Player player) {
+ setupPacketHandler(player, false, "c", "h", "m");
}
/**
@@ -530,40 +251,7 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_19_R3(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_19_R3.entity.CraftPlayer) player).getHandle();
- Field playerConnectionField = entityPlayer.getClass().getField("b");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = playerConnection.getClass().getDeclaredField("h");
- networkManagerField.setAccessible(true);
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("m");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_19_R3(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, false, "b", "h", "m");
}
/**
@@ -571,79 +259,15 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_19_R2(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_19_R2.entity.CraftPlayer) player).getHandle();
- Field playerConnectionField = entityPlayer.getClass().getField("b");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = playerConnection.getClass().getField("b");
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("m");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_19_R2(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, false, "b", "b", "m");
}
/**
* Packet handler for vehicle steering in 1.19-1.19.2
* @param player Player whose steering is being regarded
*/
- public static void movement_1_19(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object entityPlayer = ((org.bukkit.craftbukkit.v1_19_R1.entity.CraftPlayer) player).getHandle();
- Field playerConnectionField = entityPlayer.getClass().getField("b");
- net.minecraft.server.network.PlayerConnection playerConnection = (net.minecraft.server.network.PlayerConnection) playerConnectionField.get(entityPlayer);
- Field networkManagerField = playerConnection.getClass().getField("b");
- net.minecraft.network.NetworkManager networkManager = (net.minecraft.network.NetworkManager) networkManagerField.get(playerConnection);
- Field channelField = networkManager.getClass().getField("m");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_19(player);
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ public static void movement_1_19_R1(Player player) {
+ setupPacketHandler(player, false, "b", "b", "m");
}
/**
@@ -651,37 +275,7 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_18_R2(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- Object networkManager = ((org.bukkit.craftbukkit.v1_18_R2.entity.CraftPlayer) player).getHandle().b.a;
- Field channelField = networkManager.getClass().getField("m");
- channel = (Channel) channelField.get(networkManager);
-
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_18_R2(player);
- } catch (NoSuchElementException e) {
- //It isn't good practice to ignore exceptions, but I'll keep it like this for now :)
- } catch (IllegalAccessException | NoSuchFieldException e) {
- unexpectedException(e);
- }
+ setupPacketHandler(player, false, "b", "a", "m");
}
/**
@@ -689,209 +283,55 @@ public void channelRead(ChannelHandlerContext channelHandlerContext, Object pack
* @param player Player whose steering is being regarded
*/
public static void movement_1_18_R1(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- channel = ((org.bukkit.craftbukkit.v1_18_R1.entity.CraftPlayer) player).getHandle().b.a.k; // #wtf
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_18_R1(player);
- } catch (NoSuchElementException e) {
- //It isn't good practice to ignore exceptions, but I'll keep it like this for now :)
- }
+ setupPacketHandler(player, false, "b", "a", "k");
}
/**
* Packet handler for vehicle steering in 1.17 and 1.17.1
* @param player Player whose steering is being regarded
*/
- public static void movement_1_17(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) {
- net.minecraft.network.protocol.game.PacketPlayInSteerVehicle ppisv = (net.minecraft.network.protocol.game.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- channel = ((org.bukkit.craftbukkit.v1_17_R1.entity.CraftPlayer) player).getHandle().b.a.k; // #wtf
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_17(player);
- } catch (NoSuchElementException e) {
- //It isn't good practice to ignore exceptions, but I'll keep it like this for now :)
- }
+ public static void movement_1_17_R1(Player player) {
+ setupPacketHandler(player, false, "b", "a", "k");
}
/**
* Packet handler for vehicle steering in 1.16.5 and 1.16.4 (NMS versions 1_16_R2 and 1_16_R1 are not supported)
* @param player Player whose steering is being regarded
*/
- public static void movement_1_16(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- @Override
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.server.v1_16_R3.PacketPlayInSteerVehicle) {
- net.minecraft.server.v1_16_R3.PacketPlayInSteerVehicle ppisv = (net.minecraft.server.v1_16_R3.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- channel = ((org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_16(player);
- } catch (NoSuchElementException e) {
- //It isn't good practice to ignore exceptions, but I'll keep it like this for now :)
- }
+ public static void movement_1_16_R3(Player player) {
+ setupPacketHandler(player, false, "playerConnection", "networkManager", "channel");
}
/**
* Packet handler for vehicle steering in versions 1.15-1.15.2
* @param player Player whose steering is being regarded
*/
- public static void movement_1_15(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- @Override
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.server.v1_15_R1.PacketPlayInSteerVehicle) {
- net.minecraft.server.v1_15_R1.PacketPlayInSteerVehicle ppisv = (net.minecraft.server.v1_15_R1.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- channel = ((org.bukkit.craftbukkit.v1_15_R1.entity.CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_15(player);
- } catch (NoSuchElementException e) {
- //It isn't good practice to ignore exceptions, but I'll keep it like this for now :)
- }
+ public static void movement_1_15_R1(Player player) {
+ setupPacketHandler(player, false, "playerConnection", "networkManager", "channel");
}
/**
- * Packet handler for vehicle steering in 1.13.2 and 1.13.1 (NMS version 1_13_R1 is not supported)
+ * Packet handler for vehicle steering in versions 1.14-1.14.4
* @param player Player whose steering is being regarded
*/
- public static void movement_1_13(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- @Override
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.server.v1_13_R2.PacketPlayInSteerVehicle) {
- net.minecraft.server.v1_13_R2.PacketPlayInSteerVehicle ppisv = (net.minecraft.server.v1_13_R2.PacketPlayInSteerVehicle) packet;
- VehicleMovement movement = new VehicleMovement();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- channel = ((org.bukkit.craftbukkit.v1_13_R2.entity.CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_13(player);
- } catch (NoSuchElementException e) {
- //It isn't good practice to ignore exceptions, but I'll keep it like this for now :)
- }
+ public static void movement_1_14_R1(Player player) {
+ setupPacketHandler(player, false, "playerConnection", "networkManager", "channel");
}
/**
- * Packet handler for vehicle steering in versions 1.12-1.12.2
+ * Packet handler for vehicle steering in 1.13.2 and 1.13.1 (NMS version 1_13_R1 is not supported)
* @param player Player whose steering is being regarded
*/
- public static void movement_1_12(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- @Override
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- super.channelRead(channelHandlerContext, packet);
- if (packet instanceof net.minecraft.server.v1_12_R1.PacketPlayInSteerVehicle) {
- net.minecraft.server.v1_12_R1.PacketPlayInSteerVehicle ppisv = (net.minecraft.server.v1_12_R1.PacketPlayInSteerVehicle) packet;
- VehicleMovement1_12 movement = new VehicleMovement1_12();
- movement.vehicleMovement(player, ppisv);
- }
- }
- };
- Channel channel = null;
- try {
- channel = ((org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
- channel.pipeline()
- .addBefore("packet_handler", player.getName(), channelDuplexHandler);
- } catch (IllegalArgumentException e) { //in case of plugin reload, prevent duplicate handler name exception
- if (channel == null) {
- unexpectedException(e);
- return;
- }
- if (!channel.pipeline().names().contains(player.getName())) return;
- channel.pipeline().remove(player.getName());
- movement_1_16(player);
- } catch (NoSuchElementException e) {
- //It isn't good practice to ignore exceptions, but I'll keep it like this for now :)
- }
+ public static void movement_1_13_R2(Player player) {
+ setupPacketHandler(player, false, "playerConnection", "networkManager", "channel");
}
/**
- * Log an error message and disable the plugin.
+ * Packet handler for vehicle steering in versions 1.12-1.12.2
+ * @param player Player whose steering is being regarded
*/
- private static void unexpectedException(){
- Main.logSevere("An unexpected error occurred. Disabling the plugin...");
- Main.disablePlugin();
+ public static void movement_1_12_R1(Player player) {
+ setupPacketHandler(player, false, "playerConnection", "networkManager", "channel");
}
/**
@@ -914,32 +354,27 @@ private static void unexpectedException(Exception e){
public static boolean isObjectPacket(Object object) {
final String errorMessage = "An unexpected error occurred (given object is not a valid steering packet). Try reinstalling the plugin or contact the developer: https://discord.gg/vehicle";
- if (getServerVersion().is1_12()) {
- if (!(object instanceof net.minecraft.server.v1_12_R1.PacketPlayInSteerVehicle)) {
- Main.logSevere(errorMessage);
- return false;
- }
- } else if (getServerVersion().is1_13()) {
- if (!(object instanceof net.minecraft.server.v1_13_R2.PacketPlayInSteerVehicle)){
- Main.logSevere(errorMessage);
- return false;
- }
- } else if (getServerVersion().is1_15()) {
- if (!(object instanceof net.minecraft.server.v1_15_R1.PacketPlayInSteerVehicle)){
- Main.logSevere(errorMessage);
- return false;
- }
- } else if (getServerVersion().is1_16()) {
- if (!(object instanceof net.minecraft.server.v1_16_R3.PacketPlayInSteerVehicle)){
- Main.logSevere(errorMessage);
- return false;
+ try {
+ Class> steeringPacketClass;
+ if (getServerVersion().isOlderThan(ServerVersion.v1_17_R1)) {
+ String version = getServerVersion().name();
+ steeringPacketClass = Class.forName("net.minecraft.server." + version + ".PacketPlayInSteerVehicle");
+ } else if (getServerVersion().isOlderThan(ServerVersion.v26_1)) {
+ steeringPacketClass = Class.forName("net.minecraft.network.protocol.game.PacketPlayInSteerVehicle");
+ } else {
+ steeringPacketClass = Class.forName("net.minecraft.network.protocol.game.ServerboundPlayerInputPacket");
}
- } else if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_17)) {
- if (!(object instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle)){
+
+ if (!steeringPacketClass.isInstance(object)) {
Main.logSevere(errorMessage);
return false;
}
+ } catch (ClassNotFoundException e) {
+ Main.logSevere(errorMessage);
+ e.printStackTrace();
+ return false;
}
+
return true;
}
diff --git a/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java b/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java
index 44c8f030..7cf51ee9 100644
--- a/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java
+++ b/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java
@@ -13,7 +13,6 @@
import nl.mtvehicles.core.infrastructure.enums.*;
import nl.mtvehicles.core.infrastructure.modules.ConfigModule;
import nl.mtvehicles.core.infrastructure.modules.DependencyModule;
-import nl.mtvehicles.core.infrastructure.modules.VersionModule;
import nl.mtvehicles.core.infrastructure.utils.BossBarUtils;
import nl.mtvehicles.core.infrastructure.vehicle.VehicleData;
import nl.mtvehicles.core.infrastructure.vehicle.VehicleUtils;
@@ -167,7 +166,7 @@ public void vehicleMovement(Player player, Object packet) {
return;
}
- if ((boolean) ConfigModule.defaultConfig.get(DefaultConfig.Option.HEADLIGHTS_ENABLED) && getServerVersion().isNewerOrEqualTo(ServerVersion.v1_17)){headlightsEnabled = true;}
+ if ((boolean) ConfigModule.defaultConfig.get(DefaultConfig.Option.HEADLIGHTS_ENABLED) && getServerVersion().isNewerOrEqualTo(ServerVersion.v1_17_R1)){headlightsEnabled = true;}
schedulerRun(() -> {
@@ -695,46 +694,41 @@ protected void mainSeat() {
*/
@VersionSpecific
protected void teleportSeat(ArmorStand seat, Location loc){
- if (getServerVersion().is1_12()) teleportSeat(((org.bukkit.craftbukkit.v1_12_R1.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_13()) teleportSeat(((org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_15()) teleportSeat(((org.bukkit.craftbukkit.v1_15_R1.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_16()) teleportSeat(((org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_17()) teleportSeat(((org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_18_R1()) teleportSeat(((org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_18_R2()) teleportSeat(((org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_19()) teleportSeat(((org.bukkit.craftbukkit.v1_19_R1.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_19_R2()) teleportSeat(((org.bukkit.craftbukkit.v1_19_R2.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_19_R3()) teleportSeat(((org.bukkit.craftbukkit.v1_19_R3.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_20_R1()) teleportSeat(((org.bukkit.craftbukkit.v1_20_R1.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_20_R2()) teleportSeat(((org.bukkit.craftbukkit.v1_20_R2.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_20_R3()) teleportSeat(((org.bukkit.craftbukkit.v1_20_R3.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_20_R4()) teleportSeat(((org.bukkit.craftbukkit.v1_20_R4.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_21_R1()) teleportSeat(((org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_21_R2()) teleportSeat(((org.bukkit.craftbukkit.v1_21_R2.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_21_R3()) teleportSeat(((org.bukkit.craftbukkit.v1_21_R3.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_21_R4()) teleportSeat(((org.bukkit.craftbukkit.v1_21_R4.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_21_R5()) teleportSeat(((org.bukkit.craftbukkit.v1_21_R5.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- else if (getServerVersion().is1_21_R6()) teleportSeat(((org.bukkit.craftbukkit.v1_21_R6.entity.CraftEntity) seat).getHandle(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
- }
+ try {
+ ServerVersion version = getServerVersion();
+ String craftEntityClassName = "org.bukkit.craftbukkit." + version.name() + ".entity.CraftEntity";
+ if(version.isNewerOrEqualTo(ServerVersion.v26_1)) {
+ craftEntityClassName = "org.bukkit.craftbukkit.entity.CraftEntity";
+ }
+ Class> craftEntityClass = Class.forName(craftEntityClassName);
+ Method getHandleMethod = craftEntityClass.getMethod("getHandle");
+ Object handle = getHandleMethod.invoke(seat);
+
+ teleportSeat(handle, loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
/**
* Get the String name of the method for teleporting an ArmorStand. Changes between versions.
* @return Teleport method's name as String.
*/
@VersionSpecific
protected static String getTeleportMethod(){
- if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_18_R1)) return "a";
+ if (getServerVersion().isNewerOrEqualTo(ServerVersion.v26_1)) return "absSnapTo";
+ else if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_18_R1)) return "a";
else return "setLocation";
}
/**
* Teleport a seat to a desired location. The seat must already be specified as a CraftBukkit Entity.
* @param seat Seat's ArmorStand as a CraftBukkit Entity
- * @param x X-coordinate of the locatoin
- * @param y Y-coordinate of the locatoin
- * @param z Z-coordinate of the locatoin
- * @param yaw Yaw of the locatoin
- * @param pitch Pitch of the locatoin
+ * @param x X-coordinate of the location
+ * @param y Y-coordinate of the location
+ * @param z Z-coordinate of the location
+ * @param yaw Yaw of the location
+ * @param pitch Pitch of the location
*/
protected void teleportSeat(Object seat, double x, double y, double z, float yaw, float pitch){
schedulerRun(() -> {
@@ -938,29 +932,36 @@ protected Location getLocationOfBlockAhead(){
* @return True if player is jumping
*/
protected boolean steerIsJumping(){
- boolean isJumping = false;
try {
- if(getServerVersion().isOlderOrEqualTo(ServerVersion.v1_21_R1)){
-
+ ServerVersion version = getServerVersion();
+ Class> packetClass = packet.getClass();
+
+ if (version.isOlderOrEqualTo(ServerVersion.v1_21_R1)) {
String declaredMethod = "d";
- if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_20_R2) && getServerVersion().isOlderThan(ServerVersion.v1_20_R4)) {
+ if (version.isNewerOrEqualTo(ServerVersion.v1_20_R2) && version.isOlderThan(ServerVersion.v1_20_R4)) {
declaredMethod = "e";
- } else if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_20_R4)) {
+ } else if (version.isNewerOrEqualTo(ServerVersion.v1_20_R4)) {
declaredMethod = "f";
}
- Method method = packet.getClass().getDeclaredMethod(declaredMethod);
- isJumping = (Boolean) method.invoke(packet);
- } else { // 1_21_R2 and newer
- Object input = packet.getClass().getDeclaredMethod("b").invoke(packet);
-
- isJumping = (boolean) input.getClass().getDeclaredMethod("e").invoke(input);
+ Method method = packetClass.getDeclaredMethod(declaredMethod);
+ return (Boolean) method.invoke(packet);
}
-
+
+ String inputMethod = "b";
+ String jumpMethod = "e";
+
+ if (version.isNewerOrEqualTo(ServerVersion.v26_1)) {
+ inputMethod = "input";
+ jumpMethod = "jump";
+ }
+
+ Object input = packetClass.getDeclaredMethod(inputMethod).invoke(packet);
+ return (boolean) input.getClass().getDeclaredMethod(jumpMethod).invoke(input);
} catch (Exception e) {
e.printStackTrace();
}
- return isJumping;
+ return false;
}
/**
@@ -968,29 +969,42 @@ protected boolean steerIsJumping(){
* @return Rotation from the packet
*/
protected float steerGetXxa(){
- float Xxa = 0;
try {
- if(getServerVersion().isOlderOrEqualTo(ServerVersion.v1_21_R1)){
+ ServerVersion version = getServerVersion();
+ Class> packetClass = packet.getClass();
+
+ if (version.isOlderOrEqualTo(ServerVersion.v1_21_R1)) {
String declaredMethod = "b";
- if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_19_R3) && getServerVersion().isOlderThan(ServerVersion.v1_20_R4)) {
+ if (version.isNewerOrEqualTo(ServerVersion.v1_19_R3) && version.isOlderThan(ServerVersion.v1_20_R4)) {
declaredMethod = "a";
}
- Method method = packet.getClass().getDeclaredMethod(declaredMethod);
- Xxa = (float) method.invoke(packet);
- } else { // 1_21_R2 and newer
- Object input = packet.getClass().getDeclaredMethod("b").invoke(packet);
- if ((boolean) input.getClass().getDeclaredMethod("c").invoke(input)) {
- Xxa = 1;
- } else if ((boolean) input.getClass().getDeclaredMethod("d").invoke(input)) {
- Xxa = -1;
- }
+ Method method = packetClass.getDeclaredMethod(declaredMethod);
+ return (float) method.invoke(packet);
+ }
+
+ String inputMethod = "b";
+ String leftMethod = "c";
+ String rightMethod = "d";
+
+ if (version.isNewerOrEqualTo(ServerVersion.v26_1)) {
+ inputMethod = "input";
+ leftMethod = "left";
+ rightMethod = "right";
+ }
+
+ Object input = packetClass.getDeclaredMethod(inputMethod).invoke(packet);
+ if ((boolean) input.getClass().getDeclaredMethod(leftMethod).invoke(input)) {
+ return 1;
+ }
+ if ((boolean) input.getClass().getDeclaredMethod(rightMethod).invoke(input)) {
+ return -1;
}
} catch (Exception e) {
e.printStackTrace();
}
- return Xxa;
+ return 0;
}
/**
@@ -998,31 +1012,44 @@ protected float steerGetXxa(){
* @return Movement from the packet
*/
protected float steerGetZza(){
- float Zza = 0;
try {
- if(getServerVersion().isOlderOrEqualTo(ServerVersion.v1_21_R1)){
+ ServerVersion version = getServerVersion();
+ Class> packetClass = packet.getClass();
+
+ if (version.isOlderOrEqualTo(ServerVersion.v1_21_R1)) {
String declaredMethod = "c";
- if (VersionModule.getServerVersion().isNewerOrEqualTo(ServerVersion.v1_20_R2) && getServerVersion().isOlderThan(ServerVersion.v1_20_R4)) {
+ if (version.isNewerOrEqualTo(ServerVersion.v1_20_R2) && version.isOlderThan(ServerVersion.v1_20_R4)) {
declaredMethod = "d";
- } else if(getServerVersion().isNewerOrEqualTo(ServerVersion.v1_20_R4)){
+ } else if (version.isNewerOrEqualTo(ServerVersion.v1_20_R4)) {
declaredMethod = "e";
}
- Method method = packet.getClass().getDeclaredMethod(declaredMethod);
- Zza = (float) method.invoke(packet);
- } else { // 1_21_R2 and newer
- Object input = packet.getClass().getDeclaredMethod("b").invoke(packet);
- if ((boolean) input.getClass().getDeclaredMethod("a").invoke(input)) {
- Zza = 1;
- } else if ((boolean) input.getClass().getDeclaredMethod("b").invoke(input)) {
- Zza = -1;
- }
+ Method method = packetClass.getDeclaredMethod(declaredMethod);
+ return (float) method.invoke(packet);
+ }
+
+ String inputMethod = "b";
+ String forwardMethod = "a";
+ String backwardMethod = "b";
+
+ if (version.isNewerOrEqualTo(ServerVersion.v26_1)) {
+ inputMethod = "input";
+ forwardMethod = "forward";
+ backwardMethod = "backward";
+ }
+
+ Object input = packetClass.getDeclaredMethod(inputMethod).invoke(packet);
+ if ((boolean) input.getClass().getDeclaredMethod(forwardMethod).invoke(input)) {
+ return 1;
+ }
+ if ((boolean) input.getClass().getDeclaredMethod(backwardMethod).invoke(input)) {
+ return -1;
}
} catch (Exception e) {
e.printStackTrace();
}
- return Zza;
+ return 0;
}
/**
@@ -1035,7 +1062,7 @@ protected void spawnParticles(ArmorStand stand, Location loc){
stand.getWorld().spawnParticle(Particle.EXPLOSION_LARGE, loc, 2);
stand.getWorld().spawnParticle(Particle.EXPLOSION_NORMAL, loc, 2);
stand.getWorld().spawnParticle(Particle.FIREWORKS_SPARK, loc, 5);
- if (!getServerVersion().isOlderOrEqualTo(ServerVersion.v1_13))
+ if (!getServerVersion().isOlderOrEqualTo(ServerVersion.v1_13_R2))
stand.getWorld().spawnParticle(Particle.CAMPFIRE_COSY_SMOKE, loc, 5);
}
@@ -1083,7 +1110,7 @@ private void addAndRemoveLight() {
Location loc = new Location(standMain.getWorld(), xvp, standMain.getLocation().getY() + yOffset, zvp, fbvp.getYaw(), fbvp.getPitch());
if(loc.getBlock().getType().equals(Material.AIR)){
- loc.getBlock().setType(Material.LIGHT);
+ loc.getBlock().setType(Material.getMaterial("LIGHT"));
Bukkit.getScheduler().runTaskLater(instance, () -> loc.getBlock().setType(Material.AIR), 10L);
}
}