Ich habe diese Methode in AnvilScreenHandler:
public void updateResult() {
ItemStack itemStack = this.input.getStack(0);
int i = 0;
int j = 0;
int k = 0;
/***/
for (m = 0; l > 0 && m < itemStack3.getCount(); m++) {
int n = itemStack2.getDamage() - l;
itemStack2.setDamage(n);
i++;
l = Math.min(itemStack2.getDamage(), itemStack2.getMaxDamage() / 4);
}
/***/
Ich möchte i++ abbrechen, wenn die itemStack2.getItem()-Instanz von MyInterface ist, und ich verstehe nicht, wie ich zu dieser Zeile komme.
Ich habe Folgendes versucht, habe aber keine Ahnung:
@Inject(method = "updateResult", at = @At(value = "INVOKE", target =
"Lnet/minecraft/item/ItemStack;setDamage(I)V", shift = At.Shift.BY, by = 2))
private void resetRepair(CallbackInfo ci, @Local(ordinal = 1) ItemStack itemStack2,
@Local(ordinal = 0) LocalRef i) {
if (itemStack2.getItem() instanceof MyInterface) i.set(0);
}
Aber es erzeugt einen Kompilierungsfehler beim Parameter i:
@Local stimmt mit keinem überein oder stimmt nicht überein mehrere lokale Variablen in der Zielmethode
Oder habe es versucht, aber ich kenne das Ziel nicht:
@Redirect(method = "updateResult", at = @At(value = "INVOKE", target = "WHAT IS THE TARGET OF i++"))
Oder dies:
@ModifyConstant(method = "updateResult", constant = @Constant(intValue = 1))
aber es wird nicht einmal die Zeile in goto angezeigt.
@ModifyVariable(method = "updateResult", at = @At("STORE"))
Die Zeile in „goto“ wird auch nicht angezeigt, und wenn ich protokolliere, was eine Variable ist, war das Ergebnis „0“ oder „15“, aber nicht 1.
So zielen Sie auf i++ in Mixin ab ⇐ Java
-
- Similar Topics
- Replies
- Views
- Last post