I'm already using Custom Mob Spawner to manage Mo' Creatures, and I've customized it a lot to account for all of my added mobs and biomes. I'm very happy with how it handles chunk spawns and ambient spawns, but not necessarily with my lack of control when it comes to structure spawns. So...
Can I adjust which mobs which are associated with Vanilla structures using JAS while leaving the biome-specific spawning behavior of CMS intact?
Can I adjust the behavior of spawners like those found in other structures mods, like Ruins mod? I don't mind editing the vanilla Spider, Skeleton or Creeper spawners to turn then into "Random Monster Spawners" as long as I can choose the set of eligible monster spawns.
I've read the JAS wiki but I'm still unclear on whether this is possible. Thanks for your help!
Can I adjust the behavior of spawners like those found in other structures mods, like Ruins mod? I don't mind editing the vanilla Spider, Skeleton or Creeper spawners to turn then into "Random Monster Spawners" as long as I can choose the set of eligible monster spawns.
JAS v0.3.0 Changelog
- LivingHandler Format Change. Adds many additional settings for Spawning and Despoawning conditions. See: Wiki Page
- Twilight Forest Structure Support Added
- Spawnlist entries generated independently of shouldSpawn toggle. Still won't be added to spawnList if false.
- Add Config options to disable doMobSpawning gamerule on server start. False by default.
- Add Config options to empty vanilla spawnLists on server start. False by default.
- Add Config options to empty vanilla spawnLists on server start. False by default.
Question, what exactly does this do? Is this in regards to the structure-specific spawn lists in order to disable vanilla from spawning anything in structures; or something else entirely?
Question, what exactly does this do? Is this in regards to the structure-specific spawn lists in order to disable vanilla from spawning anything in structures; or something else entirely?
It grabs every biome's spawnlists (for monster, ambient, watercreature, and creature) and clears it. It won't stop structure spawns. But settings the spawning gamerule to false will stop that.
doMobSpawning - stops all mob vanilla spawning except chunk spawning.
clearspawnlist - Stops all mob vanilla spawning except structure spawns.
Its odd Minecraft doesn't have 1 toggle to stop all of them.
I just looked at the new options. Holy moly! Did you find the MC rosetta stone or something? I am impressed. The amount of things that can be done with this now...
Rollback Post to RevisionRollBack
The config files are your friends! Get to know them, and shape your world!
It grabs every biome's spawnlists (for monster, ambient, watercreature, and creature) and clears it. It won't stop structure spawns. But settings the spawning gamerule to false will stop that.
doMobSpawning - stops all mob vanilla spawning except chunk spawning.
clearspawnlist - Stops all mob vanilla spawning except structure spawns.
Its odd Minecraft doesn't have 1 toggle to stop all of them.
So if you were to use both options you would effectively stop all vanilla spawns: passive, chunk and structure?
So if you were to use both options you would effectively stop all vanilla spawns: passive, chunk and structure?
Yes, that it is the idea. Note that if you clear the spawnlists that JAS cannot import settings as they do not exist. So run once first in a test world if you're going to use it.
Suggestion One: Along with these new spawn settings what do you think about having another parameter to specify to only spawn with LOS to the sky (surface mobs), only without (underground mobs) or either? I realise that this is currently done via the CreatureType but at the moment the only way to have a non monster mob spawn on the surface and underground is to put them in the ambient type - which isn't really intuitive. It would also mean you could consolidate the opensky and underground CreatureTypes into one.
I do want to add more tags, and I'll be sure to add those. A way to fine tune them per creature would be useful. I don't think I'd combine the creature types, as I see usefullness in having it on a global scale: gaurantees that you don't get too many underground or too many above ground. Eventually you'll be able to add your own categories. (And then eventually with tags).
Feel free to bring up any other settings you can think of.
Suggestion Two: How about adding a 'persist' tag, which would force a mob to not despawn? I noticed in the latest version wiki page it says "Any entity with [the despawning] tag has its persistenceRequired NBT tag set to override regular despawning.". So it could just set that and the vanilla despawner will leave the entity alone, if I am correct? Most mod added mobs are non-despawners but I'd like to have it where the smaller, atmospheric mobs will despawn and the larger mobs will stay. So, for example I know there is a family of gorillas living in a nearby forest that won't disappear as soon as I wander off, but on the other hand I wouldn't expect to see the same butterfly when I come back.
That is usually correct though not strictly speaking gauranteed. Technically it can be overriden by mod entities if they choose to. Though I think its probably rare that anyone would bother, usually a seperate function is overriden "yes I can despawn" and the regular despawning logic is used. I attempted to get a more gauranteed persistence check through forge and was just redirected to the persistence nbt.
Hadn't though of that specifically, though I agree it could be a useful option. Adding the negative of the various options is something I want to do, just haven't hit my head on an implementation I like. The notation i'd want is just to put ! infront of tag; such as !block. Trick it to implement it without feeling clunky.
Regarding forcing mobs to persist, do you think I would be able to 'fake' it in the meantime by adding the tag {despawn:light,0,15}? I believe that would set the persistenceRequired NBT tag but not allow them to despawn if light level is between 0 and 15 (which it always will be, of course).
The only this that worries me about faking like that, is the performance overhead involved with the despawn check. I know it's only every 60 ticks but my laptop is only a poor single core with 2g ram - which is also part of the reason I want to set a few mobs to persist.
It's a fairly simple check, I can't see that effecting your performance significantly. Though the overhead around enabling tags at all might add up, i.e being that straw to your camels back. As with such things, it really comes down testing. I'd think the cost of checking for a new entityt would be more expensive that a persistence check, but its not neccesary an equal trade.
I get 'great' performance when standing still (better than with vanilla spawner, possibly?) but when I am moving around I notice spikes. I figure it's because I have a lot of mobs that are getting despawned/spawned when I move about. So, I was hoping to cut down on that by setting some to persist and then move them to the 'creature' CreatureType with the vanilla animals. Does that make sense to you?
The more entities spawning the more performance overhead is inevitably requried. No entities spawning (assuming they are at the cap), means each loop is significantly shorter. Also note that minecraft behaves differntly on a whole standing still, as certain updates won't run if your standing still (I'm out of my depth at this point, but I believe its the chunks autosaving?). It naturally runs faster when standing still.
If you need performance savings, my first suggestion would be to decrease the spawning frequency of the various categories. The world fills very quickly as is and I've long thought that processing every tick shouldn't be neccesary.
Eventually, I'm likely to make this a coremod, such that certain fields don't need to be accessed via reflection. This should probably offer some minimal performance improvements. But I still need to actually familiarize myself coremods.
Edit: If changing spawnrates try to make sure they are divisible by each other. So that whenever possible they run during the same cycle. This makes it so that certain function, such as counting valid chunks, are only done once for all of them.
Does this mod do away with the need for Custom Mob Spawner? Or are you supposed to use them in conjunction?
I believe either option is valid depending on what you want to achieve. You should be able to disable CMS and do everything through JAS or just use JAS as a supplement to CMS.
Are creatures from the various mods applied to the correct biomes? If so, does that include Biomes O Plenty and ExtraBiomes XL or other mod-added ones?
JAS should import the default settings for each mob from the mod which adds it, so if the mob-mod supports a biome-adding mod such as Biomes O' Plenty / ExtraBiomesXL their default settings for these biomes should be applied (as far as I know).
------
To Crudedragos: I was wondering what (if any) plans you have for grouping / categorizing mobs and biomes? Definitely could be a useful feature if you could, say, group all the 'tropical' biomes together and set the spawn rates for the entire group simultaneously. Also potentially useful would be the ability to group mobs together, for example having a 'vanilla hostile' group which you could have spawn in every biome group and a 'water creature' group which you could have spawn in water-based biomes.
The ability to have mobs / biomes in multiple groups might also be useful: having the skeleton mob in the 'vanilla hostile' and 'undead' groups at the same time, or the plains biome in the 'flatlands' and 'peaceful' biome groups.
Of course the above are (again) just convenience features to make it easier on lazy people like myself.
This sounds like exactly the sort of mod I've been looking for. But I'm having a little trouble wrapping my head around a couple of things.
Does this mod do away with the need for Custom Mob Spawner? Or are you supposed to use them in conjunction?
Are creatures from the various mods applied to the correct biomes? If so, does that include Biomes O Plenty and ExtraBiomes XL or other mod-added ones?
JAS can spawn mobs that are recognized in Custom Mob Spawner, but CMS will still need to be installed (just disabled) for Mo'Creatures to work. It shouldn't have to be that way, but it is.
When you add JAS and load up your world, it makes a config for vanilla and each mod that adds mobs. The entire list is disabled by default and you have to go in and enable each mob you want. You then load the world again, and JAS makes a biome list adding each enabled mob. The vanilla mobs in each biome come with preset spawn rates, but that's not always the case for all mods.
You will find that many of the mobs will need their spawn rates set for mod-added biomes.
EDIT: SageEthereal above said it best. If the mob-mod supports the added biomes, they will be recognized and filled-in accordingly.
The entire list is disabled by default and you have to go in and enable each mob you want. You then load the world again, and JAS makes a biome list adding each enabled mob.
In the newest version the spawnlist is generated automatically for each mob / biome regardless of their CanSpawn setting (the setting is still respected in regards to their ability to spawn of course). No longer need to enable the mobs and go back into the world to have the spawnlist entries generate, they are created by default when the config file is first generated.
Unfortunately I am getting the following error when using the despawn tag. It's quite major as it loops which causes the game to lag badly. Once the tags are removed, everything is fine.
2013-04-12 17:02:44 [SEVERE] [JAS] Obfuscation needs to be updated to access the persistenceRequired. Please notify modmaker Immediately.
2013-04-12 17:02:44 [INFO] [STDERR] java.lang.NoSuchFieldException: persistenceRequired
EDIT **************************
Also having a different issue but one not related to the latest version (as I rolled back to 0.2.0 and it was still happening). What's happening is mobs from the monsters and opensky category (both are all despawners, spawn tick rate 40) are constantly spawning, even when I am stood still in the daytime.
I tested by loading a world completely using F3 to check all chunks were loaded and the caps were full. Stood around for 10 mins and the spawning never stops.
If I check rei's minimap with the entities radar on, I can see the mobs despawning and then more popping up. Seems like the despawner is being too aggressive. It's my understand that the mod leaves despawning to the vanilla despawner though, so not sure what is going on.
Yea, the v0.2.0 left it to the whatever the default despawners for each entity are unless the ForceDespawn config toggle was set to true. When redoing for the current options I was doing tests with the old setup and the creatures persisted for a fairly long time, I wish I had kept the spreadsheet but the average despawn time was quite long. The vanilla despawner waits till entity age is >600 (so ~30 sec gauranteed), then has a 1/800 chance every tick (so max ~40sec) of despawning. THe v0.2 was much longer than this, the average tick time was somewhere between the 2000-3000 (though how it worked was iffy as it did allow large numbers to occur not rarely enough so not entirely 1:1 comparison). Keep in mind despawning is proportional to the number of despawning entities you have, more there are the more will despawn. Also keep in mind v0.2.0 didn't set persistence NBT so if entity was set to despawn sooner anyway it did.
I see that you have Mo'Creature there, are you sure his CMS is disabled?
When I get a chance later I'll get some large datasets of despawning data for detailed comparison to make sure entities isn't despawning faster than vanilla.
This sounds like exactly the sort of mod I've been looking for. But I'm having a little trouble wrapping my head around a couple of things.
Does this mod do away with the need for Custom Mob Spawner? Or are you supposed to use them in conjunction?
Are creatures from the various mods applied to the correct biomes? If so, does that include Biomes O Plenty and ExtraBiomes XL or other mod-added ones?
You shouldn't need to use JAS with CMS. Depending on how you set it up you may even have difficulty (depending on what your trying to do).
As others have said, Default settings should be imported for any biomes the entities are set to spawn in.
To Crudedragos: I was wondering what (if any) plans you have for grouping / categorizing mobs and biomes? Definitely could be a useful feature if you could, say, group all the 'tropical' biomes together and set the spawn rates for the entire group simultaneously. Also potentially useful would be the ability to group mobs together, for example having a 'vanilla hostile' group which you could have spawn in every biome group and a 'water creature' group which you could have spawn in water-based biomes.
The ability to have mobs / biomes in multiple groups might also be useful: having the skeleton mob in the 'vanilla hostile' and 'undead' groups at the same time, or the plains biome in the 'flatlands' and 'peaceful' biome groups.
Of course the above are (again) just convenience features to make it easier on lazy people like myself.
Grouping biomes is a feature that I'm working on( https://github.com/C...pawner/issues/5 ). By default, each Biome will represent a "Group" that contains themselves. You can add/remove biomes from them or delete them / make your own new ones. Spawnlistentries in groups that overlap will both be treated as valid (the entity will be in the spawnlist twice). That may actually be useful, as you can have groups with large packsize but low chance overlap with small packsize but high chances.
I hadn't thought about grouping entities. Though I suppose it would be possible, not sure how I feel about it.
In the newest version the spawnlist is generated automatically for each mob / biome regardless of their CanSpawn setting (the setting is still respected in regards to their ability to spawn of course). No longer need to enable the mobs and go back into the world to have the spawnlist entries generate, they are created by default when the config file is first generated.
Oh, awesome! Haven't tried 0.3.0 yet - Just got my friend's 1.5.1 server going and got to finally sit down and play. Enjoying it immensely with all the mods we added, but it wouldn't be nearly as good without JAS running the spawns.
Rollback Post to RevisionRollBack
The config files are your friends! Get to know them, and shape your world!
Aha, thanks. I think I understand. Probably It's about 3 years since I played Minecraft, so I've come back and found such modding options that the choice is making my head spin.
A more specific question. As I understand it, the mod "Special Mobs" works in a somewhat unusual manner by creating its own version of vanilla creatures such as skeletons, which have the special power that there's a small chance they'll instantly despawn and be replaced by one of a variety of rare versions, such as a fire skeleton.
Does JAS handle that OK, only spawning the regular ones (which then transform or not) or does it consider the special ones to be something it should just spawn anyway? From your previous answers, I'd guess that, as the special ones don't spawn naturally in the original mod, they wouldn't have settings for it that JAS would then import?
They call the same initialization on those spawns as vanilla. So they will spawn as normal, though its not configurable obviously as its internal to the entity. Creature modders would need to expose that.
For those types that instantly despawn and respawn a result, if the result is a valid entity it should show up in the list of entities and you should be able to set it to a spawn list manually.
I did a few tests myself you might be interested in. Removed all mods and created a creative superflat world. The mobs spawned fine then after a while (I guess the 30 min time you mentioned the vanilla despawner has) mobs start despawning and other spawn to replace them. So it's definately an issue with the vanilla despawner.
However, mobs shouldn't be despawning in viewing range - it's just unnecessary. I tried using JAS to replace the vanilla spawner/despawner (generated fresh config files, turned off vanilla spawning and set all mobs to true{despawn}) but the issue remains. What do you think about having the JAS despawner check whether the mob is within a players render distance before it allows a despawn? Then once mobs are spawned they won't despawn while I am still in the area.
JAS and Vanilla both have a despawn range of 32 blocks around the player. I'm more than happy to make that configurable for you.
EDIT1: You are going to hate me but I found another issue I wanted to bring to your attention. I was testing to see if the spawn>despawn>spawn loop from above was occuring with watercreatures (which it was).
While doing so I was using JAS to take control so I had only squid spawning and nothing else. All other JAS settings were left as defaults, so bear in mind the cap for watercreatures was 15. Now the squids were periodically despawning as explained above but instead of the spawner just repopulating one squid every time one disappeared (which you would expect with a watercreature spawn rate of 1 tick, right?), every couple of minutes it would try to spawn over 50 within a couple of seconds.
I could understand it going over the cap slightly, say if the mix/max of squids is 4/4 and it was close to the cap anyway, but it's going way over. Here's a log of one of the incidents; http://pastebin.com/EF51PcYm
This is a normal issue with the vanilla spawner I've inherited. The entities are only counted at the beggining of the loop. So what happens is that for entities that have an incredibly large amount of space to spawn such as water creatures in oceans, they will spawn in very large quantities after the check. Then never spawn until beneath the cap, then spawn in large quantities again. Its one of those things I can and will eventually get around to correcting.
I'm thinking it's 5am here so I must be overlooking something simple due to lack of sleep. I've got JAS installed on top of Feed The Beast's Ultimate mod pack (using FTB's launcher) - along with AtmosMobs, Project Zulu, Tropicraft, Mo'Creatures, Millenaire.. that's mainly it for the mob spawning mods. My install was working under Mob Spawn Controls -albeit with less than desirable spawns.
I hope this is enough info for now - sorry if it's not but the whole log is huge with so many mods.
Unloaded->Constructed->Pre-initialized->Initialized->Post-initialized->Available->Available->Available->Available
2013-04-14 04:35:07 [SEVERE] [ForgeModLoader] The following problems were captured during this phase
2013-04-14 04:35:07 [SEVERE] [ForgeModLoader] Caught exception from JustAnotherSpawner
java.lang.NullPointerException
at jas.common.spawner.creature.handler.CreatureHandlerRegistry.findVanillaSpawnListEntry(CreatureHandlerRegistry.java:228)
at jas.common.spawner.creature.handler.CreatureHandlerRegistry.generateSpawnListEntries(CreatureHandlerRegistry.java:125)
at jas.common.spawner.creature.handler.CreatureHandlerRegistry.serverStartup(CreatureHandlerRegistry.java:61)
at jas.common.JustAnotherSpawner.serverStart(JustAnotherSpawner.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:487)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
at com.google.common.eventbus.EventBus.post(EventBus.java:268)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
at com.google.common.eventbus.EventBus.post(EventBus.java:268)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:86)
at cpw.mods.fml.common.Loader.serverStarting(Loader.java:721)
at cpw.mods.fml.common.FMLCommonHandler.handleServerStarting(FMLCommonHandler.java:315)
at bdz.c(IntegratedServer.java:103)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:458)
at fy.run(SourceFile:849)
2013-04-14 04:35:07 [INFO] [STDERR] Exception in thread "Server thread" java.lang.NullPointerException
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.spawner.creature.handler.CreatureHandlerRegistry.findVanillaSpawnListEntry(CreatureHandlerRegistry.java:228)
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.spawner.creature.handler.CreatureHandlerRegistry.generateSpawnListEntries(CreatureHandlerRegistry.java:125)
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.spawner.creature.handler.CreatureHandlerRegistry.serverStartup(CreatureHandlerRegistry.java:61)
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.JustAnotherSpawner.serverStart(JustAnotherSpawner.java:71)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:487)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.post(EventBus.java:268)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:153)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.post(EventBus.java:268)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:86)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.Loader.serverStarting(Loader.java:721)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.FMLCommonHandler.handleServerStarting(FMLCommonHandler.java:315)
2013-04-14 04:35:07 [INFO] [STDERR] at bdz.c(IntegratedServer.java:103)
2013-04-14 04:35:07 [INFO] [STDERR] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:458)
2013-04-14 04:35:07 [INFO] [STDERR] at fy.run(SourceFile:849)
Really wishing I knew what you guys know about coding/modding so I could sort this myself and get on with configuring the spawn options that JAS allows. I've been reading like a maniac, absorbing what I can...
ugh. Please forgive my sheepish noobishness and accept my humble praise as reward for any help given. Any help at all.
Really wishing I knew what you guys know about coding/modding so I could sort this myself and get on with configuring the spawn options that JAS allows. I've been reading like a maniac, absorbing what I can...
ugh. Please forgive my sheepish noobishness and accept my humble praise as reward for any help given. Any help at all.
Thanks
It looks like someone or something, perphaps a custom biome, is setting or return a null spawnlist instead of an empty one. 0.3.2 should fix this. Let me know if it works.
Changelog JAS v0.4.0
- Fix issue Master Config not transferring OptionalSettings to World Config
- Add inverted !spawn and !despawn tags (see Wiki )
- Add invertable sky tag for spawning and despawning. (see Wiki)
- Add Global DespawnDistance property and spawnRange tag.
- Check Entitycap after every spawn.
- Added Biome groups (see: Wiki)
See the wiki for Biome groups. By default they are defined by the biome names, so configs should still work as they did before. (back up just in case of implosion). Group names themselves can contain any valid java character, except commas.
Not sure I care for how I've done the Biome group lists. With regular names it wasn't so bad, but with the package names I think it'll be tedious. I'm comtemplating changing it to be more like the entity spawnlists; its list all the biomes and you toggle the included ones with true or false. Feedback appreciated.
Sort of. JAS can be set-up to only spawn in those structures, of course. But there would be nothing stopping CMS mobs from spawning there as well.
Nope, spawner blocks cannot be effected.
- LivingHandler Format Change. Adds many additional settings for Spawning and Despoawning conditions. See: Wiki Page
- Twilight Forest Structure Support Added
- Spawnlist entries generated independently of shouldSpawn toggle. Still won't be added to spawnList if false.
- Add Config options to disable doMobSpawning gamerule on server start. False by default.
- Add Config options to empty vanilla spawnLists on server start. False by default.
Question, what exactly does this do? Is this in regards to the structure-specific spawn lists in order to disable vanilla from spawning anything in structures; or something else entirely?
It grabs every biome's spawnlists (for monster, ambient, watercreature, and creature) and clears it. It won't stop structure spawns. But settings the spawning gamerule to false will stop that.
doMobSpawning - stops all mob vanilla spawning except chunk spawning.
clearspawnlist - Stops all mob vanilla spawning except structure spawns.
Its odd Minecraft doesn't have 1 toggle to stop all of them.
So if you were to use both options you would effectively stop all vanilla spawns: passive, chunk and structure?
Yes, that it is the idea. Note that if you clear the spawnlists that JAS cannot import settings as they do not exist. So run once first in a test world if you're going to use it.
I do want to add more tags, and I'll be sure to add those. A way to fine tune them per creature would be useful. I don't think I'd combine the creature types, as I see usefullness in having it on a global scale: gaurantees that you don't get too many underground or too many above ground. Eventually you'll be able to add your own categories. (And then eventually with tags).
Feel free to bring up any other settings you can think of.
That is usually correct though not strictly speaking gauranteed. Technically it can be overriden by mod entities if they choose to. Though I think its probably rare that anyone would bother, usually a seperate function is overriden "yes I can despawn" and the regular despawning logic is used. I attempted to get a more gauranteed persistence check through forge and was just redirected to the persistence nbt.
Hadn't though of that specifically, though I agree it could be a useful option. Adding the negative of the various options is something I want to do, just haven't hit my head on an implementation I like. The notation i'd want is just to put ! infront of tag; such as !block. Trick it to implement it without feeling clunky.
It's a fairly simple check, I can't see that effecting your performance significantly. Though the overhead around enabling tags at all might add up, i.e being that straw to your camels back. As with such things, it really comes down testing. I'd think the cost of checking for a new entityt would be more expensive that a persistence check, but its not neccesary an equal trade.
The more entities spawning the more performance overhead is inevitably requried. No entities spawning (assuming they are at the cap), means each loop is significantly shorter. Also note that minecraft behaves differntly on a whole standing still, as certain updates won't run if your standing still (I'm out of my depth at this point, but I believe its the chunks autosaving?). It naturally runs faster when standing still.
If you need performance savings, my first suggestion would be to decrease the spawning frequency of the various categories. The world fills very quickly as is and I've long thought that processing every tick shouldn't be neccesary.
Eventually, I'm likely to make this a coremod, such that certain fields don't need to be accessed via reflection. This should probably offer some minimal performance improvements. But I still need to actually familiarize myself coremods.
Edit: If changing spawnrates try to make sure they are divisible by each other. So that whenever possible they run during the same cycle. This makes it so that certain function, such as counting valid chunks, are only done once for all of them.
I believe either option is valid depending on what you want to achieve. You should be able to disable CMS and do everything through JAS or just use JAS as a supplement to CMS.
JAS should import the default settings for each mob from the mod which adds it, so if the mob-mod supports a biome-adding mod such as Biomes O' Plenty / ExtraBiomesXL their default settings for these biomes should be applied (as far as I know).
------
To Crudedragos: I was wondering what (if any) plans you have for grouping / categorizing mobs and biomes? Definitely could be a useful feature if you could, say, group all the 'tropical' biomes together and set the spawn rates for the entire group simultaneously. Also potentially useful would be the ability to group mobs together, for example having a 'vanilla hostile' group which you could have spawn in every biome group and a 'water creature' group which you could have spawn in water-based biomes.
The ability to have mobs / biomes in multiple groups might also be useful: having the skeleton mob in the 'vanilla hostile' and 'undead' groups at the same time, or the plains biome in the 'flatlands' and 'peaceful' biome groups.
Of course the above are (again) just convenience features to make it easier on lazy people like myself.
JAS can spawn mobs that are recognized in Custom Mob Spawner, but CMS will still need to be installed (just disabled) for Mo'Creatures to work. It shouldn't have to be that way, but it is.
When you add JAS and load up your world, it makes a config for vanilla and each mod that adds mobs. The entire list is disabled by default and you have to go in and enable each mob you want. You then load the world again, and JAS makes a biome list adding each enabled mob. The vanilla mobs in each biome come with preset spawn rates, but that's not always the case for all mods.
You will find that many of the mobs will need their spawn rates set for mod-added biomes.
EDIT: SageEthereal above said it best. If the mob-mod supports the added biomes, they will be recognized and filled-in accordingly.
In the newest version the spawnlist is generated automatically for each mob / biome regardless of their CanSpawn setting (the setting is still respected in regards to their ability to spawn of course). No longer need to enable the mobs and go back into the world to have the spawnlist entries generate, they are created by default when the config file is first generated.
Should be Fixed v0.3.1 (1.4.7)
Yea, the v0.2.0 left it to the whatever the default despawners for each entity are unless the ForceDespawn config toggle was set to true. When redoing for the current options I was doing tests with the old setup and the creatures persisted for a fairly long time, I wish I had kept the spreadsheet but the average despawn time was quite long. The vanilla despawner waits till entity age is >600 (so ~30 sec gauranteed), then has a 1/800 chance every tick (so max ~40sec) of despawning. THe v0.2 was much longer than this, the average tick time was somewhere between the 2000-3000 (though how it worked was iffy as it did allow large numbers to occur not rarely enough so not entirely 1:1 comparison). Keep in mind despawning is proportional to the number of despawning entities you have, more there are the more will despawn. Also keep in mind v0.2.0 didn't set persistence NBT so if entity was set to despawn sooner anyway it did.
I see that you have Mo'Creature there, are you sure his CMS is disabled?
When I get a chance later I'll get some large datasets of despawning data for detailed comparison to make sure entities isn't despawning faster than vanilla.
You shouldn't need to use JAS with CMS. Depending on how you set it up you may even have difficulty (depending on what your trying to do).
As others have said, Default settings should be imported for any biomes the entities are set to spawn in.
Grouping biomes is a feature that I'm working on( https://github.com/C...pawner/issues/5 ). By default, each Biome will represent a "Group" that contains themselves. You can add/remove biomes from them or delete them / make your own new ones. Spawnlistentries in groups that overlap will both be treated as valid (the entity will be in the spawnlist twice). That may actually be useful, as you can have groups with large packsize but low chance overlap with small packsize but high chances.
I hadn't thought about grouping entities. Though I suppose it would be possible, not sure how I feel about it.
Oh, awesome! Haven't tried 0.3.0 yet - Just got my friend's 1.5.1 server going and got to finally sit down and play. Enjoying it immensely with all the mods we added, but it wouldn't be nearly as good without JAS running the spawns.
They call the same initialization on those spawns as vanilla. So they will spawn as normal, though its not configurable obviously as its internal to the entity. Creature modders would need to expose that.
For those types that instantly despawn and respawn a result, if the result is a valid entity it should show up in the list of entities and you should be able to set it to a spawn list manually.
JAS and Vanilla both have a despawn range of 32 blocks around the player. I'm more than happy to make that configurable for you.
This is a normal issue with the vanilla spawner I've inherited. The entities are only counted at the beggining of the loop. So what happens is that for entities that have an incredibly large amount of space to spawn such as water creatures in oceans, they will spawn in very large quantities after the check. Then never spawn until beneath the cap, then spawn in large quantities again. Its one of those things I can and will eventually get around to correcting.
I'm thinking it's 5am here so I must be overlooking something simple due to lack of sleep. I've got JAS installed on top of Feed The Beast's Ultimate mod pack (using FTB's launcher) - along with AtmosMobs, Project Zulu, Tropicraft, Mo'Creatures, Millenaire.. that's mainly it for the mob spawning mods. My install was working under Mob Spawn Controls -albeit with less than desirable spawns.
I hope this is enough info for now - sorry if it's not but the whole log is huge with so many mods.
2013-04-14 04:35:07 [SEVERE] [ForgeModLoader] The following problems were captured during this phase
2013-04-14 04:35:07 [SEVERE] [ForgeModLoader] Caught exception from JustAnotherSpawner
java.lang.NullPointerException
at jas.common.spawner.creature.handler.CreatureHandlerRegistry.findVanillaSpawnListEntry(CreatureHandlerRegistry.java:228)
at jas.common.spawner.creature.handler.CreatureHandlerRegistry.generateSpawnListEntries(CreatureHandlerRegistry.java:125)
at jas.common.spawner.creature.handler.CreatureHandlerRegistry.serverStartup(CreatureHandlerRegistry.java:61)
at jas.common.JustAnotherSpawner.serverStart(JustAnotherSpawner.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:487)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
at com.google.common.eventbus.EventBus.post(EventBus.java:268)
at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
at com.google.common.eventbus.EventBus.post(EventBus.java:268)
at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:86)
at cpw.mods.fml.common.Loader.serverStarting(Loader.java:721)
at cpw.mods.fml.common.FMLCommonHandler.handleServerStarting(FMLCommonHandler.java:315)
at bdz.c(IntegratedServer.java:103)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:458)
at fy.run(SourceFile:849)
2013-04-14 04:35:07 [INFO] [STDERR] Exception in thread "Server thread" java.lang.NullPointerException
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.spawner.creature.handler.CreatureHandlerRegistry.findVanillaSpawnListEntry(CreatureHandlerRegistry.java:228)
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.spawner.creature.handler.CreatureHandlerRegistry.generateSpawnListEntries(CreatureHandlerRegistry.java:125)
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.spawner.creature.handler.CreatureHandlerRegistry.serverStartup(CreatureHandlerRegistry.java:61)
2013-04-14 04:35:07 [INFO] [STDERR] at jas.common.JustAnotherSpawner.serverStart(JustAnotherSpawner.java:71)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:487)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.post(EventBus.java:268)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:153)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:69)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:45)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatch(EventBus.java:317)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:300)
2013-04-14 04:35:07 [INFO] [STDERR] at com.google.common.eventbus.EventBus.post(EventBus.java:268)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:86)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.Loader.serverStarting(Loader.java:721)
2013-04-14 04:35:07 [INFO] [STDERR] at cpw.mods.fml.common.FMLCommonHandler.handleServerStarting(FMLCommonHandler.java:315)
2013-04-14 04:35:07 [INFO] [STDERR] at bdz.c(IntegratedServer.java:103)
2013-04-14 04:35:07 [INFO] [STDERR] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:458)
2013-04-14 04:35:07 [INFO] [STDERR] at fy.run(SourceFile:849)
Really wishing I knew what you guys know about coding/modding so I could sort this myself and get on with configuring the spawn options that JAS allows. I've been reading like a maniac, absorbing what I can...
ugh. Please forgive my sheepish noobishness and accept my humble praise as reward for any help given. Any help at all.
Thanks
It looks like someone or something, perphaps a custom biome, is setting or return a null spawnlist instead of an empty one. 0.3.2 should fix this. Let me know if it works.
- Fix issue Master Config not transferring OptionalSettings to World Config
- Add inverted !spawn and !despawn tags (see Wiki )
- Add invertable sky tag for spawning and despawning. (see Wiki)
- Add Global DespawnDistance property and spawnRange tag.
- Check Entitycap after every spawn.
- Added Biome groups (see: Wiki)
See the wiki for Biome groups. By default they are defined by the biome names, so configs should still work as they did before. (back up just in case of implosion). Group names themselves can contain any valid java character, except commas.
Not sure I care for how I've done the Biome group lists. With regular names it wasn't so bad, but with the package names I think it'll be tedious. I'm comtemplating changing it to be more like the entity spawnlists; its list all the biomes and you toggle the included ones with true or false. Feedback appreciated.