use new better methods to retrieve enchant levels

This commit is contained in:
2024-10-30 16:41:13 +01:00
parent 536c074439
commit a49cebc86f
3 changed files with 15 additions and 24 deletions
@@ -2,6 +2,7 @@ package me.youhavetrouble.enchantio.listeners;
import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryAccess;
import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.RegistryKey;
import me.youhavetrouble.enchantio.Enchantio;
import me.youhavetrouble.enchantio.EnchantioConfig; import me.youhavetrouble.enchantio.EnchantioConfig;
import me.youhavetrouble.enchantio.enchants.BeheadingEnchant; import me.youhavetrouble.enchantio.enchants.BeheadingEnchant;
import me.youhavetrouble.enchantio.enchants.EnchantioEnchant; import me.youhavetrouble.enchantio.enchants.EnchantioEnchant;
@@ -43,11 +44,11 @@ public class BeheadingListener implements Listener {
if (!(killer instanceof LivingEntity killerEntity)) return; if (!(killer instanceof LivingEntity killerEntity)) return;
EntityEquipment killerEquipment = killerEntity.getEquipment(); EntityEquipment killerEquipment = killerEntity.getEquipment();
if (killerEquipment == null) return; if (killerEquipment == null) return;
ItemStack weapon = killerEquipment.getItemInMainHand();
if (!weapon.containsEnchantment(beheading)) return; int level = Enchantio.getHighestEnchantLevel(killerEquipment, beheading);
if (level == 0) return;
double chance = weapon.getEnchantmentLevel(beheading) * beheadingEnchant.getChanceToDropHeadPerLevel(); double chance = level * beheadingEnchant.getChanceToDropHeadPerLevel();
if (ThreadLocalRandom.current().nextDouble() > chance) return; if (ThreadLocalRandom.current().nextDouble() > chance) return;
@@ -2,6 +2,7 @@ package me.youhavetrouble.enchantio.listeners;
import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryAccess;
import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.RegistryKey;
import me.youhavetrouble.enchantio.Enchantio;
import me.youhavetrouble.enchantio.EnchantioConfig; import me.youhavetrouble.enchantio.EnchantioConfig;
import me.youhavetrouble.enchantio.enchants.EnchantioEnchant; import me.youhavetrouble.enchantio.enchants.EnchantioEnchant;
import me.youhavetrouble.enchantio.enchants.ExecutionerEnchant; import me.youhavetrouble.enchantio.enchants.ExecutionerEnchant;
@@ -16,7 +17,6 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack;
@SuppressWarnings("UnstableApiUsage") @SuppressWarnings("UnstableApiUsage")
@@ -37,9 +37,8 @@ public class ExecutionerListener implements Listener {
EntityEquipment damagerEquipment = damagerEntity.getEquipment(); EntityEquipment damagerEquipment = damagerEntity.getEquipment();
if (damagerEquipment == null) return; if (damagerEquipment == null) return;
ItemStack attackingItem = damagerEquipment.getItemInMainHand(); int level = Enchantio.getSumOfEnchantLevels(damagerEquipment, executioner);
if (level == 0) return;
if (!attackingItem.containsEnchantment(executioner)) return;
Entity target = event.getEntity(); Entity target = event.getEntity();
if (!(target instanceof LivingEntity livingEntity)) return; if (!(target instanceof LivingEntity livingEntity)) return;
@@ -51,7 +50,7 @@ public class ExecutionerListener implements Listener {
double targetHealthPercentage = livingEntity.getHealth() / targetMaxHealth; double targetHealthPercentage = livingEntity.getHealth() / targetMaxHealth;
if (targetHealthPercentage < executionerEnchant.getMaxDamageHpThreshold()) { if (targetHealthPercentage < executionerEnchant.getMaxDamageHpThreshold()) {
double damageMultiplier = 1 + (executionerEnchant.getDamageMultiplierPerLevel() * attackingItem.getEnchantmentLevel(executioner)); double damageMultiplier = 1 + (executionerEnchant.getDamageMultiplierPerLevel() * level);
event.setDamage(event.getDamage() * damageMultiplier); event.setDamage(event.getDamage() * damageMultiplier);
} }
@@ -2,6 +2,7 @@ package me.youhavetrouble.enchantio.listeners;
import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryAccess;
import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.RegistryKey;
import me.youhavetrouble.enchantio.Enchantio;
import me.youhavetrouble.enchantio.EnchantioConfig; import me.youhavetrouble.enchantio.EnchantioConfig;
import me.youhavetrouble.enchantio.enchants.EnchantioEnchant; import me.youhavetrouble.enchantio.enchants.EnchantioEnchant;
import me.youhavetrouble.enchantio.enchants.PanicEnchant; import me.youhavetrouble.enchantio.enchants.PanicEnchant;
@@ -14,6 +15,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.inventory.EntityEquipment;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
@@ -37,26 +39,15 @@ public class PanicListener implements Listener {
EnchantioEnchant enchant = EnchantioConfig.ENCHANTS.get(PanicEnchant.KEY); EnchantioEnchant enchant = EnchantioConfig.ENCHANTS.get(PanicEnchant.KEY);
if (!(enchant instanceof PanicEnchant panicEnchant)) return; if (!(enchant instanceof PanicEnchant panicEnchant)) return;
PlayerInventory inventory = player.getInventory(); EntityEquipment equipment = player.getEquipment();
ItemStack highestPanicEnchantItem = null;
for (ItemStack item : inventory.getArmorContents()) { int level = Enchantio.getHighestEnchantLevel(equipment, panic);
if (item == null) continue; if (level == 0) return;
if (item.containsEnchantment(panic)) { double chance = level * panicEnchant.getPanicChancePerLevel();
if (highestPanicEnchantItem == null) {
highestPanicEnchantItem = item;
} else if (item.getEnchantmentLevel(panic) > highestPanicEnchantItem.getEnchantmentLevel(panic)) {
highestPanicEnchantItem = item;
}
}
}
if (highestPanicEnchantItem == null) return;
double chance = highestPanicEnchantItem.getEnchantmentLevel(panic) * panicEnchant.getPanicChancePerLevel();
if (ThreadLocalRandom.current().nextDouble() > chance) return; if (ThreadLocalRandom.current().nextDouble() > chance) return;
PlayerInventory inventory = player.getInventory();
List<ItemStack> hotbarItems = new ArrayList<>(Arrays.stream(inventory.getContents()).toList().subList(0, 9)); List<ItemStack> hotbarItems = new ArrayList<>(Arrays.stream(inventory.getContents()).toList().subList(0, 9));
Collections.shuffle(hotbarItems, ThreadLocalRandom.current()); Collections.shuffle(hotbarItems, ThreadLocalRandom.current());