java - Bukkit - 名义上的健康

标签 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

/image/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("  ", " "));
        }
    }
}

最佳答案

因此,在不进入游戏的情况下,您的代码会遇到 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
}

关于java - Bukkit - 名义上的健康,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16352206/

相关文章:

java - Bukkit/Spigot API : Mapping damager and Victim

即使在检查库中的类是否正确之后,也会出现 Java ClassNotFoundException

java - 我需要解析字符串并提取信息以输入数据库

java - 服务器使用 Atmosphere IO 定期推送

java - JScrollPane 没有滚动超过设定的大小

java - 不支持的 JNI 版本 0xFFFFFFFF

java - 插件在启动时抛出版本错误?

Java while 函数每1秒才执行一次

java - Maven + GWTTestCase + Test => 没有源代码可用于 nnn 类型(依赖项)

java - server.getWorld(String) 总是返回 null?武 git API