aboutsummaryrefslogtreecommitdiffstats
path: root/bukkit/src/main
diff options
context:
space:
mode:
authorKrakenied <krakenied1@gmail.com>2025-07-27 19:05:44 +0200
committerKrakenied <46192742+Krakenied@users.noreply.github.com>2025-07-29 00:06:46 +0200
commit3a2ee989cd7815274e84ff145e6f8dfb789469cb (patch)
tree0b70cd3bac87b3a4649abdde16a2ca205441ab10 /bukkit/src/main
parentec412543409725c92ba2f6aa292fb2f7dedbbc16 (diff)
Add biomes constraint
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/VersionSpecificHandler14.java16
-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.java7
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/TaskUtils.java45
-rw-r--r--bukkit/src/main/java/com/leonardobishop/quests/bukkit/util/constraint/TaskConstraint.java3
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;