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

FIXED КОД:

@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

+0

никаких проблем, рад, что все исправлено – greedybuddha

+0

Да. У меня была проблема с 'entity.setCustomName (entity.getCustomName() +" "+ new String (бары));' Добавление пробела между именем сущностей и столбцами, поэтому после этого я добавил: ' entity.setCustomName (entity.getCustomName(). replaceAll ("", "")); – Paul

1

Я вижу непосредственную проблему здесь. | - специальный символ в регулярном выражении, поэтому вам следует избегать этого символа.

Try:

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

Спасибо! Я заметил, что он не удаляет бары, забыл, что это особый персонаж. – Paul

Смежные вопросы