From 81ed0e65ddcf1ec4a12b92377cc4a29229b6dc46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A4seToatz?= Date: Sun, 28 Dec 2025 20:10:57 +0100 Subject: [PATCH] fix nullpointerexception --- .../mixin/AnvilScreenHandlerMixin.java | 28 ++++++++----------- .../mixin/EnchantCommandMixin.java | 2 +- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/kasetoatz/superenchants/mixin/AnvilScreenHandlerMixin.java b/src/main/java/com/kasetoatz/superenchants/mixin/AnvilScreenHandlerMixin.java index 4daa6ea..2df82e0 100644 --- a/src/main/java/com/kasetoatz/superenchants/mixin/AnvilScreenHandlerMixin.java +++ b/src/main/java/com/kasetoatz/superenchants/mixin/AnvilScreenHandlerMixin.java @@ -1,14 +1,11 @@ package com.kasetoatz.superenchants.mixin; import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.player.PlayerInventory; import net.minecraft.screen.*; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.lang.reflect.Field; import java.util.List; @@ -22,19 +19,6 @@ public class AnvilScreenHandlerMixin @Unique private Field properties; @Unique private Field syncHandler; - @Inject(method="(ILnet/minecraft/entity/player/PlayerInventory;Lnet/minecraft/screen/ScreenHandlerContext;)V", at=@At("TAIL")) - public void init(int syncId, PlayerInventory inventory, ScreenHandlerContext context, CallbackInfo ci) - { - try - { - properties = ScreenHandler.class.getDeclaredField("properties"); - properties.setAccessible(true); - syncHandler = ScreenHandler.class.getDeclaredField("syncHandler"); - syncHandler.setAccessible(true); - } - catch (NoSuchFieldException ignored) {} - } - @Redirect(method="updateResult", at=@At(value="INVOKE", target="Lnet/minecraft/screen/Property;get()I")) public int getLevel(Property levelCost) { @@ -43,13 +27,23 @@ public class AnvilScreenHandlerMixin levelCost.set(MAX_ANVIL_COST); try { + if (properties == null) + { + properties = ScreenHandler.class.getDeclaredField("properties"); + properties.setAccessible(true); + } + if (syncHandler == null) + { + syncHandler = ScreenHandler.class.getDeclaredField("syncHandler"); + syncHandler.setAccessible(true); + } @SuppressWarnings("unchecked") int index = ((List)properties.get(this)).indexOf(levelCost); @SuppressWarnings("DataFlowIssue") AnvilScreenHandler handler = (AnvilScreenHandler)(Object)this; ((ScreenHandlerSyncHandler)syncHandler.get(this)).updateProperty(handler, index, levelCost.get()); } - catch (IllegalAccessException ignored) {} + catch (NoSuchFieldException | IllegalAccessException ignored) {} } return levelCost.get(); } diff --git a/src/main/java/com/kasetoatz/superenchants/mixin/EnchantCommandMixin.java b/src/main/java/com/kasetoatz/superenchants/mixin/EnchantCommandMixin.java index 6135775..470f64a 100644 --- a/src/main/java/com/kasetoatz/superenchants/mixin/EnchantCommandMixin.java +++ b/src/main/java/com/kasetoatz/superenchants/mixin/EnchantCommandMixin.java @@ -11,7 +11,7 @@ import static com.kasetoatz.superenchants.util.Util.getCustomLevel; @Mixin(EnchantCommand.class) public class EnchantCommandMixin { - @Redirect(method="execute", at= @At(value = "INVOKE", target = "Lnet/minecraft/enchantment/Enchantment;getMaxLevel()I")) + @Redirect(method="execute", at=@At(value="INVOKE", target="Lnet/minecraft/enchantment/Enchantment;getMaxLevel()I")) private static int execute(Enchantment enchant) { int custom = getCustomLevel(enchant);