2013-05-03 48 views
0

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

回答

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 
} 
+0

谢谢你解决这个问题。 – Paul 2013-05-03 06:07:49

+0

没问题,很高兴它全部修好了 – greedybuddha 2013-05-03 06:12:30

+0

是的。我在 'entity.setCustomName(entity.getCustomName()+“”+ new String(bars))中遇到了问题;' 在实体名称和条形图之间添加了一个空格,之后我添加了: ' entity.setCustomName(entity.getCustomName()。replaceAll(“”,“”));' – Paul 2013-05-03 06:19:05

1

我在这里看到一个迫在眉睫的问题。 |是正则表达式中的一个特殊字符,所以你应该逃避这个角色。

尝试:

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

谢谢!我注意到它并没有移除酒吧,忘记了它是一个特殊的字符。 – Paul 2013-05-03 06:02:33