User Tools

Site Tools


tutorial:modding_tips

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
tutorial:modding_tips [2025/09/22 16:23] – [Mixins] Readjust some phrasing gauntreclusetutorial:modding_tips [2026/01/24 13:36] (current) – Fix misc. Mixin issues, mark Mixin segment as likely being removed in the future; gauntrecluse
Line 11: Line 11:
  
 ===== Mixins ===== ===== Mixins =====
 +:!: //This segment will likely be removed from this page once it is ensured the information contained within it is detailed upon on more specialized pages.//
  
  It should be kept in mind whenever learning about Mixin in **any** capacity that any example is limited to its own situation. No example should be directly copied, and you should prioritize using examples as ways to better understand syntax and general principles, rather than a tutorial to achieve your specific goal. //Every// Mixin you make should be tailored to its isolated use-case.\\  It should be kept in mind whenever learning about Mixin in **any** capacity that any example is limited to its own situation. No example should be directly copied, and you should prioritize using examples as ways to better understand syntax and general principles, rather than a tutorial to achieve your specific goal. //Every// Mixin you make should be tailored to its isolated use-case.\\
 Refer to relevant wikis and Discord help channels mentioned further in this section when you are in doubt or encounter an issue, getting direct help and asking questions is a natural and expected part of learning Mixins and should be prioritized when there is no obvious Wiki answer. This being kept in mind, the following are loose, general advice for using Mixin in your project. Refer to relevant wikis and Discord help channels mentioned further in this section when you are in doubt or encounter an issue, getting direct help and asking questions is a natural and expected part of learning Mixins and should be prioritized when there is no obvious Wiki answer. This being kept in mind, the following are loose, general advice for using Mixin in your project.
  
-  * To cast a class to an interface it doesn't implementor cast a final class, or cast the mixin to your target class, you can use the "(TargetClass) (Object) sourceClassObject" trick+  * When needing to reference an instance of the target class in your Mixin and pass it to a method call or constructor, you cannot use ''this'' directlyas your Mixin class is not yet of the type of the target class. Instead, you must first cast to ''Object'' and then to the target class: ''(TargetClass) (Object) this''. This should not be used as a way to access the target class's fields or methods, as those can be accessed through ''@Shadow''
-  * @Redirect and @ModifyConstant mixins cannot currently be nested (applied by more than one mod in the same area at the same time). This might change later in development - however, for now, alongside @Overwrite, please avoid them if possible and prioritize using options provided by MixinExtras: +  * ''@Redirect'' and ''@ModifyConstant'' mixins cannot chain(be applied more than once on the same target at the same time). Alongside @Overwrite, which is incredibly incompatible as it replaces the method outright, please avoid them if possible and prioritize using options provided by MixinExtras: 
-    * MixinExtras, a library for Mixin bundled with Fabric, provides alternatives to the aforementioned options that can chain when used in the same place as another Mixin. Namely, @WrapOperation and @ModifyExpressionValue can be used rather than @Redirect and @ModifyConstant for most applications, and @Overwrite should almost //never// be used over @WrapMethodThe less compatible annotations may still be preferable if you specifically wish for the game to crash if another mod tries to replace the same target with a non-chaining Mixin, but otherwise should not be used. To understand basic usage of MixinExtras tools see the [[https://github.com/LlamaLad7/MixinExtras/wiki|MixinExtras wiki]].+    * MixinExtras, a library for Mixin bundled with Fabric, provides alternatives to the aforementioned options that can chain when used in the same place as another Mixin. Mainly''@WrapOperation'' and ''@ModifyExpressionValue'' can be used instead of ''@Redirect'' and ''@ModifyConstant'' for all cases which do not involve intentionally clashing with another mod. ''@Overwrite'' should almost //never// be used over more precise modifications using injectorsSee the [[https://github.com/LlamaLad7/MixinExtras/wiki|official MixinExtras wiki]] for more details on the library's features. 
 + 
 +  * If you're adding custom fields or methods to target class, prefix them with your modid and separator such as ''$'' or ''_'' and annotate them with ''@Unique''. Such that ''addedField'' is instead named ''mymodid$addedField''. This is to avoid conflicts between mods adding a field or method named the same way. This applies both to fields you add to the Mixin classand to [[tutorial:mixin_accessors|accessor]] methods which are not static. 
 + 
 +To learn more on Mixins and how to use them, refer to [[tutorial:mixin_introduction|the introduction page]], the official [[https://github.com/SpongePowered/Mixin/wiki|Mixin Wiki]], the [[https://github.com/LlamaLad7/MixinExtras/wiki|MixinExtras Wiki]] and **most importantly** frequently ask questions in the Fabric Discord's dedicated ''#mod-dev-mixin'' channel, or the SpongePowered Discord's ''#mixin'' channel.
  
-  * If you're adding non-private custom fields or methods to a target class, prefix them with "[modid]$" or another unique string and annotate them with @Unique. Essentially, "mymod$secretValue" instead of "secretValue". This is to avoid conflicts between mods adding a field or method named the same way. 
-  * To learn more on Mixins and how to use them, refer to [[tutorial:mixin_introduction|Introduction to Mixins]], the official [[https://github.com/SpongePowered/Mixin/wiki|Mixin Wiki]], the [[https://github.com/LlamaLad7/MixinExtras/wiki|MixinExtras Wiki]] and **most importantly** frequently ask questions in the Fabric Discord's dedicated #mod-dev-mixin channel, or the SpongePowered Discord's #mixin channel. 
 ===== Networking ===== ===== Networking =====
  
tutorial/modding_tips.txt · Last modified: 2026/01/24 13:36 by gauntrecluse