Difference between revisions of "Talk:minetest.register node"
(→Splitting between "Engine" and "Default game" callbacks: Big difference, but perhaps a better description?) |
|||
Line 2: | Line 2: | ||
This doesnt make sense at all, because the builtin Lua code is part of the engine. It is not a mod. And also the default minetest_game doesnt call any of these callbacks. --[[User:PilzAdam|PilzAdam]] ([[User talk:PilzAdam|talk]]) 13:58, 3 March 2013 (MSK) | This doesnt make sense at all, because the builtin Lua code is part of the engine. It is not a mod. And also the default minetest_game doesnt call any of these callbacks. --[[User:PilzAdam|PilzAdam]] ([[User talk:PilzAdam|talk]]) 13:58, 3 March 2013 (MSK) | ||
+ | |||
+ | There is a huge difference between the two, but perhaps you can help me figure out how to phrase it better if the existing titles and description aren't sufficient. The "engine callbacks" are called directly from the C++, and each one will always be called on the node if it is defined. They can be used to completely override all behavior that normally occurs as a result of the interactive event. If you set a node's "on_place" callback to do nothing, no block will appear in the environment when you try to place it from inventory, nothing will be removed from inventory, no "after_place_node" callback will be made, etc. The "default game callbacks" have no behavior by default and are called by the "engine callbacks", so they really do form a whole second layer of callbacks and if the applicable "engire callback" is overridden you cannot expect the "default game callback(s)" to be called at all. They can be used to ''add'' to the existing behavior, but not really to override/modify it. If you set a node's "after_place_node" callback to do nothing, all default behavior will continue as usual. In some cases the info passed to the second layer of callbacks is different as well. For example, "after_place_node" isn't passed the [[pointed_thing]] and "after_dig_node" is passed copies of the old node and metadata after the node is actually replaced using minetest.env. --[[User:Prestidigitator|Prestidigitator]] ([[User talk:Prestidigitator|talk]]) 13:40, 5 March 2013 (MSK) |
Revision as of 09:40, 5 March 2013
Splitting between "Engine" and "Default game" callbacks
This doesnt make sense at all, because the builtin Lua code is part of the engine. It is not a mod. And also the default minetest_game doesnt call any of these callbacks. --PilzAdam (talk) 13:58, 3 March 2013 (MSK)
There is a huge difference between the two, but perhaps you can help me figure out how to phrase it better if the existing titles and description aren't sufficient. The "engine callbacks" are called directly from the C++, and each one will always be called on the node if it is defined. They can be used to completely override all behavior that normally occurs as a result of the interactive event. If you set a node's "on_place" callback to do nothing, no block will appear in the environment when you try to place it from inventory, nothing will be removed from inventory, no "after_place_node" callback will be made, etc. The "default game callbacks" have no behavior by default and are called by the "engine callbacks", so they really do form a whole second layer of callbacks and if the applicable "engire callback" is overridden you cannot expect the "default game callback(s)" to be called at all. They can be used to add to the existing behavior, but not really to override/modify it. If you set a node's "after_place_node" callback to do nothing, all default behavior will continue as usual. In some cases the info passed to the second layer of callbacks is different as well. For example, "after_place_node" isn't passed the pointed_thing and "after_dig_node" is passed copies of the old node and metadata after the node is actually replaced using minetest.env. --Prestidigitator (talk) 13:40, 5 March 2013 (MSK)