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

[ РЕШЕНО ] Ресет мира для миниигры.

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

Статус темы:
Закрыта.
  1. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Неа.
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    тогда попробую, наверное это идеальное решение, если это сработает -_-)[DOUBLEPOST=1478885016,1478884753][/DOUBLEPOST]хм, сервер просто крашнулся при запуске[DOUBLEPOST=1478885421][/DOUBLEPOST]А нет, помогло, сделал рид онли только папки с регионами.
     
  4. _Rudey_

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

    Баллы:
    66
    Имя в Minecraft:
    RudeyCoolLeet
    Если ты про телепортацию по режимам/серверам, то устанавливай BungeeCord(Настройку его можно найти в интернете)
     
  5. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    Не совсем то что я хотел, сервер один, с несколькими мирами, через MultiWorld, с телепортацией я разабрался, щас другая проблема: заменить текст на табличке по клику на нее, вот код:

    if(s.getLine(0).equals("SkyWars_1"))
    {
    e.getClickedBlock();
    Material mtrl1;
    mtrl1 = Material.WALL_SIGN;
    mtrl1.
    Player p = e.getPlayer();
    World world_swl_1 = Bukkit.getWorld("lobby_sky1");
    p.teleport(new Location(world_swl_1,-322,73,1354));
    {


    Помимо телепортации как-то надо заменить/изменить строки на табличках[DOUBLEPOST=1478974571,1478974528][/DOUBLEPOST]Пока что понял только как заменить саму табличку на другой блок)
     
  6. _AndreyBarna_

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

    Баллы:
    76
    Имя в Minecraft:
    MainDRY
    SignChangeEvent e
    if (e.getLine(0).equalsIgnoreCase("оппа")) {
    e.setLine(0, "§3опоп");
    }
     
  7. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    (p.s. в коде ненужные строки есть, пытаюсь экспериментировать, так как в гугле ничего не смог найти)[DOUBLEPOST=1478974742,1478974694][/DOUBLEPOST]
    щас попробую:rolleyes:[DOUBLEPOST=1478975363][/DOUBLEPOST]Спасибо огромное) все работает.
     
  8. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    Я не понимаю, где качество? Зачем делать все МГ на одном сервере? Банжи для кого изобрели? В первую очередь такой "строй" сервера - постоянные лаги из-за нагрузки. Я надеюсь, у тебя только SkyWars? Скажи что хоть выживание на другом сервере...
     
  9. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    Попытался сделать это для мира сгенерированного плагином multoworld , при попытке зайти в мир в консоле куча ошибок, а вместо мира появляется пустота... Что посоветуете ?
    По прежнему нужен "регенерирующийся мир"...
     
  10. _MediaNik_

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

    Баллы:
    46
    Skype:
    Medianik5
    Имя в Minecraft:
    _MediaNik_
    КОнечно не мог, ты же поставил на readOnly, как он тебе туда игрока в бд внесет? Во и ошибки...
     
  11. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    как же тогда можно решить эту проблему?[DOUBLEPOST=1479545636,1479545588][/DOUBLEPOST]может можно как-то отловить сохранение мира и отменять его самому...
     
  12. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ты что то лишне зацепил chmod-ом. Или ты создал мир когда уже реадонли поставил.
     
  13. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    реадонли стоит только на файлах в папке region (на всех) и ставлю его до того как включаю сервер, но мир уже есть, в результате вместо мира грузится пустота..[DOUBLEPOST=1479551995,1479551575][/DOUBLEPOST]мне кажется можно реализовать это с помощью перезаписи самих файлов, попробую разобраться с этим... отпишусь если получится[DOUBLEPOST=1479577888][/DOUBLEPOST]Решил проблему так:
    1. Стоит multiworld (мир который нужно ресетнуть создан с помощью него, поэтому его можно выгружать командой /mw unload world_name)
    2. После того как mw выгрузил мир, удаляю папку region с помощью метода:
    void deleteDirectory(File sourceLocation)
    throws FileNotFoundException, IOException {

    if (sourceLocation.isDirectory()) {

    String[] children = sourceLocation.list();
    for (int i=0; i<children.length; i++) {
    deleteDirectory(new File(sourceLocation, children));

    } sourceLocation.delete();
    } else {
    sourceLocation.delete();

    }
    }

    3. Копирую заранее сохраненную папку region на место старой методом:
    void copyDirectory(File sourceLocation , File targetLocation) throws FileNotFoundException, IOException
    {

    if (sourceLocation.isDirectory()) {
    if (!targetLocation.exists()) {
    targetLocation.mkdir();
    }

    String[] children = sourceLocation.list();
    for (int i=0; i<children.length; i++) {
    copyDirectory(new File(sourceLocation, children),
    new File(targetLocation, children));

    }
    } else {

    InputStream in = new FileInputStream(sourceLocation);
    OutputStream out = new FileOutputStream(targetLocation);

    // Copy the bits from instream to outstream
    byte[] buf = new byte[1024];
    int len;
    while ((len = in.read(buf)) > 0) {
    out.write(buf, 0, len);
    }
    in.close();
    out.close();
    }
    }

    4. Загружаю мир в игре командой /mw load world_name

    проффит)
    может это и костыль, но все работает правильно и быстро, на всякий случай между выполнением - /mw load /mw unload и удалением/копированием жду 3-4 секунды. (у меня все это делается в таймере, на определенных секундах)
    [DOUBLEPOST=1479578438][/DOUBLEPOST]
    p.s. (сами директории записал так
    File name_1 = new File("world\\s_g_1\\region"); //путь к папке region
    File name_2 = new File("world\\s_g_1\\5region\\region"); //путь к резервной папке region

    После:
    try {
    deleteDirectory(dirreg1); //для удаления
    } catch (IOException ex) {
    Logger.getLogger(Instrument.class.getName()).log(Level.SEVERE, null, ex);
    }

    try {
    copyDirectory(c_dirreg1,dirreg1); //для копирования
    } catch (IOException ex) {
    Logger.getLogger(Instrument.class.getName()).log(Level.SEVERE, null, ex);
    }
    без блоков try эклипс ругается...
    )
    [DOUBLEPOST=1479578824][/DOUBLEPOST]Ах да, еще одно - команды /mw* прописываю от консоли
    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mw load s_g_1");
    Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "mw unload s_g_1");
    s_g_1- мир


    и еще одно :D после выгрузки и загрузки мира приходится обновлять все классы имеющие ссылки на этот мир,
    например если есть локации или миры:
    Location loc = new Location(s_g_1,-727,95,203);
    World s_g_1 = Bukkit.getWorld("s_g_1");[DOUBLEPOST=1479579604][/DOUBLEPOST]Последние две команды надо местами поменять...
     
  14. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    А тему закрыть, чтобы не апали?
     
  15. Автор темы
    Stamorey

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

    Баллы:
    66
    Имя в Minecraft:
    Stamorey
    UP закрываю)
     
Статус темы:
Закрыта.

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