diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java index 5da8932e01..32d60c2fbc 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -75,11 +75,13 @@ import net.minecraft.server.players.JsonListEntry; import net.minecraft.server.players.PlayerList; import net.minecraft.tags.Tags; import net.minecraft.tags.TagsBlock; +import net.minecraft.tags.TagsEntity; import net.minecraft.tags.TagsFluid; import net.minecraft.tags.TagsItem; import net.minecraft.util.datafix.DataConverterRegistry; import net.minecraft.world.EnumDifficulty; import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.EntityTypes; import net.minecraft.world.entity.ai.village.VillageSiege; import net.minecraft.world.entity.npc.MobSpawnerCat; import net.minecraft.world.entity.npc.MobSpawnerTrader; @@ -182,6 +184,7 @@ import org.bukkit.craftbukkit.potion.CraftPotionBrewer; import org.bukkit.craftbukkit.scheduler.CraftScheduler; import org.bukkit.craftbukkit.scoreboard.CraftScoreboardManager; import org.bukkit.craftbukkit.tag.CraftBlockTag; +import org.bukkit.craftbukkit.tag.CraftEntityTag; import org.bukkit.craftbukkit.tag.CraftFluidTag; import org.bukkit.craftbukkit.tag.CraftItemTag; import org.bukkit.craftbukkit.util.CraftChatMessage; @@ -2112,6 +2115,10 @@ public final class CraftServer implements Server { Preconditions.checkArgument(clazz == org.bukkit.Fluid.class, "Fluid namespace must have fluid type"); return (org.bukkit.Tag) new CraftFluidTag(TagsFluid.a(), key); + case org.bukkit.Tag.REGISTRY_ENTITY_TYPES: + Preconditions.checkArgument(clazz == org.bukkit.entity.EntityType.class, "Entity type namespace must have entity type"); + + return (org.bukkit.Tag) new CraftEntityTag(TagsEntity.a(), key); default: throw new IllegalArgumentException(); } @@ -2136,6 +2143,11 @@ public final class CraftServer implements Server { Tags fluidTags = TagsFluid.a(); return fluidTags.a().keySet().stream().map(key -> (org.bukkit.Tag) new CraftFluidTag(fluidTags, key)).collect(ImmutableList.toImmutableList()); + case org.bukkit.Tag.REGISTRY_ENTITY_TYPES: + Preconditions.checkArgument(clazz == org.bukkit.entity.EntityType.class, "Entity type namespace must have entity type"); + + Tags> entityTags = TagsEntity.a(); + return entityTags.a().keySet().stream().map(key -> (org.bukkit.Tag) new CraftEntityTag(entityTags, key)).collect(ImmutableList.toImmutableList()); default: throw new IllegalArgumentException(); } diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/tag/CraftEntityTag.java b/paper-server/src/main/java/org/bukkit/craftbukkit/tag/CraftEntityTag.java new file mode 100644 index 0000000000..c68fb2d90b --- /dev/null +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/tag/CraftEntityTag.java @@ -0,0 +1,29 @@ +package org.bukkit.craftbukkit.tag; + +import java.util.Collections; +import java.util.Set; +import java.util.stream.Collectors; +import net.minecraft.core.IRegistry; +import net.minecraft.resources.MinecraftKey; +import net.minecraft.tags.Tags; +import net.minecraft.world.entity.EntityTypes; +import org.bukkit.Registry; +import org.bukkit.craftbukkit.util.CraftNamespacedKey; +import org.bukkit.entity.EntityType; + +public class CraftEntityTag extends CraftTag, EntityType> { + + public CraftEntityTag(Tags> registry, MinecraftKey tag) { + super(registry, tag); + } + + @Override + public boolean isTagged(EntityType entity) { + return getHandle().isTagged(IRegistry.ENTITY_TYPE.get(CraftNamespacedKey.toMinecraft(entity.getKey()))); + } + + @Override + public Set getValues() { + return Collections.unmodifiableSet(getHandle().getTagged().stream().map((nms) -> Registry.ENTITY_TYPE.get(CraftNamespacedKey.fromMinecraft(EntityTypes.getName(nms)))).collect(Collectors.toSet())); + } +}