From 7729606851defb90d5d1aa251b3e610d458e0904 Mon Sep 17 00:00:00 2001 From: KnightMiner Date: Sun, 11 Oct 2026 13:17:34 -0500 Subject: [PATCH] Fix several minor issues with the enchanted loot events (#3620) --- .../loot/predicates/BonusLevelTableCondition.java.patch | 6 ++++-- src/main/java/net/neoforged/neoforge/event/EventHooks.java | 2 +- .../neoforge/event/enchanting/EnchantedEntityLootEvent.java | 2 -- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/patches/net/minecraft/world/level/storage/loot/predicates/BonusLevelTableCondition.java.patch b/patches/net/minecraft/world/level/storage/loot/predicates/BonusLevelTableCondition.java.patch index ced88c5ee0..bfeacdeccb 100644 --- a/patches/net/minecraft/world/level/storage/loot/predicates/BonusLevelTableCondition.java.patch +++ b/patches/net/minecraft/world/level/storage/loot/predicates/BonusLevelTableCondition.java.patch @@ -1,12 +1,14 @@ --- a/net/minecraft/world/level/storage/loot/predicates/BonusLevelTableCondition.java +++ b/net/minecraft/world/level/storage/loot/predicates/BonusLevelTableCondition.java -@@ -37,6 +_,10 @@ +@@ -37,6 +_,12 @@ public boolean test(LootContext context) { ItemInstance tool = context.getOptional(LootContextParams.TOOL); int level = tool != null ? EnchantmentHelper.getItemEnchantmentLevel(this.enchantment, tool) : 0; + + // Neo: Allow mods to modify the enchantment level for loot calculations with relevant context. -+ level = net.neoforged.neoforge.event.EventHooks.getBlockLootEnchantmentLevel(tool, this.enchantment, level, context); ++ if (tool != null) { ++ level = net.neoforged.neoforge.event.EventHooks.getBlockLootEnchantmentLevel(tool, this.enchantment, level, context); ++ } + float chance = this.values.get(Math.min(level, this.values.size() - 1)); return context.getRandom().nextFloat() < chance; diff --git a/src/main/java/net/neoforged/neoforge/event/EventHooks.java b/src/main/java/net/neoforged/neoforge/event/EventHooks.java index 4d67f47dd5..e58215ce5d 100644 --- a/src/main/java/net/neoforged/neoforge/event/EventHooks.java +++ b/src/main/java/net/neoforged/neoforge/event/EventHooks.java @@ -1202,7 +1202,7 @@ public class EventHooks { /// @param enchLevel The original enchantment level. How it gets determined depends on the particular call site. Generally it's the attacker's effective enchantment level. /// @param ctx The loot context for the current entity loot evaluation. public static int getEntityLootEnchantmentLevel(Holder ench, int enchLevel, LootContext ctx) { - Entity entity = ctx.getOptional(LootContextParams.THIS_ENTITY); + Entity entity = ctx.getOptional(LootContextParams.ATTACKING_ENTITY); DamageSource src = ctx.getOptional(LootContextParams.DAMAGE_SOURCE); if (src != null && entity instanceof LivingEntity living) { var event = new EnchantedEntityLootEvent(living, src, ench, enchLevel); diff --git a/src/main/java/net/neoforged/neoforge/event/enchanting/EnchantedEntityLootEvent.java b/src/main/java/net/neoforged/neoforge/event/enchanting/EnchantedEntityLootEvent.java index 1a1d178443..6e3dca77d7 100644 --- a/src/main/java/net/neoforged/neoforge/event/enchanting/EnchantedEntityLootEvent.java +++ b/src/main/java/net/neoforged/neoforge/event/enchanting/EnchantedEntityLootEvent.java @@ -15,7 +15,6 @@ import net.minecraft.world.level.storage.loot.predicates.LootItemRandomChanceWit import net.neoforged.neoforge.event.entity.living.GetEquipmentDropChanceEvent; import net.neoforged.neoforge.event.entity.living.LivingEvent; import org.jetbrains.annotations.ApiStatus; -import org.jspecify.annotations.Nullable; /// Fired on the server when an entity is dropping loot and the level of a specific enchantment is being queried. /// @@ -26,7 +25,6 @@ import org.jspecify.annotations.Nullable; /// /// If you do not need the additional context of this event, prefer [GetEnchantmentLevelEvent] for managing enchantment levels. public class EnchantedEntityLootEvent extends LivingEvent { - @Nullable private final DamageSource damageSource; private final Holder enchantment; private int enchantmentLevel;