.

Статус
Закрыто для дальнейших ответов.
А теперь самое интересное!
Мне надо пройтись по всем чанкам в мир world, сделать кое-какую проверку (содержит ли конфиг инфу об этом чанке) и если нет, то заменить его чанком из world2 по тем-же "чанковым" координатам!
(P.S. До-до-до, я хочу замутить реген мира.)
(P.P.S. До-до-до, world2 - это необгаженный пагаными игроками пустой мир!)
И еще вопрос, как это все сделать..
Так чтобы кароче сервер не крашнулся от нагрузки
Вот у меня есть два чанка...
И надо чтоб первому чанку присвоить второй...
Ну т.е. просто перенести содержимое второго чанка в первый...
Код:
    @EventHandler
    public void test(AsyncPlayerChatEvent event) {
        if (event.getMessage().equalsIgnoreCase("START")) {
            Chunk w1c = event.getPlayer().getLocation().getChunk();
            int w1cx = w1c.getX();
            int w1cz = w1c.getZ();
            Chunk w2c = Bukkit.getWorld("world2").getChunkAt(w1cx, w1cz);
        }
    }

Что никто не знает?
Мне просто нужно переместить чанк из одного мира в другой...
 
Block by block we building a world.
т.е. чанком нельзя?..
Надо по одному блоку переносить?(
Хорошо, а как переносить по блоку из чанка в чанк, если максимальный игрок для получения блока - 127:
99c9e816c054.png

А высота максимальная - 256...
Хотя я вроде прочитал что это ошибка джавадоков...
Тогда следующий вопрос, как получить все чанки мира world?
getLoadedChunks возвращает ведь только загруженные чанки...
 
А зачем тебе оно?
Ыыы...
Ну...
Проверить есть ли в конфиге инфа об чанке (а конфиг содержит чанки под приватом (а он очищается если владельца чанка/ов не было долго на сервере)) и если нет, то регенерировать его.
А так как я использую нарисованную (WorldPainter) собой-же мапу, то мне надо не просто регенерировать, а заменить чанк чанком из запасного мира!
(Надеюсь кто-то что-то поймет..)
 
Ыыы...
Ну...
Проверить есть ли в конфиге инфа об чанке (а конфиг содержит чанки под приватом (а он очищается если владельца чанка/ов не было долго на сервере)) и если нет, то регенерировать его.
А так как я использую нарисованную (WorldPainter) собой-же мапу, то мне надо не просто регенерировать, а заменить чанк чанком из запасного мира!
(Надеюсь кто-то что-то поймет..)
Берёшь сразу корды чанка и всё. Правда, не забывай его загружать. Весь мир в памяти держать у тебя просто не получится.
 
От блока получаешь чанк. От чанка его корды. После с другого мира по кордам получаешь чанк и загружаешь его.
Кажеться мы друг друга не правильно понимаем...
Мне надо пройтись ПО ВСЕМ чанкам которые были загружены хоть раз (т.е. сделать полную регенерацию мира!)!
И вопрос в том, как получить эти ВСЕ чанки!
Т.Е. Мне надо что-то вроде этого:
for (Chunk chunk : world1.getLoadedChunks()) {
}
Но ведь это возвращает ЗАГРУЖЕННЫЕ чанки (т.е. которые активны вот прямо сейчас) а мне надо получить ВСЕ ПРОГРУЖЕННЫЕ чанки...
 
Сложно понять что там написано...
Я вот думаю сделать с помощью магии гавнокода..
Ведь в %ИМЯ МИРА%/region/ как раз содержатся файлики всех загруженных чанков,
7078bb6d2df6.png

И надо просто получить имя файла, вынять коорды, и дальше делать с чанком то что надо...
Попробую так сделать)
 
Т.Е. Мне надо что-то вроде этого:
for (Chunk chunk : world1.getLoadedChunks()) {
}
Забудь об этом. Тебе придётся ручками перебирать чанки по координатам. Попутно их загружая и отгружая. Ну и проверяя, есть ли он или нет.
 
Проверить есть ли в конфиге инфа об чанке (а конфиг содержит чанки под приватом (а он очищается если владельца чанка/ов не было долго на сервере)) и если нет, то регенерировать его.
Берём углы привата, берём чанки, после "регеним" их. И не нужно перебирать все чанки мира.

У тебя серьёзные проблемы с описанием того, что ты хочешь сделать.
 
for(int cz = -1000; cz < 1000; cz++)
for(int cx = -1000; cx < 1000; cx++)
... // cx, cz - координаты чанка ))

Чем не перебор?
 
for(int cz = -1000; cz < 1000; cz++)
for(int cx = -1000; cx < 1000; cx++)
... // cx, cz - координаты чанка ))

Чем не перебор?
Перебор, но лишняя нагрузка, ведь чанков может всего-лишь 100, а тут хрен знает сколько ращ пройдет)
Берём углы привата, берём чанки, после "регеним" их. И не нужно перебирать все чанки мира.

У тебя серьёзные проблемы с описанием того, что ты хочешь сделать.
Да блин, с описанием у меня реально проблемы..
У меня приваты - ЧАНКИ.
Но приваты ко всему этому имеют только то отношение, что мне надо проверить запривачен ли чанк прежде чем регенерировать его!!
В общем, я попытаюсь запилить это, потому-что мне кажется кодом будет объяснить проще :D
 
Перебор, но лишняя нагрузка, ведь чанков может всего-лишь 100, а тут хрен знает сколько раз пройдет)
Ну так ты не сразу это делай, а по разным тикам.
Границы своего мира ты знаешь, можно 2Д карту держать какие чанки "грязные" и их нужно заменить.
 
Ребят..
Вы главное сейчас помидорами не кидайтесь...
Я в общем хочу получить папку где хранятся чанки (world/region).
Но я не знаю как это делат нормально, поэтому решил гавнокодить трайхард!
Типо, получать сначало getDataFolder() а потом уже отталкиваясь от этого, попробовать получить папку world/region!
Сделать это я думаю так, расделить строку (путь (getDataFolder)) по "/" потом добавить world/region и в итоге я получу то что хочу! :D
Пробую делать я это так:
Код:
        String path = "C:\\Users\\Nazar\\Desktop\\GWMS\\plugins\\GWM-Server-Plugin"; //getDataFolder();
        String[] split = path.split("\\");
        String newPath = "";
        for (int i = 0; i < split.length-2; i++) newPath += split[i];
        newPath += "\\world\\region";
        System.out.println(newPath);
Но сплитить по "//" оказывается нельзя... Надеюсь меня кто-то понял и подскажет мне как правильно...
 
Эквивалентно строке, содержащей один слеш, а в регулярках слеш тоже что-то экранирует. Ну и на разных ОС разные разделители. Как минимум, тут нужно писать split("[\\\\|\\/]+").
И миры разные бывают. И папка хранения миров бывает отличная от сервера.
А еще в Java есть другие разные методы для работы с директориями.
Ну получишь ты папку с файлами региона, дальше что? ))
 
Эквивалентно строке, содержащей один слеш, а в регулярках слеш тоже что-то экранирует. Ну и на разных ОС разные разделители. Как минимум, тут нужно писать split("[\\\\|\\/]+").
И миры разные бывают. И папка хранения миров бывает отличная от сервера.
А еще в Java есть другие разные методы для работы с директориями.
Ну получишь ты папку с файлами региона, дальше что? ))
Если я получу папку с файлами регионов (в главном мире (обгаженном игроками)) я получу все чанки которые когда-либо были загружены, по их имени я получу их координаты, а дальше уже дело техники (координаты чанка в одном мире, те же координаты чанка в другом мире, и переносить блоки)
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх