aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src/main')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java4
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java29
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler12.java18
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java18
7 files changed, 75 insertions, 11 deletions
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
index 74f31be1..21afa14f 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java
@@ -38,6 +38,7 @@ import com.leonardobishop.quests.bukkit.hook.vault.AbstractVaultHook;
import com.leonardobishop.quests.bukkit.hook.vault.VaultHook;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler11;
+import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler12;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler16;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler17;
import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler20;
@@ -351,7 +352,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests {
} else {
this.versionSpecificHandler = switch (version) {
case 9, 10 -> new VersionSpecificHandler9();
- case 11, 12, 13, 14, 15 -> new VersionSpecificHandler11();
+ case 11 -> new VersionSpecificHandler11();
+ case 12, 13, 14, 15 -> new VersionSpecificHandler12();
case 16 -> new VersionSpecificHandler16();
case 17, 18, 19 -> new VersionSpecificHandler17();
default -> new VersionSpecificHandler20();
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
index 4dd299d6..2f1cee23 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java
@@ -27,6 +27,8 @@ import org.bukkit.inventory.SmithingInventory;
import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.inventory.SmithingTrimRecipe;
+import java.util.List;
+
/**
* Interface used for implementing version-specific features.
* All information about changes in the API should be documented HERE in the method docs.
@@ -219,4 +221,9 @@ public interface VersionSpecificHandler {
* <a href="https://github.com/LMBishop/Quests/issues/787">Reason behind moving it to a version specific handler</a>
*/
int removeItem(Inventory inventory, int slot, int amountToRemove);
+
+ /**
+ * {@link Entity#getPassengers()} method was introduced in {@code 1.11.2}.
+ */
+ List<Entity> getPassengers(final Entity entity);
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java
index 0563d2cb..53e0c86a 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java
@@ -1,6 +1,7 @@
package com.leonardobishop.quests.bukkit.hook.versionspecific;
import org.bukkit.entity.Donkey;
+import org.bukkit.entity.Entity;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Llama;
import org.bukkit.entity.Mule;
@@ -10,8 +11,22 @@ import org.bukkit.entity.ZombieHorse;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+
public class VersionSpecificHandler11 extends VersionSpecificHandler9 implements VersionSpecificHandler {
+ private static Method getPassengersMethod;
+
+ static {
+ try {
+ getPassengersMethod = Entity.class.getMethod("getPassengers");
+ } catch (final NoSuchMethodException e) {
+ // server version cannot support the method (doesn't work on 1.11, 1.11.1)
+ }
+ }
+
@Override
public int getMinecraftVersion() {
return 11;
@@ -61,4 +76,18 @@ public class VersionSpecificHandler11 extends VersionSpecificHandler9 implements
return amountInStack - newAmountInStack;
}
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public List<Entity> getPassengers(Entity entity) {
+ if (getPassengersMethod == null) {
+ return super.getPassengers(entity);
+ }
+
+ try {
+ return (List<Entity>) getPassengersMethod.invoke(entity);
+ } catch (InvocationTargetException | IllegalAccessException e) {
+ throw new IllegalStateException("Entity#getPassengers invocation failed", e);
+ }
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler12.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler12.java
new file mode 100644
index 00000000..b887c01c
--- /dev/null
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler12.java
@@ -0,0 +1,18 @@
+package com.leonardobishop.quests.bukkit.hook.versionspecific;
+
+import org.bukkit.entity.Entity;
+
+import java.util.List;
+
+public class VersionSpecificHandler12 extends VersionSpecificHandler11 implements VersionSpecificHandler {
+
+ @Override
+ public int getMinecraftVersion() {
+ return 12;
+ }
+
+ @Override
+ public List<Entity> getPassengers(Entity entity) {
+ return entity.getPassengers();
+ }
+}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java
index 9865a3d2..d4cb1350 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler16.java
@@ -8,7 +8,7 @@ import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
-public class VersionSpecificHandler16 extends VersionSpecificHandler11 implements VersionSpecificHandler {
+public class VersionSpecificHandler16 extends VersionSpecificHandler12 implements VersionSpecificHandler {
@Override
public int getMinecraftVersion() {
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
index d333b5f1..1ee9a989 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java
@@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import java.util.HashMap;
+import java.util.List;
public class VersionSpecificHandler8 implements VersionSpecificHandler {
@@ -182,4 +183,11 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler {
return amountInStack - newAmountInStack;
}
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public List<Entity> getPassengers(Entity entity) {
+ final Entity passenger = entity.getPassenger();
+ return passenger != null ? List.of(passenger) : List.of();
+ }
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java
index 54870e05..9b540fda 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java
@@ -40,10 +40,10 @@ public final class WalkingTaskType extends BukkitTaskType {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onPlayerMove(PlayerMoveEvent event) {
- final Location from = event.getFrom();
- final Location to = event.getTo();
+ Location from = event.getFrom();
+ Location to = event.getTo();
- final int distance = Math.abs(to.getBlockX() - from.getBlockX()) + Math.abs(to.getBlockZ() - from.getBlockZ());
+ int distance = Math.abs(to.getBlockX() - from.getBlockX()) + Math.abs(to.getBlockZ() - from.getBlockZ());
if (distance == 0) {
return;
}
@@ -58,17 +58,17 @@ public final class WalkingTaskType extends BukkitTaskType {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onVehicleMove(VehicleMoveEvent event) {
- final Location from = event.getFrom();
- final Location to = event.getTo();
+ Location from = event.getFrom();
+ Location to = event.getTo();
- final int distance = Math.abs(to.getBlockX() - from.getBlockX()) + Math.abs(to.getBlockZ() - from.getBlockZ());
+ int distance = Math.abs(to.getBlockX() - from.getBlockX()) + Math.abs(to.getBlockZ() - from.getBlockZ());
if (distance == 0) {
return;
}
- List<Entity> entities = event.getVehicle().getPassengers();
- for (Entity entity : entities) {
- if (entity instanceof Player player) {
+ List<Entity> passengers = this.plugin.getVersionSpecificHandler().getPassengers(event.getVehicle());
+ for (Entity passenger : passengers) {
+ if (passenger instanceof Player player) {
handle(player, distance);
}
}