Работа с мирами

Статус
Закрыто для дальнейших ответов.

Todorov26

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Todorov26
Привет форумчане. Кто может подсказать в чем прикол? Есть некий HashMap<String, World>
при загрузке плагина в него кидается Имя игрока + мир через Bukkit.getWorld() по имени из файла конфигурации. Вопрос, почему при попытке телепортации на точку спавна мира из хешмепа (получаю мир через имя игрока в команде) вылетает NullPointedException?
 
Немножко кода:
onEnable():


Код:
File f = new File(getDataFolder() + File.separator + "worldconfig.yml");
       if(!f.exists()) {
           try {
               if(f.createNewFile()) {
                   userWorlds = YamlConfiguration.loadConfiguration(f);
               }
           } catch (IOException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
           }
       }else {
           userWorlds = YamlConfiguration.loadConfiguration(f);
           loadUserWorlds();
       }


функция загрузки loadUserWorlds():

Код:
private void loadUserWorlds() {
       int count = 0;
       ConfigurationSection sec = userWorlds.getConfigurationSection("worlds");
       for(String s : sec.getKeys(false)) {
           this.userWorldsMap.put(s, Bukkit.getWorld(sec.getString(s)));
           count++;
       }
       getLogger().info("Loaded " + count + " worlds");
   }

команда:

Код:
if(!(sender instanceof Player)) {
           sender.sendMessage("Иди нафиг тебе не разрешено это");
           return true;
       }
       Player p = (Player)sender;
      
       if(args.length == 0) {
           if(Main.getInstance().getUserWorlds().containsKey(p.getName())) {
               p.teleport(Main.getInstance().getUserWorlds().get(p.getName()).getSpawnLocation());
               return true;
           }else {
               p.sendMessage("Иди нафиг у тебя ещё нет мира!");
               return true;
           }
       }
 
Последнее редактирование:
Bukkit.createWorld(new WorldCreator("NAME"));
this.userWorlds.put(player, Bukkit.getWorld("NAME"));
 
Это есть) Мир создан и спокойно попадает в хешмеп при загрузке, вапрос почему вылетает ошибка? И put не player, a player.getName();
 
Ошибка вылетает как только я пробую произвести телепортацию. Все остальное идеально.
 
Что выдает Bukkit.getWorld("NAME"); ?
Он ничего не выдаёт, спокойно получает мир по имени т.к. Мир уже загружен, ошибок по крайней мере нет в консе. Это мне и не нравится мир есть, он загрузился, но при этом вылета NullPointed при телепортацию в него. какие идеи?
 
Если при загрузке плагина не нужно пересоздавать мир и он грузит уже созданный то да я уверен ибо сам мир я создаю командой по функции ниже:
Код:
public boolean createWorld(Player p, String type) {
        World world = null;
        String worldName = Main.getInstance().generateWorldName(p);
        switch(type.toUpperCase()) {
            case "PLAINS":
                WorldCreator pcreator = new WorldCreator(worldName);
                pcreator.generateStructures(false);
                pcreator.type(WorldType.FLAT);
                pcreator.generator(new PlainsGenerator());
                world = Bukkit.createWorld(pcreator);
                break;
 
Или бакит самолично не грузит миры? И чтобы его загрузить мне нужно создать мир с названием которое уже содержится в папке с сервером?
 
Или бакит самолично не грузит миры? И чтобы его загрузить мне нужно создать мир с названием которое уже содержится в папке с сервером?
Bukkit.createWorld() создает мир если его нет, и загружает если он есть в папке, попробуйте:

Код:
private void loadUserWorlds() {
       int count = 0;
       ConfigurationSection sec = userWorlds.getConfigurationSection("worlds");
       for(String s : sec.getKeys(false)) {
           Bukkit.createWorld(new WorldCreator(sec.getString(s)));
           this.userWorldsMap.put(s, Bukkit.getWorld(sec.getString(s)));
           count++;
       }
       getLogger().info("Loaded " + count + " worlds");
   }
 
Bukkit.createWorld() создает мир если его нет, и загружает если он есть в папке, попробуйте:

Код:
private void loadUserWorlds() {
       int count = 0;
       ConfigurationSection sec = userWorlds.getConfigurationSection("worlds");
       for(String s : sec.getKeys(false)) {
           Bukkit.createWorld(new WorldCreator(sec.getString(s)));
           this.userWorldsMap.put(s, Bukkit.getWorld(sec.getString(s)));
           count++;
       }
       getLogger().info("Loaded " + count + " worlds");
   }
Ну я уже планировал так сделать после того как ты сообщил что мир не грузится при загрузке сервера)) Завтра попробую а то я уже в пастельке. Спасибки за помощь) Думаю все заработает
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх