[Решено] Фикс WG для оффлайн мода. ( (не) Ковыряем исходники)

HauserGrim

Активный участник
Пользователь
Баллы
96
В общем, есть проблемы с удалением и добавлением оффлайн игроков в приваты.
Где-то видел, что нужно заменить UUID_AND_NAME на NAME_ONLY где-то в исходниках.
Поиском нотпада нашел это:
Снимок экрана (331).png
Собсно, вопрос, в каких местах это стоит сделать, чтобы всё не поломать? Или нужно сделать что-то другое?
Сервер на 1.13.2, последний билд WG.
Решение найдёте, если немного полистаете комменты))
 
Последнее редактирование:
В общем, есть проблемы с удалением и добавлением оффлайн игроков в приваты.
Где-то видел, что нужно заменить UUID_AND_NAME на NAME_ONLY где-то в исходниках.
Поиском нотпада нашел это:
Посмотреть вложение 53461
Собсно, вопрос, в каких местах это стоит сделать, чтобы всё не поломать? Или нужно сделать что-то другое?
Сервер на 1.13.2, последний билд WG.
Проблем не будет, если не будешь удалять dat файлы игроков с основной карты.
Заменяешь только в классах MembersCommands и RegionCommands, это создающие, в других не трогаешь, резолверы берут и UUID и имя по возможности. Я не понял, какую ты версию используешь, может даже поновее, но в моей 7.0.0 старом билде 1744 вообще нет такого как UUID_AND_NAME, было UUID_ONLY если без флага -n в команде записать.
 
Как вариант, попытался сделать чёт с WGFixer'ом от InterVi, но, наверно, опять дичь сотворил.
https://github.com/HauserGrim/wgfixer/commit/260b1229ff9e2ba7b4d7669b2b91c6d95fc91269
Загрузил оригинал, а потом изменённый файл.
Не надо лезть, если даже джаву толком не учил и надоедать нормальным людям, наверно...
 
Заменить ссылку на свою и будет всё работать как надо. WG за UUID обращается к API Mojang.
Не совсем врубился, нужно, чтобы была своя база ников и юидов?
Можно сделать просто, чтобы брался оффлайн юид? Или это и имелось ввиду?
Ну так или иначе, у меня есть ещё пара идей, попробую и, если не получится, забью на это до лучших времён.
 
Не совсем врубился, нужно, чтобы была своя база ников и юидов?
Можно сделать просто, чтобы брался оффлайн юид? Или это и имелось ввиду?
Ну так или иначе, у меня есть ещё пара идей, попробую и, если не получится, забью на это до лучших времён.
Он сказал в том смысле, что типо - если подменить ссылку, ююидов не будет
 
Не совсем врубился, нужно, чтобы была своя база ников и юидов?
Можно сделать просто, чтобы брался оффлайн юид? Или это и имелось ввиду?
Ну так или иначе, у меня есть ещё пара идей, попробую и, если не получится, забью на это до лучших времён.
Еслиб все было так просто, там же ники все в ловерчаче по урл идут). А вообще тема рабочая со своим url, только безлаунчерным придется хранить базу ников с уидами где то все равно. Или дергать из базы essentials.
 
Да это все понятно. Ток оно не знает в каком регистре был ник. Офлайн уиды не генерятся по ловерчаче же. Это кстати 1 из вариантов, пофиксить генератор офлайн уидов на ловерчачу D.

Тогда мы просто даем такую заглушку в плагине и все
Код:
    private static UUID uuid(String player) {
        return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player).getBytes(Charset.forName("UTF-8")));
    }
 
Последнее редактирование:
Проще написать перехватчик команд /rg addowner/remveowner/addmember/removemember
И переопределить их действия. Благо у wg есть апи который позволит добавить или удалить игрока в заданном рг.
А для получения uuid игрока даже в оффлайне можно обратиться к Essentials, он их всех на диске хранит, проблем быть не должно.
 
написать перехватчик команд
Да это все понятно. Ток оно не знает в каком регистре был ник. Офлайн уиды не генерятся по ловерчаче же. Это кстати 1 из вариантов, пофиксить генератор офлайн уидов на ловерчачу D.

Тогда мы просто даем такую заглушку в плагине и все
Код:
    private static UUID uuid(String player) {
        return UUID.nameUUIDFromBytes(("OfflinePlayer:" + player).getBytes(Charset.forName("UTF-8")));
    }
Что-то похожее есть в wgfixer'е.
Имелось ввиду пихнуть это в wg или отдельным плагином?
 
У WG своя база uuid'ов sqlite есть.
Это всего лишь кеш, что значит он не долговечный.
Самый эффективный способ, это получать uuid через Essentials. У него есть карта uuid=ник (я имел ввиду файл "usermap.csv") и есть папка в котором файлы игроков uuid, в которых сетхомы, юникс времена и прочее.

Я уже писал своеобразный перехватчик, если игрок офлайн, то тупо по api Essentials получаю uuid юзера по нику. Там есть метод который вернет название файла в папке с uuid, то есть то что нужно. Если же его там нет, значит игрок никогда не был на сервере и париться насчет этого не стоит.
 
Код:
User essUser = getEssentials().getUser("playerName");
if (essUser != null) {
  UUID plaUUID = essUser.getConfigUUID();
  //А этот uuid уже используем в методах для WorldGuard.
}
else {
  //Игрока никогда не было на сервере
}
 
Зачем цепляться за сторонний плагин?
Кеш можно переделать чтобы он был постоянным. Добавлять туда игроков в момент входа в на сервер.
Essentials сложно назвать сторонним плагином, он очень сильно распространен, его только ленивые не ставят на сервер. Велосипед зато писать не надо будет.
 
Проблем не будет, если не будешь удалять dat файлы игроков с основной карты.
Заменяешь только в классах MembersCommands и RegionCommands, это создающие, в других не трогаешь, резолверы берут и UUID и имя по возможности. Я не понял, какую ты версию используешь, может даже поновее, но в моей 7.0.0 старом билде 1744 вообще нет такого как UUID_AND_NAME, было UUID_ONLY если без флага -n в команде записать.
На самом деле, самый простой вариант, ещё можно убрать "name:" и вообще идеально, если не считать что будут только маленькие буквы в /rg info, ещё это не поставишь на сервер уже работающий некоторое время сервер, ибо удалить игроков кроме как через -a не получится, а ещё нельзя будет удалить игрока, создавшего приват.
А вообще, забил я на это дело, пойду оставлю запрос в запросах на разработку
 
Последнее редактирование:
Вчера вечером меня осенило и я сел допиливать плагин (WGFixer). Почему-то старые куски кода (на которые, по логике, не должна влиять версия wg или сервера) не очень хорошо работали и пришлось доделывать. Путём проб и ошибок я добился результата, а ещё добавил возможность добавления оффлайн игроков. Привязывался к ess'у как и писали выше (не видел ещё серверов с wg без ess'a)
Если кто-то посмотрит и скажет про косяки, буду благодарен
Код: https://pastebin.com/pXdDUXvW
(наверно, удобнее было бы залить на гитхаб или типа того, может как-нибудь потом)
 
Назад
Верх