Помогите восстановление мира, выгрузка и загрузка

  • Автор темы Автор темы tiu
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

tiu

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
tiu
В попытке сделать сваю +- нормальную мини игру у меня вот появился костыль с минусами которого уже не помиришься.
(если шо когда я начал это делать у меня было 0 жопыта работа с жабой и я делал это с нуля без сторонних апишек)
Так вот в конце мини игры мне нужно восстанавливать мир.
Точно не помню где, но я стриндил вот это

Код:
public class rallback {
    static Logger log = Logger.getLogger("Minecraft");
    
    public static void unloadMap(String mapname) {
        if(Bukkit.getServer().unloadWorld(Bukkit.getServer().getWorld(mapname), false)) {
            Logger.getLogger("Minecraft").info("Successfully unloaded " + mapname);
        } else {
            Logger.getLogger("Minecraft").severe("COULD NOT UNLOAD " + mapname);
        }
    }
    public static void loadMap(String mapname) {
        Bukkit.createWorld(new WorldCreator(mapname));
    }
    public static void rollback(String mapname) {
        unloadMap(mapname);
        loadMap(mapname);
    }

под ету штуку есть 2 мира

Код:
    public static void loadworlds() {
        Bukkit.createWorld(new WorldCreator("rollback"));
        Bukkit.createWorld(new WorldCreator("arena"));
    }

когда мне нужно откатить мир я тепаю всех игроков с него

Код:
    public static void tpout(Player p) {
        p.teleport(new Location(Bukkit.getWorld("rollback"), 0.5, 5, 0.5, 0, 0));
    }

оно вреде работало но мягка скажем очень очень плохо

тепал в основной мир я аот так

Код:
    public static void tpafter1tick(Player p, Location loc) {
        new BukkitRunnable() {
            @Override
            public void run() {
                p.teleport(loc);
            }
        }.runTaskLater(main.plugin, 1);
    }

иначе игроки после телепортации не могли видеть друг друга

и мосле каждой игры мне приходилось релоадать сервер иначе игроки также после метода на откат и телепортации обратно в этот мир так же не могли видеть друг друга

но самое важное в этом вём то то если 1 из игроков в спектатор моде то начинает очень весёлый ****ец

https://imgur.com/gallery/zfJDtMn

все скирины кароч тут ^

когда игрок попадает в поле зрение спектатора начинается вот такое
есть ли какой то другой способ откатывать мир?

мириться с выше перечисленными недостатками этого мне не очень хочется
Я конечно рассматриваю вариант что я тупой и сделал всё плохо
я не до конца понимаю как загружаются миры и как может быть такое что игроки не видят друг друга
Из других способов отката в головы приходить только полное выстраивание мара заново по схематике так как это сделать?

Помогите пожалуйста
 
1. Телепортируй всех игроков в другой мир. Если метод телепортации возвращает false - значит игрока не телепортировало из-за отмены PlayerTeleportEvent в одном из плагинов
2. Подожди 1 секунду
3. Отгрузи все чанки. Если метод отгрузки возвращает false - значит чанк не отгрузило из-за отмены ChunkUnloadEvent в одном из плагинов
4. Подожди 1 секунду
5. Отгрузи баккитом мир
6. Подожди 1 секунду
7. Удали файлы старого мира, загрузи новые
8. Загрузи баккитом мир заново

Возможно, задержку в 1 секунду можно сократить до 1 тика. Возможно, где-то она не нужна вовсе. Но тут я уже не уверен. Тестируй
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх