2013-05-03 72 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