112 lines
4.1 KiB
Java
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]");
|
|
}
|
|
}
|
|
}
|