Вопрос Получить имя игрока(Player player) из конфига (String)

Alex-Novosiber

Пользователь
Задача - получить имя игрока из конфига - и передать в метод WorldEdit-a. Получаю или Cast error ( если пытаюсь кастануть ), или NPE.
Все игроки для удаления - в оффлайне.
Вот кусок кода получения из конфига

Java:
for (Map.Entry <String, Long> entry : map.entrySet()) {
            System.out.println(" ENTRY " + entry.getKey() + " / " + entry.getValue());
            Object obj = entry.getKey();
            String tempPlayerName = entry.getKey();
            Player p1 = Bukkit.getPlayerExact(entry.getKey());     // Р1 = null
            System.out.println(" p1 " + p1);
            System.out.println(" tempPlayerName " + tempPlayerName);   //нормальное имя
Метод WorldEdit-a

Java:
public void load(Player plr, String name) {
        this.configFile = this.getConfig();
        try {
            if (name != null && plr != null) {
                RegionManager.load(this.wep.wrapPlayer(plr), name + ".schematic", this.configFile.getString("regions." + plr.getName() + ".world"));
                plr.sendMessage(ChatColor.YELLOW + "Area " + name + ChatColor.AQUA + " succesfully loaded.");
            } else {
                Bukkit.getConsoleSender().sendMessage(ChatColor.RED + " Area NOT loaded !!! Check console output.");
                System.out.println("Player = " + plr + " , region = " + name);
            }
        } catch (Exception var) {
            var.printStackTrace();
        }

    }
 

i0xHeX

Пользователь
Опиши пожалуйста как минимум одну из проблем в деталях. Если еще актуально.
 

BuseSo

Разработчик
Bukkit.getOnlinePlayers().get(0)

Почему бы не сделать так?))
(кнш с проверкой, есть ли игроки на сервере вообще)
 

Alex-Novosiber

Пользователь
Проблема следующая. При передаче параметров в метод загрузки и вставки схематика надо передать Player . Из конфига я могу достать только String, а не Player. Кастануть не получается.

Такие костыли :

Java:
//TODO command from console
                    String commandRegen = "rere regen " + rn;
                    Player randomPlayer = Bukkit.getOnlinePlayers().stream().findAny().get();
                        try {
                            regionRegenerator.load(randomPlayer, rn); // rn - имя региона из конфига
//                            wait(5000L); // waiting 4 seconds
//                            Bukkit.dispatchCommand(randomOnlinePlayer, commandRegen);
                            System.out.println("  try TimeHandler block END ");
                        }catch (Exception ddd){
                            System.out.println(" ********  cmdSender is NULL ");
                            ddd.printStackTrace();
                        }
                    System.out.println(" УДАЛЁН регион " + rn);



Java:
//  load   method
    public void load(CommandSender sender, String name) {
        this.configFile = this.getConfig();
        try {
            if (name != null && sender != null) {
                RegionManager.load(this.wep.wrapCommandSender(sender), name + ".schematic", this.configFile.getString("regions." + sender.getName() + ".world"));
                sender.sendMessage(ChatColor.YELLOW + "Area " + name + ChatColor.AQUA + " succesfully loaded.");
            } else {
                Bukkit.getConsoleSender().sendMessage(ChatColor.RED + " Area NOT loaded !!! Check console output.");
                System.out.println("Player = " + sender + " , region = " + name);
            }
        } catch (Exception var) {
            var.printStackTrace();
        }

    }

А вот собственно сам метод загрузки и вставки региона из схематика :

Java:
public static void load(Actor actor, String filename, String world) throws Exception {
        File dir = new File(regionRegenerator.getDataFolder(), "saves");
        File f = regionRegenerator.wep.getWorldEdit().getSafeOpenFile(actor, dir, filename, BuiltInClipboardFormat.SPONGE_SCHEMATIC.getPrimaryFileExtension(), ClipboardFormats.getFileExtensionArray());
        if (!f.exists()) {
//            actor.printError(TranslatableComponent.of("worldedit.schematic.load.does-not-exist", TextComponent.of(filename)));
            System.out.println("Schematic file not exist ");

        } else {
            ClipboardFormat format = ClipboardFormats.findByFile(f);
            if (format == null) {
                format = ClipboardFormats.findByAlias("sponge");
            }

            if (format == null) {
//                actor.printError(TranslatableComponent.of("worldedit.schematic.unknown-format", TextComponent.of("sponge")));
                System.out.println("Schematic format is wrong ");

            } else {
                RegionManager.SchematicLoadTask task = new RegionManager.SchematicLoadTask(f, format);
                if(f !=null && format !=null) {
//                    paste(actor, BukkitAdapter.adapt(Bukkit.getServer().getWorld(world)), task.call());
                    paste(actor, BukkitAdapter.adapt(Bukkit.getServer().getWorld(world)), task.call());
                } else {  System.out.println(ChatColor.RED + "NAME is NULL!  \n Enter a valid name !"); }
            }
        }
    }
Авто объединение сообщений:

Опиши пожалуйста как минимум одну из проблем в деталях. Если еще актуально.
Потроха из этого плагина, https://www.spigotmc.org/threads/region-manager.456155/
пытаюсь автоматизировать процесс регена регионов неактивных игроков.
я думаю восстанавливать регионы к их первоначальному состоянию. Мир у меня другой, сгенерирован когда-то генератором, при команде /regen выделенный участок портится и появляются не те блоки. Поэтому надо сохранять в схематики и восстанавливать из них.
Есть классы для этого, но метод /load от консоли не работает . Только от игрока.
 
Последнее редактирование:

Комнаты в чате

Верх Низ