0

修繕

次のように、エンティティ名の横にヘルス バーを追加しようとしています。

レベル 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("  ", " "));
        }
    }
}
4

2 に答える 2

1

ここですぐに問題が発生します。|は正規表現の特殊文字であるため、この文字をエスケープする必要があります。

試す:

entity.setCustomName(entity.getCustomName().replaceAll("\\|", ""));
于 2013-05-03T05:47:30.897 に答える
1

したがって、ゲームに参加しなくても、コードに大きな問題が 1 つあります (2 つの整数を除算すると 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
}
于 2013-05-03T05:53:24.507 に答える