From 02f6071e39f0e7cb5ff3aed5cc2a47707bb174c2 Mon Sep 17 00:00:00 2001 From: SFENCE Date: Fri, 29 Dec 2023 20:20:09 +0100 Subject: [PATCH] Add test nodes and unittest for override entity. Fix bugs. --- builtin/game/register.lua | 11 ++-- games/devtest/mods/testabms/README.md | 6 ++ games/devtest/mods/testabms/after_node.lua | 12 ++++ games/devtest/mods/testabms/chances.lua | 56 +++++++++++++++++ games/devtest/mods/testabms/init.lua | 8 +++ games/devtest/mods/testabms/intervals.lua | 56 +++++++++++++++++ games/devtest/mods/testabms/min_max.lua | 58 ++++++++++++++++++ games/devtest/mods/testabms/mod.conf | 2 + games/devtest/mods/testabms/neighbors.lua | 30 +++++++++ games/devtest/mods/testabms/override.lua | 40 ++++++++++++ .../testabms/textures/testabms_after_node.png | Bin 0 -> 179 bytes .../testabms/textures/testabms_wait_node.png | Bin 0 -> 183 bytes games/devtest/mods/testlbms/README.md | 5 ++ games/devtest/mods/testlbms/init.lua | 45 ++++++++++++++ games/devtest/mods/testlbms/mod.conf | 2 + .../testlbms/textures/testlbms_after_node.png | Bin 0 -> 194 bytes .../testlbms/textures/testlbms_wait_node.png | Bin 0 -> 183 bytes games/devtest/mods/unittests/entity.lua | 27 +++++++- src/unittest/test_servermodmanager.cpp | 2 +- 19 files changed, 354 insertions(+), 6 deletions(-) create mode 100644 games/devtest/mods/testabms/README.md create mode 100644 games/devtest/mods/testabms/after_node.lua create mode 100644 games/devtest/mods/testabms/chances.lua create mode 100644 games/devtest/mods/testabms/init.lua create mode 100644 games/devtest/mods/testabms/intervals.lua create mode 100644 games/devtest/mods/testabms/min_max.lua create mode 100644 games/devtest/mods/testabms/mod.conf create mode 100644 games/devtest/mods/testabms/neighbors.lua create mode 100644 games/devtest/mods/testabms/override.lua create mode 100644 games/devtest/mods/testabms/textures/testabms_after_node.png create mode 100644 games/devtest/mods/testabms/textures/testabms_wait_node.png create mode 100644 games/devtest/mods/testlbms/README.md create mode 100644 games/devtest/mods/testlbms/init.lua create mode 100644 games/devtest/mods/testlbms/mod.conf create mode 100644 games/devtest/mods/testlbms/textures/testlbms_after_node.png create mode 100644 games/devtest/mods/testlbms/textures/testlbms_wait_node.png diff --git a/builtin/game/register.lua b/builtin/game/register.lua index 3c6e773dd4405..c8a6c72034f17 100644 --- a/builtin/game/register.lua +++ b/builtin/game/register.lua @@ -189,15 +189,18 @@ function core.override_entity(name, redefinition) if redefinition.name ~= nil then error("Attempt to redefine entity name of "..name.." to "..dump(redefinition.name), 2) end - if redefinition.type ~= nil then - error("Attempt to redefine type of "..name.." to "..dump(redefinition.type), 2) - end local entity = core.registered_entities[name] if not entity then error("Attempt to override non-existent entity "..name, 2) end for k, v in pairs(redefinition) do - rawset(entity, k, v) + if k ~= "initial_properties" then + rawset(entity, k, v) + else + for k2, v2 in pairs(v) do + rawset(entity.initial_properties, k2, v2) + end + end end core.registered_entities[name] = entity end diff --git a/games/devtest/mods/testabms/README.md b/games/devtest/mods/testabms/README.md new file mode 100644 index 0000000000000..60fa6d6565c1a --- /dev/null +++ b/games/devtest/mods/testabms/README.md @@ -0,0 +1,6 @@ +# Test ABMs + +This mod contains a nodes and related ABM actions. +By placing these nodes, you can test basic ABM behaviours. + +There are separate tests for ABM `chance`, `interval`, `min_y`, `max_y`, `neighbor` and `without_neighbor` fields. diff --git a/games/devtest/mods/testabms/after_node.lua b/games/devtest/mods/testabms/after_node.lua new file mode 100644 index 0000000000000..b559721f3ebac --- /dev/null +++ b/games/devtest/mods/testabms/after_node.lua @@ -0,0 +1,12 @@ + +local S = minetest.get_translator("testabms") + +-- After ABM node +minetest.register_node("testabms:after_abm", { + description = S("After ABM processed node."), + drawtype = "normal", + tiles = { "testabms_after_node.png" }, + + groups = { dig_immediate = 3 }, +}) + diff --git a/games/devtest/mods/testabms/chances.lua b/games/devtest/mods/testabms/chances.lua new file mode 100644 index 0000000000000..66cef6e28ae45 --- /dev/null +++ b/games/devtest/mods/testabms/chances.lua @@ -0,0 +1,56 @@ +-- test ABMs with different chances + +local S = minetest.get_translator("testabms") + +-- ABM chance 5 node +minetest.register_node("testabms:chance_5", { + description = S("Node for test ABM chance_5"), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:chance_5") + end, +}) + +minetest.register_abm({ + label = "testabms:chance_5", + nodenames = "testabms:chance_5", + interval = 10, + chance = 5, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabsm:chance_5 changed this node.") + end + }) + +-- ABM chance 20 node +minetest.register_node("testabms:chance_20", { + description = S("Node for test ABM chance_20"), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:chance_20") + end, +}) + +minetest.register_abm({ + label = "testabms:chance_20", + nodenames = "testabms:chance_20", + interval = 10, + chance = 20, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabsm:chance_20 changed this node.") + end + }) + diff --git a/games/devtest/mods/testabms/init.lua b/games/devtest/mods/testabms/init.lua new file mode 100644 index 0000000000000..4a50ec0be4fc4 --- /dev/null +++ b/games/devtest/mods/testabms/init.lua @@ -0,0 +1,8 @@ +local path = minetest.get_modpath(minetest.get_current_modname()) + +dofile(path.."/after_node.lua") +dofile(path.."/chances.lua") +dofile(path.."/intervals.lua") +dofile(path.."/min_max.lua") +dofile(path.."/neighbors.lua") +dofile(path.."/override.lua") diff --git a/games/devtest/mods/testabms/intervals.lua b/games/devtest/mods/testabms/intervals.lua new file mode 100644 index 0000000000000..0e4e36fd499bf --- /dev/null +++ b/games/devtest/mods/testabms/intervals.lua @@ -0,0 +1,56 @@ +-- test ABMs with different interval + +local S = minetest.get_translator("testabms") + +-- ABM inteval 1 node +minetest.register_node("testabms:interval_1", { + description = S("Node for test ABM interval_1"), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:interval_1") + end, +}) + +minetest.register_abm({ + label = "testabms:interval_1", + nodenames = "testabms:interval_1", + interval = 1, + chance = 1, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabsm:interval_1 changed this node.") + end + }) + +-- ABM interval 60 node +minetest.register_node("testabms:interval_60", { + description = S("Node for test ABM interval_60"), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:interval_60") + end, +}) + +minetest.register_abm({ + label = "testabms:interval_60", + nodenames = "testabms:interval_60", + interval = 60, + chance = 1, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabsm:interval_60 changed this node.") + end + }) + diff --git a/games/devtest/mods/testabms/min_max.lua b/games/devtest/mods/testabms/min_max.lua new file mode 100644 index 0000000000000..20d0799aaff8c --- /dev/null +++ b/games/devtest/mods/testabms/min_max.lua @@ -0,0 +1,58 @@ +-- test ABMs with min_y and max_y + +local S = minetest.get_translator("testabms") + +-- ABM min_y node +minetest.register_node("testabms:min_y", { + description = S("Node for test ABM min_y."), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:min_y at y "..pos.y.." with min_y = 0") + end, +}) + +minetest.register_abm({ + label = "testabms:min_y", + nodenames = "testabms:min_y", + interval = 10, + chance = 1, + min_y = 0, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabsm:min_y changed this node.") + end + }) + +-- ABM max_y node +minetest.register_node("testabms:max_y", { + description = S("Node for test ABM max_y."), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:max_y at y "..pos.y.." with max_y = 0") + end, +}) + +minetest.register_abm({ + label = "testabms:max_y", + nodenames = "testabms:max_y", + interval = 10, + chance = 1, + max_y = 0, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabsm:max_y changed this node.") + end + }) + diff --git a/games/devtest/mods/testabms/mod.conf b/games/devtest/mods/testabms/mod.conf new file mode 100644 index 0000000000000..ad74cd2ed1199 --- /dev/null +++ b/games/devtest/mods/testabms/mod.conf @@ -0,0 +1,2 @@ +name = testabms +description = Contains some nodes for test ABMs. diff --git a/games/devtest/mods/testabms/neighbors.lua b/games/devtest/mods/testabms/neighbors.lua new file mode 100644 index 0000000000000..3583eb447f95e --- /dev/null +++ b/games/devtest/mods/testabms/neighbors.lua @@ -0,0 +1,30 @@ +-- test ABMs with neighbor and without_neighbor + +local S = minetest.get_translator("testabms") + +-- ABM required neighboor +minetest.register_node("testabms:required_neighbor", { + description = S("Node for test ABM required_neighbor."), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:required_neighbor (normal drawtype testnode sensitive)") + end, +}) + +minetest.register_abm({ + label = "testabms:required_neighbor", + nodenames = "testabms:required_neighbor", + neighbors = {"testnodes:normal"}, + interval = 1, + chance = 1, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabsm:required_neighbor changed this node.") + end + }) diff --git a/games/devtest/mods/testabms/override.lua b/games/devtest/mods/testabms/override.lua new file mode 100644 index 0000000000000..efb60cfe72b4c --- /dev/null +++ b/games/devtest/mods/testabms/override.lua @@ -0,0 +1,40 @@ +-- test ABMs with override + +local S = minetest.get_translator("testabms") + +-- ABM override +minetest.register_node("testabms:override", { + description = S("Node for test ABM override"), + drawtype = "normal", + tiles = { "testabms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for ABM testabms:overrid") + end, +}) + +minetest.register_abm({ + label = "testabms:override", + name = "testabms:override", + nodenames = "testabms:override", + interval = 1000, + chance = 5000, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "ABM testabms:override changed this node.") + end + }) + +minetest.override_abm("testabms:override", { + interval = 1, + chance = 1, + action = function (pos) + minetest.swap_node(pos, {name="testabms:after_abm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Override ABM testabms:override changed this node.") + end + }) diff --git a/games/devtest/mods/testabms/textures/testabms_after_node.png b/games/devtest/mods/testabms/textures/testabms_after_node.png new file mode 100644 index 0000000000000000000000000000000000000000..dab87594b998dde660a623a10cb6e8fe9a1a8b74 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfSXm-H;@Q#K(^opENwkdiDLntV2h`_qQKreZkP3#AD~DpHR%m*I>YK zwjGT(@8;C;|3_=v}$Oz_?mj^GY`-UXGp4=yt@ Y%$;W#T>IM27-%blr>mdKI;Vst0G7r(4*&oF literal 0 HcmV?d00001 diff --git a/games/devtest/mods/testabms/textures/testabms_wait_node.png b/games/devtest/mods/testabms/textures/testabms_wait_node.png new file mode 100644 index 0000000000000000000000000000000000000000..a9bd9a36f78fdc973c949fb4b9ded1d444215edd GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfj|2BG;e?M9j;d3T7>A%)9PS@tiKNgrtl`-%3-M7kz|#}Bta^XmL%oFUpD#X->OMTD=4o-qQx2oT_|ManSMX`=ZSV<~ e)wuhgoj>ufCtviv(>g$#89ZJ6T-G@yGywp@vqLce literal 0 HcmV?d00001 diff --git a/games/devtest/mods/testlbms/README.md b/games/devtest/mods/testlbms/README.md new file mode 100644 index 0000000000000..0be7847bb882e --- /dev/null +++ b/games/devtest/mods/testlbms/README.md @@ -0,0 +1,5 @@ +# Test LBMs + +This mod contains a nodes and related LBM actions. +By placing these nodes, you can test basic LBM behaviours. + diff --git a/games/devtest/mods/testlbms/init.lua b/games/devtest/mods/testlbms/init.lua new file mode 100644 index 0000000000000..06d11d7fd2ee2 --- /dev/null +++ b/games/devtest/mods/testlbms/init.lua @@ -0,0 +1,45 @@ +local S = minetest.get_translator("testlbms") + +-- After LBM node +minetest.register_node("testlbms:after_lbm", { + description = S("After LBM processed node."), + drawtype = "normal", + tiles = { "testlbms_after_node.png" }, + + groups = { dig_immediate = 3 }, +}) + +-- LBM onload change +minetest.register_node("testlbms:onload_change", { + description = S("Node for test LBM"), + drawtype = "normal", + tiles = { "testlbms_wait_node.png" }, + + groups = { dig_immediate = 3 }, + + on_construct = function (pos) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Waiting for LBM testlbms:chance_5") + end, +}) + +minetest.register_lbm({ + label = "testlbms:onload_change", + name = "testlbms:onload_change", + nodenames = "testlbms:onload_change", + run_at_every_load = true, + action = function (pos) + minetest.swap_node(pos, {name="testlbms:after_lbm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "LBM testlbms:onload_change changed this node.") + end + }) + +minetest.override_lbm("testlbms:onload_change", { + action = function (pos) + minetest.swap_node(pos, {name="testlbms:after_lbm"}) + local meta = minetest.get_meta(pos) + meta:set_string("infotext", "Override LBM testlbms:onload_change changed this node.") + end, + }) + diff --git a/games/devtest/mods/testlbms/mod.conf b/games/devtest/mods/testlbms/mod.conf new file mode 100644 index 0000000000000..b94f5e1301e63 --- /dev/null +++ b/games/devtest/mods/testlbms/mod.conf @@ -0,0 +1,2 @@ +name = testlbms +description = Contains some nodes for test LBMs. diff --git a/games/devtest/mods/testlbms/textures/testlbms_after_node.png b/games/devtest/mods/testlbms/textures/testlbms_after_node.png new file mode 100644 index 0000000000000000000000000000000000000000..9bdb1987d979a7a8677b5d69a6e29ecf17bb3728 GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf-HME>E{iEB7#oC1mh6vvDC019?XSk2+e|i!yV=c-U|RBc-rqV~M^S!