add manifest entries to forge desktop/mobile jar

allow launching the jar without launcher if possible
This commit is contained in:
Anthony Calosa
2024-10-22 10:18:07 +08:00
parent 1ab6d82f69
commit 2aa6d9a6e6
5 changed files with 20 additions and 71 deletions

View File

@@ -85,6 +85,9 @@
<addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries> <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest> </manifest>
<manifestEntries>
<Add-Opens>java.desktop/java.beans java.desktop/javax.swing.border java.desktop/javax.swing.event java.desktop/sun.swing java.desktop/java.awt.image java.desktop/java.awt.color java.desktop/sun.awt.image java.desktop/javax.swing java.desktop/java.awt java.base/java.util java.base/java.lang java.base/java.lang.reflect java.base/java.text java.desktop/java.awt.font java.base/jdk.internal.misc java.base/sun.nio.ch java.base/java.nio java.base/java.math java.base/java.util.concurrent java.base/java.net</Add-Opens>
</manifestEntries>
</archive> </archive>
</configuration> </configuration>
</plugin> </plugin>
@@ -127,9 +130,12 @@
</descriptorRefs> </descriptorRefs>
<archive> <archive>
<manifest> <manifest>
<mainClass>forge.view.Main</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest> </manifest>
<manifestEntries>
<Add-Opens>java.desktop/java.beans java.desktop/javax.swing.border java.desktop/javax.swing.event java.desktop/sun.swing java.desktop/java.awt.image java.desktop/java.awt.color java.desktop/sun.awt.image java.desktop/javax.swing java.desktop/java.awt java.base/java.util java.base/java.lang java.base/java.lang.reflect java.base/java.text java.desktop/java.awt.font java.base/jdk.internal.misc java.base/sun.nio.ch java.base/java.nio java.base/java.math java.base/java.util.concurrent java.base/java.net</Add-Opens>
<Main-Class>forge.view.Main</Main-Class>
</manifestEntries>
</archive> </archive>
</configuration> </configuration>
<executions> <executions>

View File

@@ -6,12 +6,12 @@
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
@@ -23,17 +23,8 @@ import forge.error.ExceptionHandler;
import forge.gui.GuiBase; import forge.gui.GuiBase;
import forge.gui.card.CardReaderExperiments; import forge.gui.card.CardReaderExperiments;
import forge.util.BuildInfo; import forge.util.BuildInfo;
import forge.util.JVMOptions;
import io.sentry.Sentry; import io.sentry.Sentry;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.ArrayList;
import java.util.List;
/** /**
* Main class for Forge's swing application view. * Main class for Forge's swing application view.
*/ */
@@ -42,37 +33,6 @@ public final class Main {
* Main entry point for Forge * Main entry point for Forge
*/ */
public static void main(final String[] args) { public static void main(final String[] args) {
String javaVersion = System.getProperty("java.version");
checkJVMArgs(javaVersion, args);
}
static void checkJVMArgs(String javaVersion, String[] args) {
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
List<Object> options = new ArrayList<>();
JButton ok = new JButton("OK");
options.add(ok);
JVMOptions.getStringBuilder().append("Java Version: ").append(javaVersion).append("\nArguments: \n");
for (String a : arguments) {
if (a.startsWith("-agent") || a.startsWith("-javaagent"))
continue;
JVMOptions.getStringBuilder().append(a).append("\n");
}
JOptionPane pane = new JOptionPane(JVMOptions.getStringBuilder(), JOptionPane.PLAIN_MESSAGE, JOptionPane.DEFAULT_OPTION, null, options.toArray());
JDialog dlg = pane.createDialog(JOptionPane.getRootFrame(), "Error");
ok.addActionListener(e -> {
dlg.setVisible(false);
System.exit(0);
});
dlg.setResizable(false);
if (!JVMOptions.checkRuntime(arguments)) {
dlg.setVisible(true);
} else {
start(args);
}
}
static void start(final String[] args) {
Sentry.init(options -> { Sentry.init(options -> {
options.setEnableExternalConfiguration(true); options.setEnableExternalConfiguration(true);
options.setRelease(BuildInfo.getVersionString()); options.setRelease(BuildInfo.getVersionString());
@@ -88,7 +48,7 @@ public final class Main {
//Turn off the Java 2D system's use of Direct3D to improve rendering speed (particularly when Full Screen) //Turn off the Java 2D system's use of Direct3D to improve rendering speed (particularly when Full Screen)
System.setProperty("sun.java2d.d3d", "false"); System.setProperty("sun.java2d.d3d", "false");
//Turn on OpenGl acceleration to improve performance //Turn on OpenGl acceleration to improve performance
//System.setProperty("sun.java2d.opengl", "True"); //System.setProperty("sun.java2d.opengl", "True");
@@ -110,7 +70,7 @@ public final class Main {
// command line startup here // command line startup here
String mode = args[0].toLowerCase(); String mode = args[0].toLowerCase();
switch(mode) { switch (mode) {
case "sim": case "sim":
SimulateMatch.simulate(args); SimulateMatch.simulate(args);
break; break;
@@ -130,8 +90,9 @@ public final class Main {
System.exit(0); System.exit(0);
} }
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
@Override @Override
protected void finalize() throws Throwable { protected void finalize() throws Throwable {
try { try {
ExceptionHandler.unregisterErrorHandling(); ExceptionHandler.unregisterErrorHandling();
@@ -141,5 +102,6 @@ public final class Main {
} }
// disallow instantiation // disallow instantiation
private Main() { } private Main() {
}
} }

View File

@@ -134,10 +134,11 @@
</descriptorRefs> </descriptorRefs>
<archive> <archive>
<manifest> <manifest>
<mainClass>forge.app.Main</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries> <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest> </manifest>
<manifestEntries> <manifestEntries>
<Add-Opens>java.desktop/java.beans java.desktop/javax.swing.border java.desktop/javax.swing.event java.desktop/sun.swing java.desktop/java.awt.image java.desktop/java.awt.color java.desktop/sun.awt.image java.desktop/javax.swing java.desktop/java.awt java.base/java.util java.base/java.lang java.base/java.lang.reflect java.base/java.text java.desktop/java.awt.font java.base/jdk.internal.misc java.base/sun.nio.ch java.base/java.nio java.base/java.math java.base/java.util.concurrent java.base/java.net</Add-Opens>
<Main-Class>forge.app.Main</Main-Class>
<SplashScreen-Image>splash/logo.gif</SplashScreen-Image> <SplashScreen-Image>splash/logo.gif</SplashScreen-Image>
</manifestEntries> </manifestEntries>
</archive> </archive>

View File

@@ -4,7 +4,6 @@ import com.badlogic.gdx.Gdx;
import forge.interfaces.IDeviceAdapter; import forge.interfaces.IDeviceAdapter;
import forge.util.BuildInfo; import forge.util.BuildInfo;
import forge.util.FileUtil; import forge.util.FileUtil;
import forge.util.JVMOptions;
import forge.util.OperatingSystem; import forge.util.OperatingSystem;
import forge.util.RestartUtil; import forge.util.RestartUtil;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@@ -17,30 +16,12 @@ import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
public class Main { public class Main {
private static final String versionString = BuildInfo.getVersionString(); private static final String versionString = BuildInfo.getVersionString();
public static void main(String[] args) { public static void main(String[] args) {
checkJVMArgs(System.getProperty("java.version")); new GameLauncher(versionString);
}
static void checkJVMArgs(String javaVersion) {
RuntimeMXBean runtimeMxBean = ManagementFactory.getRuntimeMXBean();
List<String> arguments = runtimeMxBean.getInputArguments();
JVMOptions.getStringBuilder().append("Java Version: ").append(javaVersion).append("\nArguments: \n");
for (String a : arguments) {
if (a.startsWith("-agent") || a.startsWith("-javaagent"))
continue;
JVMOptions.getStringBuilder().append(a).append("\n");
}
if (!JVMOptions.checkRuntime(arguments)) {
new DialogWindow("Error", JVMOptions.getStringBuilder().toString());
} else
new GameLauncher(versionString);
} }
public static class DesktopAdapter implements IDeviceAdapter { public static class DesktopAdapter implements IDeviceAdapter {

View File

@@ -815,13 +815,12 @@ public class CardRenderer {
g.drawRect(BORDER_THICKNESS, Color.MAGENTA, cx, cy, cw, ch); g.drawRect(BORDER_THICKNESS, Color.MAGENTA, cx, cy, cw, ch);
} }
//Ability Icons //Ability Icons
boolean onbattlefield = ZoneType.Battlefield.equals(card.getZone());
if (unselectable) { if (unselectable) {
g.setAlphaComposite(0.6f); g.setAlphaComposite(0.6f);
} }
if (onbattlefield && onTop) { if (ZoneType.Battlefield.equals(card.getZone()) && onTop) {
drawAbilityIcons(g, card, cx, cy, cw, ch, cx + ((cw * 2) / 2.3f), cy, cw / 5.5f, cw / 5.7f, showAbilityIcons(card)); drawAbilityIcons(g, card, cx, cy, cw, ch, cx + ((cw * 2) / 2.3f), cy, cw / 5.5f, cw / 5.7f, showAbilityIcons(card));
} else if (canShow && !onbattlefield && showAbilityIcons(card)) { } else if (canShow && !ZoneType.Battlefield.equals(card.getZone()) && showAbilityIcons(card)) {
//draw indicator for flash or can be cast at instant speed, enabled if show ability icons is enabled //draw indicator for flash or can be cast at instant speed, enabled if show ability icons is enabled
String keywordKey = card.getCurrentState().getKeywordKey(); String keywordKey = card.getCurrentState().getKeywordKey();
String abilityText = card.getCurrentState().getAbilityText(); String abilityText = card.getCurrentState().getAbilityText();