From d60a7b6e2f15cdf79ed144a322f69c53e715ec1e Mon Sep 17 00:00:00 2001 From: "Alex \"mcmonkey\" Goodwin" Date: Tue, 30 Nov 2021 12:39:52 -0800 Subject: [PATCH] WorldTag.biomes --- .../denizenscript/denizen/nms/NMSHandler.java | 4 ++++ .../denizenscript/denizen/objects/WorldTag.java | 16 +++++++++++++++- .../denizenscript/denizen/nms/v1_17/Handler.java | 12 ++++++++++++ .../denizenscript/denizen/nms/v1_18/Handler.java | 12 ++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/NMSHandler.java b/plugin/src/main/java/com/denizenscript/denizen/nms/NMSHandler.java index cbf119986a..e46775cb48 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/NMSHandler.java +++ b/plugin/src/main/java/com/denizenscript/denizen/nms/NMSHandler.java @@ -167,6 +167,10 @@ public boolean isCorrectMappingsCode() { public abstract ProfileEditor getProfileEditor(); + public List getBiomes(World world) { + throw new UnsupportedOperationException(); + } + public abstract BiomeNMS getBiomeNMS(World world, String name); public BiomeNMS getBiomeAt(Block block) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java index a4f8b11ab6..0c4fdec8b2 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java @@ -2,6 +2,7 @@ import com.denizenscript.denizen.events.BukkitScriptEvent; import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.nms.abstracts.BiomeNMS; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizen.utilities.flags.WorldFlagHandler; import com.denizenscript.denizencore.flags.AbstractFlagTracker; @@ -857,10 +858,23 @@ else if (time >= 12500) { return list; }); + // <--[tag] + // @attribute + // @returns ListTag(BiomeTag) + // @description + // Returns a list of all biomes in this world (including custom biomes). + // --> + registerTag(ListTag.class, "biomes", (attribute, object) -> { + ListTag output = new ListTag(); + for (BiomeNMS biome : NMSHandler.getInstance().getBiomes(object.getWorld())) { + output.addObject(new BiomeTag(biome)); + } + return output; + }); + // <--[tag] // @attribute ]> // @returns ElementTag(Boolean) - // @group element checking // @description // Returns whether the world matches some matcher text, using the system behind <@link language Advanced Script Event Matching>. // --> diff --git a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/Handler.java b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/Handler.java index 0fc33ebe3b..ccc036efa6 100644 --- a/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/Handler.java +++ b/v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/Handler.java @@ -32,6 +32,7 @@ import net.minecraft.nbt.TagParser; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; @@ -61,6 +62,7 @@ import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.List; import java.util.Map; public class Handler extends NMSHandler { @@ -231,6 +233,16 @@ public ProfileEditor getProfileEditor() { return profileEditor; } + @Override + public List getBiomes(World world) { + ServerLevel level = ((CraftWorld) world).getHandle(); + ArrayList output = new ArrayList<>(); + for (Map.Entry, Biome> pair : level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY).entrySet()) { + output.add(new BiomeNMSImpl(level, pair.getKey().location().toString())); + } + return output; + } + @Override public BiomeNMS getBiomeNMS(World world, String name) { BiomeNMSImpl impl = new BiomeNMSImpl(((CraftWorld) world).getHandle(), name); diff --git a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/Handler.java b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/Handler.java index 948a74d22e..a94587caa6 100644 --- a/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/Handler.java +++ b/v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/Handler.java @@ -32,6 +32,7 @@ import net.minecraft.nbt.TagParser; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; +import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; @@ -61,6 +62,7 @@ import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.List; import java.util.Map; public class Handler extends NMSHandler { @@ -231,6 +233,16 @@ public ProfileEditor getProfileEditor() { return profileEditor; } + @Override + public List getBiomes(World world) { + ServerLevel level = ((CraftWorld) world).getHandle(); + ArrayList output = new ArrayList<>(); + for (Map.Entry, Biome> pair : level.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY).entrySet()) { + output.add(new BiomeNMSImpl(level, pair.getKey().location().toString())); + } + return output; + } + @Override public BiomeNMS getBiomeNMS(World world, String name) { BiomeNMSImpl impl = new BiomeNMSImpl(((CraftWorld) world).getHandle(), name);