help, errors when i try to start the game

Last login: Wed Oct 16 20:41:55 on ttys001
________-MacBook-Pro:FetishMaster_0_985d ____$ ./start.sh
Java home: /Library/Java/JavaVirtualMachines/jdk-13.jdk/Contents/Home
Version: 13
Relative path for game resources: gamedata
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.rits.cloning.Cloner (file:/Users/____/Downloads/FetishMaster_0_985d/dist/lib/cloning-1.9.1.jar) to field java.util.TreeSet.m
WARNING: Please consider reporting this to the maintainers of com.rits.cloning.Cloner
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Absolute path for game resources: /Users/____/Downloads/FetishMaster_0_985d/gamedata
Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
	at org.mvel2.optimizers.OptimizerFactory.<clinit>(OptimizerFactory.java:39)
	at fetishmaster.engine.GameEngine.initGameEngine(GameEngine.java:242)
	at fetishmaster.engine.GameEngine.initNewGame(GameEngine.java:73)
	at fetishmaster.display.JDialogStartSplash.jButtonStartActionPerformed(JDialogStartSplash.java:256)
	at fetishmaster.display.JDialogStartSplash.access$200(JDialogStartSplash.java:21)
	at fetishmaster.display.JDialogStartSplash$3.actionPerformed(JDialogStartSplash.java:148)
	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6636)
	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
	at java.desktop/java.awt.Component.processEvent(Component.java:6401)
	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5012)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2762)
	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4844)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.StringIndexOutOfBoundsException: begin 0, end 3, length 2
	at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3720)
	at java.base/java.lang.String.substring(String.java:1909)
	at org.mvel2.compiler.AbstractParser.setupParser(AbstractParser.java:164)
	at org.mvel2.compiler.AbstractParser.<clinit>(AbstractParser.java:100)
	... 41 more
________-MacBook-Pro:FetishMaster_0_985d ____$

The game was built for Java 6 and doesn’t actually seem to function on newer versions of Java. Java 8 might be the latest version to support the game properly, and it looks like you’re using Java 13.

Frankly I don’t use macOS enough to tell you much about installing older versions of Java. It seems like there’s a download of the Java 6 runtime directly from Apple, although I don’t know about whether newer versions of macOS actually support it. You can download Oracle’s Java 8 release through their website (look for the .dmg file).

With the source code available and ‘classic’ Java on life support, it’s probably well past time someone got the code updated for compliance with newer versions, even if it meant breaking the game on old versions of Java. Most of the errors there are being thrown by external libraries, from what I can tell, but I’m guessing it’s not going to be as simple as updating them and rebuilding. I might start poking at that this weekend.

EDIT: Actually, it might just be that it’s broken with OpenJDK versus Oracle’s Java implementation; I believe macOS defaults to OpenJDK, and that’s what I’ve generally been using on my Linux machine. It still seems to work with Oracle’s version of Java 13 (still with cloning warnings, but not outright errors), so feel free to try that rather than installing an older version of Java.

1 Like