Bring wooden chest fully into the chest system
authorZefram <zefram@fysh.org>
Wed, 2 Jul 2014 17:45:35 +0000 (18:45 +0100)
committerZefram <zefram@fysh.org>
Wed, 23 Jul 2014 15:49:07 +0000 (16:49 +0100)
Re-register most aspects of default:chest and default:chest_locked,
using the technic chests code, so that the wooden chests fit properly
into the sequence of chest types.  This mainly affects the formspec,
which now uses the style of the other chests, rather than the bare style
used by the default mod.

technic_chests/register.lua
technic_chests/wooden_chest.lua

index 7f175f19b677c6010724c365073b2c7e844dad14..cbdb0dd0201d3fc556080af66d438f444911b6d1 100644 (file)
@@ -142,9 +142,6 @@ local function sort_inventory(inv)
 end
 
 local function get_receive_fields(name, data)
-       if not data.sort and not data.autosort and not data.infotext and not data.color then
-               return nil
-       end
        local lname = name:lower()
        return function(pos, formname, fields, sender)
                local meta = minetest.get_meta(pos)
@@ -171,7 +168,7 @@ local function get_receive_fields(name, data)
 end
 
 
-function technic.chests:register(name, data)
+function technic.chests:definition(name, data)
        local lname = name:lower()
        name = S(name)
 
@@ -245,13 +242,22 @@ function technic.chests:register(name, data)
                def.allow_metadata_inventory_put = self.inv_put
                def.allow_metadata_inventory_take = self.inv_take
        end
+       return def
+end
 
-       local nn = "technic:"..lname..(data.locked and "_locked" or "").."_chest"
+function technic.chests:register(name, data)
+       local def = technic.chests:definition(name, data)
 
+       local nn = "technic:"..name:lower()..(data.locked and "_locked" or "").."_chest"
        minetest.register_node(":"..nn, def)
 
        if data.color then
-               front[3] = front[2]
+               local mk_front
+               if string.find(def.tiles[6], "%^") then
+                       mk_front = function (overlay) return def.tiles[6]:gsub("%^", "^"..overlay.."^") end
+               else
+                       mk_front = function (overlay) return def.tiles[6].."^"..overlay end
+               end
                for i = 1, 15 do
                        local postfix = colorid_to_postfix(i)
                        local colordef = {}
@@ -260,8 +266,7 @@ function technic.chests:register(name, data)
                        end
                        colordef.drop = nn
                        colordef.groups = self.groups_noinv
-                       front[2] = "technic_chest_overlay"..postfix..".png"
-                       colordef.tiles[6] = table.concat(front, "^")
+                       colordef.tiles = { def.tiles[1], def.tiles[2], def.tiles[3], def.tiles[4], def.tiles[5], mk_front("technic_chest_overlay"..postfix..".png") }
                        minetest.register_node(":"..nn..postfix, colordef)
                end
        end
index 8ff33b0bd0488a1093d68f8ec716bf7399f19d9d..0fad12c40c80a4f217d2de98a5446b13116b9809 100644 (file)
@@ -1,14 +1,51 @@
-local S
-if intllib then
-       S = intllib.Getter()
-else
-       S = function(s) return s end
-end
-
+local udef = technic.chests:definition("Wooden", {
+       width = 8,
+       height = 4,
+       sort = false,
+       autosort = false,
+       infotext = false,
+       color = false,
+       locked = false,
+})
+local uudef = {
+       groups = udef.groups,
+       tube = udef.tube,
+       on_construct = udef.on_construct,
+       can_dig = udef.can_dig,
+       on_receive_fields = udef.on_receive_fields,
+       on_metadata_inventory_move = udef.on_metadata_inventory_move,
+       on_metadata_inventory_put = udef.on_metadata_inventory_put,
+       on_metadata_inventory_take = udef.on_metadata_inventory_take,
+}
 if minetest.registered_nodes["default:chest"].description == "Chest" then
-       minetest.override_item("default:chest", { description = S("%s Chest"):format(S("Wooden")) })
+       uudef.description = udef.description
 end
+minetest.override_item("default:chest", uudef)
 
+local ldef = technic.chests:definition("Wooden", {
+       width = 8,
+       height = 4,
+       sort = false,
+       autosort = false,
+       infotext = false,
+       color = false,
+       locked = true,
+})
+local lldef = {
+       groups = ldef.groups,
+       tube = ldef.tube,
+       after_place_node = ldef.after_place_node,
+       on_construct = ldef.on_construct,
+       can_dig = ldef.can_dig,
+       on_receive_fields = ldef.on_receive_fields,
+       allow_metadata_inventory_move = ldef.allow_metadata_inventory_move,
+       allow_metadata_inventory_put = ldef.allow_metadata_inventory_put,
+       allow_metadata_inventory_take = ldef.allow_metadata_inventory_take,
+       on_metadata_inventory_move = ldef.on_metadata_inventory_move,
+       on_metadata_inventory_put = ldef.on_metadata_inventory_put,
+       on_metadata_inventory_take = ldef.on_metadata_inventory_take,
+}
 if minetest.registered_nodes["default:chest_locked"].description == "Locked Chest" then
-       minetest.override_item("default:chest_locked", { description = S("%s Locked Chest"):format(S("Wooden")) })
+       lldef.description = ldef.description
 end
+minetest.override_item("default:chest_locked", lldef)