diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index c597cb5a..7214997e 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -229,6 +229,12 @@
1.21.10-R0.1-SNAPSHOT
provided
+
+ org.spigotmc....................
+ spigot
+ 1.21.11-R0.1-SNAPSHOT
+ provided
+
org.projectlombok
lombok
@@ -244,13 +250,13 @@
me.clip
placeholderapi
- 2.11.6
+ 2.11.7
provided
com.github.SkriptLang
Skript
- 2.12.0
+ 2.13.2
provided
diff --git a/pom.xml b/pom.xml
index 366ed675..d1564524 100644
--- a/pom.xml
+++ b/pom.xml
@@ -184,6 +184,12 @@
1.21.10-R0.1-SNAPSHOT
provided
+
+ org.spigotmc....................
+ spigot
+ 1.21.11-R0.1-SNAPSHOT
+ provided
+
org.jetbrains
annotations
@@ -199,7 +205,7 @@
de.tr7zw
item-nbt-api
- 2.15.3-SNAPSHOT
+ 2.15.5
@@ -216,13 +222,13 @@
me.clip
placeholderapi
- 2.11.6
+ 2.11.7
provided
com.github.SkriptLang
Skript
- 2.12.0
+ 2.13.2
provided
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..2dd910a0 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,178 @@
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.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.8
+ */
+ v1_21_R7(PacketHandler::movement_1_21_R7);
- 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..d0930265 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,194 @@ 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) {
+ 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.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;
}
- 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.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", "1.21.11",
+ "v1_21_R7", "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"
);
-
- //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) {
+ serverVersionString = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
}
}
@@ -216,18 +236,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/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..812832dd 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,158 @@
@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.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";
+ 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 1.21.11
+ *
* @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_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 +180,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 +188,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 +196,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 +212,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 +220,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 +236,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 +244,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 +260,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 +268,47 @@ 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)
* @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_13_R2(Player player) {
+ setupPacketHandler(player, false, "playerConnection", "networkManager", "channel");
}
/**
* Packet handler for vehicle steering in versions 1.12-1.12.2
* @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 :)
- }
- }
-
- /**
- * Log an error message and disable the plugin.
- */
- 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,27 +331,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 (getServerVersion() == ServerVersion.v1_12_R1) {
if (!(object instanceof net.minecraft.server.v1_12_R1.PacketPlayInSteerVehicle)) {
Main.logSevere(errorMessage);
return false;
}
- } else if (getServerVersion().is1_13()) {
+ } else if (getServerVersion() == ServerVersion.v1_13_R2) {
if (!(object instanceof net.minecraft.server.v1_13_R2.PacketPlayInSteerVehicle)){
Main.logSevere(errorMessage);
return false;
}
- } else if (getServerVersion().is1_15()) {
+ } else if (getServerVersion() == ServerVersion.v1_15_R1) {
if (!(object instanceof net.minecraft.server.v1_15_R1.PacketPlayInSteerVehicle)){
Main.logSevere(errorMessage);
return false;
}
- } else if (getServerVersion().is1_16()) {
+ } else if (getServerVersion() == ServerVersion.v1_16_R3) {
if (!(object instanceof net.minecraft.server.v1_16_R3.PacketPlayInSteerVehicle)){
Main.logSevere(errorMessage);
return false;
}
- } else if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_17)) {
+ } else if (getServerVersion().isNewerOrEqualTo(ServerVersion.v1_17_R1)) {
if (!(object instanceof net.minecraft.network.protocol.game.PacketPlayInSteerVehicle)){
Main.logSevere(errorMessage);
return false;
diff --git a/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java b/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java
index 44c8f030..5268e20a 100644
--- a/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java
+++ b/src/main/java/nl/mtvehicles/core/movement/VehicleMovement.java
@@ -167,7 +167,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,26 +695,18 @@ 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 {
+ String version = getServerVersion().name();
+ String craftEntityClassName = "org.bukkit.craftbukkit." + version + ".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();
+ }
}
/**
@@ -1035,7 +1027,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);
}