tutorial:accesswideners
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
tutorial:accesswideners [2020/04/06 18:45] – modmuss50 | tutorial:accesswideners [2021/10/26 12:14] – modmuss50 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Access Wideners ====== | ====== Access Wideners ====== | ||
- | Access wideners provide a way to loosen the access limits of classes, methods or fields. Access wideners similar to the commonly known Access Transformers. | + | Access wideners provide a way to loosen the access limits of classes, methods or fields. Access wideners |
- | Access wideners should only be used where mixin does not currenly | + | Access wideners should |
+ | There are currently only 2 cases where mixins are not sufficient: | ||
+ | * Needing to access a (package) private class, especially for the purpose of shadowing or accessing a field or method in a mixin. | ||
+ | * Being able to override final methods or subclass final classes. | ||
+ | * Before you consider overriding final methods, try mixin injecting in final methods first! | ||
+ | * If you want to subclass a class with only (package) private constructors, | ||
+ | |||
+ | In order for access widener changes to show up in the decompiled source, run the '' | ||
===== Requirements ===== | ===== Requirements ===== | ||
* Fabric-loader 0.8.0 or higher | * Fabric-loader 0.8.0 or higher | ||
- | * Loom 0.7.0 or higher | + | * Loom 0.2.7 or higher |
===== File format ===== | ===== File format ===== | ||
- | A specific file format is used to define the access changes included in your mod. To aid IDE' | + | A specific file format is used to define the access changes included in your mod. To aid IDE's you should use the '' |
- | The file must start with the following header, | + | The file must start with the following header, |
<code [enable_line_numbers=" | <code [enable_line_numbers=" | ||
accessWidener v1 < | accessWidener v1 < | ||
</ | </ | ||
+ | |||
+ | **Once again, the namespace should be '' | ||
Access widener files can have blank lines and comments starting with # | Access widener files can have blank lines and comments starting with # | ||
<code [enable_line_numbers=" | <code [enable_line_numbers=" | ||
- | # Comments like this are supported, as well at the end of the line | + | # Comments like this are supported, as well as at the end of the line |
</ | </ | ||
- | Any whitespace can be used to sperate | + | Any whitespace can be used to separate |
+ | |||
+ | Class names are separated with a / and not . | ||
+ | |||
+ | For inner classes, you should use '' | ||
== Classes == | == Classes == | ||
Class access can be changed by specifying the access and the class name as named the mappings namespace defined in the header. | Class access can be changed by specifying the access and the class name as named the mappings namespace defined in the header. | ||
+ | |||
<code [enable_line_numbers=" | <code [enable_line_numbers=" | ||
Line 39: | Line 52: | ||
== Methods == | == Methods == | ||
- | Method access can be changed by specifying the access, class name, method name and method | + | Method access can be changed by specifying the access, class name, method name and method |
<code [enable_line_numbers=" | <code [enable_line_numbers=" | ||
Line 52: | Line 65: | ||
== Fields == | == Fields == | ||
- | Field access can be changed by specifying the access, class name, field name and field descriptior | + | Field access can be changed by specifying the access, class name, field name and field descriptor |
<code [enable_line_numbers=" | <code [enable_line_numbers=" | ||
Line 59: | Line 72: | ||
- access can be // | - access can be // | ||
- | - classname | + | - className |
- | - fieldNameis | + | - fieldName is the field name |
- | - fieldDescis | + | - fieldDesc is the field descriptor |
===== Access Changes ===== | ===== Access Changes ===== | ||
Line 93: | Line 106: | ||
The access widener file location must be specified in your build.gradle and in your fabric.mod.json file. It should be stored in the resources as it needs to be included in the exported jar file. | The access widener file location must be specified in your build.gradle and in your fabric.mod.json file. It should be stored in the resources as it needs to be included in the exported jar file. | ||
+ | |||
+ | Loom 0.9 or higher: | ||
<code groovy [enable_line_numbers=" | <code groovy [enable_line_numbers=" | ||
- | minecraft | + | loom { |
+ | accessWidenerPath = file(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Loom 0.8 or lower: | ||
+ | |||
+ | <code groovy [enable_line_numbers=" | ||
+ | loom { | ||
accessWidener = file(" | accessWidener = file(" | ||
} | } | ||
</ | </ | ||
+ | |||
+ | fabric.mod.json: | ||
<code json [enable_line_numbers=" | <code json [enable_line_numbers=" | ||
... | ... | ||
- | " | + | " |
... | ... | ||
</ | </ |
tutorial/accesswideners.txt · Last modified: 2024/06/09 05:33 by haykam