Tweaker.setScriptStage("BIOME_REGISTRY") throws error
RiverC opened this issue ยท 14 comments
Based on the recommendation from the wiki I tried this:
Tweaker.setScriptStage("BIOME_REGISTRY")
Tweaker.createBiome("larch_forest", "minecraft:birch_forest")
larchForest = forBiomes("biometweaker:larch_forest")
larchForest.addDicType("LARCH_TREES")
However, it fails. Here's the what I got:
Environment info:
[22:55:07] [main/INFO] [FML/]: Forge Mod Loader version 14.23.1.2560 for Minecraft 1.12.2 loading
[22:55:07] [main/INFO] [FML/]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_25, running on Windows 10:amd64:10.0, installed at C:\Program Files (x86)\Minecraft\runtime\jre-x64\1.8.0_25
I'm using the latest IVToolkit + RecurrentComplex with the latest Forestry. Other than that it's just BiomeTweaker (latest) and BiomeTweakerCore (latest.) If you need specific version numbers I can provide.
Error log:
[22:55:18] [main/INFO] [biometweaker/biometweaker]: Beginning script parsing...
[22:55:18] [main/ERROR] [SuperScript/biometweaker]: Failed to execute script command: me.superckl.biometweaker.script.command.misc.ScriptCommandSetScriptStage@cce1aeb
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: java.lang.IllegalArgumentException: No enum constant me.superckl.api.superscript.ApplicationStage.BIOME_REGISTRY
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at java.lang.Enum.valueOf(Enum.java:238)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.api.superscript.ApplicationStage.valueOf(ApplicationStage.java:5)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.biometweaker.script.command.misc.ScriptCommandSetScriptStage.perform(ScriptCommandSetScriptStage.java:20)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.api.superscript.script.command.BasicScriptCommandManager.addCommand(BasicScriptCommandManager.java:33)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.api.superscript.script.command.BasicScriptCommandManager.addCommand(BasicScriptCommandManager.java:24)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.biometweaker.BiomeTweaker.addCommand(BiomeTweaker.java:383)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.biometweaker.script.object.TweakerScriptObject.addCommand(TweakerScriptObject.java:11)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.api.superscript.script.object.ScriptObject.handleCall(ScriptObject.java:47)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.api.superscript.script.ScriptHandler.parse(ScriptHandler.java:64)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.api.superscript.script.ScriptParser.parseScriptFile(ScriptParser.java:49)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.biometweaker.BiomeTweaker.parseScript(BiomeTweaker.java:178)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.biometweaker.BiomeTweaker.parseScripts(BiomeTweaker.java:160)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at me.superckl.biometweaker.BiomeTweaker.onPreInit(BiomeTweaker.java:134)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at java.lang.reflect.Method.invoke(Method.java:483)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:606)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at java.lang.reflect.Method.invoke(Method.java:483)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.EventBus.post(EventBus.java:217)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:253)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:231)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at java.lang.reflect.Method.invoke(Method.java:483)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at com.google.common.eventbus.EventBus.post(EventBus.java:217)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:148)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:602)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:270)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:466)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:377)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraft.client.main.Main.main(SourceFile:123)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at java.lang.reflect.Method.invoke(Method.java:483)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
[22:55:18] [main/INFO] [STDERR/biometweaker]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:addCommand:36]: at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
[22:55:18] [main/INFO] [biometweaker/biometweaker]: Finished script parsing.
[22:55:18] [main/DEBUG] [biometweaker/biometweaker]: Script parsing took 21ms.
[22:55:18] [main/DEBUG] [FML/biometweaker]: Bar Step: BiomeTweaker PreInitialization - Parsing scripts took 0.022s
It looks like although the wiki recommends to use that stage, it's not part of the enumeration and thus can't be used. Been fooling around with crafting variant biomes with biometweaker and recurrent complex, would be nice to see this working. I'll be trying a few other things, but I wanted to let you know that the advice from the wiki SEEMS to cause an error.
Thanks!
Please update the 1.12 version of the mod on Curse. The important fixes to activate the new BIOME REGISTRY phase is not there yet.
@superckl
3.1.306
Thanks a lot! One further question - are comments allowed in the scripts, and if so, what is the mark used to indicate them.
where is this build server? Maybe the latest version fixes my issue
edit: never mind, I found it :)
http://jenkins.superckl.me/job/BiomeTweaker%201.12/lastStableBuild/
Something more, using the latest from the build server (3.1.311
)
Here is my script
Tweaker.setScriptStage("BIOME_REGISTRY")
Tweaker.createBiome("larch_forest", "minecraft:birch_forest")
larchForest = forBiomes("biometweaker:larch_forest")
larchForest.set("name","Larch Forest")
larchForest.addDicType("LARCH_TREES")
Here is the error I get
[13:16:58] [main/INFO] [SuperScript/]: Found 5 tweaks to apply for stage BIOME_REGISTRY. Applying...
[13:16:58] [main/WARN] [biometweaker/]: Unable to copy biome class net.minecraft.world.biome.BiomeForest! Some functionality may not be copied!
[13:16:58] [main/ERROR] [SuperScript/]: Failed to execute script command: me.superckl.biometweaker.script.command.generation.ScriptCommandAddBiome@3516b79e
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: java.lang.IllegalStateException: Unable to find field waterColor in class net.minecraft.world.biome.Biome
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at me.superckl.api.biometweaker.property.PropertyField.verifyField(PropertyField.java:56)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at me.superckl.api.biometweaker.property.PropertyField.get(PropertyField.java:34)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at me.superckl.api.biometweaker.property.Property.copy(Property.java:23)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at me.superckl.biometweaker.script.command.generation.ScriptCommandAddBiome.perform(ScriptCommandAddBiome.java:81)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at me.superckl.api.superscript.script.command.BasicScriptCommandManager.applyCommandsFor(BasicScriptCommandManager.java:50)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at me.superckl.biometweaker.common.handler.RegistryEventHandler.onBiomeRegistry(RegistryEventHandler.java:17)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_32_RegistryEventHandler_onBiomeRegistry_Register.invoke(.dynamic)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraftforge.fml.common.eventhandler.EventBus$1.invoke(EventBus.java:143)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:179)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraftforge.registries.GameData.fireRegistryEvents(GameData.java:746)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraftforge.fml.common.Loader.preinitializeMods(Loader.java:603)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraftforge.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:270)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraft.client.Minecraft.func_71384_a(Minecraft.java:466)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraft.client.Minecraft.func_99999_d(Minecraft.java:377)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraft.client.main.Main.main(SourceFile:123)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at java.lang.reflect.Method.invoke(Method.java:483)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
[13:16:58] [main/INFO] [STDERR/]: [me.superckl.api.superscript.script.command.BasicScriptCommandManager:applyCommandsFor:53]: at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
When I run RecurrentComplex's #biome types biometweaker:larch_forest it tells me PLAINS is the only type.
Given water color is generally handled by BiomeTweakerCore, I checked and I have the most recent version from the build server - 1.0.22
.
There seem to be a number of things that need to wait for later. Creating a new biome requires at least two stages.
For example, this is my script for a hell-like biome for Advanced Rocketry:
Tweaker.setScriptStage("BIOME_REGISTRY")
Tweaker.createBiome("surface_hell", "minecraft:hell")
surface_hell = forBiomes("biometweaker:surface_hell")
surface_hell.set("name", "Hell Surface")
surface_hell.addDicType("HOT")
surface_hell.addDicType("DRY")
surface_hell.addDicType("NETHER")
surface_hell.set("genStrongholds", true)
surface_hell.set("lakewaterPerChunk", "0")
surface_hell.set("lakelavaPerChunk", "16")
surface_hell.set("sandPerChunk", "4")
surface_hell.set("shroomPerChunk", "4")
Tweaker.setScriptStage("POST_INIT")
surface_hell = forBiomes("biometweaker:surface_hell")
#surface_hell.inheritProperties("minecraft:hell", "topBlock", "fillerBlock", "height", "heightVariation", "temperature", "humidity", "enableRain", "enableSnow", "skyColor")
surface_hell.addDicType("HOT")
surface_hell.addDicType("DRY")
surface_hell.addDicType("NETHER")
surface_hell.addActualFillerBlock("minecraft:netherrack")
surface_hell.registerGenBlockRep(1, "minecraft:stone", "minecraft:netherrack")
surface_hell.registerGenBlockRep(1, "minecraft:water", "minecraft:lava")
surface_hell.set("liquidFillerBlock", "minecraft:lava")
surface_hell.addSpawn("net.minecraft.entity.monster.EntityBlaze", "MONSTER", 75, 4, 4)
surface_hell.addSpawn("net.minecraft.entity.monster.EntityWitherSkeleton", "MONSTER", 50, 4, 4)
surface_hell.addSpawn("net.minecraft.entity.monster.EntitySkeleton", "MONSTER", 100, 4, 4)
Right, but if you observe the actual error generated, it's on createBiome, which is (regardless) done at the right time.
EDIT: As you noted there is a second error generated for adding the biome dictionary type, but it looks like it is caused by the initial failure making the biome not exist; since it is a NullPointerException.
The forest biome is one that cannot be copied currently. The same biome class is used for many different things and uses internal data to distinguish the types. I'll have to add that in a future update.
There isn't really another one that will give you what you want. I'll have to expand the createBiome command a bit to be able to include data such as forest type...