Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Ключи HashMap пропадают после перезагрузки сервера

Discussion in 'Разработка плагинов для новичков' started by Lisenochek, Jul 6, 2016.

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Всем привет. Как сделать так, чтобы ключи HashMap не пропадали после перезапуска сервера. Например. Человек заболел. После перезагрузки он болеть перестает, но вот бесконечный голод остается, а мне это не надо. Помогите мне с проблемой.
     
  2. Хостинг MineCraft
    <
  3. CoolBoy

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Не пользоваться HashMap. Храни данные о заболевших в Flat файлах, либо mysql.
     
  4. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Так записывай мапу в конфиг.
     
  5. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Как? Я только ArrayList юзал и то как-то криво.[DOUBLEPOST=1467819973,1467819942][/DOUBLEPOST]
    Что такое Flat файл?
     
  6. Reality_SC

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
    При выключении плагина вручную сохранять всё содержимое hashmap в файл, при включении -- восстанавливать.
     
  7. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    А как это сделать? Я пробовал, как с ArrayList, но ничего не вышло.
     
  8. Sonicxd2

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

    Trophy Points:
    76
    Code:
          HashMap<Player, String> hashmap = new HashMap<>();
            for(Player p:hashmap.keySet()){
                plugin.getConfig().set("hashmap."+p.getName(), hashmap.get(p));
            }
    Примерно так, при заходе игрока смотришь есть ли у него болезнь.
     
  9. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Ничего не происходит. Вот немного переделанный код:

    Code:
        public static HashMap<Player, Boolean> sickPlayers = new HashMap<Player, Boolean>(); {
            for(Player p:sickPlayers.keySet()) {
                plugin.getConfig().set("hashmap."+p.getName(), sickPlayers.get(p));
            }
        }
    Может быть у меня хешмепы в другой классе?
     
  10. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Просто у тебя код делает невыполняемые функции.
    Цикл с сохранением надо производить при сохранении мапы, а не после её инициализации.
    Хранить в картах Player - фу. Храни либо UUID, либо ник игрока.
     
  11. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Не понимаю, как!

    Понял только то, что нельзя сохранять мапу после ее включения.

    UUID хотелось бы сделать, но когда делал, не работало,а ник неймы - устарело.
     
  12. CoolBoy

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

    Trophy Points:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Мозги твои устарели, а мапки с никами отлично работают. Под UUID сейчас только лицушники стелятся, ибо с ними гемморой. На пиратке же с UUID можно не мучиться.
     
  13. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek

    Значит понятно. Буду использовать ники.

    Почитав гайды я понял, что мапы надо сохранять в ГК в onEnable или в onDisable, пытался циклом, который чуть выше, но не вышло.
     
    Last edited: Jul 8, 2016
  14. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А зачем тебе HashMap, когда можно обойтись ArrayList?
     
  15. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Да не знаю. Как-то привык к нему.[DOUBLEPOST=1467966314,1467966146][/DOUBLEPOST]
    Настраивать его мне как-то проще. С ArrayList можно сказать я почти не знаком. Разве что только он читает миры, в котором плагин работать не будет.
     
  16. Code

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

    Trophy Points:
    123
    Имя в Minecraft:
    _Gizmo
    из хешмапы быстрее будет достать map.get(player). чем из листа list.contains(player), но сохранять эту мапу как мапу действительно тупо.

    Автор, ты же сказал, что сохранял ArrayList? возьми из мапы только тех, у кого стоит true, и запиши в этот лист и сохрани. При загрузке загрузи этот лист и всех из листа запихни в мапу.
     
  17. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    Попробовал в ГК сделать так:

    Code:
        public  void saveHashMap() {
            try {
                YamlConfiguration cfg = new YamlConfiguration();
                for(Player p : com.realistic.list.MinecraftList.sickPlayers.keySet()) {
                    this.getConfig().set("hashmap."+p.getName(), com.realistic.list.MinecraftList.sickPlayers.get(p));
                }
                File f = new File (getDataFolder()+File.separator+"hashmap.yml");
                if (f.exists()) f.delete();
                cfg.save(f);
            } catch (Exception e){
                e.printStackTrace();
            }
        }
    Наверно очередной мой криворукий код. Он все равно не сохраняет.
     
  18. slavik123123123

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

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Code:
        HashMap<String, Boolean> hm = new HashMap<String, Boolean>();
        Random r = new Random();
        public void onEnable() {
            this.saveDefaultConfig();
            if (this.getConfig().isConfigurationSection("hm")) {
                for (String a : this.getConfig().getConfigurationSection("hm").getKeys(false)) {
                    hm.put(a, this.getConfig().getBoolean("hm." + a));
                    this.getConfig().set("hm." + a, null);
                }
                this.saveConfig();
            }
            System.out.print(hm);
            putMap();
            this.getServer().getPluginManager().registerEvents(this, this);
        }
    
        public void onDisable() {
            for (String pn : hm.keySet()) {
                this.getConfig().set("hm."+ pn, hm.get(pn));
            }
            this.saveConfig();
        }
        public void putMap() {
            if (hm.isEmpty()) {
                for (int i=0; i < 30; i ++) {
                    hm.put("player"+ r.nextInt(999999), r.nextBoolean());
                }
            }
            System.out.print(hm);
        }
    както так получилось. putMap() игнорируй.
     
  19. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    А почему String, а не Player?[DOUBLEPOST=1467969250,1467969107][/DOUBLEPOST]Если я поставлю String, ругаются все классы, где задействован хешмеп.
     
  20. slavik123123123

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

    Trophy Points:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Потомучто потом получить назад игрока немного сложнее.[DOUBLEPOST=1467969597,1467969554][/DOUBLEPOST]
    Ну так добавляй в мапу или бери из неё через player.getName()
     
  21. Автор темы
    Lisenochek

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

    Trophy Points:
    76
    Имя в Minecraft:
    Lisenochek
    В цикле не знаю, что указать. Укажу String - ругается на Bukkit.getOnlinePlayers(), а из-за этого ругается весь класс с таймером.
     

Share This Page