Bukkit - 名字的健康

时间:2013-05-03 05:29:51

标签: java bukkit

固定

我正在尝试在我的实体名称旁边添加一个健康栏,例如:

3级骨架||||

哪里的酒吧健康多少,满分5分。 我已经尝试了一切,但我无法弄明白!我觉得它很简单,但我无法得到它......

@EventHandler
public void entityDamageEntity(EntityDamageEvent event) {
    LivingEntity entity = (LivingEntity) event.getEntity();
    if (entity.getCustomName() != null) {
        entity.setCustomName(entity.getCustomName().replaceAll("|", ""));
        int health = (int) Math.ceil(entity.getHealth() / entity.getMaxHealth() * 5);
        int i = 1;
        String healthbar = " |";
        while(i < health){
            i++;
            healthbar = healthbar + "|";
        }
        entity.setCustomName(entity.getCustomName() + healthbar);
    }
}

我似乎无法让它上​​班!它做了奇怪的事情,尝试使用命名实体。如果有人能指出错误,那就太好了= D

http://i.stack.imgur.com/RYdcI.png

固定代码:

@EventHandler
public void entityDamageEntity(EntityDamageEvent event) {
    LivingEntity entity = (LivingEntity) event.getEntity();
    if (entity.getCustomName() != null) {
        entity.setCustomName(entity.getCustomName().replaceAll("\\|", ""));
        int health = (int) ((float) entity.getHealth() / entity.getMaxHealth() *5);
        if (health > 0){
            char[] bars = new char[health + 1];
            Arrays.fill(bars, '|');
            entity.setCustomName(entity.getCustomName() + " " + new String(bars));
            entity.setCustomName(entity.getCustomName().replaceAll("  ", " "));
        } else {
            entity.setCustomName(entity.getCustomName()); 
            entity.setCustomName(entity.getCustomName().replaceAll("  ", " "));
        }
    }
}

2 个答案:

答案 0 :(得分:1)

我在这看到一个直接的问题。 |是正则表达式中的特殊字符,因此您应该转义此字符。

尝试:

entity.setCustomName(entity.getCustomName().replaceAll("\\|", ""));

答案 1 :(得分:1)

因此,如果没有进入游戏,你会遇到代码的一个主要问题(你将两个整数划分为0),然后是附加字符串的效率问题。修复第一个

int health = (int) ((float) entity.getHealth() / entity.getMaxHealth() *5);

您现在要做的是追加0到5个健康栏。以下将创建一个1到5'|'的数组。它比while循环更有效,因为它只是直接创建所需的数组大小,而不是使用追加。

if (health > 0){
    char[] bars = new char[health];
    Arrays.fill(bars, '|');
    entity.setCustomName(entity.getCustomName()+" " + new String(bars));
} else {
    entity.setCustomName(entity.getCustomName()); // no bars to add
}