Interface PreFlattenTagRegistrar<T>

Type Parameters:
T - the type of value in the tag
All Superinterfaces:
Registrar

@Experimental @NullMarked @NonExtendable public interface PreFlattenTagRegistrar<T> extends Registrar
Registrar for tags before they are flattened. Flattened tags are tags which have any nested tags resolved to the tagged values the nested tags point to. This registrar, being a pre-flatten registrar, allows for modification before that flattening has happened, when tags both point to individual entries and other nested tags.

An example of a tag being created in a pre-flatten registrar:


 class YourBootstrapClass implements PluginBootstrap {

     public static final TagKey<ItemType> AXE_PICKAXE = ItemTypeTagKeys.create(Key.key("papermc:axe_pickaxe"));

     @Override
     public void bootstrap(BootstrapContext context) {
         final LifecycleEventManager<BootstrapContext> manager = context.getLifecycleManager();
         manager.registerEventHandler(LifecycleEvents.TAGS.preFlatten(RegistryKey.ITEM), event -> {
             final PreFlattenTagRegistrar<ItemType> registrar = event.registrar();
             registrar.setTag(AXE_PICKAXE, Set.of(
                 TagEntry.tagEntry(ItemTypeTagKeys.PICKAXES),
                 TagEntry.tagEntry(ItemTypeTagKeys.AXES)
             ));
         });
     }
 }
 
See Also:
  • Method Details

    • registryKey

      RegistryKey<T> registryKey()
      Get the registry key for this tag registrar.
      Returns:
      the registry key
    • getAllTags

      @Contract(value="-> new", pure=true) @Unmodifiable Map<TagKey<T>,Collection<TagEntry<T>>> getAllTags()
      Get a copy of all tags currently held in this registrar.
      Returns:
      an immutable map of all tags
    • hasTag

      @Contract(pure=true) boolean hasTag(TagKey<T> tagKey)
      Checks if this registrar has a tag with the given key.
      Parameters:
      tagKey - the key to check for
      Returns:
      true if the tag exists, false otherwise
    • getTag

      @Contract(value="_ -> new", pure=true) @Unmodifiable List<TagEntry<T>> getTag(TagKey<T> tagKey)
      Get the tag with the given key. Use hasTag(TagKey) to check if a tag exists first.
      Parameters:
      tagKey - the key of the tag to get
      Returns:
      an immutable list of tag entries
      Throws:
      NoSuchElementException - if the tag does not exist
      See Also:
    • addToTag

      @Contract(mutates="this") void addToTag(TagKey<T> tagKey, Collection<TagEntry<T>> entries)
      Adds entries to the given tag. If the tag does not exist, it will be created.
      Parameters:
      tagKey - the key of the tag to add to
      entries - the entries to add
      See Also:
    • setTag

      @Contract(mutates="this") void setTag(TagKey<T> tagKey, Collection<TagEntry<T>> entries)
      Sets the entries of the given tag. If the tag does not exist, it will be created. If the tag does exist, it will be overwritten.
      Parameters:
      tagKey - the key of the tag to set
      entries - the entries to set
      See Also: