OtherGrowth
OtherGrowth lets you bring your world to life by creating "recipies" that change blocks based on the surrounding blocks - such as "cobble to mossy-cobble near water" (grow mossy-cobble) or "air to leaves near grass" (add a unique feeling to plains) and much much more.
Features
- Modify blocks based on surrounding blocks
- Customisable "tick delay" & console verbosity
- Add other conditions such as:
- world
- (planned) regions
- (planned) biome
- (planned) lightlevel
- Use OtherGrowth to spread wool over desert, add leaves & water in the nether and grow bookshelves on trees - there's a lot of crazy stuff you can do
- OtherGrowth can add a deeper feel to the world with roads that fall apart & castles that become overgrown with leaves and deteriorate (stone->gravel->dirt). Finding an older building that hasn't been maintained is more interesting with cobwebs gathering in corners and many of the blocks possibly infested with silverfish.
Documentation
To be written/expanded as the plugin progresses.
Example Config
"Config.yml"
verbosity: normal run_on_startup: true tick_delay_between_scans: 200 scan_asynchronously: true scan_all_loaded_chunks: true # ignores radius setting (if true) chunk_scan_radius: 6
"recipies.yml"
recipes: #Mossy Cobblestone From water (cobble to mossy adj. water) [slowish] - mossynearwater: # use a dash at front if this allows tags with same spelling - need: COBBLESTONE adjacent: {WATER, STATIONARY_WATER} # { } = or, [ ] = and replacement: MOSSYCOBBLE chance: 6% # equivalent to old “30:500” chance # other conditions as per OtherDrops, as possible (performance permitting) #Mossy Cobblestone spreads (cobble to mossy adj. mossy) [slow] - mossy spreads: - need: COBBLE adjacent: MOSSYCOBBLE replacement: MOSSYCOBBLE chance: 0.5% # equivalent to old “1:200” chance #leaves on Mossy Cobblestone (air to leaves adj. mossy) [slow] - leaves on mossy: - need: AIR adjacent: MOSSYCOBBLE replacement: LEAVES chance: 1% # equivalent to old “1:200” chance #Mossy Cobble grows sponges (water to sponge adj. mossy) [v. slow] - mossy cobble grows on sponges:: - need: {WATER, STATIONERY_WATER} adjacent: SPONGES replacement: MOSSYCOBBLE chance: 0.002% # equivalent to old “1:200” chance
Planned Features
- fine-tune default values (higher delay period - anywhere from 10 seconds to once per hour - vs radius scanned)
- specific a way to add preference for particular growth styles (eg. for stalactites and stalagmites).
- multiple adjacent block conditions (eg. must be surrounded by 3 water & 1 lava)
- expand default example file with "friendly" changes such as mossy cobble near water, spiderwebs in dark houses, lily pads on water, etc
- create example file with more "damaging" (but still slow acting) recipes - eg. cobble turning to monstereggs and/or deteriorating into gravel/dirt, fences falling apart, etc
- create example file for glowstone that slowly regrows in the nether
- create an example "corruption" recipe file
- using netherblocks or mycellium to crawl over the surface of the land slowly
- yes, this does mean players could "seed" the corruption however the corruption could use a unique block or data value to avoid this
- allow random chance of a corrupted "spike", "tree" or other formations (low chance of a particular block to form as a "seed" with higher chance of that growing)
- create a "two-stage" corruption with inner/older blocks having had a chance to mutate into a stronger form of corruption
- using OtherDrops - create chance of unique artifacts when digging up/destroying the corruption
- using OtherDrops - higher chance of hostile/stronger mobs spawning on the corruption
- brainstorm unique ways of making the corruption harder to destroy/more rewarding
Dev Builds
Development builds of this project can be acquired at the provided continuous integration server. These builds have not been approved by the BukkitDev staff. Use them at your own risk.
Thanks
OtherGrowth is a inspired by the original iGrow plugin by TechGuard. Thanks to Valdark and Raspberry for inspiration with recipies for the original iGrow.
@Wedhro
Thanks for the feedback :) Yes, OtherGrowth can be demanding and I'm working on fine-tuning the default config. I might even put it back up to every 36000 ticks (once per half-hour) rather than 200.
Personally I ran the forefather to this (iGrow) once per half-hour on my server with a radius of 100 blocks (about a radius of 6 chunks) and still liked the results.
Timings will vary also depending the servers population - eg. if there's always someone on vs. often empty - since OtherGrowth can only act when a player is logged in.
Nice plugin but quite resource-demanding; If your server performance drop down I recommend turning scan_all_loaded_chunks to false and chunk_scan_radius to a low number (5 or less works better for me).
@ZariusT
Excellent! I look forward to trying this out soon!
@MattSheridan
After writing all that stuff below I realised I hadn't included the OtherDrops material matching in OtherGrowth. In fact I hadn't added data values support at all.
I've fixed this now and pushed a new build (0.4.0) which should show up on BukkitDev when it's approved (or grab from it from the dev builds link above).
MONSTER_EGGS@STONEBRICK will work as a replacement in version 0.4.0 (I've tested this).
Lightlevel is planned, as is biome, but I hadn't thought about presence of entities.
@Quinnatator
Ah, thanks heaps for that - I'll fix the next build.
@MattSheridan
Yup, could do that. Yes, OtherGrowth uses all Bukkit enums but with a more clever match that ignores any space, underscore or dash - eg. (mossycobblestone, mossy cobblestone, mossy-cobblestone and mossy_cobblestone all match). There are also a number of aliases to match the names referred to on the Minecraft wiki or in game (including an alias for mossycobble=mossycobblestone).
Most of the data values shown on the Minecraft wiki should work (let me know if they don't) - eg. http://www.minecraftwiki.net/wiki/Data_values#Monster_Egg shows "normal, mossy, cracked & chiseled" as the types which you can define using MONSTER_EGGS@mossy, MONSTEREGGS@cracked, etc. (be careful as Bukkit calls a spawnegg a "monsteregg").
All Bukkit enums should automatically update as Bukkit does (eg. any new material will be supported) but data values (eg. the types of silverfish blocks above) need to be manually added. In case they are not you should still be able to use the data value numbers, eg. the Minecraft wiki shows monster_eggs@mossy as value 1, cracked as 2 and chiseled as 3, so eg. MONSTEREGGS@3.
Awesome plugin. I can totally see this helping my survival worlds become more sustainable so new players have a similar experience to the ones that joined before them. Great work! Just one thing that you may want to address:
The following paste explains what I encountered. http:pastebin.com/Hgb9tvTJ
Wow, this looks amazing! So I could have stone blocks convert to silverfish blocks over time? I desperately want more silverfish in my game.
But how would I specify that cobblestone should only turn into cobblestone-looking monster eggs, smooth stone into smooth stone-looking monster eggs, etc.? Looks like Bukkit only has one name for all three monster egg types.
..Or, wait, does this mod even use the Bukkit enums? I think Bukkit uses "MOSSY_COBBLESTONE", not "MOSSYCOBBLE". Do you have a different name system? And, come to think of it, can I just use data values in my config instead of names?
And what other conditions are possible? Could I use things like light level, the presence of specific entities, etc.?
@x_clucky
Not really with OtherGrowth - it's about slow changes to the world rather than hooking into events (in fact it doesn't have any event listeners).
@ZariusT
would it be possible to instantly consume all lava upon placement, and then the sponge block also turn to air though?
Currently server-wide. I don't see much of a need to do it per recipe... if you're thinking about setting a short tick-delay on just one recipe you still need to scan all the blocks even for that and then you may as well check all the recipies
The longest part is the scanning of the blocks and the replacement of the blocks - you can't shorten the scanning unless you set a smaller radius and if it's too small (eg. 1 or 2 block radius) players will notice the changes only occuring in small areas. You can minimise time spent on replacing blocks by lowering the chance value for all recipies except the one you want to run quicker.
I'll be adding a chance multiplier in the settings so that you can adjust the global tick-delay without having to adjust every chance value.
Is the tick delay server-wide for all "recipes" or can it be configured per "recipe"?
@metalhedd
Can do this at the moment - can have a low chance of glowstone growing off other glowstone and as x_clucky suggested it could be limited to the nether. eg.
You can farm a lot of blocks this way. I had players on my old server "farming" mossycobble by placing cobbestone in water and waiting for it to change. They did this because if they broke the mossy cobble with a gold pickaxe they got a slimeball which let you teleport (consumable, so they needed to keep gathering them, and this was before slimes were so common).
@x_clucky
Yes, you could do that. But keep in mind the lava will probably flow back pretty quickly, so not good for holding it at bay unless the tick-delay was set really low which could cause lag depending on your radius settings, etc.
Would it be possible to place a sponge block in lava, and then it and the surrounding lava blocks (in a radius of 2 blocks) turn to air? If not, could you add this feature? :3
@metalhedd
That would be killer. Make a really low chance of glowstone veins "growing" into the air :O That way it "grows" really slow, but does grow. Then players could also make glowstone farms, but limit it to only work in the nether :O The ideas are just flowing out!!!
Regerating glowstone would be killer
@llharry
Yup, worldguard region support is definitely planned and not far away.
Unfortunately it's too much work just to track all placed blocks - if you're working with materials like cobblestone and wood you can assume they have been placed anyway (generally).
Lightlevels is planned too :) Newest dev-build has recipes enabled and scans through hundreds of millions of blocks each 200 ticks without a problem in my testing so far which is well within tolerance as I ran the old iGrow with a 36,000 tick-delay (every 30 minutes).
I'm working on adding OtherGrowth to my Jenkins server so development builds will be available there and then adding a few new features.
Perhaps support WorldGuard regions? So we can make certain areas not change (I plan to use this for building and road decay personally.
Also, Make it so only placed blocks are affected? (Maybe a setting in config, or in the recipe)
Finally, Cluckys idea for sensing light levels would be good. Would also make lilypads grow in caves, which would be good. And we could then make it so mycelium grows in dark places.
Such a useful plugin, when it comes out. I'll be watching this carefully.
@ZariusT
One way you might be able to do that is by sensing the light level of the water. Another way could be to see if there is a leaf block anywhere above the water (although the second choice might be slightly more CPU intensive)
Been waiting on this one for years :p
Great idea, good luck! I'll be following this one closely!
@Kiak
Cool idea - should be able to do this :)