-
Get it (requires cURL):
curl -s https://raw.githubusercontent.com/GravitLauncher/Launcher/master/get_it.sh | sh
Улучшеный Minecraft лаунчер на основе sashok's742 v3
Home Page: https://gravitlauncher.com
License: GNU General Public License v3.0
Get it (requires cURL):
curl -s https://raw.githubusercontent.com/GravitLauncher/Launcher/master/get_it.sh | sh
Ибо неизвестно что будут добавлять модули.
Возможно исправить preInit на loadModule (есть такое подозрение).
Подлежит фиксу по 1 возможности.
https://github.com/GravitLauncher/Launcher/edit/master/LaunchServer/src/main/java/ru/gravit/launchserver/binary/BuildContext.java он аналогичен багу с JarLauncherBinary, фиксится пересозданием entry.
Протестировано на Win 7, 8.1
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Версия лаунчера 4.0.7
Версия Minecraft 1.12.2
Версия Forge 14.23.5.2770
При наличии на клиенте мода Mekanism клиент выбивает даже при входе в одиночку. Подозреваю, что есть несостыковки в работе лаунчера со звуковым сервером этого мода, но это не точно. При входе на сервер(конечно же с этим модом) происходит то же самое. Сервер при этом впорядке, но я коннект через WaterFall провожу, так что не могу сказать как повел бы себя сервер в связке с лаунчером.
У одного из игроков стало выбивать приблизительно через 10 минут игры с подобной ошибкой, мода Mekanism, при этом не было уже.
Вот логи:
Краш клиента с модом Mecanism.zip
лог игрока с непонятным крашем клиента.log
В самом конце красуется вот такое
[STDERR]: [ru.gravit.launcher.Qs606nNpcDgUfhUCSOMtTWIo:fh2JGScJzdc4Ci28lt15v9Cx:70]: Threat UNKNOWN_APC_DESTINATION
Как насчет возможности авторизации по мылу игрока, вместо его ника?
Можно реализовать через authHandler, допустим если у игрока в бд стоит настройка isMailLogin, то будет пропускать авторизацию только по его мылу, это повысит безопасность аккаунтов, так как Email знает только игрок.
В случае зависания - рестарт.
EnotikСегодня в 18:10
@@Administrator помочь не хотите??
Exit code -1073741515
Exit code -1073741515
Exit code -1073741515
????
verifyHDir выброшен из API с коммита c95e3ff
Понятно из названия для опц. модов и тому подобного. С точки зрения api.
При выполнении команд
RequestHWIDHandler
Сделать удобную и настраиваемую интеграцию с сервером
Добавление через конфиг определенных опциональных модов (xray для админов)
Таким образом, будут локализованы сообщения и некоторых ошибок.
Добавить возможность скачивать файлы по ссылке.
Вывод сообщения при несоответствии, ссылки на скачивание нужной jvm.
Враппер установлен на сервере. Публичный ключ так-же на сервере. Я захожу из локальной сети и меня пускает на сервер. Любой внешний игрок подключится не может ибо получает ошибку о не доступности сервера авторизации.
2018.10.15 02:35:48 [ERROR] java.io.IOException: #0 Key modulus mismatch at ru.gravit.launchserver.socket.ResponseThread.readHandshake(ResponseThread.java:67) at ru.gravit.launchserver.socket.ResponseThread.run(ResponseThread.java:104) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
Лог со стороны клиента:
[23:11:34] [Client thread/INFO]: Connecting to nitdroid.ru, 25565 2018.10.14 23:11:35 [DEBUG] Patched AuthenticationService created: 'dfae619a-e274-4a7a-b5f3-9cdea6a8eb09' 2018.10.14 23:11:35 [DEBUG] Patched MinecraftSessionService created 2018.10.14 23:11:35 [DEBUG] joinServer, Username: 'TooPro', Access token: 38c99279c87fb877c66f98662fc0ea48, Server ID: 20e3df9c28b3163816096e577f719e18888b81e3 [23:11:45] [Client thread/INFO]: Connecting to nitdroid.ru, 25565 2018.10.14 23:11:46 [DEBUG] Patched AuthenticationService created: '74588c63-8a08-4bd0-b08b-65973146c9fc' 2018.10.14 23:11:46 [DEBUG] Patched MinecraftSessionService created 2018.10.14 23:11:46 [DEBUG] joinServer, Username: 'TooPro', Access token: 38c99279c87fb877c66f98662fc0ea48, Server ID: -68883f706d754546c71fd5743c92d5a3d93e01d3
Пришла интересная идея по отправке характеристик компьютера на сервер где находится лаунчер или сайт, к примеру можно генерировать стандартный файл от dxdiag и отправлять его или выдирать их каким-то другим способом.
Зачем? У меня крайне не стандартные тяжелые сборки и игроки часто жалуются что у них всё глючит и прочие вещи происходит, увы определить виновато железо или что-то у меня я не могу, по этому пришлось написать мини прогу которая формирует файл от dxdiag и его грузит игрок на форум, но это СЛОЖНО для них.
Отправлять или файлом или просто характеристики писать в базу с указанием ника игрока естественно.
Сорян за русский у меня с ним беда :))
Даёт возможность выполнить скрипт с некоторыми данными о лаунчсервере и jarFile после обфускации + имя выходного файла. Имя выходного файла и тому подобное требует возможности настройки в конфиге лаунчсервера. Желательно после перевода конфигов на json....
Требуется, чтоб сделать удобнее жизнь ибо формат json везде, а конфиги сашка - custom.
Для улучшения защиты от подмены рантайма.
Обязателен для больших проектов
Лишние сложности не нужны.
Не знаю как, но сделать надо.
Думаю идея не сложная в реализации. А удобства очень много.
Если к примеру захотелось на другой диск переместить, и не перекачивать все клиенты.
Проблема возникла при удалении одного из профайлов, в результате var settings.profile у некоторых игроков стал больше, чем profiles.length
Launcher/Launcher/runtime/dialog/dialog.js
Line 297 in ed7a09d
Exception in thread "JavaFX Application Thread" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:89) at com.sun.javafx.collections.VetoableListDecorator.get(VetoableListDecorator.java:306) at jdk.nashorn.internal.scripts.Script$Recompilation$85$9736A$^eval_.updateProfilesList(<eval>:297) at jdk.nashorn.internal.scripts.Script$Recompilation$80$6642A$^eval_.verifyLauncher#L:192#L:192#L:199#L:199(<eval>:203) at jdk.nashorn.internal.scripts.Script$Recompilation$72$1768A$^eval_.setTaskProperties#L:44(<eval>:47) at javafx.event.EventHandler$$NashornJavaAdapter.handle(Unknown Source) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.concurrent.EventHelper.fireEvent(EventHelper.java:219) at javafx.concurrent.Task.fireEvent(Task.java:1356) at javafx.concurrent.Task.setState(Task.java:723) at javafx.concurrent.Task$TaskCallable.lambda$call$501(Task.java:1434) at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177) at java.lang.Thread.run(Unknown Source)
Можно сделать несколько серверов на 1 конфиге клиента.
Увеличивает работоспособность при атаках запросами или большом кол-ве игроков.
Предположим есть человек серьёзно нарушивший правила. У него было 5 мультиаккаунтов. Забанили по hwid все 5. Потом один из них зашёл с другого hwid - тот hwid тоже забанили. Старый hwid для этого аккаунта тоже в бане причём для всех 5...
Для разных трюков с байткодом.
Добавить строчку конфига для запуска jar с ключом и классами
(полезно для rtoolkit и всяких хостингов)
Данный тригер работает на DLE но если вы шарите, то в полне сможете переписать его на другие CMS.
Начнем.
Для начала необходимо в таблице dle_users создать новую колонку с названием banLauncher для взаимодействия. Ибо ДЛЕ использует yes-no , а лаунчер 1-0.
Значение по умолчанию 0.
Вот запрос:
ALTER TABLE `dle_users`
ADD COLUMN `banLauncher` INT NULL DEFAULT '0' AFTER `banned`;
Теперь открываем LaunchServer.cfg
В разделе #HWID handler
заменяем все banned
на banLauncher
Теперь создаем тригер с параметрами : BEFORE UPDATE
на таблицу dle_users
В содержимое тригера добавляем:
BEGIN
IF NEW.banLauncher = 1 THEN
SET NEW.banned = 'yes';
set @id=(SELECT user_id FROM dle_users WHERE name = NEW.name);
set @days=0;
set @date=0;
INSERT INTO dle_banned (users_id, days, date, ip, descr) VALUES (@id, @days, @date, '','Ваш аккаунт заблокирован по множественным жалобам пользователей. Дальнейшее создание аккаунтов- приведет к повторной блокировке. Ваш IP занесен в черный список');
END IF;
IF NEW.banLauncher = 0 THEN
SET NEW.banned = '';
set @id=(SELECT user_id FROM dle_users WHERE name = NEW.name);
DELETE FROM dle_banned WHERE users_id = @id LIMIT 5;
END IF;
END
Теперь если в сокете прописать команду ban test
То он будет забанен на сайте и в лаунчере, бан соответсвенно по железу.
команда unban test
соответсвенно разбанит этого пользователя
На данный момент единственный способ ограничения доступа к некоторым routes RESTful'а - фильтрация по IP.
Наличие поля с API ключом (в HEADER запросов) позволит реализовывать scopes на бэкэнде и избавит от необходимости делать костыли с фильтрацией по IP.
Возможность использовать сторонний обфускатор (а не только прогуард). Выбор обфускатора или ничего в конфиге. Из коробки proguard + null. Остальное - модулями.
И их выбор, как следствие
Либо хеширование файлов и отправка их в xz (компрессия лучше, compress при старте после хеширования)! Decompress на клиенте.
Изменить Gradle скрипты сборки в соответствии с таким разделением:
LauncherModule - запуск клиента/gui
ClientModule - authlib, avanguard
ServerModule - ServerWrapper/authlib
Log4j включать только в LauncherModule
#HWID handler
hwidHandler: "mysql";
hwidHandlerConfig: {
fetchAll: false;
address: "localhost";
port: 3306;
username: "launcher";
password: "launcher";
database: "Mine1?serverTimezone=UTC";
query: "SELECT banned,name FROM dle_users WHERE ( hwid_hdd=? AND hwid_cpu=? AND hwid_bios=? ) OR ( name=? AND banned=1)";
queryParams: [ "%hwid_hdd%", "%hwid_cpu%", "%hwid_bios%" ,"%login%"];
queryUpd: "UPDATE dle_users SET hwid_hdd = ?, hwid_cpu = ?, hwid_bios = ? WHERE name=?";
queryParamsUpd: [ "%hwid_hdd%", "%hwid_cpu%", "%hwid_bios%", "%login%" ];
queryBan: "UPDATE dle_users SET banned = ? WHERE hwid_hdd = ? AND hwid_cpu = ? AND hwid_bios = ?";
queryParamsBan: [ "%isBanned%", "%hwid_hdd%", "%hwid_cpu%", "%hwid_bios%" ];
querySelect: "SELECT hwid_hdd,hwid_cpu,hwid_bios FROM dle_users WHERE name=?";
queryParamsSelect: [ "%login%" ];
isBannedName: "banned";
loginName: "name";
hddName: "hwid_hdd";
cpuName: "hwid_cpu";
biosName: "hwid_bios";
banMessage: "Ваш аккаунт заблокирован!";
};
Данный конфиг работает на DLE. Но если у Вас голова есть, то поменяв пару строк, можно сделать абсолютно под любую другую CMS (Бог маркетинга)
Написать загрузчик файлов по HTTP. Загрузчик должен уметь докачивать файл при разрыве соединения и иметь очередь скачивания, в которую можно добавлять элементы во время загрузки (аналог ConcurrentHashMap для очередей).
Хандлер листов серверов, из коробки надо бы dir и mysql. Зачем? Мало ли кому в голову придёт конфигить сервера из mysql.
Лишняя либа.
Перенос Description из config.js в профиль
Выяснилось, что так можно прикинутся сервером.
[05:44:40] [main/ERROR] [LaunchWrapper]: Unable to launch
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12-launcherfixed.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12-launcherfixed.jar:?]
at ru.gravit.launcher.cV4qxWDiOooGbrAU2fqO4D0f.rCpJl2zVpUfzQFYYt668fKda(Unknown Source) [Launcher-obfed.jar:?]
at ru.gravit.launcher.cV4qxWDiOooGbrAU2fqO4D0f.main(Unknown Source) [Launcher-obfed.jar:?]
Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 13 path $.
at com.google.gson.Gson.fromJson(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.Gson.fromJson(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.Gson.fromJson(Unknown Source) ~[Launcher-obfed.jar:?]
at net.minecraft.client.main.Main.main(SourceFile:116) ~[Main.class:?]
... 8 more
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 13 path $.
at com.google.gson.stream.JsonReader.beginArray(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.Gson.fromJson(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.Gson.fromJson(Unknown Source) ~[Launcher-obfed.jar:?]
at com.google.gson.Gson.fromJson(Unknown Source) ~[Launcher-obfed.jar:?]
at net.minecraft.client.main.Main.main(SourceFile:116) ~[Main.class:?]
... 8 more
2018.12.08 05:44:40 [INFO] WatchService closed 2
Exception in thread "main" 2018.12.08 05:44:40 [INFO] WatchService closed 2
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: cpw.mods.fml.relauncher.FMLSecurityManager$ExitTrappedException
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at cpw.mods.fml.relauncher.FMLSecurityManager.checkPermission(FMLSecurityManager.java:25)
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at java.lang.SecurityManager.checkExit(SecurityManager.java:761)
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at java.lang.Runtime.exit(Runtime.java:107)
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at java.lang.System.exit(System.java:971)
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at net.minecraft.launchwrapper.Launch.launch(Launch.java:138)
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at ru.gravit.launcher.cV4qxWDiOooGbrAU2fqO4D0f.rCpJl2zVpUfzQFYYt668fKda(Unknown Source)
[05:44:40] [main/INFO] [STDERR]: [java.lang.Throwable$WrappedPrintStream:println:748]: at ru.gravit.launcher.cV4qxWDiOooGbrAU2fqO4D0f.main(Unknown Source)
Exit code 1
Со всеми вытекающими.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.