tutorial:accesswideners
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tutorial:accesswideners [2021/02/24 01:30] – Make it clearer what namespace means oroarmor | tutorial:accesswideners [2024/06/09 05:33] (current) – Add comparison to accessor mixins haykam | ||
---|---|---|---|
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 for 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 '' |
+ | |||
+ | Note: Unlike accessor mixins, access wideners do not work for source of mods. | ||
===== 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 ===== | |
- | sn===== 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 |
</ | </ | ||
- | **Once again, the namespace should | + | **Once again, the namespace should |
Access widener files can have blank lines and comments starting with # | Access widener files can have blank lines and comments starting with # | ||
Line 60: | Line 59: | ||
- 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 103: | Line 102: | ||
* Fields have final removed | * Fields have final removed | ||
+ | |||
+ | If you want to make a private final field both accessible //and// mutable, you need to use two directives, one for each change. | ||
===== Specifying file location ===== | ===== Specifying file location ===== | ||
- | 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. (Replace " |
+ | |||
+ | Loom 0.9 or higher: | ||
<code groovy [enable_line_numbers=" | <code groovy [enable_line_numbers=" | ||
- | minecraft | + | loom { |
- | accessWidener | + | accessWidenerPath |
} | } | ||
</ | </ | ||
+ | |||
+ | 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 121: | Line 134: | ||
... | ... | ||
</ | </ | ||
+ | |||
+ | ===== Validating the file ===== | ||
+ | By default, accesswidener entries that don't exist are ignored. | ||
+ | On recent versions of Loom, you can run '' | ||
+ | |||
+ | The error messages can be a little cryptic. For example, if you make a mistake in specifying a field, the error doesn' | ||
+ | |||
+ | ===== V2 changes ===== | ||
+ | |||
+ | With the v2 version, the '' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | They differ from their regular, non-prefixed variants in that they also apply to mods that depend on this one. | ||
+ | |||
+ | |||
+ |
tutorial/accesswideners.1614130231.txt.gz · Last modified: 2021/02/24 01:30 by oroarmor