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

Помогите Помогите с HashMap, пожалуйста!

  • Автор темы Автор темы ShaGTF
  • Дата начала Дата начала

ShaGTF

Активный участник
Пользователь
Баллы
68
Имя в Minecraft
CoolShaGGy
@JustBlender @JustBlender @JustBlender Bitch
Здравствуйте! После того, как Googlъ мне не помог, пишу сюда. Пишу Fun плагин про
Богов, ну в общем, вот код:
Код:
    public final HashMap<Player, ArrayList<Block>> check = new HashMap<Player, ArrayList<Block>>();

    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
        Player pl = (Player) sender;
        if(sender instanceof Player){
            if(pl.hasPermission("thor.use")){
            if(commandLabel.equalsIgnoreCase("thor")){
                if(check.containsKey(pl)){
                    check.remove(pl);
                    pl.sendMessage(ChatColor.DARK_RED + "Now you are just a mortal!");
                }else {
                check.put(pl, null);
                pl.sendMessage((ChatColor.GOLD + "Now you have Thor power!"));
                }
            }
            }else {
                pl.sendMessage(ChatColor.DARK_RED + "You do not have permissions to do it!");
            }
        }
        return false;
    }
    @EventHandler
    public void onInteract(PlayerInteractEvent e){
        Player p = (Player) e.getPlayer();
        if(check.containsKey(pl)){ //Здесь надо чекнуть присутвствие Player pl = (Player) sender;, но как?
            if(p.getItemInHand().getType().equals(Material.APPLE))
            p.sendMessage("Sweggayolo");
        }
    }
}
Может надо поменять на ArrayList, но я же newbie-dumbie и ничего не понимаю :)
Мучаюсь с этим второй день, halp please! :3
 
Последнее редактирование:
А проблема в чем?
И никогда не храните объект игрока где-либо.
 
А проблема в чем?
И никогда не храните объект игрока где-либо.
Проблема в том, что мне надо определить игрок в hashmap или нет, то есть использовал ли он команду или нет, в PlayerInteractEvent, но как?
 
Код:
        Player pl = (Player) sender;
        if(sender instanceof Player){
Поменяй местами, иначе ClassCastException полезет, если команду выполнит что-то отличное от игрока.
 
А что делать с моей проблемой?
И вместо объекта Player, храни UUID игрока ( pl.getUniqueId().toString(); ), а когда нужно, получай getServer().getPlayer("/*UUID*/");
Только перед получением игрока проверяй его на null и на онлайн.
 
Последнее редактирование:
И вместо объекта Player, храни UUID игрока ( pl.getUniqueId().toString(); ), а когда нужно, получай getServer().getPlayer("/*UUID*/");
Ну это для постоянного хранения нужно. А если нужно что-то "включить" игроку на время сеанса (т.е. до его выхода из игры), то и сойдёт вариант с хранением объекта Player.
 
Ну это для постоянного хранения нужно. А если нужно что-то "включить" игроку на время сеанса (т.е. до его выхода из игры), то и сойдёт вариант с хранением объекта Player.
Но это не совсем правильно, хранить этот объект в ХМ.
 
То, что он перестает соответствовать игроку после респавна.
И в том что он тащит хреналион ссылок на всякое дерьмо вместе с собой. И я сомневаюсь что ТС знает все ситуации когда надо убирать ссылку из хэшмапы.
Соответствие кстати поправили таки где-то в 1.7.9.
 
Назад
Верх