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

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

  • Автор темы Автор темы 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;
            }
        }
 
Не могу понять почему при попытке вытягивания из 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;
            }
        }
скорее всего какие-то проблемы с объектом, если тебе не критично просто сделай static хешмап
 
Покажи весь класс
Код:
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;
    }

}
 
скорее всего какие-то проблемы с объектом, если тебе не критично просто сделай static хешмап
Помогло спс. Можешь объяснить почему нужен статик в данной ситуации? А то получается написал а зачем не понимаю)
 
Статик не нужен, просто кто то не умеет работать с ссылками.
а какая тут проблема с ссылками? он инициализирует класс в onEnable при установлении обработчиком и дальше работает с мапой не делая новой инициализации
 
а какая тут проблема с ссылками? он инициализирует класс в onEnable при установлении обработчиком и дальше работает с мапой не делая новой инициализации
Ну я не ясновидец. Вот только null при нормальном написание кода не выбивается.
 
Ну я не ясновидец. Вот только null при нормальном написание кода не выбивается.
null это потому что в мапе нет значения по ключу думаю, вот только я не вижу причин почему он не может найти там значение, с хешами все должно быть ок, и мапа это один и тот же объект, между двумя вызовами команды
 
Назад
Верх