1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Bomber123, 30 авг 2017.

  1. Автор темы
    Bomber123

    Bomber123 Активный участник Пользователь

    Баллы:
    76
    Привет форумчане!
    Не давно столкнулся с такой проблемой. Когда я запрашиваю ключи, и открываю кейс с другим игроком то количество ключей у обоих одинаково. Как исправить?
    код
     
    Последнее редактирование: 31 авг 2017
  2. iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    76
    Объясняй нормально. а такой троллинг тонкий, что картинку с нета спер - топ. Хорошо, что я удосужился проверить, что это за творение гугла
     
  3. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    Картинка это ссылка на паст бин.

    Теперь вопрос в ТС.
    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);
    }

    Что из этого тебе не понятно?
     
  4. iD3LSY

    iD3LSY Активный участник Пользователь

    Баллы:
    76
    я написал, что удосужился проверить, а дальше - в коде он использует в addKey,removeKey переменную keys. Видимо не дошло использовать keys.put(p.getname(),keys.getOrDefault(p.getname(),0)-1);
     
  5. _MasterCapeXD_

    _MasterCapeXD_ Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    _MasterCapeXD_
    CSS код)
     
  6. Автор темы
    Bomber123

    Bomber123 Активный участник Пользователь

    Баллы:
    76
    Посмотри внимательно на пасте бине.
     
  7. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    Да пример работы показал, я как бы вообще не понял, что ты пытаешься сделать. И где у тебя переменная keys объявлена.
     
  8. Автор темы
    Bomber123

    Bomber123 Активный участник Пользователь

    Баллы:
    76
    она статическая я паст бин обновлял.
     
  9. gamerforEA

    gamerforEA Старожил Пользователь

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Небезопасный код. Лучше так:
    Код:
    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);
            }
        }
    }
     
  10. Автор темы
    Bomber123

    Bomber123 Активный участник Пользователь

    Баллы:
    76
    Ребята ну если помогаете то посмотрите на паст бине я для кого код оставлял.
    Там написано что метод add принимает два аргумента игрока и количество ключей а remove сокращает их на 1.
    И метод add статический чтобы можно было управлять им в другом классе. А класс этот для выдачи этих ключей с помощью команды /getkey [nickname] [amount]. Усё. Мне надо чтобы у каждого игрока было своё количество ключей. Чтобы не было вот так [​IMG] [​IMG]
    а потом и у обоих по 20.
     
  11. Rider3217

    Rider3217 Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    И скинул не инкапсулированный код, норм.
     
  12. Rider3217

    Rider3217 Активный участник Пользователь

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

    Возьми этот код, инкапсулируй его, если хочешь, и переделай под себя.
     
  13. Rider3217

    Rider3217 Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    И поменяй уже название темы хотя бы на "Как хранить ключи от кейсов игроков в Map", а то сразу не понятно, что ты хочешь.
     
  14. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Qamulex
  15. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    getOrDefault для кого придумали?
     
  16. Rider3217

    Rider3217 Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    Код:
       
        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);
        }
    
    
     
  17. Godness1

    Godness1 Новичок Пользователь

    Баллы:
    6
    А тебе не насрать, что при перезагрузке сервера всё пропадёт?
     
  18. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    А это уже его проблемы)0
     
  19. Godness1

    Godness1 Новичок Пользователь

    Баллы:
    6
    Согласен. Хотя чего ожидать от ваниль б****
     
  20. Godness1

    Godness1 Новичок Пользователь

    Баллы:
    6
    Мб так будет правильнее:
    private static Map<String, Integer> player_keys = new HashMap<String, Integer>();
     

Поделиться этой страницей