Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Ащипка при спавне энтити в CreatureSpawnEvent...

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mr_RoboMan, 25 июн 2016.

  1. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    А теперь самое интересное!
    Мне надо пройтись по всем чанкам в мир world, сделать кое-какую проверку (содержит ли конфиг инфу об этом чанке) и если нет, то заменить его чанком из world2 по тем-же "чанковым" координатам!
    (P.S. До-до-до, я хочу замутить реген мира.)
    (P.P.S. До-до-до, world2 - это необгаженный пагаными игроками пустой мир!)[DOUBLEPOST=1466932567,1466932438][/DOUBLEPOST]И еще вопрос, как это все сделать..
    Так чтобы кароче сервер не крашнулся от нагрузки[DOUBLEPOST=1466933275][/DOUBLEPOST]Вот у меня есть два чанка...
    И надо чтоб первому чанку присвоить второй...
    Ну т.е. просто перенести содержимое второго чанка в первый...
    Код:
        @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);
            }
        }
    
    [DOUBLEPOST=1466934907][/DOUBLEPOST]Что никто не знает?
    Мне просто нужно переместить чанк из одного мира в другой...
     
  2. Хостинг MineCraft
    <
  3. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Block by block we building a world.
     
  4. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    т.е. чанком нельзя?..
    Надо по одному блоку переносить?([DOUBLEPOST=1466960269,1466936083][/DOUBLEPOST]Хорошо, а как переносить по блоку из чанка в чанк, если максимальный игрок для получения блока - 127:
    [​IMG]
    А высота максимальная - 256...[DOUBLEPOST=1466961526][/DOUBLEPOST]Хотя я вроде прочитал что это ошибка джавадоков...
    Тогда следующий вопрос, как получить все чанки мира world?
    getLoadedChunks возвращает ведь только загруженные чанки...
     
  5. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    А зачем тебе оно?
     
  6. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ыыы...
    Ну...
    Проверить есть ли в конфиге инфа об чанке (а конфиг содержит чанки под приватом (а он очищается если владельца чанка/ов не было долго на сервере)) и если нет, то регенерировать его.
    А так как я использую нарисованную (WorldPainter) собой-же мапу, то мне надо не просто регенерировать, а заменить чанк чанком из запасного мира!
    (Надеюсь кто-то что-то поймет..)
     
  7. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Берёшь сразу корды чанка и всё. Правда, не забывай его загружать. Весь мир в памяти держать у тебя просто не получится.
     
  8. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Дак а как мне взять то коорды чанков?
     
  9. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    От блока получаешь чанк. От чанка его корды. После с другого мира по кордам получаешь чанк и загружаешь его.
     
  10. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Кажеться мы друг друга не правильно понимаем...
    Мне надо пройтись ПО ВСЕМ чанкам которые были загружены хоть раз (т.е. сделать полную регенерацию мира!)!
    И вопрос в том, как получить эти ВСЕ чанки![DOUBLEPOST=1467014992,1467014093][/DOUBLEPOST]Т.Е. Мне надо что-то вроде этого:
    for (Chunk chunk : world1.getLoadedChunks()) {
    }
    Но ведь это возвращает ЗАГРУЖЕННЫЕ чанки (т.е. которые активны вот прямо сейчас) а мне надо получить ВСЕ ПРОГРУЖЕННЫЕ чанки...
     
  11. Best_pr0stk

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

    Баллы:
    78
    Имя в Minecraft:
    Best_pr0stik
  12. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Сложно понять что там написано...
    Я вот думаю сделать с помощью магии гавнокода..
    Ведь в %ИМЯ МИРА%/region/ как раз содержатся файлики всех загруженных чанков,
    [​IMG]
    И надо просто получить имя файла, вынять коорды, и дальше делать с чанком то что надо...
    Попробую так сделать)
     
  13. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Забудь об этом. Тебе придётся ручками перебирать чанки по координатам. Попутно их загружая и отгружая. Ну и проверяя, есть ли он или нет.
     
  14. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Как же сложно все в этой жизни...)
     
  15. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Берём углы привата, берём чанки, после "регеним" их. И не нужно перебирать все чанки мира.

    У тебя серьёзные проблемы с описанием того, что ты хочешь сделать.
     
  16. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    for(int cz = -1000; cz < 1000; cz++)
    for(int cx = -1000; cx < 1000; cx++)
    ... // cx, cz - координаты чанка ))

    Чем не перебор?
     
  17. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Перебор, но лишняя нагрузка, ведь чанков может всего-лишь 100, а тут хрен знает сколько ращ пройдет)
    Да блин, с описанием у меня реально проблемы..
    У меня приваты - ЧАНКИ.
    Но приваты ко всему этому имеют только то отношение, что мне надо проверить запривачен ли чанк прежде чем регенерировать его!!
    В общем, я попытаюсь запилить это, потому-что мне кажется кодом будет объяснить проще :D
     
  18. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Ну так ты не сразу это делай, а по разным тикам.
    Границы своего мира ты знаешь, можно 2Д карту держать какие чанки "грязные" и их нужно заменить.
     
  19. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Ребят..
    Вы главное сейчас помидорами не кидайтесь...
    Я в общем хочу получить папку где хранятся чанки (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);
    
    Но сплитить по "//" оказывается нельзя... Надеюсь меня кто-то понял и подскажет мне как правильно...
     
  20. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Эквивалентно строке, содержащей один слеш, а в регулярках слеш тоже что-то экранирует. Ну и на разных ОС разные разделители. Как минимум, тут нужно писать split("[\\\\|\\/]+").
    И миры разные бывают. И папка хранения миров бывает отличная от сервера.
    А еще в Java есть другие разные методы для работы с директориями.
    Ну получишь ты папку с файлами региона, дальше что? ))
     
  21. Автор темы
    Mr_RoboMan

    Mr_RoboMan Старожил Пользователь

    Баллы:
    123
    Если я получу папку с файлами регионов (в главном мире (обгаженном игроками)) я получу все чанки которые когда-либо были загружены, по их имени я получу их координаты, а дальше уже дело техники (координаты чанка в одном мире, те же координаты чанка в другом мире, и переносить блоки)
     

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