Files
AuPet/src/main/java/com/yaohun/petsystem/api/PetExpAPI.java
2026-06-03 07:09:32 +08:00

112 lines
4.1 KiB
Java

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]");
}
}
}