Как настроить таргетинг на i++ в миксинеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как настроить таргетинг на i++ в миксине

Сообщение Anonymous »

У меня есть этот метод в 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);
}
/***/
Я хочу отменить i++ if itemStack2.getItem() экземпляр MyInterface, и я не понимаю, как добраться до этой строки.
Я пробовал следующее, но понятия не имею:

Код: Выделить всё

@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);
}
Но при компиляции параметра i возникает ошибка:

@Local не соответствует ни одному или не соответствует несколько локальных переменных в целевом методе

Или попробовал это, но не знаю цель:

Код: Выделить всё

@Redirect(method = "updateResult", at = @At(value = "INVOKE", target = "WHAT IS THE TARGET OF i++"))
Или это:

Код: Выделить всё

@ModifyConstant(method = "updateResult", constant = @Constant(intValue = 1))
но даже строка перехода не отображается.

Код: Выделить всё

@ModifyVariable(method = "updateResult", at = @At("STORE"))
Он также не показывает строку в переходе, и если я записываю, что является переменной, результатом будет «0» или «15», но не 1.

Подробнее здесь: https://stackoverflow.com/questions/793 ... i-in-mixin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»