基本的に、サーバーで特定のコマンドを入力すると、このコードがすべて複数回 (20 回以上) 読み込まれます。何らかの理由で、コマンドを入力するたびに、サーバーがフリーズします (コンソールを含む)。サーバーを停止して再起動すると、サーバーが実行されているポートに何かがバインドされていると表示されるため、サーバープロセスを強制終了する必要があります。コマンドを発行したときに実行中の計算が多すぎるためですか? 以前はそれほどクラッシュしなかったことを覚えていますが、パーセントバーの計算方法を変更した後は、毎回クラッシュします。
package com.mcvigor.utils;
import java.util.ArrayList;
import org.apache.commons.lang.WordUtils;
import org.bukkit.ChatColor;
import org.bukkit.inventory.meta.ItemMeta;
import com.mcvigor.RunePlayer;
import com.mcvigor.Skills;
public class ItemUtils {
public static ItemMeta addSkillInformation(ItemMeta i, Skills skill, RunePlayer rp) {
i.setDisplayName(ChatColor.GOLD + WordUtils.capitalize(skill.toString().toLowerCase()));
ArrayList<String> lore = new ArrayList<String>();
lore.add(ChatColor.RED + "Level " + ChatColor.YELLOW + rp.getSkillLevel(skill));
int xp = rp.getSkillXP(skill);
int neededXP = rp.getXPRequiredForLevel((rp.getSkillLevel(skill) + 1));
lore.add(ChatColor.RED + "Experience: " + ChatColor.YELLOW + xp + ChatColor.RED + " / " + ChatColor.YELLOW + neededXP);
lore.add(ChatColor.RED + "Remainder: " + ChatColor.YELLOW + (neededXP - xp));
float percent = (xp/neededXP);
int percent10 = (int) Math.floor(percent * 10);
String bar = "";
while (percent10 >= 10) {
bar += ChatColor.GREEN + "▀";
percent--;
}
while (percent10 < 10) {
bar += ChatColor.RED + "▀";
percent10--;
}
lore.add(ChatColor.RED + "Percent to next level: " + ChatColor.YELLOW + (int) percent + ChatColor.RED + "%");
lore.add(bar);
i.setLore(lore);
return i;
}
}
編集:その理由を考えてください:
while (percent10 < 10) {
bar += ChatColor.RED + "▀";
percent10--;
}
percent10 は常に 10 未満になるため、繰り返し続けます。