Войти или зарегистрироваться

Помогите Как проверить, есть ли такой ключ в HashMap

Статус
Закрыто для дальнейших ответов.

xflyiwnl

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
xflyiwnl
И так, у меня есть HashMap, в котором записываю все нужные мне данные.
Код:
private static HashMap<Player, Economy> economies = new HashMap<Player, Economy>();

И получаю нужные мне данные через:

Код:
public static Economy getEconomy(Player player) {
    return economies.get(player);
}

public static HashMap<Player, Economy> getEconomies() {
    return economies;
}

И теперь мне надо проверить, есть ли такой ключ в HashMap:

Код:
@EventHandler
    public void onJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();

        if (!EconomyManager.getEconomies().containsKey(player)) {
            Economy economy = new Economy(player, 0);
            EconomyManager.getEconomies().put(player, economy);
        }

    }

Захожу на сервер, игрок добавляется в хэшмап и всё правильно.

И я для примера выдам игроку 500 заработанных монет:

Код:
if (args[0].equalsIgnoreCase("set")) {
            EconomyManager.getEconomy(player).setEarned(Integer.valueOf(args[1]));
            return true;
        }

Монеты выдаются и всё отображается правильно.

НО проблема в том, что после перезахода игрока все данные сбрасываются и игрок записывается в хэшмап заново. Может я проверяю на наличие игрока в хэшмапе неправильно?

Все классы:

EconomyManager:

Код:
public class EconomyManager {

    private static HashMap<Player, Economy> economies = new HashMap<Player, Economy>();

    public static Economy getEconomy(Player player) {
        return economies.get(player);
    }

    public static HashMap<Player, Economy> getEconomies() {
        return economies;
    }
}

EventManager:

Код:
public class EventManager implements Listener {

    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        Player player = event.getPlayer();

        if (!EconomyManager.getEconomies().containsKey(player)) {
            Economy economy = new Economy(player, 0);
            EconomyManager.getEconomies().put(player, economy);
        }

    }

}

Economy:

Код:
public class Economy {

    private Player player;
    private Integer earned;

    public Economy(Player player, Integer earned) {
        this.player = player;
        this.earned = earned;
    }

    public Player getPlayer() {
        return player;
    }

    public Integer getEarned() {
        return earned;
    }

    public void setEarned(Integer earned) {
        this.earned = earned;
    }

}
 
1)не апай тему через две минуты, она и так в топе
2)economies.containsKey(player) проверяет, есть ли ключ в мапе
 
В твоём случае надо хранить не объект <Player>, а String ника игрока или UUID игрока.
Если не имеешь приватного лаунчера, то лучше записывать UUID, соответственно при входе поместить в контейнс
event.getPlayer().getUUID();
 
В твоём случае надо хранить не объект <Player>, а String ника игрока или UUID игрока.
Если не имеешь приватного лаунчера, то лучше записывать UUID, соответственно при входе поместить в контейнс
event.getPlayer().getUUID();
Сейчас проверю, спасибо за быстрый ответ!
 
Объект игрока можно хранить в рантайме, но не в хешмапе, после перезахода на сервере у тебя создается новый объект, исходя из этого и не находит через контейнс в мапе.
 
Объект игрока можно хранить в рантайме, но не в хешмапе, после перезахода на сервере у тебя создается новый объект, исходя из этого и не находит через контейнс в мапе.
Блин, спасибо вам огромное!
Много времени не кодил, забыл про это.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх