Hello, I'm the tech admin for the Light vs Dark server. We are attempting to upgrade to the latest version, however the server was crashing into an infinite loop error. At first, [[ http://prnt.sc/c6agdz | all seems fine ]]. The update goes through successfully and the server starts. I had also rebuilt all of the custom config files from the new versions in a fresh install. However, as soon as anyone logs into the server, it starts with an infinite error loop, without hard crashing. This completely fills the log files within just a few seconds, with over 40,000 lines of error messages a second. We are running on Ubuntu 16 server with Sun Java 64-bit. There are a few variants of the error loop that occurred, but what ties them together is they both have the java exception that the "revertBlockBehaviorConfig.xml" is not found. I managed to get to the bottom of it, but it was a journey.
**Short story:**
The new section, "<StructureHpBlockMultiplier>", of the blockBehaviorConfig.xml from the /data/config folder CANNOT be in the customBlockBehaviorConfig.xml file, otherwise it causes the crash.
**The Journey:**
Here's what the error loop looked like immediately following the first update, before the hotfix:
On version, 20160812_205821 v0.199.152:
```
[2016-08-13 02:33:15] ON CLIENT: false
[2016-08-13 02:33:15] java.lang.IllegalArgumentException: No enum constant obfuscated.YF.STATUS_ARMOR_HP_ABSORBTION_BONUS
[2016-08-13 02:33:15] at java.lang.Enum.valueOf(Enum.java:238)
[2016-08-13 02:33:15] at obfuscated.YF.valueOf(SourceFile:24)
[2016-08-13 02:33:15] at org.schema.game.common.controller.elements.UsableElementManager.parse(SourceFile:221)
[2016-08-13 02:33:15] at org.schema.game.common.controller.elements.ManagerContainer.reparseBlockBehavior(SourceFile:284)
[2016-08-13 02:33:15] at org.schema.game.common.controller.elements.ManagerContainer.<init>(SourceFile:194)
[2016-08-13 02:33:15] at org.schema.game.common.controller.elements.ShipManagerContainer.<init>(SourceFile:214)
[2016-08-13 02:33:15] at obfuscated.VP.<init>(SourceFile:146)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.loadEntity(SourceFile:339)
[2016-08-13 02:33:15] at obfuscated.agn.a(SourceFile:1428)
[2016-08-13 02:33:15] at obfuscated.agn.a(SourceFile:1400)
[2016-08-13 02:33:15] at obfuscated.agn.a(SourceFile:1287)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.loadOrGenerateSector(SourceFile:951)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.getSector(SourceFile:647)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.getSector(SourceFile:641)
[2016-08-13 02:33:15] at org.schema.game.server.controller.GameServerController.onLoggedIn(SourceFile:1734)
[2016-08-13 02:33:15] at org.schema.schine.network.server.ServerController.registerClient(SourceFile:148)
[2016-08-13 02:33:15] at org.schema.schine.network.commands.LoginRequest.login(SourceFile:95)
[2016-08-13 02:33:15] at org.schema.schine.network.commands.LoginRequest.run(SourceFile:202)
[2016-08-13 02:33:15] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[2016-08-13 02:33:15] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[2016-08-13 02:33:15] at java.lang.Thread.run(Thread.java:745)
[2016-08-13 02:33:15] java.io.FileNotFoundException: /home/starmade/starmade/StarMade/./data/config/revertBlockBehaviorConfig.xml (No such file or directory)
[2016-08-13 02:33:15] at java.io.FileInputStream.open0(Native Method)
[2016-08-13 02:33:15] at java.io.FileInputStream.open(FileInputStream.java:195)
[2016-08-13 02:33:15] at java.io.FileInputStream.<init>(FileInputStream.java:138)
[2016-08-13 02:33:15] at java.io.FileInputStream.<init>(FileInputStream.java:93)
[2016-08-13 02:33:15] at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
[2016-08-13 02:33:15] at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
[2016-08-13 02:33:15] at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623)
[2016-08-13 02:33:15] at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
[2016-08-13 02:33:15] at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
[2016-08-13 02:33:15] at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
[2016-08-13 02:33:15] at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
[2016-08-13 02:33:15] at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
[2016-08-13 02:33:15] at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
[2016-08-13 02:33:15] at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
[2016-08-13 02:33:15] at obfuscated.f.a(SourceFile:37)
[2016-08-13 02:33:15] at org.schema.game.server.controller.GameServerController.c(SourceFile:2992)
[2016-08-13 02:33:15] at org.schema.game.common.controller.elements.ManagerContainer.reparseBlockBehavior(SourceFile:294)
[2016-08-13 02:33:15] at org.schema.game.common.controller.elements.ManagerContainer.<init>(SourceFile:194)
[2016-08-13 02:33:15] at org.schema.game.common.controller.elements.ShipManagerContainer.<init>(SourceFile:214)
[2016-08-13 02:33:15] at obfuscated.VP.<init>(SourceFile:146)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.loadEntity(SourceFile:339)
[2016-08-13 02:33:15] at obfuscated.agn.a(SourceFile:1428)
[2016-08-13 02:33:15] at obfuscated.agn.a(SourceFile:1400)
[2016-08-13 02:33:15] at obfuscated.agn.a(SourceFile:1287)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.loadOrGenerateSector(SourceFile:951)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.getSector(SourceFile:647)
[2016-08-13 02:33:15] at org.schema.game.common.data.world.Universe.getSector(SourceFile:641)
[2016-08-13 02:33:15] at org.schema.game.server.controller.GameServerController.onLoggedIn(SourceFile:1734)
[2016-08-13 02:33:15] at org.schema.schine.network.server.ServerController.registerClient(SourceFile:148)
[2016-08-13 02:33:15] at org.schema.schine.network.commands.LoginRequest.login(SourceFile:95)
[2016-08-13 02:33:15] at org.schema.schine.network.commands.LoginRequest.run(SourceFile:202)
[2016-08-13 02:33:15] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[2016-08-13 02:33:15] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[2016-08-13 02:33:15] at java.lang.Thread.run(Thread.java:745)
```
Here's what it looked like after installing the hotfix:
```
[2016-08-16 02:56:17] org.schema.common.ConfigParserException: HpConditionTriggerList -> Item; trigger amount must be a positive value in <Amount>
(FixSuggestion: check your xml config files)
[2016-08-16 02:56:17] at obfuscated.US.a(SourceFile:42)
[2016-08-16 02:56:17] at obfuscated.UQ.a(SourceFile:23)
[2016-08-16 02:56:17] at obfuscated.UR.a(SourceFile:34)
[2016-08-16 02:56:17] at org.schema.game.common.controller.elements.UsableElementManager.parse(SourceFile:210)
[2016-08-16 02:56:17] at org.schema.game.common.controller.elements.ManagerContainer.reparseBlockBehavior(SourceFile:284)
[2016-08-16 02:56:17] at org.schema.game.common.controller.elements.ManagerContainer.<init>(SourceFile:194)
[2016-08-16 02:56:17] at org.schema.game.common.controller.elements.ShipManagerContainer.<init>(SourceFile:214)
[2016-08-16 02:56:17] at obfuscated.VP.<init>(SourceFile:146)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.loadEntity(SourceFile:339)
[2016-08-16 02:56:17] at obfuscated.agn.a(SourceFile:1428)
[2016-08-16 02:56:17] at obfuscated.agn.a(SourceFile:1400)
[2016-08-16 02:56:17] at obfuscated.agn.a(SourceFile:1287)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.loadOrGenerateSector(SourceFile:951)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.getSector(SourceFile:647)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.getSector(SourceFile:641)
[2016-08-16 02:56:17] at org.schema.game.server.controller.GameServerController.onLoggedIn(SourceFile:1734)
[2016-08-16 02:56:17] at org.schema.schine.network.server.ServerController.registerClient(SourceFile:148)
[2016-08-16 02:56:17] at org.schema.schine.network.commands.LoginRequest.login(SourceFile:95)
[2016-08-16 02:56:17] at org.schema.schine.network.commands.LoginRequest.run(SourceFile:202)
[2016-08-16 02:56:17] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[2016-08-16 02:56:17] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[2016-08-16 02:56:17] at java.lang.Thread.run(Thread.java:745)
[2016-08-16 02:56:17] java.io.FileNotFoundException: /home/starmade/starmade-new_and_working_but_very_buggy/StarMade/./data/config/revertBlockBehaviorConfig.xml (No such file or directory)
[2016-08-16 02:56:17] at java.io.FileInputStream.open0(Native Method)
[2016-08-16 02:56:17] at java.io.FileInputStream.open(FileInputStream.java:195)
[2016-08-16 02:56:17] at java.io.FileInputStream.<init>(FileInputStream.java:138)
[2016-08-16 02:56:17] at java.io.FileInputStream.<init>(FileInputStream.java:93)
[2016-08-16 02:56:17] at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
[2016-08-16 02:56:17] at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
[2016-08-16 02:56:17] at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623)
[2016-08-16 02:56:17] at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
[2016-08-16 02:56:17] at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
[2016-08-16 02:56:17] at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
[2016-08-16 02:56:17] at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
[2016-08-16 02:56:17] at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
[2016-08-16 02:56:17] at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
[2016-08-16 02:56:17] at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
[2016-08-16 02:56:17] at obfuscated.f.a(SourceFile:37)
[2016-08-16 02:56:17] at org.schema.game.server.controller.GameServerController.c(SourceFile:2992)
[2016-08-16 02:56:17] at org.schema.game.common.controller.elements.ManagerContainer.reparseBlockBehavior(SourceFile:294)
[2016-08-16 02:56:17] at org.schema.game.common.controller.elements.ManagerContainer.<init>(SourceFile:194)
[2016-08-16 02:56:17] at org.schema.game.common.controller.elements.ShipManagerContainer.<init>(SourceFile:214)
[2016-08-16 02:56:17] at obfuscated.VP.<init>(SourceFile:146)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.loadEntity(SourceFile:339)
[2016-08-16 02:56:17] at obfuscated.agn.a(SourceFile:1428)
[2016-08-16 02:56:17] at obfuscated.agn.a(SourceFile:1400)
[2016-08-16 02:56:17] at obfuscated.agn.a(SourceFile:1287)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.loadOrGenerateSector(SourceFile:951)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.getSector(SourceFile:647)
[2016-08-16 02:56:17] at org.schema.game.common.data.world.Universe.getSector(SourceFile:641)
[2016-08-16 02:56:17] at org.schema.game.server.controller.GameServerController.onLoggedIn(SourceFile:1734)
[2016-08-16 02:56:17] at org.schema.schine.network.server.ServerController.registerClient(SourceFile:148)
[2016-08-16 02:56:17] at org.schema.schine.network.commands.LoginRequest.login(SourceFile:95)
[2016-08-16 02:56:17] at org.schema.schine.network.commands.LoginRequest.run(SourceFile:202)
[2016-08-16 02:56:17] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[2016-08-16 02:56:17] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[2016-08-16 02:56:17] at java.lang.Thread.run(Thread.java:745)
[2016-08-16 02:56:17] ON CLIENT: false
```
Here is another example:
```
[2016-08-15 04:06:31] ON CLIENT: false
[2016-08-15 04:06:31] java.lang.NullPointerException
[2016-08-15 04:06:31] at org.schema.game.common.controller.elements.UsableElementManager.parse(SourceFile:154)
[2016-08-15 04:06:31] at org.schema.game.common.controller.elements.ManagerContainer.reparseBlockBehavior(SourceFile:284)
[2016-08-15 04:06:31] at org.schema.game.common.controller.elements.ManagerContainer.<init>(SourceFile:194)
[2016-08-15 04:06:31] at org.schema.game.common.controller.elements.ShipManagerContainer.<init>(SourceFile:214)
[2016-08-15 04:06:31] at obfuscated.VP.<init>(SourceFile:146)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.loadEntity(SourceFile:339)
[2016-08-15 04:06:31] at obfuscated.agn.a(SourceFile:1428)
[2016-08-15 04:06:31] at obfuscated.agn.a(SourceFile:1400)
[2016-08-15 04:06:31] at obfuscated.agn.a(SourceFile:1287)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.loadOrGenerateSector(SourceFile:951)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.getSector(SourceFile:647)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.getSector(SourceFile:641)
[2016-08-15 04:06:31] at org.schema.game.server.controller.GameServerController.onLoggedIn(SourceFile:1734)
[2016-08-15 04:06:31] at org.schema.schine.network.server.ServerController.registerClient(SourceFile:148)
[2016-08-15 04:06:31] at org.schema.schine.network.commands.LoginRequest.login(SourceFile:95)
[2016-08-15 04:06:31] at org.schema.schine.network.commands.LoginRequest.run(SourceFile:202)
[2016-08-15 04:06:31] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[2016-08-15 04:06:31] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[2016-08-15 04:06:31] at java.lang.Thread.run(Thread.java:745)
[2016-08-15 04:06:31] java.io.FileNotFoundException: /home/starmade/starmade-new_and_working_but_very_buggy/StarMade/./data/config/revertBlockBehaviorConfig.xml (No such file or directory)
[2016-08-15 04:06:31] at java.io.FileInputStream.open0(Native Method)
[2016-08-15 04:06:31] at java.io.FileInputStream.open(FileInputStream.java:195)
[2016-08-15 04:06:31] at java.io.FileInputStream.<init>(FileInputStream.java:138)
[2016-08-15 04:06:31] at java.io.FileInputStream.<init>(FileInputStream.java:93)
[2016-08-15 04:06:31] at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
[2016-08-15 04:06:31] at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
[2016-08-15 04:06:31] at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:623)
[2016-08-15 04:06:31] at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
[2016-08-15 04:06:31] at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
[2016-08-15 04:06:31] at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
[2016-08-15 04:06:31] at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
[2016-08-15 04:06:31] at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
[2016-08-15 04:06:31] at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
[2016-08-15 04:06:31] at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
[2016-08-15 04:06:31] at obfuscated.f.a(SourceFile:37)
[2016-08-15 04:06:31] at org.schema.game.server.controller.GameServerController.c(SourceFile:2992)
[2016-08-15 04:06:31] at org.schema.game.common.controller.elements.ManagerContainer.reparseBlockBehavior(SourceFile:294)
[2016-08-15 04:06:31] at org.schema.game.common.controller.elements.ManagerContainer.<init>(SourceFile:194)
[2016-08-15 04:06:31] at org.schema.game.common.controller.elements.ShipManagerContainer.<init>(SourceFile:214)
[2016-08-15 04:06:31] at obfuscated.VP.<init>(SourceFile:146)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.loadEntity(SourceFile:339)
[2016-08-15 04:06:31] at obfuscated.agn.a(SourceFile:1428)
[2016-08-15 04:06:31] at obfuscated.agn.a(SourceFile:1400)
[2016-08-15 04:06:31] at obfuscated.agn.a(SourceFile:1287)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.loadOrGenerateSector(SourceFile:951)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.getSector(SourceFile:647)
[2016-08-15 04:06:31] at org.schema.game.common.data.world.Universe.getSector(SourceFile:641)
[2016-08-15 04:06:31] at org.schema.game.server.controller.GameServerController.onLoggedIn(SourceFile:1734)
[2016-08-15 04:06:31] at org.schema.schine.network.server.ServerController.registerClient(SourceFile:148)
[2016-08-15 04:06:31] at org.schema.schine.network.commands.LoginRequest.login(SourceFile:95)
[2016-08-15 04:06:31] at org.schema.schine.network.commands.LoginRequest.run(SourceFile:202)
[2016-08-15 04:06:31] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[2016-08-15 04:06:31] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[2016-08-15 04:06:31] at java.lang.Thread.run(Thread.java:745)
```
Here are the steps I took to troubleshoot the issue after experiencing the bugs:
1. After the initial update (and before the hotfix came out), the loop error was new. So I attempted to create a new world. This was successful. The world loaded and players could join the server. However, we do not want to do a full world reset, so I continued to troubleshoot.
2. I attempted to start the server again with the our 2 month old world file. It crashed with the same error loop.
3. I disabled all the custom configuration files, with our 2 month old world file. People could now join, but the game was not running stable.
4. I noticed that the "FactionConfig.xml" file said "error" in it's name, like "FactionConfigError.xml". So I went ahead and updated the file based on the "/data/config" folder. I also re-enabled the other custom config files, since they did not have an "error" in their names.
5. I attempted to run the server again, and the same loop of errors happened.
6. I created a completely fresh install with version 20160812_205821 v0.199.152 (this was before the hotfix version). I added blueprints, the established world file, and other settings files, except the custom configuration files.
7. I attempted to run the server, without the custom configuration files, and it ran with our old world file.
8. I completely rebuilt all the custom configuration files using the "/data/config" files from the fresh install as the basis. I whittled them down to only the settings I wished to change, being careful not to mess up the data structures of the XML files. New copies of the "FactionConfig.xml," "BlockConfigImport.xml," and "customBlockBehaviorConfig.xml" files were created and I placed them in the appropriate directories within the StarMade folder.
9. I started the server again, and the same type of java error loop happened.
10. I disabled all the custom config files and attempted to start the server. It worked and players could join.
11. I ran the update for the server and upgraded to 20160814_215551 v0.199.152.
12. I ran the server without the custom config files, and players could join.
13. I rebuild all the custom config files again with the files found in the "/data/config" folder and the same bug happened. To reiterate the bug, everything looks fine upon startup until a player logs in, then an endless java error loop occurs.
14. I disabled all but one of the configuration files. I determined that the server could run with the custom block config and the custom faction config files enabled, but NOT the "customBlockBehaviorConfig.xml" file.
15. I simply took the "blockBehaviorConfig.xml" file from the "/data/config/" folder and placed a copy into the "StarMade/customBlockBehaviorConfig/" folder, renaming it, "customBlockBehaviorConfig.xml". I made absolutely no changes to the file whatsoever, to rule out any possibility of a mistake of my own doing in the custom config file (even though I had already completely rebuild it twice and looked it over several times to ensure it was right.)
16. I attempted to run the server again, and it had the same kind of java crash loop still!
17. I attempted to simplify the unaltered copy of the "blockBehaviorConfig.xml" file, to only include the first set of options. It looks like this:
```
<BlockBehavior>
<General>
<BasicValues>
<DefensiveEffectMaxPercentMassMult>10</DefensiveEffectMaxPercentMassMult> <!-- multiplication of mass used as max percent for defensive effects: ratio = effectBlockCount / (mass*DefensiveEffectMaxPercentMassMult)-->
<ShieldExtraCapacityMultPerUnit>1</ShieldExtraCapacityMultPerUnit> <!-- totalUnitShieldRecharge = (unitSize*ShieldExtraRechargeMultPerUnit) -->
<ShieldExtraRechargeMultPerUnit>1</ShieldExtraRechargeMultPerUnit> <!-- shieldCapacity = ((totalUnitShieldCapacity*ShieldCapacityPreMul)^ShieldCapacityPow)*ShieldCapacityTotalMul -->
<ShieldDoInitialWithoutFromCore>true</ShieldDoInitialWithoutFromCore> <!-- if true, the ship will have initial shields without any shield blocks. if false, the initial values are added when the first shield block is placed -->
<ShieldCapacityInitial>220</ShieldCapacityInitial> <!-- initial shield capacity on ships without shieldCapacity blocks -->
<ShieldRechargeInitial>0</ShieldRechargeInitial> <!-- initial shield recharge on ships without shieldRecharge blocks -->
<ShieldCapacityPow>0.9791797578</ShieldCapacityPow>
<ShieldCapacityPreMul>1.0</ShieldCapacityPreMul>
<ShieldCapacityTotalMul>110</ShieldCapacityTotalMul> <!-- shieldCapacity = ((totalUnitShieldCapacity*ShieldCapacityPreMul)^ShieldCapacityPow)*ShieldCapacityTotalMul -->
<ShieldRechargePow>1.0</ShieldRechargePow> <!-- shieldCapacity = ((totalUnitShieldCapacity*1.0)^0.9)*55 -->
<ShieldRechargePreMul>1.0</ShieldRechargePreMul>
<ShieldRechargeTotalMul>5.5</ShieldRechargeTotalMul>
<ShieldRechargeCycleTime>1.0</ShieldRechargeCycleTime> <!-- time in secs between recharge cycles. This value is relative, so changing it won't affect the time a ship needs to fully recharge (e.g. twice as many cycles -> half as many reacharge per cycle)-->
<ShieldRecoveryTimeAfterOutage>10</ShieldRecoveryTimeAfterOutage> <!-- time, the shield will not recharge after reaching 0 -->
<ShieldDirectRecoveryTime>60</ShieldDirectRecoveryTime> <!-- this time is set to the value gives after each hit sustained. In direct recovery, <ShieldRecoveryMultPerPercent> is applied. Otherwise it's running on full recharge -->
<ShieldRecoveryMultPerPercent>0.5</ShieldRecoveryMultPerPercent> <!-- MAX % at high health - in direct recovery, the shield recharge will be multiplied by (1-((shield/max)*thisValue));-->
<ShieldRecoveryMult>0.25</ShieldRecoveryMult> <!-- MAX % at low health - in direct recovery, the shield recharge will be multiplied: recharge = recharge*thisValue;-->
<ShieldRechargePowerConsuption>10</ShieldRechargePowerConsuption> <!-- (when shield < 100%) per regen point -->
<ShieldFullPowerConsuption>1</ShieldFullPowerConsuption> <!-- (when shield == 100%) per regen point -->
<ShieldDockTransferLimit>0.25</ShieldDockTransferLimit> <!-- Up to which fill status a rail docked entity up in the chain (towards root) will take the hit (e.g. 0.25 means that a mothership (and docks inbetween) will take the shots of a turret or other rail dock as long as they have more than 25% of their max shields left -->
<PowerDivFactor>0.333</PowerDivFactor>
<PowerCeiling>2000000.0</PowerCeiling>
<PowerGrowth>1.000348</PowerGrowth>
<PowerLinearGrowth>25.0</PowerLinearGrowth>
<PowerRecoveryTime>1000</PowerRecoveryTime>
<PowerBaseCapacity>50000</PowerBaseCapacity>
<PowerTankCapacityLinear>1000</PowerTankCapacityLinear> <!-- multiplication per unit -->
<PowerTankCapacityPow>1.05</PowerTankCapacityPow> <!-- unitSize^x per unit -->
<TakeOffEffectPowerConsumptionMult>1</TakeOffEffectPowerConsumptionMult> <!-- multiplied by force -->
<EvadeEffectPowerConsumptionMult>1</EvadeEffectPowerConsumptionMult> <!-- multiplied by force -->
<PersonalSalvageBeamBonus>1.25</PersonalSalvageBeamBonus> <!-- bonus mult of raw resources when salvaging with handheld salvage beam (everything between whole numbers is chance (e.g. 1.25 give 25% chance of an extra raw yield) -->
<RailMassEnhancerFreeMass>50.0</RailMassEnhancerFreeMass> <!-- mass that is free to place without the need of a rail mass enhancer -->
<RailMassEnhancerMassPerEnhancer>5.0</RailMassEnhancerMassPerEnhancer> <!-- how much mass is free to place for each rail mass enhancer in the structure -->
<RailMassEnhancerPowerConsumedPerEnhancer>50.0</RailMassEnhancerPowerConsumedPerEnhancer> <!-- How much power per second is consumed my rail enhancer blocks -->
<RailMassEnhancerPercentCostPerMassAboveEnhancerProvided>0.05</RailMassEnhancerPercentCostPerMassAboveEnhancerProvided> <!-- how much % of mass speed (between 0 and 1) is subtracted for every one mass placed on a dock that is above the current mass limit (free blocks + enhancers) (e.g. at 0.1, for every block placed the speed is one percent slower)-->
<PlanetPowerBaseCapacity>500</PlanetPowerBaseCapacity>
<AsteroidPowerBaseCapacity>500</AsteroidPowerBaseCapacity>
<StructureHpBlockMultiplier>1.0</StructureHpBlockMultiplier> <!-- how much of the hp value is added to the systemHP -->
<HpDeductionLogOffset>-5</HpDeductionLogOffset>
<HpDeductionLogFactor>0.7</HpDeductionLogFactor> <!-- deducted hit points on damage: blockHP + HpDeductionLogFactor*(max(0, log10(maxHP)+HpDeductionLogOffset)) * blockHP -->
<ShipRebootTimeInSecPerMissingHpPercent>40.0</ShipRebootTimeInSecPerMissingHpPercent> <!-- on 0% hp, the full value in seconds is needed to reboot -->
<ShipRebootTimeMultiplierPerMass>0.0002</ShipRebootTimeMultiplierPerMass> <!-- secondsToReboot * (mass * ShipRebootTimeMultiplyerPerMass) -->
<ShipRebootTimeMinSec>30.0</ShipRebootTimeMinSec> <!-- Minimum time in secs a reboot will take -->
<ArmorHpAbsorbtion>0.5</ArmorHpAbsorbtion> <!-- absorbedDamageToArmorHP = ArmorHpAbsorbtion; How much damage of a shot can be absorbed to armorHP; this is a static value; set it to 0 if you want to use a dynamic variance instead with ArmorHpDamageThreshold-->
<ArmorHpAbsorbedDamageMultiplier>1.0</ArmorHpAbsorbedDamageMultiplier> <!-- How much absorbed damaged is deducted from armorHP -->
<ArmorHpBlockMultiplier>1.0</ArmorHpBlockMultiplier> <!-- how much of the armor value is added to the armorHP -->
<ArmorHpDamageThreshold>1.0</ArmorHpDamageThreshold> <!-- absorbedDamageToArmorHP = (ArmorHpDamageThreshold * [armorhp of the block]) * [current ArmorHp Left On Ship]; Note: this is not used as long as ArmorHpAbsorbtion != 0; This means, a ship wont take damage other than armorHP damage as long as a single shot isn't above the trheshold; -->
<AITurretMinOrientationSpeed>0.5</AITurretMinOrientationSpeed> <!-- Minimum turret orientation speed by mass used by AI (still depends on enhancer) -->
<AITurretMaxOrientationSpeed>3.5</AITurretMaxOrientationSpeed> <!-- Maximum turret orientation speed by mass used by AI (still depends on enhancer) -->
<AITurretOrientationSpeedDivByMass>50.0</AITurretOrientationSpeedDivByMass> <!-- speed = AITurretOrientationSpeedDivByMass / mass -->
<ExplosionShieldDamageBonus>0.0</ExplosionShieldDamageBonus> <!-- all explosions (missile/warhead/pulse) do [damage + damage * bonus] against shields-->
<ExplosionHullDamageBonus>0.0</ExplosionHullDamageBonus> <!-- all explosions (missile/warhead/pulse) do [damage + damage * bonus] against blocks (will also hurt armor more)-->
<VolumeMassMultiplier>0.01</VolumeMassMultiplier> <!-- how much of the volume of an item in an inventory/storage/cargo adds to the mass of a structure -->
<HpConditionTriggerList>
<Item conditionhp="0.9">
<Type>POWER</Type>
<Amount>0.9</Amount>
</Item>
<Item conditionhp="0.9">
<Type>SHIELD</Type>
<Amount>0.9</Amount>
</Item>
<Item conditionhp="0.9">
<Type>THRUST</Type>
<Amount>0.9</Amount>
</Item>
<Item conditionhp="0.8">
<Type>POWER</Type>
<Amount>0.8</Amount>
</Item>
<Item conditionhp="0.8">
<Type>SHIELD</Type>
<Amount>0.8</Amount>
</Item>
<Item conditionhp="0.8">
<Type>THRUST</Type>
<Amount>0.8</Amount>
</Item>
<Item conditionhp="0.7">
<Type>POWER</Type>
<Amount>0.7</Amount>
</Item>
<Item conditionhp="0.7">
<Type>SHIELD</Type>
<Amount>0.7</Amount>
</Item>
<Item conditionhp="0.7">
<Type>THRUST</Type>
<Amount>0.7</Amount>
</Item>
<Item conditionhp="0.6">
<Type>POWER</Type>
<Amount>0.5</Amount>
</Item>
<Item conditionhp="0.6">
<Type>SHIELD</Type>
<Amount>0.5</Amount>
</Item>
<Item conditionhp="0.6">
<Type>THRUST</Type>
<Amount>0.5</Amount>
</Item>
<Item conditionhp="0.55">
<Type>CONTROL_LOSS</Type>
</Item>
<Item conditionhp="0.5">
<Type>OVERHEATING</Type>
</Item>
<Item conditionhp="0.5">
<Type>POWER</Type>
<Amount>0.0</Amount>
</Item>
<Item conditionhp="0.5">
<Type>SHIELD</Type>
<Amount>0.0</Amount>
</Item>
<Item conditionhp="0.5">
<Type>THRUST</Type>
<Amount>0.5</Amount>
</Item>
</HpConditionTriggerList>
</BasicValues>
</General>
</BlockBehavior>
```
18. I started the server again. It started like normal. When I tried to connect, it gave the same kind of java error loop, but with the "[2016-08-16 02:56:17] org.schema.common.ConfigParserException: HpConditionTriggerList -> Item; trigger amount must be a positive value in <Amount>" error included. (This is listed above as one of the examples)
19. I simplified the customBlockBehaviorConfig.xml file further to be merely:
```
<BlockBehavior>
<General>
<BasicValues>
<DefensiveEffectMaxPercentMassMult>10</DefensiveEffectMaxPercentMassMult> <!-- multiplication of mass used as max percent for defensive effects: ratio = effectBlockCount / (mass*DefensiveEffectMaxPercentMassMult)-->
</BasicValues>
</General>
</BlockBehavior>
```
20. This actually started.
21. So I shut down the server normally. And decided to change the customBlockBehaviorConfig.xml file to make it a bit larger but cut out the part with the "StructureHpBlockMultiplier" settings.:
```
<BlockBehavior>
<General>
<BasicValues>
<DefensiveEffectMaxPercentMassMult>10</DefensiveEffectMaxPercentMassMult> <!-- multiplication of mass used as max percent for defensive effects: ratio = effectBlockCount / (mass*DefensiveEffectMaxPercentMassMult)-->
<ShieldExtraCapacityMultPerUnit>1</ShieldExtraCapacityMultPerUnit> <!-- totalUnitShieldRecharge = (unitSize*ShieldExtraRechargeMultPerUnit) -->
<ShieldExtraRechargeMultPerUnit>1</ShieldExtraRechargeMultPerUnit> <!-- shieldCapacity = ((totalUnitShieldCapacity*ShieldCapacityPreMul)^ShieldCapacityPow)*ShieldCapacityTotalMul -->
<ShieldDoInitialWithoutFromCore>true</ShieldDoInitialWithoutFromCore> <!-- if true, the ship will have initial shields without any shield blocks. if false, the initial values are added when the first shield block is placed -->
<ShieldCapacityInitial>220</ShieldCapacityInitial> <!-- initial shield capacity on ships without shieldCapacity blocks -->
<ShieldRechargeInitial>0</ShieldRechargeInitial> <!-- initial shield recharge on ships without shieldRecharge blocks -->
<ShieldCapacityPow>0.9791797578</ShieldCapacityPow>
<ShieldCapacityPreMul>1.0</ShieldCapacityPreMul>
<ShieldCapacityTotalMul>110</ShieldCapacityTotalMul> <!-- shieldCapacity = ((totalUnitShieldCapacity*ShieldCapacityPreMul)^ShieldCapacityPow)*ShieldCapacityTotalMul -->
<ShieldRechargePow>1.0</ShieldRechargePow> <!-- shieldCapacity = ((totalUnitShieldCapacity*1.0)^0.9)*55 -->
<ShieldRechargePreMul>1.0</ShieldRechargePreMul>
<ShieldRechargeTotalMul>5.5</ShieldRechargeTotalMul>
<ShieldRechargeCycleTime>1.0</ShieldRechargeCycleTime> <!-- time in secs between recharge cycles. This value is relative, so changing it won't affect the time a ship needs to fully recharge (e.g. twice as many cycles -> half as many reacharge per cycle)-->
<ShieldRecoveryTimeAfterOutage>10</ShieldRecoveryTimeAfterOutage> <!-- time, the shield will not recharge after reaching 0 -->
<ShieldDirectRecoveryTime>60</ShieldDirectRecoveryTime> <!-- this time is set to the value gives after each hit sustained. In direct recovery, <ShieldRecoveryMultPerPercent> is applied. Otherwise it's running on full recharge -->
<ShieldRecoveryMultPerPercent>0.5</ShieldRecoveryMultPerPercent> <!-- MAX % at high health - in direct recovery, the shield recharge will be multiplied by (1-((shield/max)*thisValue));-->
<ShieldRecoveryMult>0.25</ShieldRecoveryMult> <!-- MAX % at low health - in direct recovery, the shield recharge will be multiplied: recharge = recharge*thisValue;-->
<ShieldRechargePowerConsuption>10</ShieldRechargePowerConsuption> <!-- (when shield < 100%) per regen point -->
<ShieldFullPowerConsuption>1</ShieldFullPowerConsuption> <!-- (when shield == 100%) per regen point -->
<ShieldDockTransferLimit>0.25</ShieldDockTransferLimit> <!-- Up to which fill status a rail docked entity up in the chain (towards root) will take the hit (e.g. 0.25 means that a mothership (and docks inbetween) will take the shots of a turret or other rail dock as long as they have more than 25% of their max shields left -->
<PowerDivFactor>0.333</PowerDivFactor>
<PowerCeiling>2000000.0</PowerCeiling>
<PowerGrowth>1.000348</PowerGrowth>
<PowerLinearGrowth>25.0</PowerLinearGrowth>
<PowerRecoveryTime>1000</PowerRecoveryTime>
<PowerBaseCapacity>50000</PowerBaseCapacity>
<PowerTankCapacityLinear>1000</PowerTankCapacityLinear> <!-- multiplication per unit -->
<PowerTankCapacityPow>1.05</PowerTankCapacityPow> <!-- unitSize^x per unit -->
<TakeOffEffectPowerConsumptionMult>1</TakeOffEffectPowerConsumptionMult> <!-- multiplied by force -->
<EvadeEffectPowerConsumptionMult>1</EvadeEffectPowerConsumptionMult> <!-- multiplied by force -->
<PersonalSalvageBeamBonus>1.25</PersonalSalvageBeamBonus> <!-- bonus mult of raw resources when salvaging with handheld salvage beam (everything between whole numbers is chance (e.g. 1.25 give 25% chance of an extra raw yield) -->
<RailMassEnhancerFreeMass>50.0</RailMassEnhancerFreeMass> <!-- mass that is free to place without the need of a rail mass enhancer -->
<RailMassEnhancerMassPerEnhancer>5.0</RailMassEnhancerMassPerEnhancer> <!-- how much mass is free to place for each rail mass enhancer in the structure -->
<RailMassEnhancerPowerConsumedPerEnhancer>50.0</RailMassEnhancerPowerConsumedPerEnhancer> <!-- How much power per second is consumed my rail enhancer blocks -->
<RailMassEnhancerPercentCostPerMassAboveEnhancerProvided>0.05</RailMassEnhancerPercentCostPerMassAboveEnhancerProvided> <!-- how much % of mass speed (between 0 and 1) is subtracted for every one mass placed on a dock that is above the current mass limit (free blocks + enhancers) (e.g. at 0.1, for every block placed the speed is one percent slower)-->
<PlanetPowerBaseCapacity>500</PlanetPowerBaseCapacity>
<AsteroidPowerBaseCapacity>500</AsteroidPowerBaseCapacity>
<StructureHpBlockMultiplier>1.0</StructureHpBlockMultiplier> <!-- how much of the hp value is added to the systemHP -->
<HpDeductionLogOffset>-5</HpDeductionLogOffset>
<HpDeductionLogFactor>0.7</HpDeductionLogFactor> <!-- deducted hit points on damage: blockHP + HpDeductionLogFactor*(max(0, log10(maxHP)+HpDeductionLogOffset)) * blockHP -->
<ShipRebootTimeInSecPerMissingHpPercent>40.0</ShipRebootTimeInSecPerMissingHpPercent> <!-- on 0% hp, the full value in seconds is needed to reboot -->
<ShipRebootTimeMultiplierPerMass>0.0002</ShipRebootTimeMultiplierPerMass> <!-- secondsToReboot * (mass * ShipRebootTimeMultiplyerPerMass) -->
<ShipRebootTimeMinSec>30.0</ShipRebootTimeMinSec> <!-- Minimum time in secs a reboot will take -->
<ArmorHpAbsorbtion>0.5</ArmorHpAbsorbtion> <!-- absorbedDamageToArmorHP = ArmorHpAbsorbtion; How much damage of a shot can be absorbed to armorHP; this is a static value; set it to 0 if you want to use a dynamic variance instead with ArmorHpDamageThreshold-->
<ArmorHpAbsorbedDamageMultiplier>1.0</ArmorHpAbsorbedDamageMultiplier> <!-- How much absorbed damaged is deducted from armorHP -->
<ArmorHpBlockMultiplier>1.0</ArmorHpBlockMultiplier> <!-- how much of the armor value is added to the armorHP -->
<ArmorHpDamageThreshold>1.0</ArmorHpDamageThreshold> <!-- absorbedDamageToArmorHP = (ArmorHpDamageThreshold * [armorhp of the block]) * [current ArmorHp Left On Ship]; Note: this is not used as long as ArmorHpAbsorbtion != 0; This means, a ship wont take damage other than armorHP damage as long as a single shot isn't above the trheshold; -->
<AITurretMinOrientationSpeed>0.5</AITurretMinOrientationSpeed> <!-- Minimum turret orientation speed by mass used by AI (still depends on enhancer) -->
<AITurretMaxOrientationSpeed>3.5</AITurretMaxOrientationSpeed> <!-- Maximum turret orientation speed by mass used by AI (still depends on enhancer) -->
<AITurretOrientationSpeedDivByMass>50.0</AITurretOrientationSpeedDivByMass> <!-- speed = AITurretOrientationSpeedDivByMass / mass -->
<ExplosionShieldDamageBonus>0.0</ExplosionShieldDamageBonus> <!-- all explosions (missile/warhead/pulse) do [damage + damage * bonus] against shields-->
<ExplosionHullDamageBonus>0.0</ExplosionHullDamageBonus> <!-- all explosions (missile/warhead/pulse) do [damage + damage * bonus] against blocks (will also hurt armor more)-->
<VolumeMassMultiplier>0.01</VolumeMassMultiplier> <!-- how much of the volume of an item in an inventory/storage/cargo adds to the mass of a structure -->
</BasicValues>
</General>
</BlockBehavior>
```
22. This worked! Ok, so it seemed we were getting somewhere.
23. I then loaded a copy of the ENTIRE unchanged BlockBehaviorConfig.xml file from the "/data/config" folder, then changed the figures we need changed for our server, which includes some changes to settings for jump drives, just drive inhibitors, cargo, etc. I also cut out the settings for "StructureHpBlockMultiplier," since that seemed to be giving us trouble.
24. This worked! The server was running! So, I decided to check to ensure the settings were actually applied AND THEY WERE!
So, this seems to allow the server to boot now, however, I cannot explain the other two java errors which were extremely similar.
A. Where the "java.lang.NullPointerException" error was paired with the "java.io.FileNotFoundException:" error for the revertBlockBehaviorConfig.xml.
B. Where the "ava.lang.IllegalArgumentException: No enum constant obfuscated.YF.STATUS_ARMOR_HP_ABSORBTION_BONUS" error was paired with the revertBlockBehaviorConfig.xml error.