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/09/05 13:24] – Suggest running genSources siglong | tutorial:accesswideners [2022/07/12 10:27] – external edit 127.0.0.1 | ||
---|---|---|---|
Line 3: | Line 3: | ||
Access wideners provide a way to loosen the access limits of classes, methods or fields. Access wideners are similar to the commonly known Access Transformers. | Access wideners provide a way to loosen the access limits of classes, methods or fields. Access wideners are similar to the commonly known Access Transformers. | ||
- | Access wideners | + | Access wideners |
- | There are currently | + | |
* Needing to access a (package) private class, especially for the purpose of shadowing or accessing a field or method in a mixin. | * 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. | * 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, | * If you want to subclass a class with only (package) private constructors, | ||
- | In order to access widener changes to show up in the decompiled source, run the '' | + | 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.2.7 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's you should use the '' | 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 # | ||
Line 58: | Line 57: | ||
- access can be // | - access can be // | ||
- | - classname | + | - className |
- methodName is the method name | - methodName is the method name | ||
- | - methodDesc is the method | + | - methodDesc is the method |
== Fields == | == Fields == | ||
Line 105: | Line 104: | ||
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 { |
- | accessWidener | + | accessWidenerPath = file(" |
} | } | ||
</ | </ | ||
+ | |||
+ | Loom 0.8 or lower: | ||
+ | |||
+ | <code groovy [enable_line_numbers=" | ||
+ | loom { | ||
+ | accessWidener = file(" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | fabric.mod.json: | ||
<code json [enable_line_numbers=" | <code json [enable_line_numbers=" | ||
Line 119: | Line 130: | ||
... | ... | ||
</ | </ | ||
+ | |||
+ | ===== Validating the file ===== | ||
+ | By default, accesswidener entries that don't exist are ignored. | ||
+ | On recent versions of Loom, you can run '' |
tutorial/accesswideners.txt · Last modified: 2024/06/09 05:33 by haykam