User Tools

Site Tools


tutorial:mixin_accessors

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
tutorial:mixin_accessors [2025/10/16 16:46] – Rename to Accessor Mixins - Add preamble bawnortontutorial:mixin_accessors [2025/10/17 13:47] (current) – Add warnings for outdated examples, use yarncode plugin for most refs to vanilla code. gauntrecluse
Line 11: Line 11:
  
 ===== Accessor ===== ===== Accessor =====
-''@Accessor'' allows you to access or mutate fields. Suppose we want to access ''itemUseCooldown'' field of ''MinecraftClient'' class.+''@Accessor'' allows you to access or mutate fields. Suppose we want to access ''<yarn field_1752>'' field of ''<yarn class_310>'' class.
  
 ==== Getting a value from the field ==== ==== Getting a value from the field ====
-<code java> +<yarncode java> 
-@Mixin(MinecraftClient.class) +@Mixin(class_310.class) 
-public interface MinecraftClientAccessor +public interface class_310Accessor 
-    @Accessor("itemUseCooldown")+    @Accessor("field_1752")
     int modid$getItemUseCooldown();     int modid$getItemUseCooldown();
 } }
-</code>+</yarncode>
  
 Usage: Usage:
  
-<code java> +<yarncode java> 
-int itemUseCooldown = ((MinecraftClientAccessorMinecraftClient.getInstance()).modid$getItemUseCooldown(); +int field_1752 = ((class_310Accessorclass_310.method_1551()).modid$getItemUseCooldown(); 
-</code>+</yarncode>
  
 ==== Setting a value to the field ==== ==== Setting a value to the field ====
-<code java> +<yarncode java> 
-@Mixin(MinecraftClient.class) +@Mixin(class_310.class) 
-public interface MinecraftClientAccessor +public interface class_310Accessor 
-    @Accessor("itemUseCooldown") +    @Accessor("field_1752") 
-    void modid$setItemUseCooldown(int itemUseCooldown);+    void modid$setItemUseCooldown(int field_1752);
 } }
-</code>+</yarncode>
  
 Usage: Usage:
  
-<code java> +<yarncode java> 
-((MinecraftClientAccessorMinecraftClient.getInstance()).modid$setItemUseCooldown(100); +((class_310Accessorclass_310.method_1551()).modid$setItemUseCooldown(100); 
-</code>+</yarncode>
  
 When the field is final and you need to set it, use ''@Mutable'' as well. Note that this may not work as expected if the field is set to a constant literal value in its initializer, such as ''42'' or ''"Hello World"''. This is because the compiler inlines constant fields. When the field is final and you need to set it, use ''@Mutable'' as well. Note that this may not work as expected if the field is set to a constant literal value in its initializer, such as ''42'' or ''"Hello World"''. This is because the compiler inlines constant fields.
  
 ===== Accessor for static fields ===== ===== Accessor for static fields =====
-Suppose we want to access ''BIOMES'' field of ''VanillaLayeredBiomeSource'' class.+FIXME //VanillaLayeredBiomeSource no longer exists since 1.18, this example cannot be directly replicated on recent versions.//\\ 
 +Suppose we want to access the ''BIOMES'' field of ''VanillaLayeredBiomeSource'' class.
  
 ==== Getting a value from the field ==== ==== Getting a value from the field ====
Line 85: Line 86:
  
 ===== Invoker ===== ===== Invoker =====
-''@Invoker'' allows you to access methods. Suppose we want to invoke ''teleportTo'' method of ''EndermanEntity'' class.+''@Invoker'' allows you to access methods. Suppose we want to invoke ''<yarn method_7024>'' method of ''<yarn class_1560>'' class.
  
-<code java> +<yarncode java> 
-@Mixin(EndermanEntity.class) +@Mixin(class_1560.class) 
-public interface EndermanEntityInvoker +public interface class_1560Invoker 
-  @Invoker("teleportTo")+  @Invoker("method_7024")
   boolean modid$invokeTeleportTo(double x, double y, double z);   boolean modid$invokeTeleportTo(double x, double y, double z);
 } }
-</code>+</yarncode>
  
 Usage: Usage:
  
-<code java> +<yarncode java> 
-EndermanEntity enderman = ...; +class_1560 enderman = ...; 
-((EndermanEntityInvoker) enderman).modid$invokeTeleportTo(0.0D, 70.0D, 0.0D); +((class_1560Invoker) enderman).modid$invokeTeleportTo(0.0D, 70.0D, 0.0D); 
-</code>+</yarncode>
  
 ===== Invoker for static methods ===== ===== Invoker for static methods =====
 +FIXME //This example is not fully accurate to latest versions, ''registerPotionType'' exists now within the ''Builder'' nested class within ''BrewingRecipeRegistry''//\\
 Suppose we want to invoke ''registerPotionType'' method of ''BrewingRecipeRegistry'' class. Suppose we want to invoke ''registerPotionType'' method of ''BrewingRecipeRegistry'' class.
  
tutorial/mixin_accessors.1760633163.txt.gz · Last modified: 2025/10/16 16:46 by bawnorton