zh_cn:tutorial:mixin_redirectors_methods
Table of Contents
方法重定向
方法重定向器可以使用以下 注入点:
INVOKE
INVOKE_STRING
INVOKE
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
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"); } }
zh_cn/tutorial/mixin_redirectors_methods.txt · Last modified: 2021/08/29 03:37 by hendrix-shen