├── .gitattributes
├── .github
└── workflows
│ └── push.yml
├── .gitignore
├── .gitlab-ci.yml
├── .idea
└── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── .vscode
└── launch.json
├── LICENSE
├── build.gradle
├── compat
└── lang
│ ├── runtime_be.properties
│ ├── runtime_en.properties
│ ├── runtime_pl.properties
│ ├── runtime_ru.properties
│ └── runtime_uk.properties
├── convertprops.sh
├── extensions.json
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── runtime
├── components
│ ├── background.fxml
│ ├── buttons
│ │ ├── back.fxml
│ │ ├── cancel.fxml
│ │ ├── clientSettings.fxml
│ │ ├── close.fxml
│ │ ├── console.fxml
│ │ ├── copy.fxml
│ │ ├── customization.css
│ │ ├── customization.fxml
│ │ ├── deauth.fxml
│ │ ├── exit.fxml
│ │ ├── kill.css
│ │ ├── kill.fxml
│ │ ├── lang.fxml
│ │ ├── minimize.fxml
│ │ └── settings.fxml
│ ├── components.css
│ ├── notification.fxml
│ ├── panels
│ │ ├── leftpanel.css
│ │ └── leftpanel.fxml
│ ├── serverButton.fxml
│ ├── userBlock.css
│ └── userBlock.fxml
├── dialogs
│ ├── apply
│ │ └── dialog.fxml
│ ├── dialogs.css
│ └── info
│ │ └── dialog.fxml
├── favicon.png
├── images
│ ├── background.png
│ ├── icons
│ │ ├── checkbox1_off.png
│ │ ├── checkbox1_on.png
│ │ ├── checkbox_arrow_button.png
│ │ ├── checkbox_off.png
│ │ ├── checkbox_on.png
│ │ ├── default.png
│ │ ├── lock.png
│ │ └── user.png
│ ├── logo.png
│ └── servers
│ │ └── example.png
├── overlay
│ ├── processing
│ │ ├── processing.css
│ │ └── processing.fxml
│ ├── uploadasset
│ │ └── uploadasset.fxml
│ ├── webauth
│ │ ├── webauth.css
│ │ └── webauth.fxml
│ └── welcome
│ │ ├── welcome.css
│ │ └── welcome.fxml
├── runtime_be.properties
├── runtime_en.properties
├── runtime_pl.properties
├── runtime_ru.properties
├── runtime_uk.properties
├── scenes
│ ├── console
│ │ ├── console.css
│ │ └── console.fxml
│ ├── debug
│ │ ├── debug.css
│ │ └── debug.fxml
│ ├── internal
│ │ ├── browser
│ │ │ ├── browser.css
│ │ │ └── browser.fxml
│ │ └── default
│ │ │ ├── default.css
│ │ │ └── default.fxml
│ ├── login
│ │ ├── login.css
│ │ ├── login.fxml
│ │ └── methods
│ │ │ ├── loginonly.fxml
│ │ │ ├── loginpassword.fxml
│ │ │ └── totp.fxml
│ ├── options
│ │ ├── options.css
│ │ └── options.fxml
│ ├── serverinfo
│ │ ├── serverinfo.css
│ │ └── serverinfo.fxml
│ ├── servermenu
│ │ ├── servermenu.css
│ │ └── servermenu.fxml
│ ├── settings
│ │ ├── globalsettings.fxml
│ │ ├── settings.css
│ │ └── settings.fxml
│ └── update
│ │ ├── update.css
│ │ └── update.fxml
├── styles
│ ├── Comfortaa-Bold.ttf
│ ├── Comfortaa-Light.ttf
│ ├── Comfortaa-Medium.ttf
│ ├── Comfortaa-Regular.ttf
│ ├── Comfortaa-SemiBold.ttf
│ ├── FONT OFL.txt
│ ├── global.css
│ └── variables.css
└── themes
│ └── dark
│ ├── images
│ └── background.png
│ └── styles
│ └── variables.css
├── settings.gradle
└── src
└── main
└── java
└── pro
└── gravit
└── launcher
└── gui
├── JavaFXApplication.java
├── JavaRuntimeModule.java
├── RuntimeSecurityService.java
├── SkinManager.java
├── StdJavaRuntimeProvider.java
├── commands
├── RuntimeCommand.java
├── VersionCommand.java
└── runtime
│ ├── DialogCommand.java
│ ├── GetSizeCommand.java
│ ├── InfoCommand.java
│ ├── NotifyCommand.java
│ ├── ReloadCommand.java
│ ├── ShowFxmlCommand.java
│ ├── ThemeCommand.java
│ ├── WarpCommand.java
│ └── WebViewCommand.java
├── components
├── ServerButton.java
└── UserBlock.java
├── config
├── DesignConstants.java
├── GuiModuleConfig.java
├── RuntimeSettings.java
└── StdSettingsManager.java
├── dialogs
├── AbstractDialog.java
├── ApplyDialog.java
├── InfoDialog.java
└── NotificationDialog.java
├── helper
├── EnFSHelper.java
├── LookupHelper.java
└── PositionHelper.java
├── impl
├── AbstractStage.java
├── AbstractVisualComponent.java
├── BackgroundComponent.java
├── ContextHelper.java
├── FXExecutorService.java
├── FXMLFactory.java
├── GuiEventHandler.java
├── GuiObjectsContainer.java
├── MessageManager.java
└── TriggerManager.java
├── overlays
├── AbstractOverlay.java
├── CenterOverlay.java
├── ProcessingOverlay.java
├── UploadAssetOverlay.java
└── WelcomeOverlay.java
├── scenes
├── AbstractScene.java
├── console
│ └── ConsoleScene.java
├── debug
│ ├── DebugScene.java
│ └── ProcessLogOutput.java
├── interfaces
│ └── SceneSupportUserBlock.java
├── internal
│ └── BrowserScene.java
├── login
│ ├── AuthFlow.java
│ ├── LoginAuthButtonComponent.java
│ ├── LoginScene.java
│ └── methods
│ │ ├── AbstractAuthMethod.java
│ │ ├── LoginAndPasswordAuthMethod.java
│ │ ├── LoginOnlyAuthMethod.java
│ │ ├── TotpAuthMethod.java
│ │ └── WebAuthMethod.java
├── options
│ ├── OptionsScene.java
│ └── OptionsTab.java
├── serverinfo
│ └── ServerInfoScene.java
├── servermenu
│ └── ServerMenuScene.java
├── settings
│ ├── BaseSettingsScene.java
│ ├── GlobalSettingsScene.java
│ ├── SettingsScene.java
│ └── components
│ │ ├── JavaSelectorComponent.java
│ │ ├── LanguageSelectorComponent.java
│ │ └── ThemeSelectorComponent.java
└── update
│ ├── UpdateScene.java
│ └── VisualDownloader.java
├── service
├── AuthService.java
├── JavaService.java
├── LaunchService.java
├── OfflineService.java
├── PingService.java
├── ProfilesService.java
└── RuntimeDialogService.java
├── stage
├── ConsoleStage.java
├── DialogStage.java
└── PrimaryStage.java
└── utils
├── AssetIndexHelper.java
├── JavaFxUtils.java
├── RuntimeCryptedFile.java
├── SystemMemory.java
└── SystemTheme.java
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto eol=lf
2 | *.[cC][mM][dD] text eol=crlf
3 | *.[bB][aA][tT] text eol=crlf
4 | *.[pP][sS]1 text eol=crlf
5 | *.[sS][hH] text eol=lf
6 |
7 | *.patch text eol=lf
8 |
9 | *.png binary
10 | *.lzma binary
11 | *.zip binary
12 | *.gzip binary
13 | *.exe binary
14 | *.ico binary
15 | *.eot binary
16 | *.ttf binary
17 | *.woff binary
18 | *.woff2 binary
19 | *.a binary
20 | *.lib binary
21 | *.icns binary
22 | *.jpg binary
23 | *.jpeg binary
24 | *.gif binary
25 | *.mov binary
26 | *.mp4 binary
27 | *.mp3 binary
28 | *.flv binary
29 | *.fla binary
30 | *.swf binary
31 | *.gz binary
32 | *.tar binary
33 | *.tar.gz binary
34 | *.7z binary
35 | *.pyc binary
36 | *.gpg binary
37 | *.bin binary
38 |
39 | *.gitattributes text
40 | .gitignore text
41 |
42 | # Java sources
43 | *.java text diff=java
44 | *.kt text diff=kotlin
45 | *.groovy text diff=java
46 | *.scala text diff=java
47 | *.gradle text diff=java
48 | *.gradle.kts text diff=kotlin
49 |
50 | # These files are text and should be normalized (Convert crlf => lf)
51 | *.css text diff=css
52 | *.scss text diff=css
53 | *.sass text
54 | *.df text
55 | *.htm text diff=html
56 | *.html text diff=html
57 | *.js text
58 | *.jsp text
59 | *.jspf text
60 | *.jspx text
61 | *.properties text
62 | *.tld text
63 | *.tag text
64 | *.tagx text
65 | *.xml text
66 |
67 | # These files are binary and should be left untouched
68 | # (binary is a macro for -text -diff)
69 | *.class binary
70 | *.dll binary
71 | *.ear binary
72 | *.jar binary
73 | *.so binary
74 | *.war binary
75 | *.jks binary
76 |
77 | mvnw text eol=lf
78 | gradlew text eol=lf
--------------------------------------------------------------------------------
/.github/workflows/push.yml:
--------------------------------------------------------------------------------
1 | name: push
2 | on:
3 | push:
4 | # create:
5 | # tags:
6 | # - v*
7 | jobs:
8 | launcher:
9 | name: LauncherRuntime
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout
13 | uses: actions/checkout@v2
14 | with:
15 | submodules: recursive
16 |
17 | - name: Cache Gradle
18 | uses: actions/cache@v4
19 | with:
20 | path: ~/.gradle/caches
21 | key: gravit-${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}-launcher-runtime
22 |
23 | - name: Set up JDK 21
24 | uses: actions/setup-java@v1
25 | with:
26 | java-version: 21
27 |
28 | - name: Grant execute permission for gradlew
29 | run: chmod +x gradlew
30 |
31 | - name: Build with Gradle
32 | run: ./gradlew build
33 |
34 | - name: Create artifacts
35 | run: |
36 | mkdir -p artifacts
37 | cd runtime
38 | zip -r -9 ../artifacts/runtime.zip *
39 | cd ../build/libs
40 | cp *.jar ../../artifacts
41 |
42 | - name: Upload artifacts
43 | uses: actions/upload-artifact@v4
44 | with:
45 | name: LauncherRuntime
46 | path: artifacts
47 |
48 | - name: Get version value, set to env
49 | if: startsWith(github.event.ref, 'refs/tags')
50 | run: echo "LAUNCHER_VERSION=$(echo ${{ github.event.ref }} | awk -F\/ '{print $3}')" >> $GITHUB_ENV
51 |
52 | - name: Create release
53 | id: create_release
54 | uses: softprops/action-gh-release@v1
55 | if: startsWith(github.event.ref, 'refs/tags')
56 | env:
57 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58 | # Список настроек тута: https://github.com/softprops/action-gh-release#-customizing
59 | # Можно сделать пуш описания релиза из файла
60 | with:
61 | name: GravitLauncher Runtime ${{ env.LAUNCHER_VERSION }}
62 | draft: false
63 | prerelease: false
64 | files: |
65 | ./artifacts/runtime.zip
66 | ./artifacts/*.jar
67 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ### Eclipse ###
2 | .metadata
3 | bin/
4 | tmp/
5 | *.tmp
6 | *.bak
7 | *.swp
8 | *~.nib
9 | local.properties
10 | .settings/
11 | .loadpath
12 | .recommenders
13 | tst/
14 |
15 | # External tool builders
16 | .externalToolBuilders/
17 |
18 | # Locally stored "Eclipse launch configurations"
19 | *.launch
20 |
21 | # CDT-specific (C/C++ Development Tooling)
22 | .cproject
23 |
24 | # CDT- autotools
25 | .autotools
26 |
27 | # Java annotation processor (APT)
28 | .factorypath
29 |
30 | # sbteclipse plugin
31 | .target
32 |
33 | # Tern plugin
34 | .tern-project
35 |
36 | # TeXlipse plugin
37 | .texlipse
38 |
39 | # STS (Spring Tool Suite)
40 | .springBeans
41 |
42 | # Code Recommenders
43 | .recommenders/
44 |
45 | # Annotation Processing
46 | .apt_generated/
47 |
48 | ### Eclipse Patch ###
49 | # Eclipse Core
50 | .project
51 |
52 | # JDT-specific (Eclipse Java Development Tools)
53 | .classpath
54 |
55 | # Annotation Processing
56 | .apt_generated
57 |
58 | ### Intellij+all ###
59 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
60 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
61 |
62 | # CMake
63 | cmake-build-*/
64 |
65 | # File-based project format
66 | *.iws
67 |
68 | # IntelliJ
69 | out/
70 |
71 | # mpeltonen/sbt-idea plugin
72 | .idea_modules/
73 |
74 | # JIRA plugin
75 | atlassian-ide-plugin.xml
76 |
77 | # Crashlytics plugin (for Android Studio and IntelliJ)
78 | com_crashlytics_export_strings.xml
79 | crashlytics.properties
80 | crashlytics-build.properties
81 | fabric.properties
82 |
83 | ### Intellij+all Patch ###
84 | .idea/
85 | *.iml
86 | modules.xml
87 | .idea/misc.xml
88 | *.ipr
89 | Launcher.iws
90 | !/.idea/
91 | /.idea/*
92 | !/.idea/codeStyles
93 | /.idea/codeStyles/*
94 | !/.idea/codeStyles/codeStyleConfig.xml
95 | !/.idea/codeStyles/Project.xml
96 | ### Gradle ###
97 | .gradle
98 | .gradle/
99 | /build/
100 | build/
101 | # Ignore Gradle GUI config
102 | gradle-app.setting
103 |
104 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
105 | !gradle-wrapper.jar
106 |
107 | # Cache of project
108 | .gradletasknamecache
109 |
110 | # Other
111 | buildnumber
112 | *.directory
113 | cmd.bat
114 | cmd.sh
115 | project/target
116 | ## PVS Studio
117 | .PVS-Studio/
118 | ## VS Code
119 | !/.vscode
120 | /.vscode/*
121 | !/.vscode/launch.json
--------------------------------------------------------------------------------
/.gitlab-ci.yml:
--------------------------------------------------------------------------------
1 | # This file is a template, and might need editing before it works on your project.
2 | # This is the Gradle build system for JVM applications
3 | # https://gradle.org/
4 | # https://github.com/gradle/gradle
5 | image: gradle:jdk11
6 |
7 | # Disable the Gradle daemon for Continuous Integration servers as correctness
8 | # is usually a priority over speed in CI environments. Using a fresh
9 | # runtime for each build is more reliable since the runtime is completely
10 | # isolated from any previous builds.
11 | variables:
12 | GRADLE_OPTS: "-Dorg.gradle.daemon=false"
13 |
14 | before_script:
15 | - export GRADLE_USER_HOME=`pwd`/.gradle
16 | - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
17 | - eval $(ssh-agent -s)
18 | - echo "$SSH_PRIVATE_KEY" | base64 -d | ssh-add - > /dev/null
19 | - mkdir -p ~/.ssh
20 | - chmod 700 ~/.ssh
21 | - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
22 | build:
23 | stage: build
24 | script: gradle -Dorg.gradle.daemon=false --build-cache assemble
25 | after_script:
26 | - apt-get -y update
27 | - apt-get -y install zip
28 | - mkdir -p artifacts
29 | - cd runtime
30 | - zip -r -9 ../artifacts/runtime.zip *
31 | - cd ../build/libs
32 | - cp *.jar ../../artifacts
33 | cache:
34 | key: "$CI_COMMIT_REF_NAME"
35 | policy: push
36 | paths:
37 | - build
38 | - .gradle
39 | artifacts:
40 | expire_in: 6 week
41 | paths:
42 | - artifacts
43 |
44 | test:
45 | stage: test
46 | script: gradle check
47 | cache:
48 | key: "$CI_COMMIT_REF_NAME"
49 | policy: pull
50 | paths:
51 | - build
52 | - .gradle
53 |
54 | deploy-demo:
55 | stage: deploy
56 | only: [master]
57 | script:
58 | - gradle build
59 | - eval $(ssh $SSH_USER@$SSH_HOST 'cd $SSH_DIR && cat deploy-runtime.sh')
60 | cache:
61 | key: "$CI_COMMIT_REF_NAME"
62 | policy: pull
63 | paths:
64 | - build
65 | - .gradle
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Используйте IntelliSense, чтобы узнать о возможных атрибутах.
3 | // Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
4 | // Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "type": "java",
9 | "name": "Debug",
10 | "request": "launch",
11 | "mainClass": "pro.gravit.launcher.runtime.debug.DebugMain",
12 | "vmArgs": [
13 | "-Dlauncher.debug=true",
14 | "-Dlauncher.stacktrace=true",
15 | "-Dlauncherdebug.modules=pro.gravit.launcher.gui.JavaRuntimeModule",
16 | "-Dlauncherdebug.projectname=MineCraft", // Изменить на projectName из конфигурации LaunchServer.json
17 | "-Dlauncherdebug.websocket=wss://launcher.gravit-support.ru/api"
18 | ],
19 | "classPaths": [
20 | "$Auto",
21 | "JavaRuntime.main"
22 | ]
23 | },
24 | {
25 | "type": "java",
26 | "name": "Debug DEV",
27 | "request": "launch",
28 | "mainClass": "pro.gravit.launcher.runtime.debug.DebugMain",
29 | "vmArgs": [
30 | "-Dlauncher.debug=true",
31 | "-Dlauncher.stacktrace=true",
32 | "-Dlauncher.dev=true",
33 | "-Dlauncherdebug.modules=pro.gravit.launcher.gui.JavaRuntimeModule",
34 | "-Dlauncherdebug.projectname=MineCraft", // Изменить на projectName из конфигурации LaunchServer.json
35 | "-Dlauncherdebug.websocket=wss://launcher.gravit-support.ru/api"
36 | ],
37 | "classPaths": [
38 | "$Auto",
39 | "JavaRuntime.main"
40 | ]
41 | }
42 | ]
43 | }
44 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 GravitLauncherTeam
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/convertprops.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | native2ascii compat/lang/runtime_ru.properties runtime/runtime_ru.properties
3 | native2ascii compat/lang/runtime_en.properties runtime/runtime_en.properties
4 | native2ascii compat/lang/runtime_be.properties runtime/runtime_be.properties
5 | native2ascii compat/lang/runtime_pl.properties runtime/runtime_pl.properties
6 | native2ascii compat/lang/runtime_uk.properties runtime/runtime_uk.properties
--------------------------------------------------------------------------------
/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "redhat.java",
4 | "vscode.github",
5 | "vscode.git",
6 | "redhat.vscode-xml",
7 | "GitHub.vscode-pull-request-github",
8 | "vscjava.vscode-java-dependency",
9 | "vscjava.vscode-gradle",
10 | "vscjava.vscode-java-debug",
11 | "vscode.css-language-features",
12 | "cwan.native-ascii-converter",
13 | "SirTori.indenticator",
14 | "oderwat.indent-rainbow",
15 | "liamhammett.inline-parameters",
16 | "mhutchie.git-graph"
17 | ]
18 | }
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.parallel=true
2 | org.gradle.daemon=false
3 | org.gradle.configureondemand=true
4 | org.gradle.caching=true
5 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
74 |
75 |
76 | @rem Execute Gradle
77 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
78 |
79 | :end
80 | @rem End local scope for the variables with windows NT shell
81 | if %ERRORLEVEL% equ 0 goto mainEnd
82 |
83 | :fail
84 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
85 | rem the _cmd.exe /c_ return code!
86 | set EXIT_CODE=%ERRORLEVEL%
87 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
88 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
89 | exit /b %EXIT_CODE%
90 |
91 | :mainEnd
92 | if "%OS%"=="Windows_NT" endlocal
93 |
94 | :omega
95 |
--------------------------------------------------------------------------------
/runtime/components/background.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/runtime/components/buttons/back.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
16 |
--------------------------------------------------------------------------------
/runtime/components/buttons/cancel.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/runtime/components/buttons/clientSettings.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/runtime/components/buttons/close.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/runtime/components/buttons/console.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/runtime/components/buttons/copy.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/runtime/components/buttons/customization.css:
--------------------------------------------------------------------------------
1 | #customization {
2 | -fx-background-color: -fx-colors-text;
3 | -fx-background-radius: 4px;
4 | -fx-opacity: 0;
5 | -fx-effect: none;
6 | }
7 | #customization:hover {
8 | -fx-opacity: 1;
9 | }
10 | #customization>.icons {
11 | -fx-fill: -fx-colors-base;
12 | }
--------------------------------------------------------------------------------
/runtime/components/buttons/customization.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/runtime/components/buttons/deauth.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
17 |
--------------------------------------------------------------------------------
/runtime/components/buttons/exit.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
17 |
--------------------------------------------------------------------------------
/runtime/components/buttons/kill.css:
--------------------------------------------------------------------------------
1 | .kill:hover,
2 | .kill:pressed {
3 | -fx-fill: -fx-red !important;
4 | }
--------------------------------------------------------------------------------
/runtime/components/buttons/kill.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/runtime/components/buttons/lang.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/runtime/components/buttons/minimize.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
16 |
--------------------------------------------------------------------------------
/runtime/components/buttons/settings.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/runtime/components/components.css:
--------------------------------------------------------------------------------
1 | /*-- Уведомления --*/
2 | .notification {
3 | -fx-padding: 10px;
4 | -fx-background-color: -fx-colors-base;
5 | -fx-background-radius: 10px 0px 0px 10px;
6 | -fx-effect: -fx-effect-dropshadow;
7 | }
8 | .notification HBox VBox {
9 | -fx-padding: 0px 10px 0px 10px;
10 | -fx-spacing: 5;
11 | }
12 | #notificationHeading {
13 | -fx-fill: -fx-colors-text;
14 | -fx-font-weight: bold;
15 | -fx-font-size: 14px;
16 | }
17 | #notificationText {
18 | -fx-text-fill: -fx-colors-text;
19 | -fx-font-size: 10px;
20 | }
21 | /*-- Блок сервера --*/
22 | .serverButtons {
23 | -fx-background-color: -fx-glass;
24 | -fx-background-radius: 20px;
25 | }
26 | #serverButton {
27 | -fx-background-radius: 20px;
28 | -fx-cursor: hand;
29 | -fx-background-color: -fx-glass;
30 | }
31 | #serverButton:hover {
32 | -fx-background-color: -fx-violet-hover2;
33 | }
34 | #serverButtonSelected,
35 | #serverButtonPressed {
36 | -fx-background-color: -fx-violet-hover2;
37 | }
38 | /*-- Информация о сервере --*/
39 | #nameServer {
40 | -fx-text-fill: -fx-colors-text;
41 | -fx-font-size: 20px;
42 | -fx-wrap-text: false;
43 | -fx-font-weight: bold;
44 | }
45 | #nameServer:hover {
46 | -fx-text-fill: -fx-colors-text-hover;
47 | }
48 | #genreServer {
49 | -fx-text-fill: -fx-colors-text;
50 | -fx-font-size: 12px;
51 | }
52 | /*-- Индикатор онлайна --*/
53 | .online-green {
54 | -fx-background-color: -fx-green;
55 | }
56 | .online-violet {
57 | -fx-background-color: -fx-violet;
58 | }
59 | #online,
60 | #speedLoad {
61 | -fx-background-radius: 5px;
62 | -fx-text-fill: -fx-colors-base;
63 | -fx-font-size: 14px;
64 | -fx-font-weight: bold;
65 | -fx-padding: 8px;
66 | }
67 | /*-- Кнопка сохранить (для всех сцен) --*/
68 | #save {
69 | -fx-font-weight: bold;
70 | -fx-font-size: 18px;
71 | -fx-text-align: center;
72 | -fx-text-fill: -fx-colors-base;
73 | -fx-background-color: -fx-violet;
74 | -fx-background-radius: 10px;
75 | -fx-padding: 8px;
76 | }
77 | #save:hover {
78 | -fx-background-color: -fx-violet-hover;
79 | }
80 | #reset {
81 | -fx-font-weight: bold;
82 | -fx-font-size: 14px;
83 | -fx-text-align: center;
84 | -fx-text-fill: -fx-colors-base;
85 | -fx-background-color: -fx-red;
86 | -fx-background-radius: 5px;
87 | -fx-padding: 8px;
88 | }
89 | #reset:hover {
90 | -fx-background-color: -fx-red-hover;
91 | }
92 |
--------------------------------------------------------------------------------
/runtime/components/notification.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/runtime/components/panels/leftpanel.css:
--------------------------------------------------------------------------------
1 | #leftpanel {
2 | -fx-background-color: -fx-glass;
3 | }
--------------------------------------------------------------------------------
/runtime/components/panels/leftpanel.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/runtime/components/serverButton.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/runtime/components/userBlock.css:
--------------------------------------------------------------------------------
1 | #avatar {
2 | -fx-background-position: center;
3 | -fx-background-color: transparent;
4 | -fx-font-smoothing-type: lcd;
5 | }
6 | #nickname {
7 | -fx-font-weight: bold;
8 | -fx-font-size: 14px;
9 | -fx-text-fill: -fx-colors-text;
10 | }
11 | #role {
12 | -fx-font-weight: normal;
13 | -fx-font-size: 12px;
14 | -fx-text-fill: -fx-colors-text;
15 | }
--------------------------------------------------------------------------------
/runtime/components/userBlock.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/runtime/dialogs/apply/dialog.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/runtime/dialogs/dialogs.css:
--------------------------------------------------------------------------------
1 | /*-- Блок диалога --*/
2 | .dialog {
3 | -fx-background-color: -fx-colors-base;
4 | -fx-border-color: -fx-colors-base;
5 | -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.3), 30, 0.1, 0.0, 0.0);
6 | -fx-border-radius: 20px;
7 | -fx-background-radius: 20px;
8 | -fx-padding: 10px;
9 | }
10 | #textDialog {
11 | -fx-background-color: -fx-bg2;
12 | -fx-background-radius: 10px;
13 | -fx-text-fill: -fx-colors-text;
14 | -fx-font-size: 12px;
15 | -fx-padding: 10px 15px 10px 15px;
16 | }
17 | #headingDialog {
18 | -fx-font-weight: 800;
19 | -fx-font-size: 16px;
20 | }
21 | /*-- Текст диалога --*/
22 | .dialog-button {
23 | -fx-background-color: transparent;
24 | -fx-border-style: solid;
25 | -fx-border-width: 2px;
26 | -fx-border-radius: 3px;
27 | }
28 | .dialog-apply-button {
29 | -fx-border-color: -fx-green;
30 | -fx-text-fill: -fx-green;
31 | }
32 | .dialog-apply-button:hover {
33 | -fx-background-color: -fx-green;
34 | -fx-text-fill: -fx-colors-base;
35 | }
36 | .dialog-deny-button {
37 | -fx-border-color: -fx-red;
38 | -fx-text-fill: -fx-red;
39 | }
40 | .dialog-deny-button:hover {
41 | -fx-background-color: -fx-red;
42 | -fx-text-fill: -fx-colors-base;
43 | }
44 |
45 |
--------------------------------------------------------------------------------
/runtime/dialogs/info/dialog.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/runtime/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/favicon.png
--------------------------------------------------------------------------------
/runtime/images/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/background.png
--------------------------------------------------------------------------------
/runtime/images/icons/checkbox1_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/checkbox1_off.png
--------------------------------------------------------------------------------
/runtime/images/icons/checkbox1_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/checkbox1_on.png
--------------------------------------------------------------------------------
/runtime/images/icons/checkbox_arrow_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/checkbox_arrow_button.png
--------------------------------------------------------------------------------
/runtime/images/icons/checkbox_off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/checkbox_off.png
--------------------------------------------------------------------------------
/runtime/images/icons/checkbox_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/checkbox_on.png
--------------------------------------------------------------------------------
/runtime/images/icons/default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/default.png
--------------------------------------------------------------------------------
/runtime/images/icons/lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/lock.png
--------------------------------------------------------------------------------
/runtime/images/icons/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/icons/user.png
--------------------------------------------------------------------------------
/runtime/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/logo.png
--------------------------------------------------------------------------------
/runtime/images/servers/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/images/servers/example.png
--------------------------------------------------------------------------------
/runtime/overlay/processing/processing.css:
--------------------------------------------------------------------------------
1 | #header-text {
2 | -fx-font-weight: 800;
3 | -fx-font-size: 18px;
4 | -fx-text-fill: -fx-colors-text;
5 | }
6 |
7 | #description {
8 | -fx-text-fill: -fx-colors-text;
9 | }
10 |
--------------------------------------------------------------------------------
/runtime/overlay/processing/processing.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/runtime/overlay/uploadasset/uploadasset.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/runtime/overlay/webauth/webauth.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/overlay/webauth/webauth.css
--------------------------------------------------------------------------------
/runtime/overlay/webauth/webauth.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/runtime/overlay/welcome/welcome.css:
--------------------------------------------------------------------------------
1 | /*-- Приветствие --*/
2 | #header-text {
3 | -fx-font-weight: 800;
4 | -fx-font-size: 18px;
5 | -fx-text-fill: -fx-colors-text;
6 | }
7 |
8 | #playerName {
9 | -fx-text-fill: -fx-colors-text;
10 | }
--------------------------------------------------------------------------------
/runtime/overlay/welcome/welcome.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/runtime/scenes/console/console.css:
--------------------------------------------------------------------------------
1 | /*-- Ввод данных --*/
2 | TextField {
3 | -fx-background-color: -fx-colors-baseG;
4 | -fx-background-radius: 0 0 10 10;
5 | -fx-font-size: 14px;
6 | -fx-text-fill: -fx-header;
7 | -fx-font-weight: bold;
8 | -fx-cursor: text;
9 | -fx-effect: dropshadow(gaussian, rgba(0, 0, 0, 0.2), 10, 0.1, 0.0, 0.0);
10 | }
11 | TextField:focused {
12 | -fx-text-fill: -fx-colors-text;
13 | }
14 |
--------------------------------------------------------------------------------
/runtime/scenes/console/console.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/runtime/scenes/debug/debug.css:
--------------------------------------------------------------------------------
1 | #version {
2 | -fx-text-fill: -fx-colors-text-secondary;
3 | -fx-font-size: 8pt;
4 | }
5 |
--------------------------------------------------------------------------------
/runtime/scenes/debug/debug.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
30 |
31 |
32 |
37 |
38 |
--------------------------------------------------------------------------------
/runtime/scenes/internal/browser/browser.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/scenes/internal/browser/browser.css
--------------------------------------------------------------------------------
/runtime/scenes/internal/browser/browser.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/runtime/scenes/internal/default/default.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/scenes/internal/default/default.css
--------------------------------------------------------------------------------
/runtime/scenes/internal/default/default.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
17 |
18 |
--------------------------------------------------------------------------------
/runtime/scenes/login/login.css:
--------------------------------------------------------------------------------
1 | /*-- Вертикальная полоса на главной сцене --*/
2 | .vline {
3 | -fx-background-color: -fx-glass;
4 | }
5 | #loginLeftPane{
6 | -fx-padding: 32px;
7 | }
8 | /*-- Ввод данных --*/
9 | #login,
10 | PasswordField {
11 | -fx-background-color: -fx-glass;
12 | -fx-background-radius: 10px;
13 | -fx-font-size: 12px;
14 | -fx-text-fill: -fx-header;
15 | -fx-font-weight: bold;
16 | -fx-cursor: text;
17 | }
18 | PasswordField:focused,
19 | #login:focused {
20 | -fx-text-fill: -fx-colors-text;
21 | }
22 | #1st,
23 | #2st,
24 | #3st,
25 | #4st,
26 | #5st,
27 | #6st {
28 | -fx-background-color: transparent;
29 | -fx-background-insets: 0.0 5.0 0.0 5.0;
30 | -fx-padding: 0;
31 | -fx-hgap: 0;
32 | -fx-vgap: 0;
33 | -fx-background-radius: 0;
34 | }
35 | /*-- Чекбоксы --*/
36 | #savePassword,
37 | #autoenter {
38 | -fx-font-size: 12px;
39 | -fx-background-image: url('../../images/icons/checkbox_off.png');
40 | -fx-text-fill: -fx-colors-text;
41 | }
42 | #savePassword:selected,
43 | #autoenter:selected {
44 | -fx-background-image: url('../../images/icons/checkbox_on.png');
45 | }
46 | /*-- Метод авторизации --*/
47 | #authList {
48 | -fx-background-color: -fx-glass;
49 | -fx-background-radius: 10px;
50 | }
51 | /*-- Поля --*/
52 | #login {
53 | -fx-background-image:url('../../images/icons/user.png');
54 | -fx-background-repeat: no-repeat;
55 | -fx-background-position: left center;
56 | -fx-padding: 0 0 0 24px;
57 | }
58 | PasswordField, #totp {
59 | -fx-background-image:url('../../images/icons/lock.png');
60 | -fx-background-repeat: no-repeat;
61 | -fx-background-position: left center;
62 | -fx-padding: 0 0 0 24px;
63 | }
64 | /*-- Ссылки --*/
65 | #createAccount {
66 | -fx-font-weight: bold;
67 | -fx-font-size: 9px;
68 | -fx-text-align: left;
69 | -fx-fill: -fx-green;
70 | }
71 | #createAccount:hover,
72 | #createAccount:pressed {
73 | -fx-fill: -fx-green-hover;
74 | -fx-cursor: hand;
75 | }
76 | #forgotPass {
77 | -fx-font-weight: bold;
78 | -fx-font-size: 9px;
79 | -fx-text-align: right;
80 | -fx-fill: -fx-colors-text-secondary;
81 | }
82 | #forgotPass:hover,
83 | #forgotPass:pressed {
84 | -fx-fill: -fx-colors-text-hover;
85 | -fx-cursor: hand;
86 | }
87 | .textLogin {
88 | -fx-fill: -fx-colors-text-secondary;
89 | -fx-font-size: 9px;
90 | -fx-text-align: left;
91 | }
92 | Rectangle {
93 | -fx-fill: -fx-colors-text-secondary;
94 | -fx-stroke: -fx-colors-text-secondary;
95 | }
96 | /*-- Веб авторизация (НЕ найдено в FXML) --*/
97 | /* #webAuth {
98 | -fx-font-weight: bold;
99 | -fx-font-size: 12px;
100 | -fx-text-align: center;
101 | -fx-text-fill: -fx-colors-base;
102 | -fx-background-color: -fx-green;
103 | } */
104 | /*-- Кнопка входа --*/
105 | #authButton {
106 | -fx-font-weight: bold;
107 | -fx-font-size: 24px;
108 | -fx-text-fill: -fx-colors-text;
109 | }
110 | /* --START-- Enum AuthButtonState Button */
111 | .activeButton {
112 | -fx-background-color: -fx-green;
113 | }
114 | .activeButton:hover {
115 | -fx-background-color: -fx-green-hover;
116 | }
117 | .unactiveButton {
118 | -fx-background-color: -fx-colors-unactive;
119 | }
120 | .unactiveButton:hover {
121 | -fx-background-color: -fx-colors-unactive-hover;
122 | }
123 | .errorButton {
124 | -fx-background-color: -fx-red;
125 | }
126 | .errorButton:hover {
127 | -fx-background-color: -fx-red-hover;
128 | }
129 | /* --END-- */
--------------------------------------------------------------------------------
/runtime/scenes/login/login.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/runtime/scenes/login/methods/loginonly.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/runtime/scenes/login/methods/loginpassword.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/runtime/scenes/login/methods/totp.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/runtime/scenes/options/options.css:
--------------------------------------------------------------------------------
1 | /* --START-- Чекбоксы, стили добавляются в коде */
2 | .optional-container {
3 | -fx-background-color: transparent;
4 | -fx-padding: 15 0 0 15px;
5 | -fx-cursor: hand;
6 | }
7 | .optional-checkbox {
8 | -fx-text-fill: -fx-colors-text;
9 | -fx-font-size: 14px;
10 | -fx-font-weight: bold;
11 | }
12 | .optional-label {
13 | -fx-text-fill: -fx-colors-text;
14 | -fx-font-size: 12px;
15 | -fx-label-padding: 0 20 0 30px;
16 | }
17 | .optional-library {
18 | -fx-background-color: -fx-violetTr;
19 | -fx-background-radius: 10px;
20 | -fx-text-fill: -fx-colors-text;
21 | -fx-padding: 2px 5px 2px 5px;
22 | }
23 | .optional-library-container {
24 | -fx-spacing: 10;
25 | -fx-padding: 0 20 0 30px;
26 | }
27 | /* --END-- */
28 | TabPane {
29 | -fx-tab-min-height: 40px;
30 | -fx-open-tab-animation: none;
31 | -fx-close-tab-animation: none;
32 | }
33 | TabPane StackPane {
34 | -fx-background-color: transparent;
35 | }
36 | TabPane .tab:selected {
37 | -fx-background-color: transparent, -fx-violet;
38 | }
39 | TabPane .tab {
40 | -fx-background-color: transparent, -fx-glass;
41 | -fx-background-radius: 10px;
42 | -fx-background-insets: 0 2.5 0 2.5;
43 | -fx-padding: 0px 20px 0px 20px;
44 | }
45 | TabPane .tab Label {
46 | -fx-font-size: 12px;
47 | -fx-font-weight: 800;
48 | -fx-text-fill: -fx-colors-text;
49 | }
50 | TabPane .tab:selected Label {
51 | -fx-font-size: 12px;
52 | -fx-font-weight: 800;
53 | -fx-text-fill: -fx-colors-base;
54 | }
55 |
56 | TabPane:focused .tab {
57 | -fx-focus-color: transparent;
58 | }
59 |
--------------------------------------------------------------------------------
/runtime/scenes/options/options.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/runtime/scenes/serverinfo/serverinfo.css:
--------------------------------------------------------------------------------
1 | ScrollPane {
2 | -fx-padding: 15px;
3 | -fx-background-color: -fx-colors-baseGA;
4 | -fx-background-radius: 15px;
5 | }
6 | ScrollPane Label {
7 | -fx-font-style: normal;
8 | -fx-font-weight: normal;
9 | -fx-font-size: 14px;
10 | -fx-text-fill: -fx-colors-text;
11 | }
--------------------------------------------------------------------------------
/runtime/scenes/serverinfo/serverinfo.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/runtime/scenes/servermenu/servermenu.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/scenes/servermenu/servermenu.css
--------------------------------------------------------------------------------
/runtime/scenes/servermenu/servermenu.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/runtime/scenes/settings/settings.css:
--------------------------------------------------------------------------------
1 | /* RAM настройки */
2 | Slider>.track {
3 | -fx-background-color: linear-gradient(to right, #8d4ce0, #8543e4, #7b39e9, #702eed, #6223f2);
4 | -fx-pref-height: 5px;
5 | }
6 | Slider>.thumb {
7 | -fx-background-color: -fx-violet;
8 | -fx-pref-width: 18px;
9 | -fx-pref-height: 18px;
10 | }
11 | Slider .axis {
12 | -fx-tick-label-fill: -fx-colors-text;
13 | }
14 |
15 | #ramLabel {
16 | -fx-font-weight: bold;
17 | -fx-font-size: 12px;
18 | -fx-text-fill: -fx-colors-text;
19 | }
20 | .settings-header {
21 | -fx-font-size: 14px;
22 | -fx-font-weight: 800;
23 | -fx-text-fill: -fx-colors-text;
24 | }
25 | .settings-card {
26 | -fx-spacing: 10;
27 | }
28 | .settings-container {
29 | -fx-spacing: 10;
30 | }
31 | .settings-label-header {
32 | -fx-font-size: 14px;
33 | -fx-font-weight: 800;
34 | -fx-text-fill: -fx-colors-text;
35 | }
36 | .settings-label {
37 | -fx-text-fill: -fx-colors-text;
38 | }
39 | #folder {
40 | -fx-background-color: -fx-glass;
41 | -fx-background-radius: 10px;
42 | }
43 | #path {
44 | -fx-padding: 10px;
45 | }
46 | #settingslist {
47 | -fx-padding: 15px;
48 | -fx-background-color: -fx-colors-baseGA;
49 | -fx-background-radius: 15px;
50 | }
51 | #changeDir {
52 | -fx-background-color: -fx-colors-base;
53 | -fx-background-radius: 0 10px 10px 0;
54 | -fx-text-fill: -fx-colors-text;
55 | }
--------------------------------------------------------------------------------
/runtime/scenes/update/update.css:
--------------------------------------------------------------------------------
1 | /*-- Информация о загрузке --*/
2 | #outputUpdate {
3 | -fx-text-fill: -fx-colors-text;
4 | -fx-font-size: 12px;
5 | }
6 | .anchor-block-information {
7 | -fx-padding: 15px 20px 40px 15px;
8 | }
9 | /*-- Вывод данных --*/
10 | #update-detail {
11 | -fx-background-color: -fx-colors-base;
12 | -fx-background-radius: 20px;
13 | -fx-effect: -fx-effect-dropshadow;
14 | }
15 | #speed {
16 | -fx-text-fill: linear-gradient(to right, #7248A7 0%, #2C03A8 100%);
17 | -fx-text-align: center;
18 | -fx-font-size: 48px;
19 | -fx-font-weight: bold;
20 | }
21 | #speed-text {
22 | -fx-font-size: 14px;
23 | -fx-font-weight: bold;
24 | -fx-text-fill: -fx-colors-text;
25 | }
26 | #volume {
27 | -fx-text-fill: -fx-colors-text;
28 | }
29 | .speedError {
30 | -fx-text-fill: -fx-red;
31 | -fx-font-size: 48px;
32 | }
33 | /* Прогресс бар */
34 | ProgressBar {
35 | -fx-indeterminate-bar-flip: false;
36 | -fx-background-color: -fx-colors-baseG;
37 | -fx-background-radius: 0px 10px 10px 0px;
38 | -fx-effect: -fx-effect-dropshadow;
39 | }
40 | ProgressBar>.bar {
41 | -fx-background-color: -fx-updateGR;
42 | -fx-background-insets: 0px;
43 | -fx-background-radius: 0px 10px 10px 0px;
44 | }
45 | ProgressBar>.track {
46 | -fx-background-color: transparent;
47 | -fx-background-insets: 0;
48 | -fx-background-radius: 0px 10px 10px 0px;
49 | }
50 | /* Добавляется при ошибке загрузки */
51 | .progressError>.bar {
52 | -fx-background-color: -fx-errorGR;
53 | }
54 |
--------------------------------------------------------------------------------
/runtime/scenes/update/update.fxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
--------------------------------------------------------------------------------
/runtime/styles/Comfortaa-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/styles/Comfortaa-Bold.ttf
--------------------------------------------------------------------------------
/runtime/styles/Comfortaa-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/styles/Comfortaa-Light.ttf
--------------------------------------------------------------------------------
/runtime/styles/Comfortaa-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/styles/Comfortaa-Medium.ttf
--------------------------------------------------------------------------------
/runtime/styles/Comfortaa-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/styles/Comfortaa-Regular.ttf
--------------------------------------------------------------------------------
/runtime/styles/Comfortaa-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/styles/Comfortaa-SemiBold.ttf
--------------------------------------------------------------------------------
/runtime/styles/FONT OFL.txt:
--------------------------------------------------------------------------------
1 | Copyright 2011 The Comfortaa Project Authors (https://github.com/alexeiva/comfortaa), with Reserved Font Name "Comfortaa".
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | http://scripts.sil.org/OFL
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/runtime/styles/variables.css:
--------------------------------------------------------------------------------
1 |
2 | /*-- Var library colors --*/
3 | * {
4 | -fx-green: #48D792;
5 | -fx-green-hover: #48D792;
6 | -fx-greenTr: rgba(34, 234, 181, 0.12);
7 | -fx-colors-text: #2C2C2C;
8 | -fx-colors-text-hover: #626262;
9 | -fx-colors-unactive: #CECECE;
10 | -fx-colors-unactive-hover: #CECECE;
11 | -fx-colors-base: #FFFFFF;
12 | -fx-colors-baseG: #FAFAFF;
13 | -fx-colors-baseGA: rgba(250, 250, 255, 0.5);
14 | -fx-glass: rgba(205, 205, 205, 0.22);
15 | -fx-glass-hover: rgba(178, 178, 178, 0.28);
16 | -fx-colors-text-secondary: #94A1A8;
17 | -fx-bg2: #FAFAFF;
18 | -fx-red: #DB4D4D;
19 | -fx-red-hover: #BA2E35;
20 | -fx-gray: #F2F2F2;
21 | -fx-violet: #6B36FF;
22 | -fx-violet-hover: linear-gradient(to bottom right, #8D4CE0 0%, #5711FA 100%);
23 | -fx-violet-hover2: rgba(210, 208, 225, 0.66);
24 | -fx-violetTr: rgba(107, 54, 255, 0.18);
25 | -fx-header: #A4B3BA;
26 | -fx-header-hover: #D0D6D9;
27 | -fx-scene-card: rgba(250, 250, 255, 0.50);
28 | -fx-violetGR: linear-gradient(#8D4CE0 10.39%, #5D35B9 68.07%, #FAFAFF 68.07%);
29 | -fx-ramGR: linear-gradient(from 50% 50% to 100% 100%, -fx-green, -fx-violet);
30 | -fx-updateGR: linear-gradient(from 20% 20% to 100% 100%, -fx-violet, #5D35B9);
31 | -fx-errorGR: linear-gradient(from 20% 20% to 100% 100%, #8D4CE0, #B93639);
32 | -fx-effect-dropshadow: dropshadow(gaussian, rgba(0, 0, 0, 0.25), 30, 0, 0, 0);
33 | }
34 |
--------------------------------------------------------------------------------
/runtime/themes/dark/images/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GravitLauncher/LauncherRuntime/33b71d2ab09ec1406bb43cb0e6f4ce955ed8d4f4/runtime/themes/dark/images/background.png
--------------------------------------------------------------------------------
/runtime/themes/dark/styles/variables.css:
--------------------------------------------------------------------------------
1 |
2 | /*-- Var library colors --*/
3 | * {
4 | -fx-green: #48D792;
5 | -fx-green-hover: #48D792;
6 | -fx-greenTr: rgba(34, 234, 181, 0.12);
7 | -fx-colors-text: #dddddd;
8 | -fx-colors-text-hover: #d6d6d6;
9 | -fx-colors-unactive: #545454;
10 | -fx-colors-unactive-hover: #5e5e5e;
11 | -fx-colors-base: #000000;
12 | -fx-colors-baseG: #272729;
13 | -fx-colors-baseGA: rgba(50, 50, 53, 0.5);
14 | -fx-glass: rgba(108, 108, 108, 0.22);
15 | -fx-glass-hover: rgba(101, 101, 101, 0.28);
16 | -fx-colors-text-secondary: #c3d2da;
17 | -fx-bg2: #5b5b5e;
18 | -fx-red: #DB4D4D;
19 | -fx-red-hover: #BA2E35;
20 | -fx-gray: #323232;
21 | -fx-violet: #6B36FF;
22 | -fx-violet-hover: linear-gradient(to bottom right, #8D4CE0 0%, #5711FA 100%);
23 | -fx-violet-hover2: rgba(65, 61, 100, 0.66);
24 | -fx-violetTr: rgba(107, 54, 255, 0.18);
25 | -fx-header: #A4B3BA;
26 | -fx-header-hover: #D0D6D9;
27 | -fx-scene-card: rgba(100, 100, 100, 0.50);
28 | -fx-violetGR: linear-gradient(#8D4CE0 10.39%, #5D35B9 68.07%, #FAFAFF 68.07%);
29 | -fx-ramGR: linear-gradient(from 50% 50% to 100% 100%, -fx-green, -fx-violet);
30 | -fx-updateGR: linear-gradient(from 20% 20% to 100% 100%, -fx-violet, #5D35B9);
31 | -fx-errorGR: linear-gradient(from 20% 20% to 100% 100%, #8D4CE0, #B93639);
32 | -fx-effect-dropshadow: dropshadow(gaussian, rgba(0, 0, 0, 0.25), 30, 0, 0, 0);
33 | }
34 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = 'JavaRuntime'
2 |
3 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/StdJavaRuntimeProvider.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui;
2 |
3 | import javafx.application.Application;
4 | import pro.gravit.launcher.gui.JavaFXApplication;
5 | import pro.gravit.launcher.runtime.LauncherEngine;
6 | import pro.gravit.launcher.runtime.gui.RuntimeProvider;
7 | import pro.gravit.launcher.runtime.utils.LauncherUpdater;
8 | import pro.gravit.utils.helper.IOHelper;
9 | import pro.gravit.utils.helper.LogHelper;
10 |
11 | import java.io.IOException;
12 | import java.io.InputStream;
13 | import java.io.OutputStream;
14 | import java.nio.file.Files;
15 | import java.nio.file.Path;
16 | import java.util.concurrent.atomic.AtomicReference;
17 |
18 | public class StdJavaRuntimeProvider implements RuntimeProvider {
19 | public static volatile Path updatePath;
20 | private static final AtomicReference INSTANCE = new AtomicReference<>();
21 |
22 | public StdJavaRuntimeProvider() {
23 | INSTANCE.set(this);
24 | }
25 |
26 | public static StdJavaRuntimeProvider getInstance() {
27 | return INSTANCE.get();
28 | }
29 |
30 | public JavaFXApplication getApplication() {
31 | return JavaFXApplication.getInstance();
32 | }
33 |
34 | @Override
35 | public void run(String[] args) {
36 | LogHelper.debug("Start JavaFX Application");
37 | Application.launch(JavaFXApplication.class, args);
38 | LogHelper.debug("Post Application.launch method invoked");
39 | if (updatePath != null) {
40 | LauncherUpdater.nothing();
41 | LauncherEngine.beforeExit(0);
42 | Path target = IOHelper.getCodeSource(LauncherUpdater.class);
43 | try {
44 | try (InputStream input = IOHelper.newInput(updatePath)) {
45 | try (OutputStream output = IOHelper.newOutput(target)) {
46 | IOHelper.transfer(input, output);
47 | }
48 | }
49 | Files.deleteIfExists(updatePath);
50 | } catch (IOException e) {
51 | LogHelper.error(e);
52 | LauncherEngine.forceExit(-109);
53 | }
54 | LauncherUpdater.restart();
55 | }
56 | }
57 |
58 | @Override
59 | public void preLoad() {
60 | }
61 |
62 | protected void registerPrivateCommands() {
63 | JavaFXApplication application = JavaFXApplication.getInstance();
64 | if (application != null) {
65 | application.registerPrivateCommands();
66 | }
67 | }
68 |
69 | @Override
70 | public void init(boolean clientInstance) {
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/RuntimeCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands;
2 |
3 | import pro.gravit.launcher.gui.JavaFXApplication;
4 | import pro.gravit.launcher.gui.commands.runtime.*;
5 | import pro.gravit.utils.command.Command;
6 |
7 | public class RuntimeCommand extends Command {
8 | private final JavaFXApplication application;
9 |
10 | public RuntimeCommand(JavaFXApplication application) {
11 | this.application = application;
12 | this.childCommands.put("dialog", new DialogCommand(application.messageManager));
13 | this.childCommands.put("warp", new WarpCommand(application));
14 | this.childCommands.put("reload", new ReloadCommand(application));
15 | this.childCommands.put("notify", new NotifyCommand(application.messageManager));
16 | this.childCommands.put("theme", new ThemeCommand(application));
17 | this.childCommands.put("info", new InfoCommand(application));
18 | this.childCommands.put("getsize", new GetSizeCommand(application));
19 | }
20 |
21 | @Override
22 | public String getArgsDescription() {
23 | return null;
24 | }
25 |
26 | @Override
27 | public String getUsageDescription() {
28 | return null;
29 | }
30 |
31 | @Override
32 | public void invoke(String... args) throws Exception {
33 | invokeSubcommands(args);
34 | }
35 | }
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/VersionCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands;
2 |
3 | import pro.gravit.launcher.gui.JavaRuntimeModule;
4 | import pro.gravit.utils.command.Command;
5 | import pro.gravit.utils.helper.LogHelper;
6 |
7 | public class VersionCommand extends Command {
8 | @Override
9 | public String getArgsDescription() {
10 | return "print version information";
11 | }
12 |
13 | @Override
14 | public String getUsageDescription() {
15 | return "[]";
16 | }
17 |
18 | @Override
19 | public void invoke(String... args) {
20 | LogHelper.info(JavaRuntimeModule.getLauncherInfo());
21 | LogHelper.info("JDK Path: %s", System.getProperty("java.home", "UNKNOWN"));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/DialogCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import pro.gravit.launcher.gui.impl.MessageManager;
4 | import pro.gravit.utils.command.Command;
5 | import pro.gravit.utils.helper.LogHelper;
6 |
7 | public class DialogCommand extends Command {
8 | private final MessageManager messageManager;
9 |
10 | public DialogCommand(MessageManager messageManager) {
11 | this.messageManager = messageManager;
12 | }
13 |
14 | @Override
15 | public String getArgsDescription() {
16 | return "[header] [message] (dialog/dialogApply/dialogTextInput) (launcher/native/default)";
17 | }
18 |
19 | @Override
20 | public String getUsageDescription() {
21 | return "show test dialog";
22 | }
23 |
24 | @Override
25 | public void invoke(String... args) throws Exception {
26 | verifyArgs(args, 3);
27 | boolean isLauncher = args.length <= 3 || args[3].equals("launcher");
28 | String header = args[0];
29 | String message = args[1];
30 | String dialogType = args[2];
31 | switch (dialogType) {
32 | case "dialog" -> messageManager.showDialog(header, message,
33 | () -> LogHelper.info("Dialog apply callback"),
34 | () -> LogHelper.info("Dialog cancel callback"), isLauncher);
35 | case "dialogApply" -> messageManager.showApplyDialog(header, message,
36 | () -> LogHelper.info("Dialog apply callback"),
37 | () -> LogHelper.info("Dialog deny callback"),
38 | () -> LogHelper.info("Dialog close callback"),
39 | isLauncher);
40 | }
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/GetSizeCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import javafx.scene.layout.Pane;
4 | import pro.gravit.launcher.gui.JavaFXApplication;
5 | import pro.gravit.launcher.gui.impl.AbstractStage;
6 | import pro.gravit.utils.command.Command;
7 | import pro.gravit.utils.helper.LogHelper;
8 |
9 | public class GetSizeCommand extends Command {
10 | private final JavaFXApplication application;
11 |
12 | public GetSizeCommand(JavaFXApplication application) {
13 | this.application = application;
14 | }
15 |
16 | @Override
17 | public String getArgsDescription() {
18 | return null;
19 | }
20 |
21 | @Override
22 | public String getUsageDescription() {
23 | return null;
24 | }
25 |
26 | @Override
27 | public void invoke(String... args) throws Exception {
28 | AbstractStage abstractStage = application.getMainStage();
29 | var stage = abstractStage.getStage();
30 | LogHelper.info("Stage: H: %f W: %f", stage.getHeight(), stage.getWidth());
31 | var scene = stage.getScene();
32 | LogHelper.info("Scene: H: %f W: %f", scene.getHeight(), scene.getWidth());
33 | var stackPane = (Pane)scene.getRoot();
34 | LogHelper.info("StackPane: H: %f W: %f", stackPane.getHeight(), stackPane.getWidth());
35 | var layout = (Pane)stackPane.getChildren().get(0);
36 | LogHelper.info("Layout: H: %f W: %f", layout.getHeight(), layout.getWidth());
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/InfoCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import javafx.application.ConditionalFeature;
4 | import javafx.application.Platform;
5 | import pro.gravit.launcher.gui.JavaFXApplication;
6 | import pro.gravit.utils.command.Command;
7 | import pro.gravit.utils.helper.JVMHelper;
8 | import pro.gravit.utils.helper.LogHelper;
9 |
10 | import java.util.ArrayList;
11 | import java.util.List;
12 |
13 | public class InfoCommand extends Command {
14 | private final JavaFXApplication application;
15 |
16 | public InfoCommand(JavaFXApplication application) {
17 | this.application = application;
18 | }
19 |
20 | @Override
21 | public String getArgsDescription() {
22 | return "[]";
23 | }
24 |
25 | @Override
26 | public String getUsageDescription() {
27 | return "show javafx info";
28 | }
29 |
30 | @Override
31 | public void invoke(String... args) {
32 | Platform.runLater(() -> {
33 | LogHelper.info("OS %s ARCH %s Java %d", JVMHelper.OS_TYPE.name(), JVMHelper.ARCH_TYPE.name(), JVMHelper.JVM_VERSION);
34 | LogHelper.info("JavaFX version: %s", System.getProperty( "javafx.runtime.version"));
35 | {
36 | List supportedFeatures = new ArrayList<>();
37 | List unsupportedFeatures = new ArrayList<>();
38 | for (var e : ConditionalFeature.values()) {
39 | if (Platform.isSupported(e)) {
40 | supportedFeatures.add(e.name());
41 | } else {
42 | unsupportedFeatures.add(e.name());
43 | }
44 | }
45 | LogHelper.info("JavaFX supported features: [%s]", String.join(",", supportedFeatures));
46 | LogHelper.info("JavaFX unsupported features: [%s]", String.join(",", unsupportedFeatures));
47 | }
48 | LogHelper.info("Is accessibility active %s", Platform.isAccessibilityActive() ? "true" : "false");
49 | });
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/NotifyCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import pro.gravit.launcher.gui.impl.MessageManager;
4 | import pro.gravit.utils.command.Command;
5 |
6 | public class NotifyCommand extends Command {
7 | private final MessageManager messageManager;
8 |
9 | public NotifyCommand(MessageManager messageManager) {
10 | this.messageManager = messageManager;
11 | }
12 |
13 | @Override
14 | public String getArgsDescription() {
15 | return "[header] [message] (launcher/native/default)";
16 | }
17 |
18 | @Override
19 | public String getUsageDescription() {
20 | return "show notify message";
21 | }
22 |
23 | @Override
24 | public void invoke(String... args) throws Exception {
25 | verifyArgs(args, 2);
26 | boolean isDefault = args.length <= 2 || args[2].equals("default");
27 | boolean isLauncher = args.length <= 2 || args[2].equals("launcher");
28 | String header = args[0];
29 | String message = args[1];
30 | if (isDefault) messageManager.createNotification(header, message);
31 | else messageManager.createNotification(header, message, isLauncher);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/ReloadCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import pro.gravit.launcher.gui.JavaFXApplication;
4 | import pro.gravit.utils.command.Command;
5 |
6 | public class ReloadCommand extends Command {
7 | private final JavaFXApplication application;
8 |
9 | public ReloadCommand(JavaFXApplication application) {
10 | this.application = application;
11 | }
12 |
13 | @Override
14 | public String getArgsDescription() {
15 | return "[]";
16 | }
17 |
18 | @Override
19 | public String getUsageDescription() {
20 | return "reload ui";
21 | }
22 |
23 | @Override
24 | public void invoke(String... args) throws Exception {
25 | application.gui.reload();
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/ShowFxmlCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import pro.gravit.utils.command.Command;
4 |
5 | public class ShowFxmlCommand extends Command {
6 | @Override
7 | public String getArgsDescription() {
8 | return "[fxmlPath]";
9 | }
10 |
11 | @Override
12 | public String getUsageDescription() {
13 | return "show any fxml without initialize";
14 | }
15 |
16 | @Override
17 | public void invoke(String... args) throws Exception {
18 | verifyArgs(args, 1);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/ThemeCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import pro.gravit.launcher.gui.JavaFXApplication;
4 | import pro.gravit.launcher.gui.config.RuntimeSettings;
5 | import pro.gravit.utils.command.Command;
6 |
7 | public class ThemeCommand extends Command {
8 | private final JavaFXApplication application;
9 |
10 | public ThemeCommand(JavaFXApplication application) {
11 | this.application = application;
12 | }
13 |
14 | @Override
15 | public String getArgsDescription() {
16 | return "[theme]";
17 | }
18 |
19 | @Override
20 | public String getUsageDescription() {
21 | return "Change theme and reload";
22 | }
23 |
24 | @Override
25 | public void invoke(String... args) throws Exception {
26 | verifyArgs(args, 1);
27 | application.runtimeSettings.theme = RuntimeSettings.LAUNCHER_THEME.valueOf(args[0]);
28 | application.gui.reload();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/WarpCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import pro.gravit.launcher.gui.JavaFXApplication;
4 | import pro.gravit.launcher.gui.impl.ContextHelper;
5 | import pro.gravit.launcher.gui.overlays.AbstractOverlay;
6 | import pro.gravit.launcher.gui.scenes.AbstractScene;
7 | import pro.gravit.launcher.gui.stage.PrimaryStage;
8 | import pro.gravit.utils.command.Command;
9 |
10 | public class WarpCommand extends Command {
11 | private JavaFXApplication application;
12 |
13 | public WarpCommand(JavaFXApplication application) {
14 | this.application = application;
15 | }
16 |
17 | @Override
18 | public String getArgsDescription() {
19 | return "[scene/overlay] [name]";
20 | }
21 |
22 | @Override
23 | public String getUsageDescription() {
24 | return "warp to any scene/overlay";
25 | }
26 |
27 | @Override
28 | public void invoke(String... args) throws Exception {
29 | verifyArgs(args, 2);
30 | if (application == null) application = JavaFXApplication.getInstance();
31 | if (args[0].equals("scene")) {
32 | AbstractScene scene = (AbstractScene) application.gui.getByName(args[1]);
33 | if (scene == null) throw new IllegalArgumentException("Scene %s not found".formatted(args[1]));
34 | PrimaryStage stage = application.getMainStage();
35 | ContextHelper.runInFxThreadStatic(() -> {
36 | stage.setScene(scene, true);
37 | if (!stage.isShowing()) {
38 | stage.show();
39 | }
40 | });
41 | } else if (args[0].equals("overlay")) {
42 | AbstractOverlay overlay = (AbstractOverlay) application.gui.getByName(args[1]);
43 | if (overlay == null) throw new IllegalArgumentException("Overlay %s not found".formatted(args[1]));
44 | PrimaryStage stage = application.getMainStage();
45 | if (stage.isNullScene()) throw new IllegalStateException("Please wrap to scene before");
46 | AbstractScene scene = (AbstractScene) stage.getVisualComponent();
47 | ContextHelper.runInFxThreadStatic(() -> scene.showOverlay(overlay, e -> {
48 | }));
49 | } else throw new IllegalArgumentException("%s not found".formatted(args[0]));
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/commands/runtime/WebViewCommand.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.commands.runtime;
2 |
3 | import pro.gravit.launcher.gui.JavaFXApplication;
4 | import pro.gravit.utils.command.Command;
5 |
6 | public class WebViewCommand extends Command {
7 | private final JavaFXApplication application;
8 |
9 | public WebViewCommand(JavaFXApplication application) {
10 | this.application = application;
11 | }
12 |
13 | @Override
14 | public String getArgsDescription() {
15 | return null;
16 | }
17 |
18 | @Override
19 | public String getUsageDescription() {
20 | return null;
21 | }
22 |
23 | @Override
24 | public void invoke(String... args) throws Exception {
25 |
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/pro/gravit/launcher/gui/components/UserBlock.java:
--------------------------------------------------------------------------------
1 | package pro.gravit.launcher.gui.components;
2 |
3 | import javafx.scene.control.Button;
4 | import javafx.scene.control.Label;
5 | import javafx.scene.image.Image;
6 | import javafx.scene.image.ImageView;
7 | import javafx.scene.layout.Pane;
8 | import pro.gravit.launcher.base.events.request.GetAssetUploadUrlRequestEvent;
9 | import pro.gravit.launcher.base.request.cabinet.AssetUploadInfoRequest;
10 | import pro.gravit.launcher.gui.JavaFXApplication;
11 | import pro.gravit.launcher.gui.config.DesignConstants;
12 | import pro.gravit.launcher.gui.helper.LookupHelper;
13 | import pro.gravit.launcher.gui.scenes.AbstractScene;
14 | import pro.gravit.launcher.gui.utils.JavaFxUtils;
15 | import pro.gravit.utils.helper.LogHelper;
16 |
17 | public class UserBlock {
18 | private final JavaFXApplication application;
19 | private final Pane layout;
20 | private final AbstractScene.SceneAccessor sceneAccessor;
21 | private final ImageView avatar;
22 | private final Image originalAvatarImage;
23 |
24 | public UserBlock(Pane layout, AbstractScene.SceneAccessor sceneAccessor) {
25 | this.application = sceneAccessor.getApplication();
26 | this.layout = layout;
27 | this.sceneAccessor = sceneAccessor;
28 | avatar = LookupHelper.lookup(layout, "#avatar");
29 | originalAvatarImage = avatar.getImage();
30 | LookupHelper.lookupIfPossible(layout, "#avatar").ifPresent((h) -> {
31 | try {
32 | JavaFxUtils.setStaticRadius(h, DesignConstants.AVATAR_IMAGE_RADIUS);
33 | h.setImage(originalAvatarImage);
34 | } catch (Throwable e) {
35 | LogHelper.warning("Skin head error");
36 | }
37 | });
38 | reset();
39 | }
40 |
41 | public void reset() {
42 | LookupHelper.