package io.papermc.paper.registry; import io.papermc.paper.registry.set.NamedRegistryKeySetImpl; import io.papermc.paper.registry.tag.Tag; import io.papermc.paper.registry.tag.TagKey; import java.util.Collection; import java.util.function.Predicate; import net.minecraft.core.HolderSet; import net.minecraft.core.registries.BuiltInRegistries; import org.bukkit.Keyed; import org.bukkit.Particle; import org.bukkit.Registry; import org.bukkit.entity.EntityType; import org.bukkit.potion.PotionType; import org.jspecify.annotations.NullMarked; @NullMarked public class PaperSimpleRegistry & Keyed, M> extends Registry.SimpleRegistry { static Registry entityType() { return new PaperSimpleRegistry<>(EntityType.class, entity -> entity != EntityType.UNKNOWN, BuiltInRegistries.ENTITY_TYPE); } static Registry particleType() { return new PaperSimpleRegistry<>(Particle.class, BuiltInRegistries.PARTICLE_TYPE); } static Registry potion() { return new PaperSimpleRegistry<>(PotionType.class, BuiltInRegistries.POTION); } private final net.minecraft.core.Registry nmsRegistry; protected PaperSimpleRegistry(final Class type, final net.minecraft.core.Registry nmsRegistry) { super(type); this.nmsRegistry = nmsRegistry; } public PaperSimpleRegistry(final Class type, final Predicate predicate, final net.minecraft.core.Registry nmsRegistry) { super(type, predicate); this.nmsRegistry = nmsRegistry; } @Override public boolean hasTag(final TagKey key) { final net.minecraft.tags.TagKey nmsKey = PaperRegistries.toNms(key); return this.nmsRegistry.get(nmsKey).isPresent(); } @Override public Tag getTag(final TagKey key) { final HolderSet.Named namedHolderSet = this.nmsRegistry.get(PaperRegistries.toNms(key)).orElseThrow(); return new NamedRegistryKeySetImpl<>(key, namedHolderSet); } @Override public Collection> getTags() { return this.nmsRegistry.getTags().>map(NamedRegistryKeySetImpl::new).toList(); } }