GithubHelp home page GithubHelp logo

gravitlauncher / launcher Goto Github PK

View Code? Open in Web Editor NEW
121.0 19.0 109.0 9.33 MB

Улучшеный Minecraft лаунчер на основе sashok's742 v3

Home Page: https://gravitlauncher.com

License: GNU General Public License v3.0

Java 99.90% Shell 0.02% Dockerfile 0.09%
minecraft minecraft-launcher

launcher's Introduction

launcher's People

Contributors

alexcatze avatar anon8281 avatar bartolomeodr avatar beshelmek avatar clercq avatar dbarkovski avatar dima-dencep avatar drleonardo95 avatar gravit0 avatar ijo42 avatar jocat avatar joshoooowah avatar kr33pyk1ng avatar leshasmlesha avatar loomel avatar magtemtenebrius avatar micronovax avatar microwin7 avatar nalborr avatar radioegor146 avatar sanik avatar sasha0552 avatar skidunion avatar thexaver avatar will0376 avatar xakepsdk avatar xxdark avatar yaroslav4167 avatar zaxar163 avatar zznty avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

launcher's Issues

Клиент 1.12.2 закрывается с ошибкой лаунчера. Крашлога нет.

Протестировано на 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

Возможность авторизации по Email

Как насчет возможности авторизации по мылу игрока, вместо его ника?
Можно реализовать через authHandler, допустим если у игрока в бд стоит настройка isMailLogin, то будет пропускать авторизацию только по его мылу, это повысит безопасность аккаунтов, так как Email знает только игрок.

WatchDog

В случае зависания - рестарт.

Не собирает indexAsset

При выполнении команд

  1. unindexAsset asset1.7.10 1.7.10 unindexed
  2. удаляете asset1.7.10
  3. в unindexed/icons и unindexed/minecraft/icons меняете иконки
  4. и потом indexAsset unindexed 1.7.10 asset1.7.10
  5. удаляете unindexed
    Не собирает и выдает ошибку
    В старом Сашке все ок.
    https://hastebin.com/socipareke.rb

Сервер авторизации не доступен

Враппер установлен на сервере. Публичный ключ так-же на сервере. Я захожу из локальной сети и меня пускает на сервер. Любой внешний игрок подключится не может ибо получает ошибку о не доступности сервера авторизации.

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 и его грузит игрок на форум, но это СЛОЖНО для них.
Отправлять или файлом или просто характеристики писать в базу с указанием ника игрока естественно.
Сорян за русский у меня с ним беда :))

AfterBuildOperation.

Даёт возможность выполнить скрипт с некоторыми данными о лаунчсервере и jarFile после обфускации + имя выходного файла. Имя выходного файла и тому подобное требует возможности настройки в конфиге лаунчсервера. Желательно после перевода конфигов на json....

Копирование всех клиентов при смене директории в настройках

Думаю идея не сложная в реализации. А удобства очень много.
Если к примеру захотелось на другой диск переместить, и не перекачивать все клиенты.

  • также можно после перемещения удалить все данные в старой директории.

IndexOutOfBoundsException в runtime

Проблема возникла при удалении одного из профайлов, в результате var settings.profile у некоторых игроков стал больше, чем profiles.length

serverHolder.set(serverList.getChildren().get(settings.profile));

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)

Другая логика hwid.

Предположим есть человек серьёзно нарушивший правила. У него было 5 мультиаккаунтов. Забанили по hwid все 5. Потом один из них зашёл с другого hwid - тот hwid тоже забанили. Старый hwid для этого аккаунта тоже в бане причём для всех 5...

Запуск jar в serverwrapper

Добавить строчку конфига для запуска jar с ключом и классами
(полезно для rtoolkit и всяких хостингов)

Тригер для бана на сайте, при бане из лаунчера (ADD TO WIKI)

Данный тригер работает на 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
image

Теперь создаем тригер с параметрами : BEFORE UPDATE на таблицу dle_users
image

В содержимое тригера добавляем:

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
image
image

То он будет забанен на сайте и в лаунчере, бан соответсвенно по железу.
команда unban test соответсвенно разбанит этого пользователя
image
image

API Key для JSON запросов

На данный момент единственный способ ограничения доступа к некоторым routes RESTful'а - фильтрация по IP.
Наличие поля с API ключом (в HEADER запросов) позволит реализовывать scopes на бэкэнде и избавит от необходимости делать костыли с фильтрацией по IP.

Optional Proguard.

Возможность использовать сторонний обфускатор (а не только прогуард). Выбор обфускатора или ничего в конфиге. Из коробки proguard + null. Остальное - модулями.

Разделение Launcher

Изменить Gradle скрипты сборки в соответствии с таким разделением:

LauncherModule - запуск клиента/gui
ClientModule - authlib, avanguard
ServerModule - ServerWrapper/authlib
Log4j включать только в LauncherModule

Добавить базовый HWID HANDLER

#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 (Бог маркетинга)

FileDownloader

Написать загрузчик файлов по HTTP. Загрузчик должен уметь докачивать файл при разрыве соединения и иметь очередь скачивания, в которую можно добавлять элементы во время загрузки (аналог ConcurrentHashMap для очередей).

ServerListHandler

Хандлер листов серверов, из коробки надо бы dir и mysql. Зачем? Мало ли кому в голову придёт конфигить сервера из mysql.

Ошибка при запуске клиента

[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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.