Class RegistryEntry.Reference<T>

java.lang.Object
net.minecraft.registry.entry.RegistryEntry.Reference<T>
All Implemented Interfaces:
RegistryEntry<T>
Direct Known Subclasses:
RegistryBuilder.LazyReferenceEntry
Enclosing interface:
RegistryEntry<T>

public static class RegistryEntry.Reference<T> extends Object implements RegistryEntry<T>
A reference registry entry holds the value by reference. The value is previously registered in a registry, so they can be referred to by their registry keys. This object also holds the entry's tags.

There are two types of reference registry entries.

  • Stand-alone registry entries are first instantiated by its key, and the value is set when registering the value. This is used by most of the registries.
  • Intrusive registry entries are registry entries tied to a specific registerable object at instantiation time. When instantiating those, it promises that the object is later registered - which, if broken, will result in a crash. This is used for Registries.BLOCK, Registries.ITEM, Registries.FLUID, Registries.ENTITY_TYPE, and Registries.GAME_EVENT registries. This type exists for historical reasons and is deprecated.

Therefore, it is very important to construct any intrusive-entry type object and register at the same time. For example, a mod that conditionally registers an Item has to create an instance only if the condition is met. (See Registry for a code example.)

When a reference registry entry is first instantiated, it only has either the key or the value (depending on the type). They are later filled when registering the entry. Attempting to call methods before those fields are filled can cause a crash. Note that if you are just getting the entry from a registry, this should not be a problem.

See Also:
Mappings:
Namespace Name
named net/minecraft/registry/entry/RegistryEntry$Reference
intermediary net/minecraft/class_6880$class_6883
official jq$c
  • Field Details

    • owner

      private final RegistryEntryOwner<T> owner
      Mappings:
      Namespace Name Mixin selector
      named owner Lnet/minecraft/registry/entry/RegistryEntry$Reference;owner:Lnet/minecraft/registry/entry/RegistryEntryOwner;
      intermediary field_40930 Lnet/minecraft/class_6880$class_6883;field_40930:Lnet/minecraft/class_7876;
      official a Ljq$c;a:Ljt;
    • tags

      @Nullable private @Nullable Set<TagKey<T>> tags
      Mappings:
      Namespace Name Mixin selector
      named tags Lnet/minecraft/registry/entry/RegistryEntry$Reference;tags:Ljava/util/Set;
      intermediary field_36450 Lnet/minecraft/class_6880$class_6883;field_36450:Ljava/util/Set;
      official b Ljq$c;b:Ljava/util/Set;
    • referenceType

      private final RegistryEntry.Reference.Type referenceType
      Mappings:
      Namespace Name Mixin selector
      named referenceType Lnet/minecraft/registry/entry/RegistryEntry$Reference;referenceType:Lnet/minecraft/registry/entry/RegistryEntry$Reference$Type;
      intermediary field_36451 Lnet/minecraft/class_6880$class_6883;field_36451:Lnet/minecraft/class_6880$class_6883$class_6884;
      official c Ljq$c;c:Ljq$c$a;
    • registryKey

      @Nullable private @Nullable RegistryKey<T> registryKey
      Mappings:
      Namespace Name Mixin selector
      named registryKey Lnet/minecraft/registry/entry/RegistryEntry$Reference;registryKey:Lnet/minecraft/registry/RegistryKey;
      intermediary field_36452 Lnet/minecraft/class_6880$class_6883;field_36452:Lnet/minecraft/class_5321;
      official d Ljq$c;d:Laly;
    • value

      @Nullable private T value
      Mappings:
      Namespace Name Mixin selector
      named value Lnet/minecraft/registry/entry/RegistryEntry$Reference;value:Ljava/lang/Object;
      intermediary field_36453 Lnet/minecraft/class_6880$class_6883;field_36453:Ljava/lang/Object;
      official e Ljq$c;e:Ljava/lang/Object;
  • Constructor Details

    • Reference

      protected Reference(RegistryEntry.Reference.Type referenceType, RegistryEntryOwner<T> owner, @Nullable @Nullable RegistryKey<T> registryKey, @Nullable T value)
      Mappings:
      Namespace Name Mixin selector
      named <init> Lnet/minecraft/registry/entry/RegistryEntry$Reference;<init>(Lnet/minecraft/registry/entry/RegistryEntry$Reference$Type;Lnet/minecraft/registry/entry/RegistryEntryOwner;Lnet/minecraft/registry/RegistryKey;Ljava/lang/Object;)V
      intermediary <init> Lnet/minecraft/class_6880$class_6883;<init>(Lnet/minecraft/class_6880$class_6883$class_6884;Lnet/minecraft/class_7876;Lnet/minecraft/class_5321;Ljava/lang/Object;)V
      official <init> Ljq$c;<init>(Ljq$c$a;Ljt;Laly;Ljava/lang/Object;)V
  • Method Details

    • standAlone

      public static <T> RegistryEntry.Reference<T> standAlone(RegistryEntryOwner<T> owner, RegistryKey<T> registryKey)
      Returns a new stand-alone registry entry.

      This should not be called manually. Call

      invalid reference
      net.minecraft.registry.Registry#entryOf
      or Registry.getEntry(int) instead.

      Callers are responsible for filling the value later by calling setValue(T).

      Returns:
      a new stand-alone registry entry
      Mappings:
      Namespace Name Mixin selector
      named standAlone Lnet/minecraft/registry/entry/RegistryEntry$Reference;standAlone(Lnet/minecraft/registry/entry/RegistryEntryOwner;Lnet/minecraft/registry/RegistryKey;)Lnet/minecraft/registry/entry/RegistryEntry$Reference;
      intermediary method_40234 Lnet/minecraft/class_6880$class_6883;method_40234(Lnet/minecraft/class_7876;Lnet/minecraft/class_5321;)Lnet/minecraft/class_6880$class_6883;
      official a Ljq$c;a(Ljt;Laly;)Ljq$c;
    • intrusive

      @Deprecated public static <T> RegistryEntry.Reference<T> intrusive(RegistryEntryOwner<T> owner, @Nullable T value)
      Deprecated.
      Intrusive holders exist for legacy reasons only.
      Returns a new intrusive registry entry.

      This should not be called manually. Call

      invalid reference
      net.minecraft.registry.Registry#entryOf
      or Registry.getEntry(int) instead.

      Callers are responsible for filling the key later by calling setRegistryKey(net.minecraft.registry.RegistryKey<T>).

      Returns:
      a new intrusive registry entry
      Mappings:
      Namespace Name Mixin selector
      named intrusive Lnet/minecraft/registry/entry/RegistryEntry$Reference;intrusive(Lnet/minecraft/registry/entry/RegistryEntryOwner;Ljava/lang/Object;)Lnet/minecraft/registry/entry/RegistryEntry$Reference;
      intermediary method_40233 Lnet/minecraft/class_6880$class_6883;method_40233(Lnet/minecraft/class_7876;Ljava/lang/Object;)Lnet/minecraft/class_6880$class_6883;
      official a Ljq$c;a(Ljt;Ljava/lang/Object;)Ljq$c;
    • registryKey

      public RegistryKey<T> registryKey()
      Returns the registry key of this entry.
      Returns:
      the registry key of this entry
      Throws:
      IllegalStateException - if this is an intrusive entry and it is not initialized yet
      Mappings:
      Namespace Name Mixin selector
      named registryKey Lnet/minecraft/registry/entry/RegistryEntry$Reference;registryKey()Lnet/minecraft/registry/RegistryKey;
      intermediary method_40237 Lnet/minecraft/class_6880$class_6883;method_40237()Lnet/minecraft/class_5321;
      official h Ljq$c;h()Laly;
    • value

      public T value()
      Specified by:
      value in interface RegistryEntry<T>
      Mappings:
      Namespace Name Mixin selector
      named value Lnet/minecraft/registry/entry/RegistryEntry;value()Ljava/lang/Object;
      intermediary comp_349 Lnet/minecraft/class_6880;comp_349()Ljava/lang/Object;
      official a Ljq;a()Ljava/lang/Object;
    • matchesId

      public boolean matchesId(Identifier id)
      Returns whether the ID of this entry is id.

      This always returns false for direct entries.

      Specified by:
      matchesId in interface RegistryEntry<T>
      Returns:
      whether the ID of this entry is id
      Mappings:
      Namespace Name Mixin selector
      named matchesId Lnet/minecraft/registry/entry/RegistryEntry;matchesId(Lnet/minecraft/util/Identifier;)Z
      intermediary method_40226 Lnet/minecraft/class_6880;method_40226(Lnet/minecraft/class_2960;)Z
      official a Ljq;a(Lalz;)Z
    • matchesKey

      public boolean matchesKey(RegistryKey<T> key)
      Returns whether the registry key of this entry is key.

      This always returns false for direct entries.

      Specified by:
      matchesKey in interface RegistryEntry<T>
      Returns:
      whether the registry key of this entry is key
      Mappings:
      Namespace Name Mixin selector
      named matchesKey Lnet/minecraft/registry/entry/RegistryEntry;matchesKey(Lnet/minecraft/registry/RegistryKey;)Z
      intermediary method_40225 Lnet/minecraft/class_6880;method_40225(Lnet/minecraft/class_5321;)Z
      official a Ljq;a(Laly;)Z
    • getTags

      private Set<TagKey<T>> getTags()
      Mappings:
      Namespace Name Mixin selector
      named getTags Lnet/minecraft/registry/entry/RegistryEntry$Reference;getTags()Ljava/util/Set;
      intermediary method_62677 Lnet/minecraft/class_6880$class_6883;method_62677()Ljava/util/Set;
      official i Ljq$c;i()Ljava/util/Set;
    • isIn

      public boolean isIn(TagKey<T> tag)
      Returns whether this entry is in tag.

      This always returns false for direct entries, since tags are managed by a registry.

      Specified by:
      isIn in interface RegistryEntry<T>
      Returns:
      whether this entry is in tag
      Mappings:
      Namespace Name Mixin selector
      named isIn Lnet/minecraft/registry/entry/RegistryEntry;isIn(Lnet/minecraft/registry/tag/TagKey;)Z
      intermediary method_40220 Lnet/minecraft/class_6880;method_40220(Lnet/minecraft/class_6862;)Z
      official a Ljq;a(Layk;)Z
    • matches

      public boolean matches(RegistryEntry<T> entry)
      Specified by:
      matches in interface RegistryEntry<T>
      Mappings:
      Namespace Name Mixin selector
      named matches Lnet/minecraft/registry/entry/RegistryEntry;matches(Lnet/minecraft/registry/entry/RegistryEntry;)Z
      intermediary method_55838 Lnet/minecraft/class_6880;method_55838(Lnet/minecraft/class_6880;)Z
      official a Ljq;a(Ljq;)Z
    • matches

      public boolean matches(Predicate<RegistryKey<T>> predicate)
      Returns whether this entry's key matches predicate.

      This always returns false for direct entries.

      Specified by:
      matches in interface RegistryEntry<T>
      Returns:
      whether this entry's key matches predicate
      Mappings:
      Namespace Name Mixin selector
      named matches Lnet/minecraft/registry/entry/RegistryEntry;matches(Ljava/util/function/Predicate;)Z
      intermediary method_40224 Lnet/minecraft/class_6880;method_40224(Ljava/util/function/Predicate;)Z
      official a Ljq;a(Ljava/util/function/Predicate;)Z
    • ownerEquals

      public boolean ownerEquals(RegistryEntryOwner<T> owner)
      Specified by:
      ownerEquals in interface RegistryEntry<T>
      Mappings:
      Namespace Name Mixin selector
      named ownerEquals Lnet/minecraft/registry/entry/RegistryEntry;ownerEquals(Lnet/minecraft/registry/entry/RegistryEntryOwner;)Z
      intermediary method_46745 Lnet/minecraft/class_6880;method_46745(Lnet/minecraft/class_7876;)Z
      official a Ljq;a(Ljt;)Z
    • getKeyOrValue

      public com.mojang.datafixers.util.Either<RegistryKey<T>,T> getKeyOrValue()
      Returns the object that identifies this registry key.

      For direct entries, this is the held value, and for reference entries, this is the key of the entry.

      Specified by:
      getKeyOrValue in interface RegistryEntry<T>
      Returns:
      the object that identifies this registry key
      Mappings:
      Namespace Name Mixin selector
      named getKeyOrValue Lnet/minecraft/registry/entry/RegistryEntry;getKeyOrValue()Lcom/mojang/datafixers/util/Either;
      intermediary method_40229 Lnet/minecraft/class_6880;method_40229()Lcom/mojang/datafixers/util/Either;
      official d Ljq;d()Lcom/mojang/datafixers/util/Either;
    • getKey

      public Optional<RegistryKey<T>> getKey()
      Returns the registry key of this entry, or an empty optional if this is a direct entry.
      Specified by:
      getKey in interface RegistryEntry<T>
      Returns:
      the registry key of this entry, or an empty optional if this is a direct entry
      Mappings:
      Namespace Name Mixin selector
      named getKey Lnet/minecraft/registry/entry/RegistryEntry;getKey()Ljava/util/Optional;
      intermediary method_40230 Lnet/minecraft/class_6880;method_40230()Ljava/util/Optional;
      official e Ljq;e()Ljava/util/Optional;
    • getType

      public RegistryEntry.Type getType()
      Returns the type (direct or reference) of this registry entry.

      This is different from the types of reference registry entries, i.e. stand-alone or intrusive.

      Specified by:
      getType in interface RegistryEntry<T>
      Returns:
      the type (direct or reference) of this registry entry
      Mappings:
      Namespace Name Mixin selector
      named getType Lnet/minecraft/registry/entry/RegistryEntry;getType()Lnet/minecraft/registry/entry/RegistryEntry$Type;
      intermediary method_40231 Lnet/minecraft/class_6880;method_40231()Lnet/minecraft/class_6880$class_6882;
      official f Ljq;f()Ljq$b;
    • hasKeyAndValue

      public boolean hasKeyAndValue()
      Specified by:
      hasKeyAndValue in interface RegistryEntry<T>
      Mappings:
      Namespace Name Mixin selector
      named hasKeyAndValue Lnet/minecraft/registry/entry/RegistryEntry;hasKeyAndValue()Z
      intermediary method_40227 Lnet/minecraft/class_6880;method_40227()Z
      official b Ljq;b()Z
    • setRegistryKey

      void setRegistryKey(RegistryKey<T> registryKey)
      Mappings:
      Namespace Name Mixin selector
      named setRegistryKey Lnet/minecraft/registry/entry/RegistryEntry$Reference;setRegistryKey(Lnet/minecraft/registry/RegistryKey;)V
      intermediary method_45917 Lnet/minecraft/class_6880$class_6883;method_45917(Lnet/minecraft/class_5321;)V
      official b Ljq$c;b(Laly;)V
    • setValue

      protected void setValue(T value)
      Mappings:
      Namespace Name Mixin selector
      named setValue Lnet/minecraft/registry/entry/RegistryEntry$Reference;setValue(Ljava/lang/Object;)V
      intermediary method_45918 Lnet/minecraft/class_6880$class_6883;method_45918(Ljava/lang/Object;)V
      official b Ljq$c;b(Ljava/lang/Object;)V
    • setTags

      void setTags(Collection<TagKey<T>> tags)
      Mappings:
      Namespace Name Mixin selector
      named setTags Lnet/minecraft/registry/entry/RegistryEntry$Reference;setTags(Ljava/util/Collection;)V
      intermediary method_40235 Lnet/minecraft/class_6880$class_6883;method_40235(Ljava/util/Collection;)V
      official a Ljq$c;a(Ljava/util/Collection;)V
    • streamTags

      public Stream<TagKey<T>> streamTags()
      Returns a stream of the tags of this entry, or an empty stream if this is a direct entry.
      Specified by:
      streamTags in interface RegistryEntry<T>
      Returns:
      a stream of the tags of this entry, or an empty stream if this is a direct entry
      Mappings:
      Namespace Name Mixin selector
      named streamTags Lnet/minecraft/registry/entry/RegistryEntry;streamTags()Ljava/util/stream/Stream;
      intermediary method_40228 Lnet/minecraft/class_6880;method_40228()Ljava/util/stream/Stream;
      official c Ljq;c()Ljava/util/stream/Stream;
    • toString

      public String toString()
      Overrides:
      toString in class Object