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

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

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

Статус темы:
Закрыта.
  1. Автор темы
    Todorov26

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Немножко кода:
    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;
               }
           }
     
    Последнее редактирование: 18 ноя 2020
  3. Lillie-May

    Lillie-May Новичок Пользователь

    Баллы:
    21
    Bukkit.createWorld(new WorldCreator("NAME"));
    this.userWorlds.put(player, Bukkit.getWorld("NAME"));
     
  4. Автор темы
    Todorov26

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

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Это есть) Мир создан и спокойно попадает в хешмеп при загрузке, вапрос почему вылетает ошибка? И put не player, a player.getName();
     
  5. Автор темы
    Todorov26

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

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Ошибка вылетает как только я пробую произвести телепортацию. Все остальное идеально.
     
  6. Lillie-May

    Lillie-May Новичок Пользователь

    Баллы:
    21
    Что выдает Bukkit.getWorld("NAME"); ?
     
  7. Автор темы
    Todorov26

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

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Он ничего не выдаёт, спокойно получает мир по имени т.к. Мир уже загружен, ошибок по крайней мере нет в консе. Это мне и не нравится мир есть, он загрузился, но при этом вылета NullPointed при телепортацию в него. какие идеи?
     
  8. Lillie-May

    Lillie-May Новичок Пользователь

    Баллы:
    21
    Если мир есть в папке сервера, не значит что он загружен, вы уверены что у вас есть Bukkit.createWorld(new WorldCreator("NAME")); ?
     
  9. Автор темы
    Todorov26

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

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Если при загрузке плагина не нужно пересоздавать мир и он грузит уже созданный то да я уверен ибо сам мир я создаю командой по функции ниже:
    Код:
    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;
     
  10. Автор темы
    Todorov26

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

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Или бакит самолично не грузит миры? И чтобы его загрузить мне нужно создать мир с названием которое уже содержится в папке с сервером?
     
  11. Lillie-May

    Lillie-May Новичок Пользователь

    Баллы:
    21
    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");
       }
     
  12. Автор темы
    Todorov26

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

    Баллы:
    76
    Имя в Minecraft:
    Todorov26
    Ну я уже планировал так сделать после того как ты сообщил что мир не грузится при загрузке сервера)) Завтра попробую а то я уже в пастельке. Спасибки за помощь) Думаю все заработает
     
Статус темы:
Закрыта.

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