aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler.java8
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler21.java17
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler8.java5
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/tasktype/type/WalkingTaskType.java31
-rw-r--r--docs/task-types/walking-(task-type).md10
5 files changed, 65 insertions, 6 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 dacca889..48189513 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
@@ -16,6 +16,7 @@ import org.bukkit.entity.HappyGhast;
import org.bukkit.entity.Horse;
import org.bukkit.entity.Llama;
import org.bukkit.entity.Mule;
+import org.bukkit.entity.Nautilus;
import org.bukkit.entity.Player;
import org.bukkit.entity.SkeletonHorse;
import org.bukkit.entity.Strider;
@@ -112,6 +113,13 @@ public interface VersionSpecificHandler {
boolean isPlayerOnMule(Player player);
/**
+ * Nautiluses were introduced in {@code 1.21.11}.
+ *
+ * @see Nautilus
+ */
+ boolean isPlayerOnNautilus(Player player);
+
+ /**
* Skeleton horses were introduced in {@code 1.6.1}.
*
* <p>
diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler21.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler21.java
index ba9b47ce..6cb5e9e7 100644
--- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler21.java
+++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler21.java
@@ -2,6 +2,7 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific;
import com.leonardobishop.quests.bukkit.util.CompatUtils;
import org.bukkit.entity.HappyGhast;
+import org.bukkit.entity.Nautilus;
import org.bukkit.entity.Player;
import java.util.function.Predicate;
@@ -11,6 +12,9 @@ public class VersionSpecificHandler21 extends VersionSpecificHandler20 implement
// Introduced in 1.21.6
private static final Predicate<Player> HAPPY_GHAST_PREDICATE;
+ // Introduced in 1.21.11
+ private static final Predicate<Player> NAUTILUS_PREDICATE;
+
static {
if (CompatUtils.classExists("org.bukkit.entity.HappyGhast")) {
HAPPY_GHAST_PREDICATE = player -> player.getVehicle() instanceof HappyGhast;
@@ -19,6 +23,14 @@ public class VersionSpecificHandler21 extends VersionSpecificHandler20 implement
}
}
+ static {
+ if (CompatUtils.classExists("org.bukkit.entity.Nautilus")) {
+ NAUTILUS_PREDICATE = player -> player.getVehicle() instanceof Nautilus;
+ } else {
+ NAUTILUS_PREDICATE = player -> Boolean.FALSE;
+ }
+ }
+
@Override
public int getMinecraftVersion() {
return 21;
@@ -28,4 +40,9 @@ public class VersionSpecificHandler21 extends VersionSpecificHandler20 implement
public boolean isPlayerOnHappyGhast(Player player) {
return HAPPY_GHAST_PREDICATE.test(player);
}
+
+ @Override
+ public boolean isPlayerOnNautilus(Player player) {
+ return NAUTILUS_PREDICATE.test(player);
+ }
}
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 55ab69ba..06657cb4 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
@@ -69,6 +69,11 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler {
return player.getVehicle() instanceof Horse horse && horse.getVariant() == Horse.Variant.MULE;
}
+ @Override
+ public boolean isPlayerOnNautilus(Player player) {
+ return false;
+ }
+
@SuppressWarnings("deprecation")
@Override
public boolean isPlayerOnSkeletonHorse(Player player) {
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 93191d71..e101783a 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
@@ -127,6 +127,7 @@ public final class WalkingTaskType extends BukkitTaskType {
case LLAMA -> this.plugin.getVersionSpecificHandler().isPlayerOnLlama(player);
case MINECART -> player.getVehicle() instanceof RideableMinecart;
case MULE -> this.plugin.getVersionSpecificHandler().isPlayerOnMule(player);
+ case NAUTILUS -> this.plugin.getVersionSpecificHandler().isPlayerOnNautilus(player);
case PIG -> player.getVehicle() instanceof Pig;
case SKELETON_HORSE -> this.plugin.getVersionSpecificHandler().isPlayerOnSkeletonHorse(player);
case STRIDER -> this.plugin.getVersionSpecificHandler().isPlayerOnStrider(player);
@@ -166,6 +167,26 @@ public final class WalkingTaskType extends BukkitTaskType {
// we can safely ignore any other actions here as there is
// really no better way to detect flying with elytra
!player.isInsideVehicle() && this.plugin.getVersionSpecificHandler().isPlayerGliding(player);
+
+ // Grouped
+ case GROUND ->
+ // player is sneaking, walking or running
+ !player.isInsideVehicle() && !player.isSwimming() && !player.isFlying()
+ && !this.plugin.getVersionSpecificHandler().isPlayerGliding(player);
+ case MANUAL_NO_FLIGHT ->
+ // player is sneaking, walking, running, or swimming
+ !player.isInsideVehicle() && !player.isFlying()
+ && !this.plugin.getVersionSpecificHandler().isPlayerGliding(player);
+ case MANUAL_NO_SWIM ->
+ // player is sneaking, walking, running, or flying (creative or elytra)
+ !player.isInsideVehicle() && (!player.isSwimming() || player.isFlying()
+ || this.plugin.getVersionSpecificHandler().isPlayerGliding(player));
+ case MANUAL ->
+ // player is sneaking, walking, running, swimming or flying (creative or elytra)
+ !player.isInsideVehicle();
+ case VEHICLE ->
+ // player is in any vehicle
+ player.isInsideVehicle();
};
}
@@ -179,6 +200,7 @@ public final class WalkingTaskType extends BukkitTaskType {
LLAMA,
MINECART,
MULE,
+ NAUTILUS,
PIG,
SKELETON_HORSE,
STRIDER,
@@ -190,7 +212,14 @@ public final class WalkingTaskType extends BukkitTaskType {
RUNNING,
SWIMMING,
FLYING,
- ELYTRA;
+ ELYTRA,
+
+ // Grouped
+ GROUND, // walking, running, sneaking
+ MANUAL_NO_FLIGHT, // walking, running, sneaking, swimming
+ MANUAL_NO_SWIM, // walking, running, sneaking, flying
+ MANUAL, // walking, running, sneaking, swimming, flying
+ VEHICLE; // any vehicle
private static final Map<String, Mode> STRING_MODE_MAP = new HashMap<>() {{
for (final Mode mode : Mode.values()) {
diff --git a/docs/task-types/walking-(task-type).md b/docs/task-types/walking-(task-type).md
index 7f5e62fa..c5119066 100644
--- a/docs/task-types/walking-(task-type).md
+++ b/docs/task-types/walking-(task-type).md
@@ -13,11 +13,11 @@ Walk a set distance.
## Options
-| Key | Description | Type | Required | Default | Notes |
-|------------|-------------------------------------------------|---------------------|----------|---------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| `distance` | The distance in metres to walk. | Integer | Yes | \- | 1 metre is equivalent to 1 block. |
-| `mode` | The specific mode to travel | String | No | \- | One of: `boat`, `camel`, `donkey`, `happy_ghast`, `horse`, `llama`, `minecart`, `mule`, `pig`, `skeleton_horse`, `strider`, `zombie_horse`, `sneaking`, `walking`, `running`, `swimming`, `flying`, `elytra`. Not specifying a mode will allow any of these modes to count. |
-| `worlds` | Worlds which should count towards the progress. | List of world names | No | \- | \- |
+| Key | Description | Type | Required | Default | Notes |
+|------------|-------------------------------------------------|---------------------|----------|---------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| `distance` | The distance in metres to walk. | Integer | Yes | \- | 1 metre is equivalent to 1 block. |
+| `mode` | The specific mode to travel | String | No | \- | One of: `boat`, `camel`, `donkey`, `happy_ghast`, `horse`, `llama`, `minecart`, `mule`, `nautilus` `pig`, `skeleton_horse`, `strider`, `zombie_horse`, `sneaking`, `walking`, `running`, `swimming`, `flying`, `elytra`. Alternatively one of groups: `ground`, `manual_no_flight`, `manual_no_swim`, `manual` or `vehicle`. Not specifying a mode will allow any of these modes to count. |
+| `worlds` | Worlds which should count towards the progress. | List of world names | No | \- | \- |
## Examples