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>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</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>
</configuration>
</plugin>
@@ -127,9 +130,12 @@
</descriptorRefs>
<archive>
<manifest>
<mainClass>forge.view.Main</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</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>
</configuration>
<executions>

View File

@@ -6,12 +6,12 @@
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* 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.card.CardReaderExperiments;
import forge.util.BuildInfo;
import forge.util.JVMOptions;
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.
*/
@@ -42,37 +33,6 @@ public final class Main {
* Main entry point for Forge
*/
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 -> {
options.setEnableExternalConfiguration(true);
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)
System.setProperty("sun.java2d.d3d", "false");
//Turn on OpenGl acceleration to improve performance
//System.setProperty("sun.java2d.opengl", "True");
@@ -110,7 +70,7 @@ public final class Main {
// command line startup here
String mode = args[0].toLowerCase();
switch(mode) {
switch (mode) {
case "sim":
SimulateMatch.simulate(args);
break;
@@ -130,8 +90,9 @@ public final class Main {
System.exit(0);
}
@SuppressWarnings("deprecation")
@Override
@Override
protected void finalize() throws Throwable {
try {
ExceptionHandler.unregisterErrorHandling();
@@ -141,5 +102,6 @@ public final class Main {
}
// disallow instantiation
private Main() { }
private Main() {
}
}

View File

@@ -134,10 +134,11 @@
</descriptorRefs>
<archive>
<manifest>
<mainClass>forge.app.Main</mainClass>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</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.app.Main</Main-Class>
<SplashScreen-Image>splash/logo.gif</SplashScreen-Image>
</manifestEntries>
</archive>

View File

@@ -4,7 +4,6 @@ import com.badlogic.gdx.Gdx;
import forge.interfaces.IDeviceAdapter;
import forge.util.BuildInfo;
import forge.util.FileUtil;
import forge.util.JVMOptions;
import forge.util.OperatingSystem;
import forge.util.RestartUtil;
import org.apache.commons.lang3.tuple.Pair;
@@ -17,30 +16,12 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;
import java.util.ArrayList;
import java.util.List;
public class Main {
private static final String versionString = BuildInfo.getVersionString();
public static void main(String[] args) {
checkJVMArgs(System.getProperty("java.version"));
}
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);
new GameLauncher(versionString);
}
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);
}
//Ability Icons
boolean onbattlefield = ZoneType.Battlefield.equals(card.getZone());
if (unselectable) {
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));
} 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
String keywordKey = card.getCurrentState().getKeywordKey();
String abilityText = card.getCurrentState().getAbilityText();