aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'bukkit/src/main/java')
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java14
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler11.java34
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java39
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java2
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java56
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingFishingTaskType.java6
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java14
8 files changed, 146 insertions, 27 deletions
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 5d383dbf..bdfa513e 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
@@ -15,10 +15,22 @@ public interface VersionSpecificHandler {
boolean isPlayerGliding(Player player);
- boolean isPlayerOnStrider(Player player);
+ boolean isPlayerOnCamel(Player player);
+
+ boolean isPlayerOnDonkey(Player player);
boolean isPlayerOnHorse(Player player);
+ boolean isPlayerOnLlama(Player player);
+
+ boolean isPlayerOnMule(Player player);
+
+ boolean isPlayerOnSkeletonHorse(Player player);
+
+ boolean isPlayerOnStrider(Player player);
+
+ boolean isPlayerOnZombieHorse(Player player);
+
boolean isOffHandSwap(ClickType clickType);
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
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 4772a521..3fe31a0b 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,7 +1,12 @@
package com.leonardobishop.quests.bukkit.hook.versionspecific;
-import org.bukkit.entity.AbstractHorse;
+import org.bukkit.entity.Donkey;
+import org.bukkit.entity.Horse;
+import org.bukkit.entity.Llama;
+import org.bukkit.entity.Mule;
import org.bukkit.entity.Player;
+import org.bukkit.entity.SkeletonHorse;
+import org.bukkit.entity.ZombieHorse;
public class VersionSpecificHandler11 extends VersionSpecificHandler9 implements VersionSpecificHandler {
@@ -11,7 +16,32 @@ public class VersionSpecificHandler11 extends VersionSpecificHandler9 implements
}
@Override
+ public boolean isPlayerOnDonkey(Player player) {
+ return player.getVehicle() instanceof Donkey;
+ }
+
+ @Override
public boolean isPlayerOnHorse(Player player) {
- return player.getVehicle() instanceof AbstractHorse;
+ return player.getVehicle() instanceof Horse;
+ }
+
+ @Override
+ public boolean isPlayerOnLlama(Player player) {
+ return player.getVehicle() instanceof Llama;
+ }
+
+ @Override
+ public boolean isPlayerOnMule(Player player) {
+ return player.getVehicle() instanceof Mule;
+ }
+
+ @Override
+ public boolean isPlayerOnSkeletonHorse(Player player) {
+ return player.getVehicle() instanceof SkeletonHorse;
+ }
+
+ @Override
+ public boolean isPlayerOnZombieHorse(Player player) {
+ return player.getVehicle() instanceof ZombieHorse;
}
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java
index e27a1652..d99d8646 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler20.java
@@ -1,5 +1,7 @@
package com.leonardobishop.quests.bukkit.hook.versionspecific;
+import org.bukkit.entity.Camel;
+import org.bukkit.entity.Player;
import org.bukkit.event.inventory.SmithItemEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.Recipe;
@@ -7,6 +9,12 @@ import org.bukkit.inventory.SmithingTransformRecipe;
import org.bukkit.inventory.SmithingTrimRecipe;
public class VersionSpecificHandler20 extends VersionSpecificHandler17 implements VersionSpecificHandler {
+
+ @Override
+ public boolean isPlayerOnCamel(Player player) {
+ return player.getVehicle() instanceof Camel;
+ }
+
@Override
public ItemStack[] getSmithItems(SmithItemEvent event) {
return new ItemStack[]{
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 f2417250..6d08140d 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
@@ -24,13 +24,48 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler {
}
@Override
- public boolean isPlayerOnStrider(Player player) {
+ public boolean isPlayerOnCamel(Player player) {
return false;
}
+ @SuppressWarnings("deprecation")
+ @Override
+ public boolean isPlayerOnDonkey(Player player) {
+ return player.getVehicle() instanceof Horse horse && horse.getVariant() == Horse.Variant.DONKEY;
+ }
+
+ @SuppressWarnings("deprecation")
@Override
public boolean isPlayerOnHorse(Player player) {
- return player.getVehicle() instanceof Horse;
+ return player.getVehicle() instanceof Horse horse && horse.getVariant() == Horse.Variant.HORSE;
+ }
+
+ @Override
+ public boolean isPlayerOnLlama(Player player) {
+ return false;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public boolean isPlayerOnMule(Player player) {
+ return player.getVehicle() instanceof Horse horse && horse.getVariant() == Horse.Variant.MULE;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public boolean isPlayerOnSkeletonHorse(Player player) {
+ return player.getVehicle() instanceof Horse horse && horse.getVariant() == Horse.Variant.SKELETON_HORSE;
+ }
+
+ @Override
+ public boolean isPlayerOnStrider(Player player) {
+ return false;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public boolean isPlayerOnZombieHorse(Player player) {
+ return player.getVehicle() instanceof Horse horse && horse.getVariant() == Horse.Variant.UNDEAD_HORSE;
}
@Override
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java
index 0c49559a..ecf74142 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/CommandTaskType.java
@@ -52,7 +52,7 @@ public final class CommandTaskType extends BukkitTaskType {
boolean ignoreCase = TaskUtils.getConfigBoolean(task, "ignore-case");
- if (!TaskUtils.matchString(this, pendingTask, message,player.getUniqueId(), "command", "commands", false, "command-match-mode", ignoreCase)) {
+ if (!TaskUtils.matchString(this, pendingTask, message, player.getUniqueId(), "command", "commands", false, "command-match-mode", ignoreCase)) {
super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId());
continue;
}
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 880c8656..b97d6370 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
@@ -33,12 +33,16 @@ public final class WalkingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "distance"));
super.addConfigValidator(TaskUtils.useAcceptedValuesConfigValidator(this, Arrays.asList(
"boat",
- "horse",
+ "camel",
"donkey",
+ "horse",
"llama",
- "pig",
"minecart",
+ "mule",
+ "pig",
+ "skeleton_horse",
"strider",
+ "zombie_horse",
"sneaking",
"walking",
"running",
@@ -115,26 +119,52 @@ public final class WalkingTaskType extends BukkitTaskType {
private boolean validateMode(Player player, String mode) {
return switch (mode) {
+ // Vehicles
case "boat" -> player.getVehicle() instanceof Boat;
+ case "camel" -> plugin.getVersionSpecificHandler().isPlayerOnCamel(player);
+ case "donkey" -> plugin.getVersionSpecificHandler().isPlayerOnDonkey(player);
case "horse" -> plugin.getVersionSpecificHandler().isPlayerOnHorse(player);
- case "donkey" -> player.getVehicle() instanceof Donkey;
- case "llama" -> player.getVehicle() instanceof Llama;
- case "pig" -> player.getVehicle() instanceof Pig;
+ case "llama" -> plugin.getVersionSpecificHandler().isPlayerOnLlama(player);
case "minecart" -> player.getVehicle() instanceof RideableMinecart;
+ case "mule" -> plugin.getVersionSpecificHandler().isPlayerOnMule(player);
+ case "pig" -> player.getVehicle() instanceof Pig;
+ case "skeleton_horse" -> plugin.getVersionSpecificHandler().isPlayerOnSkeletonHorse(player);
case "strider" -> plugin.getVersionSpecificHandler().isPlayerOnStrider(player);
- case "sneaking" -> // sprinting does not matter
+ case "zombie_horse" -> plugin.getVersionSpecificHandler().isPlayerOnZombieHorse(player);
+
+ // Player movement
+ case "sneaking" ->
+ // player must be sneaking; cannot be swimming, flying and
+ // gliding because sneaking is used to control the height;
+ // we ignore sprinting and it shouldn't affect sneaking
player.isSneaking() && !player.isSwimming() && !player.isFlying()
&& !plugin.getVersionSpecificHandler().isPlayerGliding(player);
case "walking" ->
+ // player cannot be doing anything special as we want the
+ // other actions to be counted towards other task modes
!player.isSneaking() && !player.isSwimming() && !player.isSprinting() && !player.isFlying()
&& !plugin.getVersionSpecificHandler().isPlayerGliding(player);
- case "running" -> !player.isSneaking() && !player.isSwimming() && player.isSprinting() && !player.isFlying()
- && !plugin.getVersionSpecificHandler().isPlayerGliding(player);
- case "swimming" -> // sprinting and sneaking do not matter, flying is not possible
- player.isSwimming() && !plugin.getVersionSpecificHandler().isPlayerGliding(player);
- case "flying" -> // if the player is flying then the player is flying
- player.isFlying();
- case "elytra" -> // if the player is gliding then the player is gliding
+ case "running" ->
+ // player must be sprinting; cannot be sneaking as it makes
+ // running impossible; running and swimming at once is possible
+ // but it's not real running so we ignore it; we ignore flying
+ // as it's definitely not running; running and gliding at once
+ // is not possible so we ignore it as well
+ !player.isSneaking() && !player.isSwimming() && player.isSprinting() && !player.isFlying()
+ && !plugin.getVersionSpecificHandler().isPlayerGliding(player);
+ case "swimming" ->
+ // sprinting and sneaking is possible with swimming at once
+ // so we ignore it but not gliding as it's a bit different
+ player.isSwimming()
+ && !plugin.getVersionSpecificHandler().isPlayerGliding(player);
+ case "flying" ->
+ // sprinting and sneaking is possible with flying at once
+ // so we ignore it but not gliding as it's a bit different
+ player.isFlying()
+ && !plugin.getVersionSpecificHandler().isPlayerGliding(player);
+ case "elytra" ->
+ // we can safely ignore any other actions here as there is
+ // really no better way to detect flying with elytra
plugin.getVersionSpecificHandler().isPlayerGliding(player);
default -> false;
};
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingFishingTaskType.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingFishingTaskType.java
index bf65f800..a7b1c1cc 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingFishingTaskType.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/dependent/CustomFishingFishingTaskType.java
@@ -26,6 +26,8 @@ public final class CustomFishingFishingTaskType extends BukkitTaskType {
super.addConfigValidator(TaskUtils.useRequiredConfigValidator(this, "amount"));
super.addConfigValidator(TaskUtils.useIntegerConfigValidator(this, "amount"));
+ super.addConfigValidator(TaskUtils.useEnumConfigValidator(this, TaskUtils.StringMatchMode.class, "loot-match-mode"));
+ super.addConfigValidator(TaskUtils.useEnumConfigValidator(this, TaskUtils.StringMatchMode.class, "group-match-mode"));
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
@@ -63,12 +65,12 @@ public final class CustomFishingFishingTaskType extends BukkitTaskType {
super.debug("Player caught loot id " + id + " groups " + groupsAsString, quest.getId(), task.getId(), player.getUniqueId());
- if (!TaskUtils.matchString(this, pendingTask, id, player.getUniqueId(), "loot", "loots", false, false)) {
+ if (!TaskUtils.matchString(this, pendingTask, id, player.getUniqueId(), "loot", "loots", false, "loot-match-mode", false)) {
super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId());
continue;
}
- if (!TaskUtils.matchAnyString(this, pendingTask, groups, player.getUniqueId(), "group", "groups", false, false)) {
+ if (!TaskUtils.matchAnyString(this, pendingTask, groups, player.getUniqueId(), "group", "groups", false, "group-match-mode", false)) {
super.debug("Continuing...", quest.getId(), task.getId(), player.getUniqueId());
continue;
}
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
index dfcbdcef..a2e76e11 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java
@@ -550,7 +550,7 @@ public class TaskUtils {
return false;
}
- public static boolean matchAnyString(@NotNull BukkitTaskType type, @NotNull PendingTask pendingTask, @NotNull String @Nullable [] strings, @NotNull UUID player, final @NotNull String stringKey, final @NotNull String listKey, boolean legacyColor, boolean ignoreCase) {
+ public static boolean matchAnyString(@NotNull BukkitTaskType type, @NotNull PendingTask pendingTask, @NotNull String @Nullable [] strings, @NotNull UUID player, final @NotNull String stringKey, final @NotNull String listKey, boolean legacyColor, @NotNull String matchModeKey, boolean ignoreCase) {
Task task = pendingTask.task;
List<String> checkNames = TaskUtils.getConfigStringList(task, task.getConfigValues().containsKey(stringKey) ? stringKey : listKey);
@@ -584,12 +584,14 @@ public class TaskUtils {
for (String name : checkNames) {
type.debug("Checking against name " + name, pendingTask.quest.getId(), task.getId(), player);
- if (matchMode.matchesAny(strings, name, ignoreCase)) {
- type.debug("Name match", pendingTask.quest.getId(), task.getId(), player);
- return true;
- } else {
- type.debug("Name mismatch", pendingTask.quest.getId(), task.getId(), player);
+ for (String string : strings) {
+ if (matchMode.matches(string, name, ignoreCase)) {
+ type.debug("Name match", pendingTask.quest.getId(), task.getId(), player);
+ return true;
+ }
}
+
+ type.debug("Name mismatch", pendingTask.quest.getId(), task.getId(), player);
}
return false;