diff options
8 files changed, 60 insertions, 13 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 a08fb4f0..eb5a2cf0 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -42,6 +42,7 @@ import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHand import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler16; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler17; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler20; +import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler21; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler8; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler9; import com.leonardobishop.quests.bukkit.hook.wildstacker.AbstractWildStackerHook; @@ -358,7 +359,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { case 12, 13, 14, 15 -> new VersionSpecificHandler12(); case 16 -> new VersionSpecificHandler16(); case 17, 18, 19 -> new VersionSpecificHandler17(); - default -> new VersionSpecificHandler20(); + case 20 -> new VersionSpecificHandler20(); + default -> new VersionSpecificHandler21(); }; } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java index ec0142b2..7aba3481 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/config/BukkitQuestsLoader.java @@ -46,10 +46,8 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; 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 2f1cee23..f6f5b628 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 @@ -7,6 +7,7 @@ import org.bukkit.entity.Camel; import org.bukkit.entity.Donkey; import org.bukkit.entity.Entity; import org.bukkit.entity.Goat; +import org.bukkit.entity.HappyGhast; import org.bukkit.entity.Horse; import org.bukkit.entity.Llama; import org.bukkit.entity.Mule; @@ -66,6 +67,13 @@ public interface VersionSpecificHandler { boolean isPlayerOnDonkey(Player player); /** + * Happy Ghasts were introduced in {@code 1.21.6}. + * + * @see HappyGhast + */ + boolean isPlayerOnHappyGhast(Player player); + + /** * Horses were introduced in {@code 1.6.1}. * * <p> 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 d4cb1350..b6cb6660 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 @@ -1,7 +1,7 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; +import org.bukkit.entity.Strider; import org.bukkit.event.inventory.ClickType; import org.bukkit.event.inventory.SmithItemEvent; import org.bukkit.inventory.EquipmentSlot; @@ -17,7 +17,7 @@ public class VersionSpecificHandler16 extends VersionSpecificHandler12 implement @Override public boolean isPlayerOnStrider(Player player) { - return player.getVehicle() != null && player.getVehicle().getType() == EntityType.STRIDER; + return player.getVehicle() instanceof Strider; } @Override 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 new file mode 100644 index 00000000..ba9b47ce --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler21.java @@ -0,0 +1,31 @@ +package com.leonardobishop.quests.bukkit.hook.versionspecific; + +import com.leonardobishop.quests.bukkit.util.CompatUtils; +import org.bukkit.entity.HappyGhast; +import org.bukkit.entity.Player; + +import java.util.function.Predicate; + +public class VersionSpecificHandler21 extends VersionSpecificHandler20 implements VersionSpecificHandler { + + // Introduced in 1.21.6 + private static final Predicate<Player> HAPPY_GHAST_PREDICATE; + + static { + if (CompatUtils.classExists("org.bukkit.entity.HappyGhast")) { + HAPPY_GHAST_PREDICATE = player -> player.getVehicle() instanceof HappyGhast; + } else { + HAPPY_GHAST_PREDICATE = player -> Boolean.FALSE; + } + } + + @Override + public int getMinecraftVersion() { + return 21; + } + + @Override + public boolean isPlayerOnHappyGhast(Player player) { + return HAPPY_GHAST_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 1ee9a989..74e7deb9 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 @@ -40,6 +40,11 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler { return player.getVehicle() instanceof Horse horse && horse.getVariant() == Horse.Variant.DONKEY; } + @Override + public boolean isPlayerOnHappyGhast(Player player) { + return false; + } + @SuppressWarnings("deprecation") @Override public boolean isPlayerOnHorse(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 137189de..93191d71 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 @@ -9,7 +9,10 @@ import com.leonardobishop.quests.common.player.questprogressfile.TaskProgress; import com.leonardobishop.quests.common.quest.Quest; import com.leonardobishop.quests.common.quest.Task; import org.bukkit.Location; -import org.bukkit.entity.*; +import org.bukkit.entity.Boat; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Pig; +import org.bukkit.entity.Player; import org.bukkit.entity.minecart.RideableMinecart; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -119,7 +122,7 @@ public final class WalkingTaskType extends BukkitTaskType { case BOAT -> player.getVehicle() instanceof Boat; case CAMEL -> this.plugin.getVersionSpecificHandler().isPlayerOnCamel(player); case DONKEY -> this.plugin.getVersionSpecificHandler().isPlayerOnDonkey(player); - case GHAST -> player.getVehicle() instanceof Ghast; + case HAPPY_GHAST -> this.plugin.getVersionSpecificHandler().isPlayerOnHappyGhast(player); case HORSE -> this.plugin.getVersionSpecificHandler().isPlayerOnHorse(player); case LLAMA -> this.plugin.getVersionSpecificHandler().isPlayerOnLlama(player); case MINECART -> player.getVehicle() instanceof RideableMinecart; @@ -171,7 +174,7 @@ public final class WalkingTaskType extends BukkitTaskType { BOAT, CAMEL, DONKEY, - GHAST, + HAPPY_GHAST, HORSE, LLAMA, MINECART, diff --git a/docs/task-types/walking-(task-type).md b/docs/task-types/walking-(task-type).md index 48bf8ce8..7f5e62fa 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`, `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`, `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 | \- | \- | ## Examples |
