Помогите Как хранить ключи от кейсов игроков в Map

Bomber123

Активный участник
Пользователь
Баллы
76
Привет форумчане!
Не давно столкнулся с такой проблемой. Когда я запрашиваю ключи, и открываю кейс с другим игроком то количество ключей у обоих одинаково. Как исправить?
код
 
Последнее редактирование:
Объясняй нормально. а такой троллинг тонкий, что картинку с нета спер - топ. Хорошо, что я удосужился проверить, что это за творение гугла
 
Объясняй нормально. а такой троллинг тонкий, что картинку с нета спер - топ. Хорошо, что я удосужился проверить, что это за творение гугла
Картинка это ссылка на паст бин.

Теперь вопрос в ТС.
HashMap<String, Integer> keys = new HashMap<>();

void add(Player p, int key){
keys.put(p.getNmae(), key)
}

void remove(Player p, int key) {
int _key = keys.get(p.getName());
_key -= key;
keys.put(p.getName(), _key);
}

Что из этого тебе не понятно?
 
Картинка это ссылка на паст бин.

Теперь вопрос в ТС.
HashMap<String, Integer> keys = new HashMap<>();

void add(Player p, int key){
keys.put(p.getNmae(), key)
}

void remove(Player p, int key) {
int _key = keys.get(p.getName());
_key -= key;
keys.put(p.getName(), _key);
}

Что из этого тебе не понятно?
я написал, что удосужился проверить, а дальше - в коде он использует в addKey,removeKey переменную keys. Видимо не дошло использовать keys.put(p.getname(),keys.getOrDefault(p.getname(),0)-1);
 
Картинка это ссылка на паст бин.

Теперь вопрос в ТС.
HashMap<String, Integer> keys = new HashMap<>();

void add(Player p, int key){
keys.put(p.getNmae(), key)
}

void remove(Player p, int key) {
int _key = keys.get(p.getName());
_key -= key;
keys.put(p.getName(), _key);
}
Что из этого тебе не понятно?
Посмотри внимательно на пасте бине.
 
HashMap<String, Integer> keys = new HashMap<>();

void add(Player p, int key){
keys.put(p.getNmae(), key)
}

void remove(Player p, int key) {
int _key = keys.get(p.getName());
_key -= key;
keys.put(p.getName(), _key);
}
Небезопасный код. Лучше так:
Java:
HashMap<String, Integer> keys = new HashMap<>();

int get(Player p) {
    Integer i = keys.get(p.getName());
    return i == null ? 0 : i;
}

void add(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i == null)
            keys.put(name, key);
        else
            keys.put(name, i + key);
    }
}

void remove(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i != null) {
            i -= key;
            if (i > 0)
                keys.put(name, i);
            else
                keys.remove(name);
        }
    }
}
 
Небезопасный код. Лучше так:
Java:
HashMap<String, Integer> keys = new HashMap<>();

int get(Player p) {
    Integer i = keys.get(p.getName());
    return i == null ? 0 : i;
}

void add(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i == null)
            keys.put(name, key);
        else
            keys.put(name, i + key);
    }
}

void remove(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i != null) {
            i -= key;
            if (i > 0)
                keys.put(name, i);
            else
                keys.remove(name);
        }
    }
}
Ребята ну если помогаете то посмотрите на паст бине я для кого код оставлял.
Там написано что метод add принимает два аргумента игрока и количество ключей а remove сокращает их на 1.
И метод add статический чтобы можно было управлять им в другом классе. А класс этот для выдачи этих ключей с помощью команды /getkey [nickname] [amount]. Усё. Мне надо чтобы у каждого игрока было своё количество ключей. Чтобы не было вот так
kakpng_5005008_27379396.png
kakpng_5005008_27379396.png

а потом и у обоих по 20.
 
Небезопасный код. Лучше так:
Java:
HashMap<String, Integer> keys = new HashMap<>();

int get(Player p) {
    Integer i = keys.get(p.getName());
    return i == null ? 0 : i;
}

void add(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i == null)
            keys.put(name, key);
        else
            keys.put(name, i + key);
    }
}

void remove(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i != null) {
            i -= key;
            if (i > 0)
                keys.put(name, i);
            else
                keys.remove(name);
        }
    }
}
И скинул не инкапсулированный код, норм.
 
Ребята ну если помогаете то посмотрите на паст бине я для кого код оставлял.
Там написано что метод add принимает два аргумента игрока и количество ключей а remove сокращает их на 1.
И метод add статический чтобы можно было управлять им в другом классе. А класс этот для выдачи этих ключей с помощью команды /getkey [nickname] [amount]. Усё. Мне надо чтобы у каждого игрока было своё количество ключей. Чтобы не было вот так
kakpng_5005008_27379396.png
kakpng_5005008_27379396.png

а потом и у обоих по 20.
Ну ясен пень у обоих 20 потом... Ты ж используешь глобальную переменную для хранения ключей, причем для всех игроков.

Возьми этот код, инкапсулируй его, если хочешь, и переделай под себя.
Небезопасный код. Лучше так:
Java:
HashMap<String, Integer> keys = new HashMap<>();

int get(Player p) {
    Integer i = keys.get(p.getName());
    return i == null ? 0 : i;
}

void add(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i == null)
            keys.put(name, key);
        else
            keys.put(name, i + key);
    }
}

void remove(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i != null) {
            i -= key;
            if (i > 0)
                keys.put(name, i);
            else
                keys.remove(name);
        }
    }
}
 
И поменяй уже название темы хотя бы на "Как хранить ключи от кейсов игроков в Map", а то сразу не понятно, что ты хочешь.
 
Небезопасный код. Лучше так:
Java:
HashMap<String, Integer> keys = new HashMap<>();

int get(Player p) {
    Integer i = keys.get(p.getName());
    return i == null ? 0 : i;
}

void add(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i == null)
            keys.put(name, key);
        else
            keys.put(name, i + key);
    }
}

void remove(Player p, int key) {
    if (key > 0) {
        String name = p.getName();
        Integer i = keys.get(name);
        if (i != null) {
            i -= key;
            if (i > 0)
                keys.put(name, i);
            else
                keys.remove(name);
        }
    }
}
getOrDefault для кого придумали?
 
Код:
    private static Map<String, Integer> player_keys = new HashMap<>();
    
    
    public static int get(String name) {
        return player_keys.getOrDefault(name, 0);
    }
    
    public static void add(String name, int count) {
        player_keys.put(name, get(name)+count);
    }
    
    public static int remove(String name) {
        int count = get(name);
        if(count <= 0)return 0;
        return player_keys.put(name, count-1);
    }
 
Привет форумчане!
Не давно столкнулся с такой проблемой. Когда я запрашиваю ключи, и открываю кейс с другим игроком то количество ключей у обоих одинаково. Как исправить?
код
А тебе не насрать, что при перезагрузке сервера всё пропадёт?
 
Код:
    private static Map<String, Integer> player_keys = new HashMap<>();
   
   
    public static int get(String name) {
        return player_keys.getOrDefault(name, 0);
    }
   
    public static void add(String name, int count) {
        player_keys.put(name, get(name)+count);
    }
   
    public static int remove(String name) {
        int count = get(name);
        if(count <= 0)return 0;
        return player_keys.put(name, count-1);
    }
Мб так будет правильнее:
private static Map<String, Integer> player_keys = new HashMap<String, Integer>();
 
Назад
Верх