Spigot 插件开发 - 玩家死亡时减去变量

Spigot Plugin Development - Subtract variable when player dies

我想做一个插件,计算玩家的生命值。例如,每个玩家都有 3 条生命。每当他死去时,他都会失去 1 条生命。当他的生命值达到 0 时,他就会被禁止。

我的方法是这样的

public class OnPlayerDeath implements Listener {

    private int lives = 3;

    @EventHandler
    public void OnDeath(PlayerDeathEvent event){
        Player player = event.getEntity().getPlayer();
        if (!(player.getKiller() instanceof Player)) 
            player.sendMessage("Died by a something else. You have " + lives + " lives left.");
        else {
            player.sendMessage("Died by a human. You have " + lives + " lives left.");
            lives--;
        }
    }
}

问题是,每当玩家死亡时,消息始终显示相同的变量“3”。如何解决?

您必须为每位玩家保存生命值。

尝试使用 HashMap

例如:

public class OnPlayerDeath implements Listener {

// Make new HashMap
private Map<Player, Integer> livesMap = new HashMap<>();

@EventHandler
public void OnDeath(PlayerDeathEvent event){
    Player player = event.getEntity().getPlayer();

    int lives;

    if(!livesMap.containsKey(player)) {
        // Set the default amount of lives to 2. (3 minus 1, since the player already died once)
        lives = 2;
    } else {
        // Subtract one from the player's lives
        lives = livesMap.get(player) - 1;  
    }

    if (!(player.getKiller() instanceof Player)) {
        player.sendMessage("Died by a something else. You have " + lives + " lives left.");
    } else {
        player.sendMessage("Died by a human. You have " + lives + " lives left.");
    }

    // Update new life count
    livesMap.put(player, lives);
}

}

A HashMap 允许您为每个键保存一个值。在这种情况下,每个玩家的生命计数。