From 029254deaa4d74fe34fd486cef2298f9b9cced9f Mon Sep 17 00:00:00 2001 From: Drullkus Date: Sun, 9 Jun 2024 13:24:41 -0700 Subject: [PATCH] Fix block-breaking crash for NeoForge --- gradle.properties | 4 +- neoforge/build.gradle | 2 +- .../common/event/CuriosEventHandler.java | 47 ++++++++++--------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/gradle.properties b/gradle.properties index 349d75bb..e92a4211 100644 --- a/gradle.properties +++ b/gradle.properties @@ -23,8 +23,8 @@ forge_version=50.0.4 forge_version_range=[50,) # NeoForge -neoforge_version=20.6.78-beta -neoforge_version_range=[20.6.78-beta,) +neoforge_version=20.6.113-beta +neoforge_version_range=[20.6.113-beta,) # Compatibility jei_version=17.3.0.49 diff --git a/neoforge/build.gradle b/neoforge/build.gradle index 59029339..7b8a6fe6 100644 --- a/neoforge/build.gradle +++ b/neoforge/build.gradle @@ -1,6 +1,6 @@ plugins { id 'multiloader-loader' - id 'net.neoforged.gradle.userdev' version '7.0.107' + id 'net.neoforged.gradle.userdev' version '7.0.142' id 'com.modrinth.minotaur' version '2.+' id 'net.darkhax.curseforgegradle' version '1.+' } diff --git a/neoforge/src/main/java/top/theillusivec4/curios/common/event/CuriosEventHandler.java b/neoforge/src/main/java/top/theillusivec4/curios/common/event/CuriosEventHandler.java index 83f7e407..b1f206c5 100644 --- a/neoforge/src/main/java/top/theillusivec4/curios/common/event/CuriosEventHandler.java +++ b/neoforge/src/main/java/top/theillusivec4/curios/common/event/CuriosEventHandler.java @@ -73,7 +73,7 @@ import net.neoforged.neoforge.event.entity.player.PlayerEvent; import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import net.neoforged.neoforge.event.entity.player.PlayerXpEvent; -import net.neoforged.neoforge.event.level.BlockEvent; +import net.neoforged.neoforge.event.level.BlockDropsEvent; import net.neoforged.neoforge.event.tick.EntityTickEvent; import net.neoforged.neoforge.event.tick.LevelTickEvent; import net.neoforged.neoforge.items.ItemHandlerHelper; @@ -454,31 +454,32 @@ public void looting(LootingLevelEvent evt) { } @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onBreakBlock(BlockEvent.BreakEvent evt) { - Player player = evt.getPlayer(); - AtomicInteger fortuneLevel = new AtomicInteger(); - CuriosApi.getCuriosInventory(player).ifPresent(handler -> { + public void onBreakBlock(BlockDropsEvent evt) { + if (evt.getBreaker() instanceof LivingEntity livingEntity) { + AtomicInteger fortuneLevel = new AtomicInteger(); + CuriosApi.getCuriosInventory(livingEntity).ifPresent(handler -> { - for (Map.Entry entry : handler.getCurios().entrySet()) { - IDynamicStackHandler stacks = entry.getValue().getStacks(); + for (Map.Entry entry : handler.getCurios().entrySet()) { + IDynamicStackHandler stacks = entry.getValue().getStacks(); - for (int i = 0; i < stacks.getSlots(); i++) { - NonNullList renderStates = entry.getValue().getRenders(); - SlotContext slotContext = new SlotContext(entry.getKey(), player, i, false, - renderStates.size() > i && renderStates.get(i)); - fortuneLevel.addAndGet(CuriosApi.getCurio(stacks.getStackInSlot(i)).map( - curio -> curio.getFortuneLevel(slotContext, null)) - .orElse(0)); + for (int i = 0; i < stacks.getSlots(); i++) { + NonNullList renderStates = entry.getValue().getRenders(); + SlotContext slotContext = new SlotContext(entry.getKey(), livingEntity, i, false, + renderStates.size() > i && renderStates.get(i)); + fortuneLevel.addAndGet(CuriosApi.getCurio(stacks.getStackInSlot(i)).map( + curio -> curio.getFortuneLevel(slotContext, null)) + .orElse(0)); + } } - } - }); - ItemStack stack = player.getMainHandItem(); - int bonusLevel = stack.getEnchantmentLevel(Enchantments.FORTUNE); - int silklevel = stack.getEnchantmentLevel(Enchantments.SILK_TOUCH); - LevelAccessor level = evt.getLevel(); - evt.setExpToDrop(evt.getState() - .getExpDrop(level, level.getRandom(), evt.getPos(), bonusLevel + fortuneLevel.get(), - silklevel)); + }); + ItemStack stack = livingEntity.getMainHandItem(); + int bonusLevel = stack.getEnchantmentLevel(Enchantments.FORTUNE); + int silklevel = stack.getEnchantmentLevel(Enchantments.SILK_TOUCH); + LevelAccessor level = evt.getLevel(); + evt.setDroppedExperience(evt.getState() + .getExpDrop(level, level.getRandom(), evt.getPos(), bonusLevel + fortuneLevel.get(), + silklevel)); + } } @SubscribeEvent