tutorial:interface_injection
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
tutorial:interface_injection [2022/03/08 21:06] – moved from the mixin inject page juuz | tutorial:interface_injection [2025/02/12 18:42] (current) – Add node on unicode escape for $ earthcomputer | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ======= | + | ======= |
This is a new technique introduced by Loom 0.11 to add methods into a specific existing class. | This is a new technique introduced by Loom 0.11 to add methods into a specific existing class. | ||
Line 10: | Line 10: | ||
Let's explain better with an example: | Let's explain better with an example: | ||
- | The scope of this example is to add the following method into FlowableFluid | + | The scope of this example is to add the following method into ''< |
- | This, normally, is not possible because | + | This, normally, is not possible because |
- | <code java [enable_line_numbers=" | + | <yarncode |
- | Optional< | + | Optional< |
- | </code> | + | </yarncode> |
To add the method into the class, first of all you need to create an interface with it: | To add the method into the class, first of all you need to create an interface with it: | ||
- | <code java [enable_line_numbers=" | + | <yarncode |
package net.fabricmc.example; | package net.fabricmc.example; | ||
Line 25: | Line 25: | ||
// The methods in an injected interface MUST be default, | // The methods in an injected interface MUST be default, | ||
// otherwise code referencing them won't compile! | // otherwise code referencing them won't compile! | ||
- | default Optional< | + | default Optional< |
return Optional.empty(); | return Optional.empty(); | ||
} | } | ||
} | } | ||
- | </code> | + | </yarncode> |
- | Now you need to implement this interface into FlowableFluid | + | Now you need to implement this interface into ''< |
- | <code java [enable_line_numbers=" | + | <yarncode |
- | @Mixin(FlowableFluid.class) | + | @Mixin(class_3609.class) |
public class MixinFlowableFluid implements BucketEmptySoundGetter { | public class MixinFlowableFluid implements BucketEmptySoundGetter { | ||
@Override | @Override | ||
- | public Optional< | + | public Optional< |
- | //This is how to get the default sound, copied from BucketItem class. | + | |
- | return Optional.of(((FlowableFluid) (Object) this).isIn(FluidTags.LAVA) ? SoundEvents.ITEM_BUCKET_EMPTY_LAVA | + | |
} | } | ||
} | } | ||
- | </code> | + | </yarncode> |
- | Lastly you need to inject the interface into FlowableFluid. | + | Lastly you need to inject the interface into ''< |
- | The following snippet can be added to your fabric.mod.json file to add one or more interfaces to the net/minecraft/ | + | The following snippet can be added to your fabric.mod.json file to add one or more interfaces to the ''< |
Note that all class names here must use the " | Note that all class names here must use the " | ||
Line 60: | Line 60: | ||
Now you can use the new method: | Now you can use the new method: | ||
- | <code java [enable_line_numbers=" | + | <yarncode |
- | Optional< | + | Optional< |
- | </code> | + | </yarncode> |
+ | |||
+ | You could also override this method in classes extending <yarn class_3609> | ||
- | You could also override | + | Sometimes, your interface injections may need to include the '' |
tutorial/interface_injection.1646773596.txt.gz · Last modified: 2022/03/08 21:06 by juuz