diff options
| author | Krakenied <krakenied1@gmail.com> | 2025-07-27 19:05:44 +0200 |
|---|---|---|
| committer | Krakenied <46192742+Krakenied@users.noreply.github.com> | 2025-07-29 00:06:46 +0200 |
| commit | 3a2ee989cd7815274e84ff145e6f8dfb789469cb (patch) | |
| tree | 0b70cd3bac87b3a4649abdde16a2ca205441ab10 /bukkit/src/main/java | |
| parent | ec412543409725c92ba2f6aa292fb2f7dedbbc16 (diff) | |
Add biomes constraint
Diffstat (limited to 'bukkit/src/main/java')
7 files changed, 64 insertions, 20 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 6834e681..cf0aabb4 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/BukkitQuestsPlugin.java @@ -39,6 +39,7 @@ 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.VersionSpecificHandler14; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler16; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler17; import com.leonardobishop.quests.bukkit.hook.versionspecific.VersionSpecificHandler20; @@ -358,7 +359,8 @@ public class BukkitQuestsPlugin extends JavaPlugin implements Quests { this.versionSpecificHandler = switch (version) { case 9, 10 -> new VersionSpecificHandler9(); case 11 -> new VersionSpecificHandler11(); - case 12, 13, 14, 15 -> new VersionSpecificHandler12(); + case 12, 13 -> new VersionSpecificHandler12(); + case 14, 15 -> new VersionSpecificHandler14(); case 16 -> new VersionSpecificHandler16(); case 17, 18, 19 -> new VersionSpecificHandler17(); case 20 -> 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 0ee41be2..08db3e50 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 @@ -1,7 +1,9 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; +import org.bukkit.Keyed; import org.bukkit.Material; import org.bukkit.Tag; +import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; import org.bukkit.block.data.type.CaveVinesPlant; import org.bukkit.damage.DamageSource; @@ -250,4 +252,9 @@ public interface VersionSpecificHandler { * {@link Tag#CANDLE_CAKES} was introduced in {@code 1.17}. */ boolean isCake(Material type); + + /** + * {@link Biome} implements {@link Keyed} from {@code 1.14}. + */ + String getBiomeKey(Biome biome); } diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler14.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler14.java new file mode 100644 index 00000000..6ebf1810 --- /dev/null +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/hook/versionspecific/VersionSpecificHandler14.java @@ -0,0 +1,16 @@ +package com.leonardobishop.quests.bukkit.hook.versionspecific; + +import org.bukkit.block.Biome; + +public class VersionSpecificHandler14 extends VersionSpecificHandler12 implements VersionSpecificHandler { + + @Override + public int getMinecraftVersion() { + return 14; + } + + @Override + public String getBiomeKey(Biome biome) { + return biome.getKey().toString(); + } +} 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 b6cb6660..bb4eb6b8 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 VersionSpecificHandler12 implements VersionSpecificHandler { +public class VersionSpecificHandler16 extends VersionSpecificHandler14 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 800ae161..7e3e2ee4 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 @@ -1,6 +1,7 @@ package com.leonardobishop.quests.bukkit.hook.versionspecific; import org.bukkit.Material; +import org.bukkit.block.Biome; import org.bukkit.block.data.BlockData; import org.bukkit.entity.Entity; import org.bukkit.entity.Horse; @@ -229,4 +230,10 @@ public class VersionSpecificHandler8 implements VersionSpecificHandler { public boolean isCake(Material type) { return type == Material.CAKE; } + + @SuppressWarnings({"removal", "UnstableApiUsage"}) + @Override + public String getBiomeKey(Biome biome) { + return biome.name(); + } } 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 2ac6a5de..a039941a 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 @@ -29,6 +29,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; +import org.bukkit.util.NumberConversions; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -49,28 +50,32 @@ public class TaskUtils { plugin = BukkitQuestsPlugin.getPlugin(BukkitQuestsPlugin.class); } - public static boolean validateWorld(Player player, Task task) { - return validateWorld(player.getLocation().getWorld().getName(), task.getConfigValue("worlds")); - } + public static boolean validateWorld(final Player player, final Task task) { + final Object worlds = task.getConfigValue("worlds"); - public static boolean validateWorld(String worldName, Task task) { - return validateWorld(worldName, task.getConfigValue("worlds")); + return switch (worlds) { + case final List<?> allowedWorldNames -> allowedWorldNames.contains(player.getWorld().getName()); + case final String allowedWorldName -> allowedWorldName.equals(player.getWorld().getName()); + case null, default -> true; + }; } - public static boolean validateWorld(String worldName, Object configurationData) { - if (configurationData == null) { - return true; - } + public static boolean validateBiome(final Player player, final Task task) { + final Object biomes = task.getConfigValue("biomes"); - if (configurationData instanceof List<?> allowedWorldNames) { - return allowedWorldNames.contains(worldName); - } - - if (configurationData instanceof String allowedWorldName) { - return worldName.equals(allowedWorldName); - } + return switch (biomes) { + case final List<?> allowedBiomeNames -> allowedBiomeNames.contains(getBiomeName(player)); + case final String allowedBiomeName -> allowedBiomeName.equals(getBiomeName(player)); + case null, default -> true; + }; + } - return true; + private static String getBiomeName(final Player player) { + return plugin.getVersionSpecificHandler().getBiomeKey(player.getWorld().getBiome( + NumberConversions.floor(player.getX()), + NumberConversions.floor(player.getY()), + NumberConversions.floor(player.getZ()) + )); } public static boolean doesConfigStringListExist(final @NotNull Task task, final @NotNull String key) { @@ -280,6 +285,12 @@ public class TaskUtils { } } + if (constraintSet.contains(TaskConstraint.BIOME)) { + if (!TaskUtils.validateBiome(player, task)) { + continue; + } + } + TaskProgress taskProgress = questProgress.getTaskProgress(task.getId()); if (taskProgress.isCompleted()) { diff --git a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java index 24647de4..bfc70518 100644 --- a/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java +++ b/bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java @@ -1,7 +1,8 @@ package com.leonardobishop.quests.bukkit.util.constraint; public enum TaskConstraint { - WORLD(0x00000001); + WORLD(0b00000001), + BIOME(0x00000010); private final int value; |
