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

Помогите Хеширование локации

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

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

    slime_j Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    slime_j
    Не могу понять почему при попытке вытягивания из HashMap Локации(Location) выбивает в null
    Не спрашивайте зачем я делаю команду /home и /sethome.
    /sethome работает нормально и выписывает локацию из home.get(p.getUniqueId()) так же нормально
    а вот при срабатывании /home всегда уходит в if(loc == null)

    Код:
    HashMap<UUID, Location> home = new HashMap<UUID, Location>();
    
    if(command.getName().equalsIgnoreCase("sethome")) {
                Location loc = p.getLocation();
                home.put(p.getUniqueId(), loc);
                p.sendMessage(ChatColor.AQUA + "Точка дома успешно установлена " + home.get(p.getUniqueId()));
                return true;
            }
    
    if(command.getName().equalsIgnoreCase("home")) {
                Location loc = home.get(p.getUniqueId());
                if(loc == null){
                    p.sendMessage(ChatColor.RED + "У вас нету дома... Жаль");
                }else {
                    p.teleport(loc);
                    p.sendMessage(ChatColor.AQUA + "Вы успешно телепортировались домой");
                    return true;
                }
            }
     
  2. Sneyzi

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

    Баллы:
    76
    Покажи весь класс
     
  3. Zuif

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

    Баллы:
    76
    скорее всего какие-то проблемы с объектом, если тебе не критично просто сделай static хешмап
     
  4. Автор темы
    slime_j

    slime_j Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    slime_j
    Код:
    package near.main;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.UUID;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Location;
    import org.bukkit.command.CommandExecutor;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    
    import net.md_5.bungee.api.ChatColor;
    
    public class Command implements CommandExecutor{
        
        HashMap<UUID, Location> home = new HashMap<UUID, Location>();
        
        @Override
        public boolean onCommand(CommandSender sender, org.bukkit.command.Command command, String str2, String[] str3) {
            if(!(sender instanceof Player)) return false;
            Player p = (Player) sender;
            if(command.getName().equalsIgnoreCase("radar")) {
                
                int size = 0;
                for(@SuppressWarnings("unused") Player player : Bukkit.getServer().getOnlinePlayers()) {
                    size++;
                }
                if(size == 1) {
                    p.sendMessage(ChatColor.RED + "Вы одни на сервере");
                
                    
                }else {
                    List<String> online = new ArrayList<>(size);
                    for(Player player : Bukkit.getServer().getOnlinePlayers()) {
                        online.add(ChatColor.GREEN + player.getName() + ChatColor.YELLOW + " " + player.getLocation().getWorld().getName()
                                + " " + player.getLocation().getBlockX() + " " +
                        player.getLocation().getY() + " " + player.getLocation().getBlockZ());
                    }
                    for(int i = 0; i < online.size(); i++) {
                        String str = online.get(i);
                        p.sendMessage(str);
                    }
                }
                return true;
            }
            if(command.getName().equalsIgnoreCase("sethome")) {
                Location loc = p.getLocation();
                home.put(p.getUniqueId(), loc);
                p.sendMessage(ChatColor.AQUA + "Точка дома успешно установлена " + home.get(p.getUniqueId()));
                return true;
            }
            if(command.getName().equalsIgnoreCase("home")) {
                Location loc = home.get(p.getUniqueId());
                if(loc == null){
                    p.sendMessage(ChatColor.RED + "У вас нету дома... Жаль");
                }else {
                    p.teleport(loc);
                    p.sendMessage(ChatColor.AQUA + "Вы успешно телепортировались домой");
                    return true;
                }
            }
            return true;
        }
    
    }
    
     
  5. Автор темы
    slime_j

    slime_j Участник Пользователь

    Баллы:
    36
    Имя в Minecraft:
    slime_j
    Помогло спс. Можешь объяснить почему нужен статик в данной ситуации? А то получается написал а зачем не понимаю)
     
  6. alexandrage

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

    Баллы:
    173
    Статик не нужен, просто кто то не умеет работать с ссылками.
     
  7. Zuif

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

    Баллы:
    76
    а какая тут проблема с ссылками? он инициализирует класс в onEnable при установлении обработчиком и дальше работает с мапой не делая новой инициализации
     
  8. alexandrage

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

    Баллы:
    173
    Ну я не ясновидец. Вот только null при нормальном написание кода не выбивается.
     
  9. Zuif

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

    Баллы:
    76
    null это потому что в мапе нет значения по ключу думаю, вот только я не вижу причин почему он не может найти там значение, с хешами все должно быть ок, и мапа это один и тот же объект, между двумя вызовами команды
     

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