Unfortunately, I can confirm the bug from post #4. Attempting to run the mod under Java 16 results in the following error (and opening the Extreme Mod options panel raises a hundred or so more of these exceptions, one per client file). Java 15 works fine, so I'll stay on that for now.

Code:
java.lang.NullPointerException: Cannot invoke "java.lang.reflect.Method.invoke(Object, Object[])" because "com.sun.xml.bind.v2.runtime.reflect.opt.Injector.defineClass" is null
	at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:311)
	at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.inject(Injector.java:97)
	at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:87)
	at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:179)
	at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.optimize(Accessor.java:285)
	at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:94)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:128)
	at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:181)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:514)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:331)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:139)
	at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1156)
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:165)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:297)
	at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:286)
	at javax.xml.bind.ContextFinder.find(ContextFinder.java:409)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721)
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662)
	at javax.xml.bind.JAXB$Cache.<init>(JAXB.java:127)
	at javax.xml.bind.JAXB.getContext(JAXB.java:154)
	at javax.xml.bind.JAXB.unmarshal(JAXB.java:168)
	at ghostfucker.spoof.PerfectSpoof.createClient(PerfectSpoof.java:43)
	at ghostfucker.spoof.PerfectSpoof.<clinit>(PerfectSpoof.java:24)
	at com.biglybt.core.peermanager.messaging.bittorrent.BTHandshake.<clinit>(BTHandshake.java:38)
	at com.biglybt.core.peermanager.messaging.bittorrent.BTMessageFactory.init(BTMessageFactory.java:54)
	at com.biglybt.core.peermanager.messaging.MessageManager.initialize(MessageManager.java:59)
	at com.biglybt.core.peermanager.PeerManager.init(PeerManager.java:263)
	at com.biglybt.core.peermanager.PeerManager.<init>(PeerManager.java:197)
	at com.biglybt.core.peermanager.PeerManager.<clinit>(PeerManager.java:67)
	at com.biglybt.core.impl.CoreImpl.<init>(CoreImpl.java:351)
	at com.biglybt.core.impl.CoreImpl.create(CoreImpl.java:176)
	at com.biglybt.core.CoreFactory.create(CoreFactory.java:43)
	at com.biglybt.ui.Main.main(Main.java:200)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at com.biglybt.launcher.Launcher$1.run(Launcher.java:48)
	at java.base/java.lang.Thread.run(Thread.java:831)
The behavior mentioned on #6 also occurs. I can't reproduce the bug from #15, however. The decimal part of numeric values is forgotten after a restart, but everything else is remembered.