Fabric 教程
安装
- 启用 log4j 调试信息(英文)
基础
- 约定和术语
- 注册
- 开发工具
物品
方块和方块实体
数据生成
世界生成
命令
事件
实体
流体
Mixin 和 ASM
杂项
Yarn
贡献 Fabric
- FabLabs - 在提交 PR 之前起草新功能的试验场
方法重定向器可以使用以下 注入点:
INVOKE
INVOKE_STRING
INVOKE
注入点用于对 方法
中的 目标
的调用,这意味着它可以用于在一个方法调用之前进行重定向。
静态方法重定向器的参数应该与 目标
方法参数相同.
重定向在 SimpleInventory::readTags
中调用的 ItemStack::fromTag(ListTag)
使其返回 null
:
@Mixin(SimpleInventory.class) abstract class SimpleInventoryMixin { @Redirect(method = "readTags", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/item/ItemStack;fromTag(Lnet/minecraft/nbt/ListTag;)Lnet/minecraft/item/ItemStack;")) private static ItemStack returnNull(ListTag tag) { return null; } }
实例方法重定向器与静态方法重定向器类似,但他们的第一个参数总是表示调用其 目标
的对象。
重定向在 Entity::dropItem(ItemConvertible)
中调用的 Entity::dropItem(ItemConvertible, int)
在本应掉落钻石时,不掉落任何物品(空气):
abstract class EntityMixin { @Redirect(method = "dropItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;dropItem(Lnet/minecraft/item/ItemConvertible;I)Lnet/minecraft/entity/ItemEntity;")) return droppingEntity.dropItem(item == Items.DIAMOND ? Items.AIR : item, yOffset); } }
INVOKE_STRING
注入点用于匹配只具有在 方法
调用中只具有单个字符串参数的 目标
。待捕获的 字符串
内容应该在 At
中的 args
属性指定。
重定向 MinecraftClient::render
中调用的通过 Profiler::push
传递 “tick”
来修改上述调用中传递的 位置
@Mixin(MinecraftClient.class) abstract class MinecraftClientMixin { @Redirect(method = "render", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;push(Ljava/lang/String;)V", args = "ldc=tick")) profiler.push("modified tick"); } }