diff --git a/.github/workflows/maven-publish.yml b/.github/workflows/maven-publish.yml index e0e89b339ff..f73a8cd9d8e 100644 --- a/.github/workflows/maven-publish.yml +++ b/.github/workflows/maven-publish.yml @@ -14,10 +14,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'temurin' cache: 'maven' server-id: cardforge-repo diff --git a/.github/workflows/publish-android.yml b/.github/workflows/publish-android.yml index 4e8e3904cd1..fa882223f9c 100644 --- a/.github/workflows/publish-android.yml +++ b/.github/workflows/publish-android.yml @@ -20,10 +20,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '8' + java-version: '17' distribution: 'temurin' cache: 'maven' server-id: cardforge-repo @@ -31,20 +31,20 @@ jobs: server-password: ${{ secrets.FTP_PASSWORD }} settings-path: ${{ github.workspace }} # location for the settings.xml file - - name: Install old maven (3.6.3) + - name: Install old maven (3.8.1) run: | - curl -o apache-maven-3.6.3-bin.tar.gz https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz - tar xf apache-maven-3.6.3-bin.tar.gz - export PATH=$PWD/apache-maven-3.6.3/bin:$PATH - export MAVEN_HOME=$PWD/apache-maven-3.6.3 + curl -o apache-maven-3.8.1-bin.tar.gz https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz + tar xf apache-maven-3.8.1-bin.tar.gz + export PATH=$PWD/apache-maven-3.8.1/bin:$PATH + export MAVEN_HOME=$PWD/apache-maven-3.8.1 mvn --version - name: Install android SDK uses: maxim-lobanov/setup-android-tools@v1 with: packages: | - platforms;android-26 - build-tools;30.0.3 + platforms;android-34 + build-tools;34.0.0 - name: Install virtual framebuffer (if not available) to allow running GUI on a headless server run: | @@ -71,11 +71,11 @@ jobs: - name: Install Android maven plugin run: | - mkdir -p ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.1 - cd ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.1 - curl -L -o android-maven-plugin-4.6.1.jar https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.1/android-maven-plugin-4.6.1.jar - curl -L -o android-maven-plugin-4.6.1.pom https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.1/android-maven-plugin-4.6.1.pom - #mvn install:install-file -Dfile=android-maven-plugin-4.6.1.jar -DgroupId=com.simpligility.maven.plugins -DartifactId=android-maven-plugin -Dversion=4.6.1 -Dpackaging=jar + mkdir -p ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.2 + cd ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.2 + curl -L -o android-maven-plugin-4.6.2.jar https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.2/android-maven-plugin-4.6.2.jar + curl -L -o android-maven-plugin-4.6.2.pom https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.2/android-maven-plugin-4.6.2.pom + #mvn install:install-file -Dfile=android-maven-plugin-4.6.2.jar -DgroupId=com.simpligility.maven.plugins -DartifactId=android-maven-plugin -Dversion=4.6.2 -Dpackaging=jar cd - mvn install -Dmaven.test.skip=true mvn dependency:tree @@ -83,7 +83,7 @@ jobs: - name: Build/Install/Publish to GitHub Packages Apache Maven run: | export _JAVA_OPTIONS="-Xmx2g" - mvn -U -B -P android-release-build,android-release-sign,android-release-upload install -e -Dsign.keystore=forge.keystore -Dsign.alias=Forge -Dsign.storepass=${{ secrets.SIGN_STORE_PASS }} -Dsign.keypass=${{ secrets.SIGN_STORE_PASS }} -Dcardforge-repo.username=${{ secrets.FTP_USERNAME }} -Dcardforge-repo.password=${{ secrets.FTP_PASSWORD }} -Dandroid.sdk.path=/usr/local/lib/android/sdk -Dandroid.buildToolsVersion=30.0.3 -Dmaven.test.skip=true + mvn -U -B -P android-release-build,android-release-upload install -e -Dcardforge-repo.username=${{ secrets.FTP_USERNAME }} -Dcardforge-repo.password=${{ secrets.FTP_PASSWORD }} -Dandroid.sdk.path=/usr/local/lib/android/sdk -Dandroid.buildToolsVersion=34.0.0 -Dmaven.test.skip=true env: GITHUB_TOKEN: ${{ github.token }} diff --git a/.github/workflows/snapshots-android.yml b/.github/workflows/snapshots-android.yml index aef9e707055..a07d1410111 100644 --- a/.github/workflows/snapshots-android.yml +++ b/.github/workflows/snapshots-android.yml @@ -24,10 +24,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '8' + java-version: '17' distribution: 'temurin' cache: 'maven' server-id: cardforge-repo @@ -35,19 +35,19 @@ jobs: server-password: ${{ secrets.FTP_PASSWORD }} settings-path: ${{ github.workspace }} # location for the settings.xml file - - name: Install old maven (3.6.3) + - name: Install old maven (3.8.1) run: | - curl -o apache-maven-3.6.3-bin.tar.gz https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz - tar xf apache-maven-3.6.3-bin.tar.gz - export PATH=$PWD/apache-maven-3.6.3/bin:$PATH - export MAVEN_HOME=$PWD/apache-maven-3.6.3 + curl -o apache-maven-3.8.1-bin.tar.gz https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz + tar xf apache-maven-3.8.1-bin.tar.gz + export PATH=$PWD/apache-maven-3.8.1/bin:$PATH + export MAVEN_HOME=$PWD/apache-maven-3.8.1 mvn --version - name: Set Up Android tools run: | - JAVA_HOME=${JAVA_HOME_11_X64} ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platform-tools" - JAVA_HOME=${JAVA_HOME_11_X64} ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT --install "platforms;android-26" - JAVA_HOME=${JAVA_HOME_11_X64} ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT --install "build-tools;30.0.3" + JAVA_HOME=${JAVA_HOME_17_X64} ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT "platform-tools" + JAVA_HOME=${JAVA_HOME_17_X64} ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT --install "platforms;android-33" + JAVA_HOME=${JAVA_HOME_17_X64} ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --sdk_root=$ANDROID_SDK_ROOT --install "build-tools;34.0.0" - name: Install virtual framebuffer (if not available) to allow running GUI on a headless server run: | @@ -74,11 +74,11 @@ jobs: - name: Install Android maven plugin run: | - mkdir -p ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.1 - cd ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.1 - curl -L -o android-maven-plugin-4.6.1.jar https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.1/android-maven-plugin-4.6.1.jar - curl -L -o android-maven-plugin-4.6.1.pom https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.1/android-maven-plugin-4.6.1.pom - #mvn install:install-file -Dfile=android-maven-plugin-4.6.1.jar -DgroupId=com.simpligility.maven.plugins -DartifactId=android-maven-plugin -Dversion=4.6.1 -Dpackaging=jar + mkdir -p ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.2 + cd ~/.m2/repository/com/simpligility/maven/plugins/android-maven-plugin/4.6.2 + curl -L -o android-maven-plugin-4.6.2.jar https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.2/android-maven-plugin-4.6.2.jar + curl -L -o android-maven-plugin-4.6.2.pom https://github.com/Card-Forge/android-maven-plugin/releases/download/4.6.2/android-maven-plugin-4.6.2.pom + #mvn install:install-file -Dfile=android-maven-plugin-4.6.2.jar -DgroupId=com.simpligility.maven.plugins -DartifactId=android-maven-plugin -Dversion=4.6.2 -Dpackaging=jar cd - mvn install -Dmaven.test.skip=true mvn dependency:tree @@ -89,7 +89,7 @@ jobs: d=$(date +%m-%d) # Replace date in forge-gui-mobile/src/forge/Forge.java sed -i -e "s/-SNAPSHOT/-SNAPSHOT-${d}/g" forge-gui-mobile/src/forge/Forge.java - mvn -U -B -P android-release-build,android-release-sign install -e -Dsign.keystore=forge.keystore -Dsign.alias=Forge -Dsign.storepass=${{ secrets.SIGN_STORE_PASS }} -Dsign.keypass=${{ secrets.SIGN_STORE_PASS }} -Dcardforge-repo.username=${{ secrets.FTP_USERNAME }} -Dcardforge-repo.password=${{ secrets.FTP_PASSWORD }} -Dandroid.sdk.path=/usr/local/lib/android/sdk -Dandroid.buildToolsVersion=30.0.3 -Dmaven.test.skip=true + mvn -U -B -P android-release-build install -e -Dcardforge-repo.username=${{ secrets.FTP_USERNAME }} -Dcardforge-repo.password=${{ secrets.FTP_PASSWORD }} -Dandroid.sdk.path=/usr/local/lib/android/sdk -Dandroid.buildToolsVersion=34.0.0 -Dmaven.test.skip=true mkdir -p forge-gui-android/target/upload mv forge-gui-android/target/*-signed-aligned.apk forge-gui-android/target/upload/ mv forge-gui-android/target/assets.zip forge-gui-android/target/upload/ diff --git a/.github/workflows/snapshots-pc.yml b/.github/workflows/snapshots-pc.yml index 8d317fa8f39..4a215ee81d8 100644 --- a/.github/workflows/snapshots-pc.yml +++ b/.github/workflows/snapshots-pc.yml @@ -23,10 +23,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'temurin' cache: 'maven' server-id: cardforge-repo diff --git a/.github/workflows/test-build.yaml b/.github/workflows/test-build.yaml index 48949da0e0c..262d33f6981 100644 --- a/.github/workflows/test-build.yaml +++ b/.github/workflows/test-build.yaml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - java: [ '11' ] + java: [ '17' ] name: Test with Java ${{ matrix.Java }} steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/test-maven-settings.yml b/.github/workflows/test-maven-settings.yml index 8e2f3c044dc..a6bc0679807 100644 --- a/.github/workflows/test-maven-settings.yml +++ b/.github/workflows/test-maven-settings.yml @@ -14,10 +14,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Set up JDK 11 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'temurin' cache: 'maven' server-id: cardforge-repo diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f10cf418bab..57db4c66287 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ Dev instructions here: [Getting Started](https://github.com/Card-Forge/forge/wik ## Requirements / Tools - you favourite Java IDE (IntelliJ, Eclipse, VSCodium, Emacs, Vi...) -- Java JDK 8 or later (some IDEs such as Eclipse require JDK11+, whereas the Android build currently only works with JDK8) +- Java JDK 17 or later - Git - Git client (optional) - Maven @@ -46,9 +46,9 @@ At this time, Eclipse is not the recommended IDE for Forge development. - Clone your forked repo to your local machine. -- Make sure the Java SDK is installed -- not just the JRE. Java 8 or newer required. If you execute `java -version` at the shell or command prompt, it should report version 1.8 or later. +- Make sure the Java SDK is installed -- not just the JRE. Java 17 or newer required. If you execute `java -version` at the shell or command prompt, it should report version 17 or later. -- Install Eclipse 2018-12 or later for Java. Launch it. +- Install Eclipse 2021-12 or later for Java. Launch it. - Create a workspace. Go to the workbench. Right-click inside of Package Explorer > Import... > Maven > Existing Maven Projects > Navigate to root path of the local forge repo and ensure everything is checked > Finish. @@ -79,7 +79,7 @@ This is the configuration used for doing mobile development using the Windows / ### Eclipse / Android SDK Integration -Google no longer supports Android SDK releases for Eclipse. That said, it is still possible to build and debug Android platforms. +Google no longer supports Android SDK releases for Eclipse. use IntelliJ. #### Android SDK @@ -96,68 +96,30 @@ TBD #### Android Plugin for Eclipse -Google's last plugin release does not work completely with target's running Android 7.0 or later. Download the ADT-24.2.0-20160729.zip plugin -from: https://github.com/khaledev/ADT/releases - -In Eclipse go to: Help > Install New Software... > Add > Name: ADT Update, Click on the "Archive:" button and navigate to the downloaded ADT-24.2.0-20160729.zip file > Add. Install all "Developer Tools". Eclipse -should restart and prompt you to run the SDK Manager. Launch it and continue to the next steps below. +TBD #### Android Platform -In Eclipse, if the SDK Manager is not already running, go to Window > Android SDK Manager. Install the following options / versions: - -- Android SDK Build-tools 26.0.1 -- Android 8.0.0 (API 26) SDK Platform -- Google USB Driver (in case your phone is not detected by ADB) +In Intellij, if the SDK Manager is not already running, go to Tools > Android > Android SDK Manager. Install the following options / versions: -Note that this will populate additional tools in the Android SDK install path extracted above. +- Android SDK Build-tools 34.0.0 +- Android 14 (API 34) SDK Platform #### Proguard update -The Proguard included with the Android SDK Build-tools is outdated and does not work with Java 1.8. Download Proguard 6.0.3 or later (last tested with 7.0.1) from https://github.com/Guardsquare/proguard -- Go to the Android SDK install path. Rename the tools/proguard/ path to tools/proguard-4.7/. - -- Extract your Proguard version to the Android SDK install path under tools/. You will need to either rename the dir proguard- to proguard/ or, if your filesystem supports it, use a symbolic link (the later is highly recommended), such as `ln -s proguard proguard-`. +Proguard 7.5.0 is included with the project (proguard.jar) under forge-gui-android > tools and supports Java 17. #### Android Build -The Eclipse plug-ins do NOT support building things for Android. They do however allow you to use the debugger so you can still set breakpoints and trace -things out. The steps below show how to generate a debug Android build. - -1) Create a Maven build for the forge top-level project. Right-click on the forge project. Run as.. > Maven build... - - On the Main tab, set Goals: clean install - -2) Run forge Maven build. If everything built, you should see "BUILD SUCCESS" in the Console View. - -3) Right-click on the forge-gui-android project. Run as.. > Maven build... - - - On the Main tab, set Goals: install, Profiles: android-debug - - On the Environment tab, you may need to define the variable ANDROID_HOME with the value containing the path to your Android SDK installation. For example, Variable: ANDROID_HOME, Value: Your Android SDK install path here. - -4) Run the forge-gui-android Maven build. This may take a few minutes. If everything worked, you should see "BUILD SUCCESS" in the Console View. - -Assuming you got this far, you should have an Android forge-android-[version].apk in the forge-gui-android/target path. +TBD #### Android Deploy -You'll need to have the Android SDK install path platform-tools/ path in your command search path to easily deploy builds. - -- Open a command prompt. Navigate to the forge-gui-android/target/ path. - -- Connect your Android device to your dev machine. - -- Ensure the device is visible using `adb devices` - -- Remove the old Forge install if present: `adb uninstall forge.app` - -- Install the new apk: `adb install forge-android-[version].apk` +TBD #### Android Debugging -Assuming the apk is installed, launch it from the device. - -In Eclipse, launch the DDMS. Window > Perspective > Open Perspective > Other... > DDMS. You should see the forge app in the list. Highlight the app, click on the green debug button and a -green debug button should appear next to the app's name. You can now set breakpoints and step through the source code. +TBD ### Windows / Linux SNAPSHOT build diff --git a/README.md b/README.md index 0a969ed0a74..441f37ec1ad 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ This file is tarball, and may need to be extracted twice depending on which prog We recommend extracting to a new folder rather than on top of an existing installation. **For users who have played Forge before all of your user data is stored separately so you don't have to worry about losing it on upgrade.** -Java 8 or later is required to run Forge. Please make sure is the right version is installed in your enviroment. Check the user guide for more info. +Java 17 or later is required to run Forge. Please make sure is the right version is installed in your enviroment. Check the user guide for more info. For Android users, download the APK file from [Snapshot Build](https://downloads.cardforge.org/dailysnapshots/) to your device. On first run, Forge will download all needed data. diff --git a/forge-adventure/fallback_skin/bg_splash.png b/forge-adventure/fallback_skin/bg_splash.png index 66249347632..0bcba091a57 100644 Binary files a/forge-adventure/fallback_skin/bg_splash.png and b/forge-adventure/fallback_skin/bg_splash.png differ diff --git a/forge-adventure/fallback_skin/bg_texture.jpg b/forge-adventure/fallback_skin/bg_texture.jpg index 7c925524eb3..50f37309ff0 100644 Binary files a/forge-adventure/fallback_skin/bg_texture.jpg and b/forge-adventure/fallback_skin/bg_texture.jpg differ diff --git a/forge-adventure/fallback_skin/font1.ttf b/forge-adventure/fallback_skin/font1.ttf index 4b4ecc66671..28cf43d7e7f 100644 Binary files a/forge-adventure/fallback_skin/font1.ttf and b/forge-adventure/fallback_skin/font1.ttf differ diff --git a/forge-adventure/pom.xml b/forge-adventure/pom.xml index 50623a0175c..d6670345b8e 100644 --- a/forge-adventure/pom.xml +++ b/forge-adventure/pom.xml @@ -46,65 +46,19 @@ maven-compiler-plugin - 1.8 - 1.8 + 17 + 17 com.akathist.maven.plugins.launch4j launch4j-maven-plugin - 1.7.25 + 2.1.2 - - l4j-adv - package - - launch4j - - - gui - ${project.build.directory}/forge-adventure-editor-java8.exe - ${project.build.finalName}-jar-with-dependencies.jar - true - forge - src/main/config/forge-adventure-editor.ico - - forge.adventure.Main - false - anything - - - 1.8.0 - 4096 - - -Dfile.encoding=UTF-8 - - - - - 1.0.0.0 - - - 1.0.0.0 - - Forge - Forge - - 1.0.0.0 - - - 1.0.0.0 - - forge-adventure-editor - forge-adventure-editor - forge-adventure-editor-java8.exe - - - - l4j-adv2 + l4j-adv package launch4j @@ -123,7 +77,7 @@ anything - 11.0.1 + 17 jdkOnly 4096 @@ -132,7 +86,7 @@ --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED - --add-opens=java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED @@ -179,7 +133,7 @@ com.google.code.maven-replacer-plugin replacer - 1.5.2 + 1.5.3 package @@ -285,7 +239,7 @@ org.jetbrains annotations - 22.0.0 + 25.0.0 compile diff --git a/forge-core/pom.xml b/forge-core/pom.xml index 7499150ba81..661b6191069 100644 --- a/forge-core/pom.xml +++ b/forge-core/pom.xml @@ -16,12 +16,12 @@ com.google.guava guava - 33.2.1-android + 33.3.1-android org.apache.commons commons-lang3 - 3.12.0 + 3.17.0 diff --git a/forge-game/pom.xml b/forge-game/pom.xml index 653a151451c..bab97bc2a36 100644 --- a/forge-game/pom.xml +++ b/forge-game/pom.xml @@ -26,7 +26,7 @@ org.testng testng - 7.4.0 + 7.10.2 test diff --git a/forge-gui-android/AndroidManifest.xml b/forge-gui-android/AndroidManifest.xml index b493a8c32d9..9d98d16133f 100644 --- a/forge-gui-android/AndroidManifest.xml +++ b/forge-gui-android/AndroidManifest.xml @@ -6,10 +6,11 @@ + android:targetSdkVersion="34" /> + @@ -23,20 +24,22 @@ android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:label="@string/app_name" - android:largeHeap="true"> + android:largeHeap="true" + android:resizeableActivity="false"> - - - - - - - - - + android:name=".Launcher" + android:configChanges="density|fontScale|keyboard|keyboardHidden|layoutDirection|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode" + android:theme="@style/Theme.Transparent" + android:exported="true"> + + + + + + + + + maven-compiler-plugin - 1.8 - 1.8 + 17 + 17 @@ -57,7 +57,7 @@ org.robolectric android-all - 8.0.0_r4-robolectric-0 + 14-robolectric-10818077 provided @@ -74,24 +74,6 @@ system ${pom.basedir}/libs/relinker.jar - - - org.apache.httpcomponents - httpclient - 4.5.14 - - - commons-codec - commons-codec - - - - - - commons-codec - commons-codec - 1.16.0 - forge forge-core @@ -195,7 +177,8 @@ com.badlogicgames.gdx-controllers gdx-controllers-android 2.2.3 - aar + system + ${pom.basedir}/libs/gdx-controllers-android.jar com.badlogicgames.gdx @@ -223,20 +206,27 @@ 2.3.1 - net.sf.proguard - proguard-base - 6.2.2 + com.sun.xml.bind + jaxb-impl + 2.3.4 + + + sun + misc + 1 + system + ${pom.basedir}/libs/sun-misc.jar - 4.6.1 + 4.6.2 true true - 26 - 30.0.3 + 34 + 34.0.0 true ${project.basedir}/AndroidManifest.xml @@ -248,6 +238,7 @@ false ${project.basedir}/proguard.cfg + ${pom.basedir}/tools/proguard.jar true d8 @@ -277,6 +268,39 @@ + + exec-maven-plugin + 3.4.1 + org.codehaus.mojo + + + SignV2 + install + + exec + + + + + ${pom.basedir} + java + + -jar + ${pom.basedir}/tools/uber-apk-signer.jar + -a + ${pom.basedir}/target/ + --ks + forge.keystore + --ksAlias + Forge + --ksKeyPass + forge72 + --ksPass + forge72 + --debug + + + com.simpligility.maven.plugins android-maven-plugin @@ -287,20 +311,27 @@ 2.3.1 - net.sf.proguard - proguard-base - 6.2.2 + com.sun.xml.bind + jaxb-impl + 2.3.4 + + + sun + misc + 1 + system + ${pom.basedir}/libs/sun-misc.jar - 4.6.1 + 4.6.2 true false - 26 - 30.0.3 + 34 + 34.0.0 false @@ -315,6 +346,7 @@ false ${project.basedir}/proguard.cfg + ${pom.basedir}/tools/proguard.jar true d8 @@ -334,92 +366,10 @@ - - - - - android-release-sign - - apk - - - - - org.apache.maven.plugins - maven-jarsigner-plugin - 1.3.2 - - - signing - - sign - verify - - package - true - - true - - - ${project.build.directory}/${project.build.finalName}.apk - - ${sign.keystore} - ${sign.alias} - ${sign.storepass} - ${sign.keypass} - true - - -sigalg - MD5withRSA - -digestalg - SHA1 - - - - - - - com.simpligility.maven.plugins - android-maven-plugin - - - javax.xml.bind - jaxb-api - 2.3.1 - - - net.sf.proguard - proguard-base - 6.2.2 - - - 4.6.1 - true - - - false - - - false - true - ${project.build.directory}/${project.build.finalName}.apk - ${project.build.directory}/${project.build.finalName}-signed-aligned.apk - - - - - android-align - package - - zipalign - - - - org.apache.maven.plugins maven-antrun-plugin - 1.7 + 3.0.0 org.apache.ant @@ -477,7 +427,7 @@ org.apache.maven.plugins maven-antrun-plugin - 1.7 + 3.0.0 org.apache.ant diff --git a/forge-gui-android/proguard.cfg b/forge-gui-android/proguard.cfg index b4cc8fcab34..7079b6c5d64 100644 --- a/forge-gui-android/proguard.cfg +++ b/forge-gui-android/proguard.cfg @@ -1,20 +1,24 @@ -dontobfuscate --optimizationpasses 3 +#-optimizationpasses 3 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses --dontpreverify +# disable the -dontpreverify since it produces tons of warning when compiled using Android 14 and newer Build-tools +#-dontpreverify -verbose --optimizations !code/simplification/*,!field/*,!class/merging/*,!code/allocation/variable,!library/gson +# IntelliJ marks -android is invalid since the default inspection uses R8, we use Proguard exclusively and -android is available. +-android +# https://stackoverflow.com/a/32615580 +-optimizations !code/simplification/*,!field/*,!class/merging/*,!code/allocation/variable,!library/gson,!class/unboxing/enum ## Uncomment the line below and set it to the location of rt.jar in JDK if the Proguard step fails to find the libraries ## and spits out a thousand-something Class Not Found errors ##-libraryjars /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar -##-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class) -##-libraryjars /jmods/java.datatransfer.jmod(!**.jar;!module-info.class) -##-libraryjars /jmods/java.prefs.jmod(!**.jar;!module-info.class) -##-libraryjars /jmods/java.xml.jmod(!**.jar;!module-info.class) -##-libraryjars /jmods/java.desktop.jmod(!**.jar;!module-info.class) -##-libraryjars /jmods/jdk.xml.dom.jmod(!**.jar;!module-info.class) +-libraryjars /jmods/java.base.jmod(!**.jar;!module-info.class) +-libraryjars /jmods/java.datatransfer.jmod(!**.jar;!module-info.class) +-libraryjars /jmods/java.prefs.jmod(!**.jar;!module-info.class) +-libraryjars /jmods/java.xml.jmod(!**.jar;!module-info.class) +-libraryjars /jmods/java.desktop.jmod(!**.jar;!module-info.class) +-libraryjars /jmods/jdk.xml.dom.jmod(!**.jar;!module-info.class) -dontwarn afu.org.checkerframework.** -dontwarn io.netty.** @@ -61,7 +65,7 @@ -keep class org.apache.commons.lang3.** { *; } -keep class com.google.guava.** { *; } -keep class com.google.common.** { *; } -#-keep class com.google.gson.GsonBuilder +##-keep class com.google.gson.GsonBuilder ##-keep class io.sentry.event.Event { *; } ##-keep class io.sentry.android.core.SentryAndroidOptions ##-keep class io.sentry.android.core.SentryAndroid @@ -100,10 +104,11 @@ -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference --keep public class com.android.vending.licensing.ILicensingService +# ILicensingService is not available on robolectric dependency +#-keep public class com.android.vending.licensing.ILicensingService -keep public class * extends com.badlogic.gdx.Application --keepclasseswithmembernames class * { +-keepclasseswithmembernames,includedescriptorclasses class * { native ; } @@ -128,7 +133,4 @@ public static final android.os.Parcelable$Creator *; } --keepattributes LineNumberTable,SourceFile - -# https://stackoverflow.com/a/32615580 --optimizations !class/unboxing/enum \ No newline at end of file +-keepattributes *Annotation*,EnclosingMethod,InnerClasses,LineNumberTable,Signature,SourceFile diff --git a/forge-gui-android/src/forge/app/Main.java b/forge-gui-android/src/forge/app/Main.java index de4e9f9a10d..1a442d8353e 100644 --- a/forge-gui-android/src/forge/app/Main.java +++ b/forge-gui-android/src/forge/app/Main.java @@ -23,6 +23,8 @@ import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.StateListDrawable; import android.net.ConnectivityManager; +import android.net.Network; +import android.net.NetworkCapabilities; import android.net.NetworkInfo; import android.net.Uri; import android.os.Build; @@ -205,7 +207,7 @@ private void displayMessage(View previousView, AndroidAdapter adapter, boolean e TextView text = new TextView(this); text.setGravity(Gravity.LEFT); text.setTypeface(Typeface.SERIF); - String SP = Build.VERSION.SDK_INT > 29 ? "Files & Media" : "Storage Permission"; + String SP = Build.VERSION.SDK_INT > Build.VERSION_CODES.Q ? "Files & Media" : "Storage Permission"; String title = "Forge needs " + SP + " to run properly...\n" + "Follow these simple steps:\n\n"; @@ -287,7 +289,7 @@ public void onAnimationEnd(Animator animation) { displayMessage(forgeLogo, adapter, exception, msg, false); } else if (title.isEmpty() && steps.isEmpty()) { if (isLandscape) { - Main.this.setRequestedOrientation(Build.VERSION.SDK_INT >= 26 ? + Main.this.setRequestedOrientation(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O ? ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE : //Oreo and above has virtual back/menu buttons ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else { @@ -418,7 +420,7 @@ private void initForge(AndroidAdapter adapter, boolean permissiongranted, int to loadGame("", "", false, adapter, permissiongranted, totalRAM, isTabletDevice, config, true, message); return; } - ASSETS_DIR = Build.VERSION.SDK_INT > 29 ? getContext().getObbDir() + "/Forge/" : Environment.getExternalStorageDirectory() + "/Forge/"; + ASSETS_DIR = Build.VERSION.SDK_INT > Build.VERSION_CODES.Q ? getContext().getObbDir() + "/Forge/" : Environment.getExternalStorageDirectory() + "/Forge/"; if (!FileUtil.ensureDirectoryExists(ASSETS_DIR)) { String message = getDeviceName() + "\n" + "Android " + Build.VERSION.RELEASE + "\n" + "RAM " + totalRAM + "MB" + "\n" + "LibGDX " + Version.VERSION + "\n" + "Can't access external storage\nPath: " + ASSETS_DIR; Main.this.setRequestedOrientation(Main.this.getResources().getConfiguration().orientation); @@ -442,11 +444,11 @@ private void initForge(AndroidAdapter adapter, boolean permissiongranted, int to adapter.switchOrientationFile = ASSETS_DIR + "switch_orientation.ini"; boolean landscapeMode = adapter.isTablet == !FileUtil.doesFileExist(adapter.switchOrientationFile); - String info = totalRAM < 3500 || Build.VERSION.SDK_INT < 29 ? "Device Specification Check\n" + getDeviceName() + String info = totalRAM < 3500 || Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ? "Device Specification Check\n" + getDeviceName() + "\n" + "Android " + Build.VERSION.RELEASE + "\n" + "RAM " + totalRAM + "MB\n\nMinimum Requirements:" : ""; - String lowV = Build.VERSION.SDK_INT < 29 ? "\nAPI: Android 10 or higher" : ""; + String lowV = Build.VERSION.SDK_INT < Build.VERSION_CODES.Q ? "\nAPI: Android 10 or higher" : ""; String lowM = totalRAM < 3500 ? "\nRAM: 4GB RAM or higher" : ""; - if (landscapeMode && Build.VERSION.SDK_INT > 32) { + if (landscapeMode && Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) { //Android 11 onwards Main.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } loadGame(info, lowV + lowM, landscapeMode, adapter, permissiongranted, totalRAM, isTabletDevice, config, false, ""); @@ -521,27 +523,78 @@ private class AndroidAdapter implements IDeviceAdapter { private final boolean isTablet; private final ConnectivityManager connManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); private String switchOrientationFile; + private final Context context; + private boolean connected; private AndroidAdapter(Context context) { + this.context = context; isTablet = (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; + try { + if (connManager != null) { + connManager.registerDefaultNetworkCallback( + new ConnectivityManager.NetworkCallback() { + @Override + public void onAvailable(Network network) { + connected = true; + } + + @Override + public void onLost(Network network) { + connected = false; + } + } + ); + } + } catch (Exception e) { + connected = false; + } + } + private boolean hasInternet() { + return isNetworkConnected(false); + } + private boolean hasWiFiInternet() { + return isNetworkConnected(true); + } + private boolean isNetworkConnected(boolean wifiOnly) { + boolean result = false; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (connManager != null) { + NetworkCapabilities capabilities = connManager.getNetworkCapabilities(connManager.getActiveNetwork()); + if (capabilities != null) { + if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { + result = connected; + } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) { + result = connected && !wifiOnly; + } + } + } + } else { + if (connManager != null) { + NetworkInfo activeNetwork = connManager.getActiveNetworkInfo(); + if (activeNetwork != null) { + // connected to the internet + if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { + result = true; + } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { + result = !wifiOnly; + } + } + } + } + return result; } - @Override public boolean isConnectedToInternet() { - return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(() -> { - NetworkInfo activeNetworkInfo = connManager.getActiveNetworkInfo(); - return activeNetworkInfo != null && activeNetworkInfo.isConnected(); - }, 2000)); //if can't determine Internet connection within two seconds, assume not connected + //if it can't determine Internet connection within two seconds, assume not connected + return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(this::hasInternet, 2000)); } @Override public boolean isConnectedToWifi() { - return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(() -> { - NetworkInfo wifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); - return wifi.isConnected(); - }, 2000)); //if can't determine Internet connection within two seconds, assume not connected + //if it can't determine Internet connection within two seconds, assume not connected + return Boolean.TRUE.equals(ThreadUtil.executeWithTimeout(this::hasWiFiInternet, 2000)); } @Override @@ -622,7 +675,7 @@ public Pair getRealScreenSize(boolean real) { WindowManager windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); Display display = windowManager.getDefaultDisplay(); Point size = new Point(); - if (Build.VERSION.SDK_INT >= 17) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { // Seems it doesn't compile if using 4.1.1.4 since it's missing this method if (real) display.getRealSize(size); @@ -630,7 +683,7 @@ public Pair getRealScreenSize(boolean real) { display.getSize(size); //remove this line below and use the method above if using Android libs higher than 4.1.1.4 //return Pair.of(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); // this method don't take account the soft navigation bars taken in rendered screen - } else if (Build.VERSION.SDK_INT >= 14) { + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { try { size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display); size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display); diff --git a/forge-gui-android/tools/proguard.jar b/forge-gui-android/tools/proguard.jar new file mode 100644 index 00000000000..14e8ca387da Binary files /dev/null and b/forge-gui-android/tools/proguard.jar differ diff --git a/forge-gui-android/tools/uber-apk-signer.jar b/forge-gui-android/tools/uber-apk-signer.jar new file mode 100644 index 00000000000..a3d085a85a0 Binary files /dev/null and b/forge-gui-android/tools/uber-apk-signer.jar differ diff --git a/forge-gui-desktop/pom.xml b/forge-gui-desktop/pom.xml index a4d1522a3e7..e6f878d0038 100644 --- a/forge-gui-desktop/pom.xml +++ b/forge-gui-desktop/pom.xml @@ -23,7 +23,7 @@ org.apache.maven.plugins maven-jar-plugin - 2.4 + 3.3.0 @@ -36,7 +36,7 @@ com.google.code.maven-replacer-plugin replacer - 1.5.2 + 1.5.3 package @@ -88,7 +88,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.2.0 released-version @@ -108,7 +108,7 @@ se.bjurr.gitchangelog git-changelog-maven-plugin - 1.92 + 1.101.0 GenerateGitChangelog @@ -188,37 +188,87 @@ com.mortennobel java-image-scaling - 0.8.5 + 0.8.6 org.powermock powermock-module-testng-common 2.0.9 + + + com.beust + jcommander + + + net.bytebuddy + byte-buddy + + + org.testng + testng + + + org.objenesis + objenesis + + + net.bytebuddy + byte-buddy-agent + + org.testng testng - 7.4.0 + 7.10.2 test + + + com.beust + jcommander + + org.powermock powermock-module-testng 2.0.9 test + + + org.testng + testng + + org.powermock powermock-core 2.0.9 test + + + net.bytebuddy + byte-buddy + + + net.bytebuddy + byte-buddy-agent + + org.powermock powermock-api-mockito2 2.0.9 test + + + org.mockito + mockito-core + + org.powermock @@ -229,51 +279,71 @@ org.mockito mockito-core - 3.12.4 + 5.13.0 test + + + org.objenesis + objenesis + + + net.bytebuddy + byte-buddy + + + net.bytebuddy + byte-buddy-agent + + net.bytebuddy byte-buddy - 1.12.3 + 1.15.2 net.bytebuddy byte-buddy-agent - 1.12.3 + 1.14.5 test org.objenesis objenesis - 3.2 + 3.4 test org.freemarker freemarker - 2.3.31 + 2.3.33 com.googlecode.soundlibs jlayer - 1.0.1-1 + 1.0.1.4 com.beust jcommander - 1.78 + 1.82 jar com.sipgate mp3-wav - 1.0.3 + 1.0.4 + + + com.googlecode.soundlibs + jlayer + + com.twelvemonkeys.imageio imageio-jpeg - 3.7.0 + 3.11.0 @@ -295,7 +365,7 @@ gui - ${project.build.directory}/forge-java8.exe + ${project.build.directory}/forge.exe ${project.build.finalName}-jar-with-dependencies.jar true forge @@ -306,10 +376,32 @@ anything - 1.8.0 + 17 + jdkOnly 4096 -Dfile.encoding=UTF-8 + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/java.math=ALL-UNNAMED + --add-opens java.base/jdk.internal.misc=ALL-UNNAMED + --add-opens java.base/java.nio=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.lang.reflect=ALL-UNNAMED + --add-opens java.base/java.text=ALL-UNNAMED + --add-opens java.desktop/java.awt=ALL-UNNAMED + --add-opens java.desktop/java.awt.font=ALL-UNNAMED + --add-opens java.desktop/java.awt.image=ALL-UNNAMED + --add-opens java.desktop/java.awt.color=ALL-UNNAMED + --add-opens java.desktop/sun.awt.image=ALL-UNNAMED + --add-opens java.desktop/javax.swing=ALL-UNNAMED + --add-opens java.desktop/javax.swing.border=ALL-UNNAMED + --add-opens java.desktop/javax.swing.event=ALL-UNNAMED + --add-opens java.desktop/sun.swing=ALL-UNNAMED + --add-opens java.desktop/java.beans=ALL-UNNAMED + --add-opens java.base/java.util.concurrent=ALL-UNNAMED + --add-opens java.base/java.net=ALL-UNNAMED + -Dio.netty.tryReflectionSetAccessible=true @@ -329,7 +421,7 @@ Forge forge - forge-java8.exe + forge.exe @@ -339,7 +431,7 @@ org.apache.maven.plugins maven-antrun-plugin - 1.7 + 3.0.0 org.apache.ant @@ -368,7 +460,6 @@ - @@ -377,7 +468,6 @@ - @@ -407,7 +497,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.2.0 released-version @@ -458,60 +548,13 @@ launch4j - - gui - ${project.build.directory}/forge-java8.exe - ${project.build.finalName}-jar-with-dependencies.jar - true - forge - src/main/config/forge.ico - - forge.view.Main - false - anything - - - 1.8.0 - 4096 - - -Dfile.encoding=UTF-8 - - - - - ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0 - - - ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0 - - Forge - Forge - - ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0 - - - ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}.0 - - Forge - forge - forge-java8.exe - - - - - - l4j-gui2 - package - - launch4j - gui ${project.build.directory}/forge.exe ${project.build.finalName}-jar-with-dependencies.jar true forge - https://www.oracle.com/java/technologies/downloads/ + https://bell-sw.com/pages/downloads/#jdk-17-lts src/main/config/forge.ico forge.view.Main @@ -519,7 +562,7 @@ anything - 11.0.1 + 17 jdkOnly 4096 @@ -528,7 +571,7 @@ --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED - --add-opens=java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED @@ -575,7 +618,7 @@ org.apache.maven.plugins maven-antrun-plugin - 1.7 + 3.0.0 org.apache.ant @@ -608,18 +651,18 @@ - - + + - + @@ -630,15 +673,15 @@ + + - - @@ -646,17 +689,14 @@ - - - @@ -664,17 +704,14 @@ - - - @@ -689,7 +726,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.2.0 released-version @@ -739,7 +776,7 @@ org.apache.maven.plugins maven-antrun-plugin - 1.7 + 3.0.0 org.apache.ant @@ -801,7 +838,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.2.0 released-version @@ -854,7 +891,7 @@ org.apache.maven.plugins maven-antrun-plugin - 1.7 + 3.0.0 org.apache.ant @@ -912,7 +949,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.2.0 released-version diff --git a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java index 5186889f9dc..911444b6be7 100644 --- a/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java +++ b/forge-gui-desktop/src/main/java/forge/toolbox/imaging/FCardImageRenderer.java @@ -698,7 +698,8 @@ private static void drawArt(Graphics2D g, Color[] colors, int x, int y, int w, i } } else { fillColorBackground(g, colors, x, y, w, h); - SkinIcon icon = FSkin.getIcon(FSkinProp.ICO_LOGO); + //Card Art Logo + SkinIcon icon = FSkin.getIcon(FSkinProp.ICO_CARDART); float artWidth = (float)icon.getSizeForPaint(g).getWidth(); float artHeight = (float)icon.getSizeForPaint(g).getHeight(); if (artWidth / artHeight >= (float)w / (float)h) { diff --git a/forge-gui-desktop/src/test/java/forge/card/CardMockTestCase.java b/forge-gui-desktop/src/test/java/forge/card/CardMockTestCase.java index cc0b9748a89..13e35f92b45 100644 --- a/forge-gui-desktop/src/test/java/forge/card/CardMockTestCase.java +++ b/forge-gui-desktop/src/test/java/forge/card/CardMockTestCase.java @@ -16,9 +16,9 @@ import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; import org.powermock.modules.testng.PowerMockTestCase; -import org.testng.IObjectFactory; +//import org.testng.IObjectFactory; import org.testng.annotations.BeforeMethod; -import org.testng.annotations.ObjectFactory; +//import org.testng.annotations.ObjectFactory; import forge.ImageCache; import forge.ImageKeys; @@ -184,8 +184,8 @@ protected void initializeStaticData() { PowerMockito.when(FModel.getMagicDb()).thenReturn(data); } - @ObjectFactory + /*@ObjectFactory public IObjectFactory getObjectFactory() { return new org.powermock.modules.testng.PowerMockObjectFactory(); - } + }*/ } diff --git a/forge-gui-ios/pom.xml b/forge-gui-ios/pom.xml index 2dac4a6805e..5464a4c8f29 100644 --- a/forge-gui-ios/pom.xml +++ b/forge-gui-ios/pom.xml @@ -25,8 +25,8 @@ maven-compiler-plugin - 1.8 - 1.8 + 17 + 17 diff --git a/forge-gui-mobile-dev/fallback_skin/bg_splash.png b/forge-gui-mobile-dev/fallback_skin/bg_splash.png index 66249347632..0bcba091a57 100644 Binary files a/forge-gui-mobile-dev/fallback_skin/bg_splash.png and b/forge-gui-mobile-dev/fallback_skin/bg_splash.png differ diff --git a/forge-gui-mobile-dev/fallback_skin/bg_texture.jpg b/forge-gui-mobile-dev/fallback_skin/bg_texture.jpg index 7c925524eb3..50f37309ff0 100644 Binary files a/forge-gui-mobile-dev/fallback_skin/bg_texture.jpg and b/forge-gui-mobile-dev/fallback_skin/bg_texture.jpg differ diff --git a/forge-gui-mobile-dev/fallback_skin/font1.ttf b/forge-gui-mobile-dev/fallback_skin/font1.ttf index 4b4ecc66671..28cf43d7e7f 100644 Binary files a/forge-gui-mobile-dev/fallback_skin/font1.ttf and b/forge-gui-mobile-dev/fallback_skin/font1.ttf differ diff --git a/forge-gui-mobile-dev/pom.xml b/forge-gui-mobile-dev/pom.xml index 97bcf1d68bb..77c98fb25e1 100644 --- a/forge-gui-mobile-dev/pom.xml +++ b/forge-gui-mobile-dev/pom.xml @@ -34,15 +34,15 @@ maven-compiler-plugin - 1.8 - 1.8 + 17 + 17 com.google.code.maven-replacer-plugin replacer - 1.5.2 + 1.5.3 package @@ -68,7 +68,7 @@ com.akathist.maven.plugins.launch4j launch4j-maven-plugin - 1.7.25 + 2.1.2 l4j-adv @@ -76,53 +76,6 @@ launch4j - - gui - ${project.build.directory}/forge-adventure-java8.exe - ${project.build.finalName}-jar-with-dependencies.jar - true - forge - src/main/config/forge-adventure.ico - - forge.app.Main - false - anything - - - 1.8.0 - 4096 - - -Dfile.encoding=UTF-8 - - - - - 1.0.0.0 - - - 1.0.0.0 - - Forge - Forge - - 1.0.0.0 - - - 1.0.0.0 - - forge-adventure - forge-adventure - forge-adventure-java8.exe - - - - - - l4j-adv2 - package - - launch4j - gui ${project.build.directory}/forge-adventure.exe @@ -137,7 +90,7 @@ anything - 11.0.1 + 17 jdkOnly 4096 @@ -146,7 +99,7 @@ --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED - --add-opens=java.base/sun.nio.ch=ALL-UNNAMED + --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED @@ -244,7 +197,7 @@ commons-cli commons-cli - 1.4 + 1.9.0 com.badlogicgames.gdx-controllers diff --git a/forge-gui-mobile/pom.xml b/forge-gui-mobile/pom.xml index 6a177762936..eb026bee8d1 100644 --- a/forge-gui-mobile/pom.xml +++ b/forge-gui-mobile/pom.xml @@ -17,8 +17,8 @@ maven-compiler-plugin - 1.8 - 1.8 + 17 + 17 diff --git a/forge-gui-mobile/src/forge/Graphics.java b/forge-gui-mobile/src/forge/Graphics.java index 36b1089954d..b7ca391d9bf 100644 --- a/forge-gui-mobile/src/forge/Graphics.java +++ b/forge-gui-mobile/src/forge/Graphics.java @@ -320,16 +320,17 @@ public void drawLineArrow(float arrowThickness, FSkinColor skinColor, float x1, fillCircle(skinColor.getColor(), x2, y2, arrowThickness); drawLineArrow(arrowThickness, skinColor.getColor(), x1, y1, x2, y2); fillCircle(Color.WHITE, x2, y2, arrowThickness / 2); - drawLine(arrowThickness / 3, Color.WHITE, x1, y1, x2, y2); + drawLineArrow(arrowThickness / 3, Color.WHITE, x1, y1, x2, y2); + //drawLine(arrowThickness / 3, Color.WHITE, x1, y1, x2, y2); } public void drawLineArrow(float thickness, Color color, float x1, float y1, float x2, float y2) { batch.end(); //must pause batch while rendering shapes - float angle = new Vector2(x1 - x2, y1 - y2).angleRad(); + /*float angle = new Vector2(x1 - x2, y1 - y2).angleRad(); float arrowHeadRotation = (float) (Math.PI * 0.8f); Vector2 arrowCorner3 = new Vector2(x2 + (thickness / 3) * (float) Math.cos(angle + arrowHeadRotation), y2 + (thickness / 3) * (float) Math.sin(angle + arrowHeadRotation)); - Vector2 arrowCorner4 = new Vector2(x2 + (thickness / 3) * (float) Math.cos(angle - arrowHeadRotation), y2 + (thickness / 3) * (float) Math.sin(angle - arrowHeadRotation)); + Vector2 arrowCorner4 = new Vector2(x2 + (thickness / 3) * (float) Math.cos(angle - arrowHeadRotation), y2 + (thickness / 3) * (float) Math.sin(angle - arrowHeadRotation));*/ if (thickness > 1) { Gdx.gl.glLineWidth(thickness); diff --git a/forge-gui-mobile/src/forge/assets/FSkin.java b/forge-gui-mobile/src/forge/assets/FSkin.java index 300d18dd752..27aa48ef9ef 100644 --- a/forge-gui-mobile/src/forge/assets/FSkin.java +++ b/forge-gui-mobile/src/forge/assets/FSkin.java @@ -128,6 +128,17 @@ public static void loadLight(String skinName, final SplashScreen splashScreen) { //reset hd buttons/icons Forge.hdbuttons = false; Forge.hdstart = false; + // TODO: the "v2" string should be a property of the default skin. + FileHandle v2File = Gdx.files.absolute(ForgeConstants.FONTS_DIR + "v2"); + if (v2File == null || !v2File.exists()) { + //delete cached fonts + FSkinFont.deleteCachedFiles(); + try { + v2File.file().createNewFile(); + } catch (Exception e) { + e.printStackTrace(); + } + } //ensure skins directory exists final FileHandle dir = Gdx.files.absolute(ForgeConstants.CACHE_SKINS_DIR); @@ -164,6 +175,7 @@ public static void loadLight(String skinName, final SplashScreen splashScreen) { //load theme logo while changing skins Forge.getAssets().loadTexture(getSkinFile("hd_logo.png")); Forge.getAssets().loadTexture(getDefaultSkinFile("adv_logo.png"), new TextureLoader.TextureParameter()); + Forge.getAssets().loadTexture(getDefaultSkinFile("cover.png")); Forge.getAssets().loadTexture(getDefaultSkinFile("overlay_alpha.png")); Forge.getAssets().loadTexture(getDefaultSkinFile("splatter.png")); diff --git a/forge-gui-mobile/src/forge/assets/FSkinImage.java b/forge-gui-mobile/src/forge/assets/FSkinImage.java index 5689db2d006..2b5e42de076 100644 --- a/forge-gui-mobile/src/forge/assets/FSkinImage.java +++ b/forge-gui-mobile/src/forge/assets/FSkinImage.java @@ -219,9 +219,10 @@ public enum FSkinImage implements FSkinImageInterface { UNKNOWN (FSkinProp.ICO_UNKNOWN), LOGO (FSkinProp.ICO_LOGO), + CARDART (FSkinProp.ICO_CARDART), FLIPCARD (FSkinProp.ICO_FLIPCARD), - HDFLIPCARD (FSkinProp.ICO_HDFLIPCARD), + HDFLIPCARD (FSkinProp.ICO_HDFLIPCARD), FAVICON (FSkinProp.ICO_FAVICON), LOCK (FSkinProp.ICO_LOCK), @@ -313,15 +314,15 @@ public enum FSkinImage implements FSkinImageInterface { HDBTN_DOWN_LEFT (FSkinProp.IMG_HDBTN_DOWN_LEFT), HDBTN_DOWN_CENTER (FSkinProp.IMG_HDBTN_DOWN_CENTER), HDBTN_DOWN_RIGHT (FSkinProp.IMG_HDBTN_DOWN_RIGHT), - HDBTN_FOCUS_LEFT (FSkinProp.IMG_HDBTN_FOCUS_LEFT), - HDBTN_FOCUS_CENTER (FSkinProp.IMG_HDBTN_FOCUS_CENTER), - HDBTN_FOCUS_RIGHT (FSkinProp.IMG_HDBTN_FOCUS_RIGHT), - HDBTN_TOGGLE_LEFT (FSkinProp.IMG_HDBTN_TOGGLE_LEFT), - HDBTN_TOGGLE_CENTER (FSkinProp.IMG_HDBTN_TOGGLE_CENTER), - HDBTN_TOGGLE_RIGHT (FSkinProp.IMG_HDBTN_TOGGLE_RIGHT), - HDBTN_DISABLED_LEFT (FSkinProp.IMG_HDBTN_DISABLED_LEFT), - HDBTN_DISABLED_CENTER (FSkinProp.IMG_HDBTN_DISABLED_CENTER), - HDBTN_DISABLED_RIGHT (FSkinProp.IMG_HDBTN_DISABLED_RIGHT), + HDBTN_FOCUS_LEFT (FSkinProp.IMG_HDBTN_FOCUS_LEFT), + HDBTN_FOCUS_CENTER (FSkinProp.IMG_HDBTN_FOCUS_CENTER), + HDBTN_FOCUS_RIGHT (FSkinProp.IMG_HDBTN_FOCUS_RIGHT), + HDBTN_TOGGLE_LEFT (FSkinProp.IMG_HDBTN_TOGGLE_LEFT), + HDBTN_TOGGLE_CENTER (FSkinProp.IMG_HDBTN_TOGGLE_CENTER), + HDBTN_TOGGLE_RIGHT (FSkinProp.IMG_HDBTN_TOGGLE_RIGHT), + HDBTN_DISABLED_LEFT (FSkinProp.IMG_HDBTN_DISABLED_LEFT), + HDBTN_DISABLED_CENTER (FSkinProp.IMG_HDBTN_DISABLED_CENTER), + HDBTN_DISABLED_RIGHT (FSkinProp.IMG_HDBTN_DISABLED_RIGHT), //Foils FOIL_01 (FSkinProp.FOIL_01), diff --git a/forge-gui-mobile/src/forge/card/CardImageRenderer.java b/forge-gui-mobile/src/forge/card/CardImageRenderer.java index b76cefdc408..f689f2eb570 100644 --- a/forge-gui-mobile/src/forge/card/CardImageRenderer.java +++ b/forge-gui-mobile/src/forge/card/CardImageRenderer.java @@ -156,19 +156,20 @@ public static void drawCardImage(Graphics g, CardView card, boolean altState, fl } //space for artist textBoxHeight -= 2 * PT_FONT.getCapHeight(); - PaperCard paperCard = ImageUtil.getPaperCardFromImageKey(state.getImageKey()); + PaperCard paperCard = null; + try { + paperCard = ImageUtil.getPaperCardFromImageKey(state.getImageKey()); + } catch (Exception e) {} String artist = "WOTC"; if (paperCard != null && !paperCard.getArtist().isEmpty()) artist = paperCard.getArtist(); float minTextBoxHeight = 2 * headerHeight; if (textBoxHeight < minTextBoxHeight) { - if (textBoxHeight < minTextBoxHeight) { - artHeight -= (minTextBoxHeight - textBoxHeight); //subtract from art height if text box not big enough otherwise - textBoxHeight = minTextBoxHeight; - if (artHeight < 0) { - textBoxHeight += artHeight; - artHeight = 0; - } + artHeight -= (minTextBoxHeight - textBoxHeight); //subtract from art height if text box not big enough otherwise + textBoxHeight = minTextBoxHeight; + if (artHeight < 0) { + textBoxHeight += artHeight; + artHeight = 0; } } @@ -302,8 +303,8 @@ private static void drawHeader(Graphics g, CardView card, CardStateView state, C private static final FBufferedImage stretchedArt; static { - final float logoWidth = FSkinImage.LOGO.getWidth(); - final float logoHeight = FSkinImage.LOGO.getHeight(); + final float logoWidth = FSkinImage.CARDART.getWidth(); + final float logoHeight = FSkinImage.CARDART.getHeight(); float h = logoHeight * 1.1f; float w = h * CardRenderer.CARD_ART_RATIO; forgeArt = new FBufferedImage(w, h) { @@ -311,7 +312,7 @@ private static void drawHeader(Graphics g, CardView card, CardStateView state, C protected void draw(Graphics g, float w, float h) { g.drawImage(Forge.isMobileAdventureMode ? FSkinTexture.ADV_BG_TEXTURE : FSkinTexture.BG_TEXTURE, 0, 0, w, h); g.fillRect(FScreen.getTextureOverlayColor(), 0, 0, w, h); - g.drawImage(FSkinImage.LOGO, (w - logoWidth) / 2, (h - logoHeight) / 2, logoWidth, logoHeight); + g.drawImage(FSkinImage.CARDART, (w - logoWidth) / 2, (h - logoHeight) / 2, logoWidth, logoHeight); } }; stretchedArt = new FBufferedImage(w, h) { @@ -319,20 +320,24 @@ protected void draw(Graphics g, float w, float h) { protected void draw(Graphics g, float w, float h) { g.drawImage(Forge.isMobileAdventureMode ? FSkinTexture.ADV_BG_TEXTURE : FSkinTexture.BG_TEXTURE, 0, 0, w, h); g.fillRect(FScreen.getTextureOverlayColor(), 0, 0, w, h); - g.drawImage(FSkinImage.LOGO, (w - logoWidth) / 2, ((h - logoHeight) / 2) + h / 3.5f, logoWidth, logoHeight / 3); + int newW = Math.round((h * (logoWidth / logoHeight)) * 1.5f); + int newH = Math.round(logoHeight / 2); + g.drawImage(FSkinImage.CARDART, (w - newW) /2, (h - newH) / 2, newW, newH); } }; } private static void drawArt(CardView cv, Graphics g, float x, float y, float w, float h, boolean altState, boolean isFaceDown) { - boolean isSaga = cv.getCurrentState().getType().hasSubtype("Saga"); - boolean isClass = cv.getCurrentState().getType().hasSubtype("Class") || cv.getCurrentState().getType().hasSubtype("Case"); - boolean isDungeon = cv.getCurrentState().getType().isDungeon(); + boolean useStretchedArt = cv.getCurrentState().getType().hasSubtype("Saga") + || cv.getCurrentState().getType().hasSubtype("Class") + || cv.getCurrentState().getType().hasSubtype("Case") + || cv.getCurrentState().getType().isDungeon(); ColorSet colorSet = cv.getCurrentState().getColors(); if (altState && cv.hasAlternateState()) { - isSaga = cv.getAlternateState().getType().hasSubtype("Saga"); - isClass = cv.getAlternateState().getType().hasSubtype("Class") || cv.getAlternateState().getType().hasSubtype("Case"); - isDungeon = cv.getAlternateState().getType().isDungeon(); + useStretchedArt = cv.getAlternateState().getType().hasSubtype("Saga") + || cv.getAlternateState().getType().hasSubtype("Class") + || cv.getAlternateState().getType().hasSubtype("Case") + || cv.getAlternateState().getType().isDungeon(); colorSet = cv.getAlternateState().getColors(); } if (cv == null) { @@ -344,7 +349,7 @@ private static void drawArt(CardView cv, Graphics g, float x, float y, float w, } } //fallback - if (isSaga || isClass || isDungeon) { + if (useStretchedArt) { g.drawImage(stretchedArt, x, y, w, h); } else { g.drawImage(forgeArt, x, y, w, h); @@ -359,7 +364,7 @@ private static void drawArt(CardView cv, Graphics g, float x, float y, float w, || cv.getCurrentState().getImageKey().equals(ImageKeys.getTokenKey(ImageKeys.FORETELL_IMAGE))); if (cardArt != null) { if (isHidden && !altState) { - if (isSaga || isClass || isDungeon) { + if (useStretchedArt) { g.drawImage(stretchedArt, x, y, w, h); } else { g.drawImage(forgeArt, x, y, w, h); @@ -391,14 +396,14 @@ private static void drawArt(CardView cv, Graphics g, float x, float y, float w, } } } else { - if (isSaga || isClass || isDungeon) { + if (useStretchedArt) { g.drawImage(stretchedArt, x, y, w, h); } else { g.drawImage(forgeArt, x, y, w, h); } } } else { - if (isSaga || isClass || isDungeon) { + if (useStretchedArt) { g.drawImage(stretchedArt, x, y, w, h); } else { g.drawImage(forgeArt, x, y, w, h); diff --git a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java index 789c68d2a86..65b09154c36 100644 --- a/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java +++ b/forge-gui-mobile/src/forge/itemmanager/views/ImageView.java @@ -38,6 +38,8 @@ import java.util.TreeMap; import java.util.stream.IntStream; +import static forge.assets.FSkin.getDefaultSkinFile; + public class ImageView extends ItemView { private static final float PADDING = Utils.scale(5); private static final float PILE_SPACING_Y = 0.1f; @@ -1101,6 +1103,8 @@ public void draw(Graphics g) { TextureRegion tr = ImageCache.croppedBorderImage(dpImg); g.drawImage(tr, x + (w - w * scale) / 2, y + (h - h * scale) / 1.5f, w * scale, h * scale); } + //draw plastic effect overlay. + g.drawImage(Forge.getAssets().getTexture(getDefaultSkinFile("cover.png")), x + (w - w * scale) / 2, y + (h - h * scale) / 1.5f, w * scale, h * scale); } //fake labelname shadow g.drawText(item.getName(), GROUP_HEADER_FONT, Color.BLACK, (x + PADDING) - 1f, (y + PADDING * 2) + 1f, w - 2 * PADDING, h - 2 * PADDING, true, Align.center, false); @@ -1123,8 +1127,13 @@ public void draw(Graphics g) { } } } else { - //generic box - g.drawImage(FSkin.getDeckbox().get(2), FSkin.getDeckbox().get(2), x, y - (h * 0.25f), w, h, Color.GREEN, selected); + //draw missing box display if not avail or loading... + g.drawImage(FSkin.getDeckbox().get(0), FSkin.getDeckbox().get(0), x, y, w, h, Color.GREEN, selected); + //g.drawImage(Forge.getAssets().getDefaultImage(), x + (w - w * scale) / 2, y + (h - h * scale) / 1.5f, w * scale, h * scale); + g.fillRect(Color.BLACK, x + (w - w * scale) / 2, y + (h - h * scale) / 1.5f, w * scale, h * scale); + //draw plastic effect overlay. + g.drawImage(Forge.getAssets().getTexture(getDefaultSkinFile("cover.png")), x + (w - w * scale) / 2, y + (h - h * scale) / 1.5f, w * scale, h * scale); + //g.drawImage(FSkin.getDeckbox().get(2), FSkin.getDeckbox().get(2), x, y - (h * 0.25f), w, h, Color.GREEN, selected); } if (deckColor != null) { //deck color identity diff --git a/forge-gui-mobile/src/forge/screens/SplashScreen.java b/forge-gui-mobile/src/forge/screens/SplashScreen.java index 11ed0c23358..920f304e868 100644 --- a/forge-gui-mobile/src/forge/screens/SplashScreen.java +++ b/forge-gui-mobile/src/forge/screens/SplashScreen.java @@ -11,6 +11,7 @@ import forge.assets.FSkin; import forge.assets.FSkinColor; import forge.assets.FSkinFont; +import forge.assets.FSkinImage; import forge.assets.FSkinTexture; import forge.toolbox.FButton; import forge.toolbox.FContainer; @@ -137,7 +138,7 @@ private void drawAdventureBackground(Graphics g) { } float hmod = Forge.isLandscapeMode() ? 1f : 1.3f; float ymod = 2.6f; - g.drawImage(splashTexture, Forge.getScreenWidth()/2 - (w*percentage*hmod)/2 , Forge.getScreenHeight()/2 - (h*percentage*hmod)/ymod, (w*percentage)*hmod, (h*percentage)*hmod); + g.drawImage(splashTexture, Forge.getScreenWidth()/2f - (w*percentage*hmod)/2 , Forge.getScreenHeight()/2f - (h*percentage*hmod)/ymod, (w*percentage)*hmod, (h*percentage)*hmod); y += h * 295f / 450f; if (disclaimerFont == null) { @@ -153,7 +154,7 @@ private void drawAdventureBackground(Graphics g) { float pbHeight = 57f / 450f * h; y += 78f / 450f * h; - float w2 = Forge.isLandscapeMode() ? Forge.getScreenWidth() / 2 : Forge.getScreenHeight() / 2; + float w2 = Forge.isLandscapeMode() ? Forge.getScreenWidth() / 2f : Forge.getScreenHeight() / 2f; float h2 = 57f / 450f * (w2/2); String version = "v. " + Forge.CURRENT_VERSION; @@ -280,7 +281,7 @@ private void showSelector(Graphics g, float alpha) { float xmod = Forge.getScreenHeight() > 1000 ? 1.5f : Forge.getScreenHeight() > 800 ? 1.3f : 1f; g.drawImage(FSkin.getLogo(), getWidth() / 2 - (FSkin.getLogo().getWidth() * xmod) / 2, getHeight() / 2 - (FSkin.getLogo().getHeight() * xmod) / 1.5f, FSkin.getLogo().getWidth() * xmod, FSkin.getLogo().getHeight() * xmod); } else { - g.drawImage(splashTexture, x, y, w, h); + g.drawImage(FSkinImage.LOGO, getWidth() / 2 - (FSkinImage.LOGO.getWidth() * 2f) / 2, getHeight() / 2 - (FSkinImage.LOGO.getHeight() * 2f) / 1.3f, FSkinImage.LOGO.getWidth() * 2f, FSkinImage.LOGO.getHeight() * 2f); } y += h * 295f / 450f; float padding = 20f / 450f * w; diff --git a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java index 15d16f0d70d..41528cf4aaa 100644 --- a/forge-gui-mobile/src/forge/screens/match/MatchScreen.java +++ b/forge-gui-mobile/src/forge/screens/match/MatchScreen.java @@ -479,7 +479,7 @@ void drawArcs(Graphics g) { //draw arrows for combat final CombatView combat = game.getCombat(); for (CardView c : cardsonBattlefield) { - TargetingOverlay.assembleArrows(g, c, endpoints, combat, is4Player() || is3Player() ? playerViewSet : null); + TargetingOverlay.assembleArrows(g, c, endpoints, combat, playerViewSet); } } catch (Exception e) { } diff --git a/forge-gui/COMPILE.txt b/forge-gui/COMPILE.txt index 62de574338e..fe4f5b06a31 100644 --- a/forge-gui/COMPILE.txt +++ b/forge-gui/COMPILE.txt @@ -2,9 +2,7 @@ This file contains the current build notes for Forge. -- Compiling Forge for Android: Pre-requisites -- When compiling Forge for Android, make sure the following prerequisites are met: -Java 8 (JDK 1.8.0), either Oracle or OpenJDK. -Android SDK 25 -Android Build-Tools 26 (this is important, build-tools 25 do not work with Java 8) -Proguard 5.3 (download from the official website and replace the contents of the -Proguard folder of the Android SDK (under "tools/proguard") with the contents of -the downloaded archive). +Java 17, either Oracle or OpenJDK. +Android SDK 34 +Android Build-Tools 34 (this is important, build-tools 33 and below do not work with Java 17) +Proguard 7.5.0 (proguard.jar included under "forge-gui-android/tools"). diff --git a/forge-gui/MANUAL.txt b/forge-gui/MANUAL.txt index 1da21baf453..58652319817 100644 --- a/forge-gui/MANUAL.txt +++ b/forge-gui/MANUAL.txt @@ -108,8 +108,8 @@ If you're trying to run Forge for the first time, but it doesn't open up, you ca - Current versions of Forge no longer include a launcher script for Mac OS, proceed to step three. 3) Run Forge -- On Windows, just type "forge.exe", Enter (If you have Java 8 installed, use forge-java8.exe) - if you want to run mobile/adventure instead of the desktop interface, type "forge-adventure.exe", Enter (If you have Java 8 installed, use forge-adventure-java8.exe) +- On Windows, just type "forge.exe", Enter. + if you want to run mobile/adventure instead of the desktop interface, type "forge-adventure.exe", Enter. - On Linux, just type "forge.sh", Enter (if you want to run mobile/adventure interface use forge-adventure.sh) - Launch the Forge application bundle by double clicking on the program named "Forge.app". @@ -125,7 +125,7 @@ if you're running Windows 7, make sure you're running the program as an admin, o Java Issues: ------------ -Forge requires Java 8 as minimum installed and will not run if you have an earlier version of Java. You will need to update to Java 8. (Java 11 is recommended) +Forge requires Java 17 as minimum installed and will not run if you have an earlier version of Java. You will need to update to Java 17. (Java 21 is recommended) Card Picture Issues: diff --git a/forge-gui/pom.xml b/forge-gui/pom.xml index 50a9263501f..edd205ea8cb 100644 --- a/forge-gui/pom.xml +++ b/forge-gui/pom.xml @@ -39,12 +39,12 @@ com.thoughtworks.xstream xstream - 1.4.19 + 1.4.20 io.netty netty-all - 4.1.71.Final + 4.1.113.Final compile diff --git a/forge-gui/res/lists/skinsList.txt b/forge-gui/res/lists/skinsList.txt index af3af64b853..3583f6f0267 100644 --- a/forge-gui/res/lists/skinsList.txt +++ b/forge-gui/res/lists/skinsList.txt @@ -143,3 +143,39 @@ https://downloads.cardforge.org/skins/magic_blue/sprite_buttons.png https://downloads.cardforge.org/skins/magic_blue/sprite_icons.png https://downloads.cardforge.org/skins/magic_blue/sprite_start.png https://downloads.cardforge.org/skins/magic_blue/sprite_trophies.png +https://downloads.cardforge.org/skins/old_forge/bg_chaos_wheel.png +https://downloads.cardforge.org/skins/old_forge/bg_day.jpg +https://downloads.cardforge.org/skins/old_forge/bg_draft_deck.png +https://downloads.cardforge.org/skins/old_forge/bg_match.jpg +https://downloads.cardforge.org/skins/old_forge/bg_night.jpg +https://downloads.cardforge.org/skins/old_forge/bg_space.png +https://downloads.cardforge.org/skins/old_forge/bg_splash.png +https://downloads.cardforge.org/skins/old_forge/bg_splash_hd.png +https://downloads.cardforge.org/skins/old_forge/bg_texture.jpg +https://downloads.cardforge.org/skins/old_forge/font1.ttf +https://downloads.cardforge.org/skins/old_forge/hd_logo.png +https://downloads.cardforge.org/skins/old_forge/sprite_ability.png +https://downloads.cardforge.org/skins/old_forge/sprite_adv_buttons.png +https://downloads.cardforge.org/skins/old_forge/sprite_adventure.png +https://downloads.cardforge.org/skins/old_forge/sprite_attraction_lights.png +https://downloads.cardforge.org/skins/old_forge/sprite_avatars.png +https://downloads.cardforge.org/skins/old_forge/sprite_border.png +https://downloads.cardforge.org/skins/old_forge/sprite_buttons.png +https://downloads.cardforge.org/skins/old_forge/sprite_cracks.png +https://downloads.cardforge.org/skins/old_forge/sprite_cursor.png +https://downloads.cardforge.org/skins/old_forge/sprite_deckbox.png +https://downloads.cardforge.org/skins/old_forge/sprite_draftranks.png +https://downloads.cardforge.org/skins/old_forge/sprite_favicons.png +https://downloads.cardforge.org/skins/old_forge/sprite_foils.png +https://downloads.cardforge.org/skins/old_forge/sprite_hybrid_colorless.png +https://downloads.cardforge.org/skins/old_forge/sprite_icons.png +https://downloads.cardforge.org/skins/old_forge/sprite_manaicons.png +https://downloads.cardforge.org/skins/old_forge/sprite_old_foils.png +https://downloads.cardforge.org/skins/old_forge/sprite_phyrexian.png +https://downloads.cardforge.org/skins/old_forge/sprite_planar_conquest.png +https://downloads.cardforge.org/skins/old_forge/sprite_setlogo.png +https://downloads.cardforge.org/skins/old_forge/sprite_sleeves.png +https://downloads.cardforge.org/skins/old_forge/sprite_sleeves2.png +https://downloads.cardforge.org/skins/old_forge/sprite_start.png +https://downloads.cardforge.org/skins/old_forge/sprite_trophies.png +https://downloads.cardforge.org/skins/old_forge/sprite_watermark.png diff --git a/forge-gui/res/skins/default/bg_chaos_wheel.png b/forge-gui/res/skins/default/bg_chaos_wheel.png index 607aee4d149..fb42c050942 100644 Binary files a/forge-gui/res/skins/default/bg_chaos_wheel.png and b/forge-gui/res/skins/default/bg_chaos_wheel.png differ diff --git a/forge-gui/res/skins/default/bg_match.jpg b/forge-gui/res/skins/default/bg_match.jpg index ce143a5381d..b0630064e21 100644 Binary files a/forge-gui/res/skins/default/bg_match.jpg and b/forge-gui/res/skins/default/bg_match.jpg differ diff --git a/forge-gui/res/skins/default/bg_space.png b/forge-gui/res/skins/default/bg_space.png index c1cdad089cc..4e397df298c 100644 Binary files a/forge-gui/res/skins/default/bg_space.png and b/forge-gui/res/skins/default/bg_space.png differ diff --git a/forge-gui/res/skins/default/bg_splash.png b/forge-gui/res/skins/default/bg_splash.png index dca090ee57f..0bcba091a57 100644 Binary files a/forge-gui/res/skins/default/bg_splash.png and b/forge-gui/res/skins/default/bg_splash.png differ diff --git a/forge-gui/res/skins/default/bg_splash_hd.png b/forge-gui/res/skins/default/bg_splash_hd.png index d4b3279275a..2fca0a004d8 100644 Binary files a/forge-gui/res/skins/default/bg_splash_hd.png and b/forge-gui/res/skins/default/bg_splash_hd.png differ diff --git a/forge-gui/res/skins/default/bg_texture.jpg b/forge-gui/res/skins/default/bg_texture.jpg index 7c925524eb3..50f37309ff0 100644 Binary files a/forge-gui/res/skins/default/bg_texture.jpg and b/forge-gui/res/skins/default/bg_texture.jpg differ diff --git a/forge-gui/res/skins/default/cover.png b/forge-gui/res/skins/default/cover.png new file mode 100644 index 00000000000..376c2eb303a Binary files /dev/null and b/forge-gui/res/skins/default/cover.png differ diff --git a/forge-gui/res/skins/default/font1.ttf b/forge-gui/res/skins/default/font1.ttf index 8723f9e2252..28cf43d7e7f 100644 Binary files a/forge-gui/res/skins/default/font1.ttf and b/forge-gui/res/skins/default/font1.ttf differ diff --git a/forge-gui/res/skins/default/hd_logo.png b/forge-gui/res/skins/default/hd_logo.png index b4ea23cf2db..c89614178e0 100644 Binary files a/forge-gui/res/skins/default/hd_logo.png and b/forge-gui/res/skins/default/hd_logo.png differ diff --git a/forge-gui/res/skins/default/sprite_avatars.png b/forge-gui/res/skins/default/sprite_avatars.png index 5f5e4c32a53..9aac05003f5 100644 Binary files a/forge-gui/res/skins/default/sprite_avatars.png and b/forge-gui/res/skins/default/sprite_avatars.png differ diff --git a/forge-gui/res/skins/default/sprite_buttons.png b/forge-gui/res/skins/default/sprite_buttons.png index b92e016be99..16ea5b3a67e 100644 Binary files a/forge-gui/res/skins/default/sprite_buttons.png and b/forge-gui/res/skins/default/sprite_buttons.png differ diff --git a/forge-gui/res/skins/default/sprite_deckbox.png b/forge-gui/res/skins/default/sprite_deckbox.png index 71dc02f164d..b5148bb344b 100644 Binary files a/forge-gui/res/skins/default/sprite_deckbox.png and b/forge-gui/res/skins/default/sprite_deckbox.png differ diff --git a/forge-gui/res/skins/default/sprite_icons.png b/forge-gui/res/skins/default/sprite_icons.png index 774067843b0..44c1131b9a2 100644 Binary files a/forge-gui/res/skins/default/sprite_icons.png and b/forge-gui/res/skins/default/sprite_icons.png differ diff --git a/forge-gui/res/skins/default/sprite_planar_conquest.png b/forge-gui/res/skins/default/sprite_planar_conquest.png index fdd23e45b0a..97d36b0673a 100644 Binary files a/forge-gui/res/skins/default/sprite_planar_conquest.png and b/forge-gui/res/skins/default/sprite_planar_conquest.png differ diff --git a/forge-gui/res/skins/default/sprite_sleeves.png b/forge-gui/res/skins/default/sprite_sleeves.png index 8182a942d9b..130b8b84750 100644 Binary files a/forge-gui/res/skins/default/sprite_sleeves.png and b/forge-gui/res/skins/default/sprite_sleeves.png differ diff --git a/forge-gui/res/skins/default/sprite_sleeves2.png b/forge-gui/res/skins/default/sprite_sleeves2.png index 0a5f0565eb1..75c4e5f5891 100644 Binary files a/forge-gui/res/skins/default/sprite_sleeves2.png and b/forge-gui/res/skins/default/sprite_sleeves2.png differ diff --git a/forge-gui/res/skins/default/sprite_start.png b/forge-gui/res/skins/default/sprite_start.png index 3b20b24c5b7..dc5e7ea6e68 100644 Binary files a/forge-gui/res/skins/default/sprite_start.png and b/forge-gui/res/skins/default/sprite_start.png differ diff --git a/forge-gui/res/skins/default/sprite_trophies.png b/forge-gui/res/skins/default/sprite_trophies.png index baebc020b1b..a8c2847ea48 100644 Binary files a/forge-gui/res/skins/default/sprite_trophies.png and b/forge-gui/res/skins/default/sprite_trophies.png differ diff --git a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java index f07f1d21d44..7491d40d5ca 100644 --- a/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java +++ b/forge-gui/src/main/java/forge/localinstance/skin/FSkinProp.java @@ -359,6 +359,7 @@ public enum FSkinProp { ICO_UNKNOWN (new int[] {0, 720, 80, 80}, PropType.ICON), ICO_LOGO (new int[] {480, 0, 200, 200}, PropType.ICON), + ICO_CARDART (new int[] {0, 1600, 200, 200}, PropType.ICON), ICO_FLIPCARD (new int[] {400, 0, 80, 120}, PropType.ICON), ICO_HDFLIPCARD (new int[] {2, 1268, 387, 500}, PropType.BUTTONS), diff --git a/forge-lda/pom.xml b/forge-lda/pom.xml index f06ef8734a7..422e9bb2c21 100644 --- a/forge-lda/pom.xml +++ b/forge-lda/pom.xml @@ -21,8 +21,8 @@ maven-compiler-plugin - 1.8 - 1.8 + 17 + 17 @@ -56,11 +56,6 @@ forge-gui ${project.version} - - org.apache.commons - commons-lang3 - 3.8.1 - forge forge-gui-desktop diff --git a/pom.xml b/pom.xml index 993a31fa14f..d0e54b12552 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ UTF-8 ./forge-gui src/main/config - 8 + 17 @@ -88,7 +88,7 @@ org.apache.maven.wagon wagon-ftp - 2.6 + 3.5.3 @@ -102,17 +102,18 @@ maven-compiler-plugin - 3.1 + 3.8.1 - 1.8 - 1.8 + 17 + 17 + 17 org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.1.1 true false @@ -125,18 +126,30 @@ org.apache.maven.plugins maven-surefire-plugin - 2.16 + 3.1.2 + + + --add-opens java.base/java.lang=ALL-UNNAMED + --add-opens java.base/java.time=ALL-UNNAMED + --add-opens java.base/java.text=ALL-UNNAMED + --add-opens java.base/java.util=ALL-UNNAMED + --add-opens java.base/java.util.regex=ALL-UNNAMED + --add-opens java.base/java.util.stream=ALL-UNNAMED + --add-opens java.base/java.lang.reflect=ALL-UNNAMED + --add-opens java.desktop/javax.imageio.spi=ALL-UNNAMED + + org.apache.maven.plugins maven-deploy-plugin - 2.8.1 + 3.0.0 org.apache.maven.wagon wagon-ftp - 2.6 + 3.5.3 @@ -144,40 +157,40 @@ org.apache.maven.plugins maven-jar-plugin - 2.4 + 3.3.0 org.apache.maven.plugins maven-site-plugin - 3.3 + 3.9.1 org.apache.maven.plugins maven-antrun-plugin - 1.7 + 3.0.0 maven-assembly-plugin - 2.4 + 3.3.0 maven-install-plugin - 2.5.1 + 3.0.1 org.apache.maven.plugins maven-dependency-plugin - 2.8 + 3.1.2 maven-release-plugin - 2.5 + 3.0.1 true @@ -188,33 +201,32 @@ maven-resources-plugin - 2.6 + 3.2.0 org.apache.maven.plugins maven-clean-plugin - 2.5 + 3.1.0 org.apache.maven.plugins maven-source-plugin - 2.2.1 + 3.2.1 org.apache.maven.plugins maven-scm-plugin - 1.9 + 1.11.2 org.apache.maven.wagon wagon-ftp - 2.6 + 3.5.3 - @@ -228,7 +240,7 @@ org.codehaus.mojo build-helper-maven-plugin - [3.1,) + [3.2,) released-version parse-version @@ -286,7 +298,14 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.0.0 + 3.1.2 + + + com.puppycrawl.tools + checkstyle + 9.3 + + checkstyle-validation @@ -314,12 +333,12 @@ ch.qos.logback logback-classic - 1.2.11 + 1.5.8 ch.qos.logback logback-core - 1.2.11 + 1.5.8