diff options
author | kwolekr <kwolekr@minetest.net> | 2013-03-16 19:37:27 -0400 |
---|---|---|
committer | kwolekr <kwolekr@minetest.net> | 2013-03-16 19:55:29 -0400 |
commit | e3badd7062d4bee62335cf100f3f91ef4c370aae (patch) | |
tree | f2eaf8bff32f741941e39e60364e36b7cbda93d0 /src/content_abm.cpp | |
parent | 6823ce99a7deabe410dd8b143b688cd364490cec (diff) | |
download | minetest-e3badd7062d4bee62335cf100f3f91ef4c370aae.tar.gz minetest-e3badd7062d4bee62335cf100f3f91ef4c370aae.tar.bz2 minetest-e3badd7062d4bee62335cf100f3f91ef4c370aae.zip |
Make saplings only grow on dirt or grass, make jungle tree trunks only replace air
Diffstat (limited to 'src/content_abm.cpp')
-rw-r--r-- | src/content_abm.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/content_abm.cpp b/src/content_abm.cpp index e50edddd7..ccd9ca19c 100644 --- a/src/content_abm.cpp +++ b/src/content_abm.cpp @@ -94,7 +94,17 @@ public: class MakeTreesFromSaplingsABM : public ActiveBlockModifier { private: + content_t c_junglesapling; + content_t c_dirt; + content_t c_dirt_with_grass; + public: + MakeTreesFromSaplingsABM(ServerEnvironment *env, INodeDefManager *nodemgr) { + c_junglesapling = nodemgr->getId("junglesapling"); + c_dirt = nodemgr->getId("mapgen_dirt"); + c_dirt_with_grass = nodemgr->getId("mapgen_dirt_with_grass"); + } + virtual std::set<std::string> getTriggerContents() { std::set<std::string> s; @@ -112,7 +122,12 @@ public: INodeDefManager *ndef = env->getGameDef()->ndef(); ServerMap *map = &env->getServerMap(); - bool is_jungle_tree = n.getContent() == ndef->getId("junglesapling"); + MapNode n_below = map->getNodeNoEx(p - v3s16(0, 1, 0)); + if (n_below.getContent() != c_dirt && + n_below.getContent() != c_dirt_with_grass) + return; + + bool is_jungle_tree = n.getContent() == c_junglesapling; actionstream <<"A " << (is_jungle_tree ? "jungle " : "") << "sapling grows into a tree at " @@ -187,7 +202,7 @@ void add_legacy_abms(ServerEnvironment *env, INodeDefManager *nodedef) { env->addActiveBlockModifier(new GrowGrassABM()); env->addActiveBlockModifier(new RemoveGrassABM()); - env->addActiveBlockModifier(new MakeTreesFromSaplingsABM()); + env->addActiveBlockModifier(new MakeTreesFromSaplingsABM(env, nodedef)); if (g_settings->getBool("liquid_finite")) env->addActiveBlockModifier(new LiquidFlowABM(env, nodedef)); } |