Line 169:
Line 169:
*** the '''enclosing class''' has an <code>@ObjectHolder</code> annotation, and the field is <code>final</code>, and:
*** the '''enclosing class''' has an <code>@ObjectHolder</code> annotation, and the field is <code>final</code>, and:
**** the name value is the field's name; and
**** the name value is the field's name; and
+
**** the registry name value is the name of the object's registry; and
**** the namespace value is the enclosing class's namespace
**** the namespace value is the enclosing class's namespace
**** ''An exception is thrown if the namespace value cannot be found and inherited''
**** ''An exception is thrown if the namespace value cannot be found and inherited''
*** the '''field''' is annotated with <code>@ObjectHolder</code>, and:
*** the '''field''' is annotated with <code>@ObjectHolder</code>, and:
**** the name value is explicitly defined; and
**** the name value is explicitly defined; and
+
**** the registry name value is either explicitly defined or the enclosing class's registry name; and
**** the namespace value is either explicitly defined or the enclosing class's namespace
**** the namespace value is either explicitly defined or the enclosing class's namespace
−
** the field type or one of its supertypes corresponds to a valid registry (e.g. <code>Item</code> or <code>ArrowItem</code> for the <code>Item</code> registry)
** ''An exception is thrown if a field does not have a corresponding registry.''
** ''An exception is thrown if a field does not have a corresponding registry.''
* ''An exception is thrown if the resulting <code>ResourceLocation</code> is incomplete or invalid (non-valid characters in path)''
* ''An exception is thrown if the resulting <code>ResourceLocation</code> is incomplete or invalid (non-valid characters in path)''
Line 189:
Line 190:
<div class="mw-collapsible-content" style="overflow: auto; white-space: nowrap;">
<div class="mw-collapsible-content" style="overflow: auto; white-space: nowrap;">
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
−
@ObjectHolder("minecraft") // Inheritable resource namespace: "minecraft"
+
@ObjectHolder(registryName = "block", value = "minecraft") // Registry: minecraft:block, Inheritable resource namespace: "minecraft"
class AnnotatedHolder {
class AnnotatedHolder {
public static final Block diamond_block = null; // No annotation. [public static final] is required.
public static final Block diamond_block = null; // No annotation. [public static final] is required.
−
// Block has a corresponding registry: [Block]
+
// Registry name is not explicitly defined.
+
// So, registry name is inherited from class annotation: "minecraft:block"
// Name path is the name of the field: "diamond_block"
// Name path is the name of the field: "diamond_block"
// Namespace is not explicitly defined.
// Namespace is not explicitly defined.
Line 198:
Line 200:
// To inject: "minecraft:diamond_block" from the [Block] registry
// To inject: "minecraft:diamond_block" from the [Block] registry
−
@ObjectHolder("ambient.cave")
+
@ObjectHolder(registry = "sound_event", value = "ambient.cave")
public static SoundEvent ambient_sound = null; // Annotation present. [public static] is required.
public static SoundEvent ambient_sound = null; // Annotation present. [public static] is required.
−
// SoundEvent has a corresponding registry: [SoundEvent]
+
// Registry name is explicitly defined: "minecraft:sound_event"
// Name path is the value of the annotation: "ambient.cave"
// Name path is the value of the annotation: "ambient.cave"
// Namespace is not explicitly defined.
// Namespace is not explicitly defined.
Line 207:
Line 209:
// Assume for the next entry that [ManaType] is a valid registry.
// Assume for the next entry that [ManaType] is a valid registry.
−
@ObjectHolder("neomagicae:coffeinum")
+
@ObjectHolder(registryName = "neomagicae:mana_type", value = "neomagicae:coffeinum")
public static final ManaType coffeinum = null; // Annotation present. [public static] is required. [final] is optional.
public static final ManaType coffeinum = null; // Annotation present. [public static] is required. [final] is optional.
−
// ManaType has a corresponding registry: [ManaType] (custom registry)
+
// Registry name is explicitly defined: "neomagicae:mana_type" (custom registry)
// Resource location is explicitly defined: "neomagicae:coffeinum"
// Resource location is explicitly defined: "neomagicae:coffeinum"
// To inject: "neomagicae:coffeinum" from the [ManaType] registry
// To inject: "neomagicae:coffeinum" from the [ManaType] registry
public static final Item ENDER_PEARL = null; // No annotation. [public static final] is required.
public static final Item ENDER_PEARL = null; // No annotation. [public static final] is required.
−
// Item has a corresponding registry: [Item].
+
// Registry name is not explicitly defined.
+
// So, registry name is inherited from class annotation: "minecraft:block"
// Name path is the name of the field: "ENDER_PEARL" -> "ender_pearl"
// Name path is the name of the field: "ENDER_PEARL" -> "ender_pearl"
// !! ^ Field name is valid, because they are
// !! ^ Field name is valid, because they are
Line 220:
Line 223:
// Namespace is not explicitly defined.
// Namespace is not explicitly defined.
// So, namespace is inherited from class annotation: "minecraft"
// So, namespace is inherited from class annotation: "minecraft"
−
// To inject: "minecraft:ender_pearl" from the [Item] registry
+
// When registering, this will attempt to force into a Block type, which is not a type or supertype of this object.
+
// Therefore, THIS WILL PRODUCE AN EXCEPTION.
−
@ObjectHolder("minecraft:arrow")
+
@ObjectHolder(registryName = "item", value = "minecraft:arrow")
public static final ArrowItem arrow = null; // Annotation present. [public static] is required. [final] is optional.
public static final ArrowItem arrow = null; // Annotation present. [public static] is required. [final] is optional.
−
// ArrowItem does not have a corresponding registry.
+
// Registry name is explicitly defined: "minecraft:item"
// ArrowItem's supertype of Item has a corresponding registry: [Item]
// ArrowItem's supertype of Item has a corresponding registry: [Item]
// Resource location is explicitly defined: "minecraft:arrow"
// Resource location is explicitly defined: "minecraft:arrow"
Line 233:
Line 237:
public static final CreativeModeTab group = null; // No annotation. [public static final] is required.
public static final CreativeModeTab group = null; // No annotation. [public static final] is required.
−
// CreativeModeTab does not have a corresponding registry.
+
// Registry name is not explicitly defined.
−
// No supertypes of CreativeModeTab has a corresponding registry.
+
// So, registry name is inherited from class annotation: "minecraft:block"
+
// When registering, this will attempt to force into a Block type, which is not a type or supertype of this object.
// Therefore, THIS WILL PRODUCE AN EXCEPTION.
// Therefore, THIS WILL PRODUCE AN EXCEPTION.
}
}
class UnannotatedHolder { // Note the lack of an @ObjectHolder annotation on this class.
class UnannotatedHolder { // Note the lack of an @ObjectHolder annotation on this class.
−
@ObjectHolder("minecraft:flame")
+
@ObjectHolder(registryName = "enchantment", value = "minecraft:flame")
public static final Enchantment flame = null; // Annotation present. [public static] is required. [final] is optional.
public static final Enchantment flame = null; // Annotation present. [public static] is required. [final] is optional.
−
// Enchantment has corresponding registry: [Enchantment].
+
// Registry name is explicitly defined: "minecraft:enchantment"
// Resource location is explicitly defined: "minecraft:flame"
// Resource location is explicitly defined: "minecraft:flame"
// To inject: "minecraft:flame" from the [Enchantment] registry
// To inject: "minecraft:flame" from the [Enchantment] registry
Line 251:
Line 256:
public static Entity creeper = null; // Annotation present. [public static] is required.
public static Entity creeper = null; // Annotation present. [public static] is required.
// Entity does not have a corresponding registry.
// Entity does not have a corresponding registry.
−
// No supertypes of Entity has a corresponding registry.
+
// The registry has not been specified on the class.
// Therefore, THIS WILL PRODUCE AN EXCEPTION.
// Therefore, THIS WILL PRODUCE AN EXCEPTION.
−
@ObjectHolder("levitation")
+
@ObjectHolder(registryName = "potion", value = "levitation")
public static final Potion levitation = null; // Annotation present. [public static] is required. [final] is optional.
public static final Potion levitation = null; // Annotation present. [public static] is required. [final] is optional.
−
// Potion has a corresponding registry: [Potion].
+
// Registry name is explicitly defined: "minecraft:potion"
// Name path is the value of the annotation: "levitation"
// Name path is the value of the annotation: "levitation"
// Namespace is not explicitly defined.
// Namespace is not explicitly defined.