package com.yaohun.petsystem.api; import com.yaohun.petsystem.PetMain; import com.yaohun.petsystem.data.PetData; import com.yaohun.petsystem.data.PlayerData; import com.yaohun.petsystem.manage.LevelExpManager; import com.yaohun.petsystem.manage.PetManager; import com.yaohun.petsystem.manage.PlayerManager; import com.yaohun.petsystem.model.PetNbt; import de.tr7zw.nbtapi.NBTItem; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; public class PetExpAPI { public static void addExp(Player player, int addExp) { String playerName = player.getName(); PlayerManager playerManager = PetMain.getPlayerManager(); PlayerData playerData = playerManager.getPlayerData(playerName); if (playerData.isPetStackNull()) { System.out.println("[日志 - 灵宠] 玩家 " + playerName + " 尚未携带宠物."); return; } PetNbt petNbt = playerData.getPetNbt(); String petKey = petNbt.petData.getFileName(); PetData petData = PetManager.getPetData(petKey); if (petData == null) { System.out.println("[日志 - 灵宠] 未添加 " + petKey + " 的宠物配置."); return; } int petLevel = petNbt.level; int levelCap = getLevelCap(petData, petNbt.evolution); if (petLevel >= levelCap) { return; } int needExp = LevelExpManager.getNeedExpValue(petLevel); petNbt.setTotalExp(petNbt.totalExp + addExp); int nowExp = petNbt.exp; addExp = nowExp + addExp; while (needExp > 0 && petLevel < levelCap && addExp >= needExp) { addExp -= needExp; petLevel++; needExp = LevelExpManager.getNeedExpValue(petLevel); bcmupLevelEvant(playerName, petLevel); } petNbt.setExp(addExp); petNbt.setLevel(petLevel); playerData.refreshPetStack(); playerData.savePlayerData(); } public static PetNbt addExp(String playerName, ItemStack stack, int addExp) { NBTItem nbtItem = new NBTItem(stack); String petKey = nbtItem.getString("petKey"); PetData petData = PetManager.getPetData(petKey); if (petData == null) { System.out.println("[日志 - 灵宠] 未添加 " + petKey + " 的宠物配置."); return null; } PetNbt petNbt = new PetNbt(); petNbt.loadNbtData(nbtItem); int petLevel = petNbt.level; int levelCap = getLevelCap(petData, petNbt.evolution); if (petLevel >= levelCap) { return petNbt; } int needExp = LevelExpManager.getNeedExpValue(petLevel); petNbt.setTotalExp(petNbt.totalExp + addExp); int nowExp = petNbt.exp; addExp = nowExp + addExp; while (needExp > 0 && petLevel < levelCap && addExp >= needExp) { addExp -= needExp; petLevel++; needExp = LevelExpManager.getNeedExpValue(petLevel); bcmupLevelEvant(playerName, petLevel); } petNbt.setExp(addExp); petNbt.setLevel(petLevel); return petNbt; } private static int getLevelCap(PetData petData, int evolution) { int maxLevel = petData.getMaxLevel(); int evolutionLimit = switch (evolution) { case 1 -> 20; case 2 -> 40; case 3 -> 60; case 4 -> 70; case 5 -> 75; default -> maxLevel; }; if (maxLevel <= 0) { return evolutionLimit; } return Math.min(maxLevel, evolutionLimit); } public static void bcmupLevelEvant(String playerName, int level) { boolean butt = false; if (level == 10 || level == 20 || level == 30 || level == 40 || level == 50 || level == 60 || level == 70 || level == 80 || level == 90 || level == 100 || level == 105 || level == 110 || level == 115 || level == 120 || level == 125) { butt = true; } if (butt) { // Bukkit.broadcastMessage("§f[§c§l公告§f] §a玩家§e"+playName+"§a本月器师手礼达到了 §7[§e§lLv."+level+"§7]"); } } }