Make default.chest.register_chest() usable for other mods (#2127)
authorbell07 <web.alexander@web.de>
Mon, 13 Apr 2020 18:26:44 +0000 (20:26 +0200)
committerGitHub <noreply@github.com>
Mon, 13 Apr 2020 18:26:44 +0000 (20:26 +0200)
game_api.txt
mods/default/chests.lua

index 6d8b08f70a97c0b4c88e838a2ce805478bef6450..561387d2993e482be780d1472467172916f28562 100644 (file)
@@ -136,12 +136,12 @@ The chests API allows the creation of chests, which have their own inventories f
  * A table indexed by player name to keep track of who opened what chest.
  * Key: The name of the player.
  * Value: A table containing information about the chest the player is looking at.
-   e.g `{ pos = {1, 1, 1}, sound = null, swap = "chest" }`
+   e.g `{ pos = {1, 1, 1}, sound = null, swap = "default:chest" }`
 
 `default.chest.register_chest(name, def)`
 
  * Registers new chest
- * `name` Name for chest
+ * `name` Name for chest e.g. "default:chest"
  * `def`  See [#Chest Definition]
 
 ### Chest Definition
index 3fe9c1a0d59ced9a91e6217fff59541ed4da0ca1..f4462ae75d66b50f1e19b3a8e0b867c3965082d3 100644 (file)
@@ -44,7 +44,7 @@ function default.chest.chest_lid_close(pn)
        end
 
        local node = minetest.get_node(pos)
-       minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap,
+       minetest.after(0.2, minetest.swap_node, pos, { name = swap,
                        param2 = node.param2 })
        minetest.sound_play(sound, {gain = 0.3, pos = pos,
                max_hear_distance = 10}, true)
@@ -76,7 +76,8 @@ minetest.register_on_leaveplayer(function(player)
        end
 end)
 
-function default.chest.register_chest(name, d)
+function default.chest.register_chest(prefixed_name, d)
+       local name = prefixed_name:sub(1,1) == ':' and prefixed_name:sub(2,-1) or prefixed_name
        local def = table.copy(d)
        def.drawtype = "mesh"
        def.visual = "mesh"
@@ -132,7 +133,7 @@ function default.chest.register_chest(name, d)
                                        pos = pos, max_hear_distance = 10}, true)
                        if not default.chest.chest_lid_obstructed(pos) then
                                minetest.swap_node(pos,
-                                               { name = "default:" .. name .. "_open",
+                                               { name = name .. "_open",
                                                param2 = node.param2 })
                        end
                        minetest.after(0.2, minetest.show_formspec,
@@ -203,7 +204,7 @@ function default.chest.register_chest(name, d)
                                        max_hear_distance = 10}, true)
                        if not default.chest.chest_lid_obstructed(pos) then
                                minetest.swap_node(pos, {
-                                               name = "default:" .. name .. "_open",
+                                               name = name .. "_open",
                                                param2 = node.param2 })
                        end
                        minetest.after(0.2, minetest.show_formspec,
@@ -215,7 +216,7 @@ function default.chest.register_chest(name, d)
                def.on_blast = function(pos)
                        local drops = {}
                        default.get_inventory_drops(pos, "main", drops)
-                       drops[#drops+1] = "default:" .. name
+                       drops[#drops+1] = name
                        minetest.remove_node(pos)
                        return drops
                end
@@ -248,7 +249,7 @@ function default.chest.register_chest(name, d)
                        def_opened.tiles[i].backface_culling = true
                end
        end
-       def_opened.drop = "default:" .. name
+       def_opened.drop = name
        def_opened.groups.not_in_creative_inventory = 1
        def_opened.selection_box = {
                type = "fixed",
@@ -265,29 +266,31 @@ function default.chest.register_chest(name, d)
        def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh
        def_closed.tiles[3] = def.tiles[3].."^[transformFX"
 
-       minetest.register_node("default:" .. name, def_closed)
-       minetest.register_node("default:" .. name .. "_open", def_opened)
+       minetest.register_node(prefixed_name, def_closed)
+       minetest.register_node(prefixed_name .. "_open", def_opened)
 
        -- convert old chests to this new variant
-       minetest.register_lbm({
-               label = "update chests to opening chests",
-               name = "default:upgrade_" .. name .. "_v2",
-               nodenames = {"default:" .. name},
-               action = function(pos, node)
-                       local meta = minetest.get_meta(pos)
-                       meta:set_string("formspec", nil)
-                       local inv = meta:get_inventory()
-                       local list = inv:get_list("default:chest")
-                       if list then
-                               inv:set_size("main", 8*4)
-                               inv:set_list("main", list)
-                               inv:set_list("default:chest", nil)
+       if name == "default:chest" or name == "default:chest_locked" then
+               minetest.register_lbm({
+                       label = "update chests to opening chests",
+                       name = "default:upgrade_" .. name:sub(9,-1) .. "_v2",
+                       nodenames = {name},
+                       action = function(pos, node)
+                               local meta = minetest.get_meta(pos)
+                               meta:set_string("formspec", nil)
+                               local inv = meta:get_inventory()
+                               local list = inv:get_list("default:chest")
+                               if list then
+                                       inv:set_size("main", 8*4)
+                                       inv:set_list("main", list)
+                                       inv:set_list("default:chest", nil)
+                               end
                        end
-               end
-       })
+               })
+       end
 end
 
-default.chest.register_chest("chest", {
+default.chest.register_chest("default:chest", {
        description = S("Chest"),
        tiles = {
                "default_chest_top.png",
@@ -303,7 +306,7 @@ default.chest.register_chest("chest", {
        groups = {choppy = 2, oddly_breakable_by_hand = 2},
 })
 
-default.chest.register_chest("chest_locked", {
+default.chest.register_chest("default:chest_locked", {
        description = S("Locked Chest"),
        tiles = {
                "default_chest_top.png",