]> git.lizzy.rs Git - xdecor.git/commitdiff
Prevent placing items in some slots and rename itemframe file
authorjp <jeanpatrick.guerrero@gmail.com>
Sun, 5 Jul 2015 10:08:33 +0000 (12:08 +0200)
committerjp <jeanpatrick.guerrero@gmail.com>
Sun, 5 Jul 2015 10:10:17 +0000 (12:10 +0200)
hive.lua
init.lua
itemframe.lua [new file with mode: 0644]
itemframes.lua [deleted file]
worktable.lua

index 2ff37c7f8f9b8decd8932fb5d64842af0cf8de8c..3a64913d7ef1bdc2cd93d3ba0359e3855124b97d 100644 (file)
--- a/hive.lua
+++ b/hive.lua
@@ -15,6 +15,7 @@ end
 local function hive_dig(pos, player)
        local meta = minetest.get_meta(pos)
        local inv = meta:get_inventory()
+
        if not inv:is_empty("honey") then
                return false
        end
@@ -37,7 +38,14 @@ xdecor.register("hive", {
        on_punch = function(pos, node, puncher, pointed_thing)
                local health = puncher:get_hp()
                puncher:set_hp(health-4)
-       end
+       end,
+       allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+               local meta = minetest.get_meta(pos)
+               local inv = meta:get_inventory()
+               local to_stack = inv:get_stack(listname, index)
+
+               if listname == "honey" then return 0 end
+       end,
 })
 
 minetest.register_abm({
index 0b3c285b31b1000ad43171f23368eeeecc4bd266..76e3a3d4578accb61aa5e096fbf3dd1aa7f73c32 100644 (file)
--- a/init.lua
+++ b/init.lua
@@ -5,7 +5,7 @@ dofile(modpath.."/handlers/nodeboxes.lua")
 dofile(modpath.."/handlers/registration.lua")
 dofile(modpath.."/crafts.lua")
 dofile(modpath.."/hive.lua")
-dofile(modpath.."/itemframes.lua")
+dofile(modpath.."/itemframe.lua")
 dofile(modpath.."/mailbox.lua")
 dofile(modpath.."/rope.lua")
 dofile(modpath.."/nodes.lua")
diff --git a/itemframe.lua b/itemframe.lua
new file mode 100644 (file)
index 0000000..de366b1
--- /dev/null
@@ -0,0 +1,145 @@
+local tmp = {}
+screwdriver = screwdriver or {}
+
+minetest.register_entity("xdecor:f_item", {
+       hp_max = 1,
+       visual = "wielditem",
+       visual_size = {x=.33,y=.33},
+       collisionbox = {0, 0, 0, 0, 0, 0},
+       physical = false,
+       textures = {"air"},
+       on_activate = function(self, staticdata)
+               if tmp.nodename ~= nil and tmp.texture ~= nil then
+                       self.nodename = tmp.nodename
+                       tmp.nodename = nil
+                       self.texture = tmp.texture
+                       tmp.texture = nil
+               else
+                       if staticdata ~= nil and staticdata ~= "" then
+                               local data = staticdata:split(';')
+                               if data and data[1] and data[2] then
+                                       self.nodename = data[1]
+                                       self.texture = data[2]
+                               end
+                       end
+               end
+               if self.texture ~= nil then
+                       self.object:set_properties({textures={self.texture}})
+               end
+       end,
+       get_staticdata = function(self)
+               if self.nodename ~= nil and self.texture ~= nil then
+                       return self.nodename .. ';' .. self.texture
+               end
+               return ""
+       end
+})
+
+local remove_item = function(pos, node)
+       local objs = nil
+       objs = minetest.get_objects_inside_radius(pos, .5)
+
+       if objs then
+               for _, obj in ipairs(objs) do
+                       if obj and obj:get_luaentity() 
+                        and obj:get_luaentity().name == "xdecor:f_item" then
+                               obj:remove()
+                       end
+               end
+       end
+end
+
+local facedir = {}
+facedir[0] = {x=0, y=0, z=1}
+facedir[1] = {x=1, y=0, z=0}
+facedir[2] = {x=0, y=0, z=-1}
+facedir[3] = {x=-1, y=0, z=0}
+
+local update_item = function(pos, node)
+       remove_item(pos, node)
+       local meta = minetest.get_meta(pos)
+
+       if meta:get_string("item") ~= "" then
+               local posad = facedir[node.param2]
+
+               if not posad then
+                       return
+               end
+               pos.x = pos.x + posad.x*6.5/16
+               pos.y = pos.y + posad.y*6.5/16
+               pos.z = pos.z + posad.z*6.5/16
+               tmp.nodename = node.name
+               tmp.texture = ItemStack(meta:get_string("item")):get_name()
+
+               local e = minetest.add_entity(pos, "xdecor:f_item")
+               local yaw = math.pi*2 - node.param2 * math.pi/2
+               e:setyaw(yaw)
+       end
+end
+
+local drop_item = function(pos, node)
+       local meta = minetest.get_meta(pos)
+       if meta:get_string("item") ~= "" then
+               minetest.add_item(pos, meta:get_string("item"))
+               meta:set_string("item", "")
+       end
+       remove_item(pos, node)
+end
+
+xdecor.register("frame", {
+       description = "Item frame",
+       groups = {snappy=3},
+       on_rotate = screwdriver.disallow,
+       node_box = {
+               type = "fixed",
+               fixed = {-0.5, -0.5, 7/16, 0.5, 0.5, 0.5}
+       },
+       tiles = {
+               "xdecor_wood.png", "xdecor_wood.png", "xdecor_wood.png",
+               "xdecor_wood.png", "xdecor_wood.png", "xdecor_frame.png"
+       }, 
+       inventory_image = "xdecor_frame.png",
+       after_place_node = function(pos, placer, itemstack)
+               local meta = minetest.get_meta(pos)
+               meta:set_string("owner", placer:get_player_name())
+               meta:set_string("infotext", "Item frame (owned by "..placer:get_player_name()..")")
+       end,
+       on_rightclick = function(pos, node, clicker, itemstack)
+               if not itemstack then
+                       return
+               end
+
+               local meta = minetest.get_meta(pos)
+               if clicker:get_player_name() == meta:get_string("owner") then
+                       drop_item(pos, node)
+                       local s = itemstack:take_item()
+                       meta:set_string("item", s:to_string())
+                       update_item(pos, node)
+               end
+
+               return itemstack
+       end,
+       on_punch = function(pos, node, puncher)
+               local meta = minetest.get_meta(pos)
+               if puncher:get_player_name() == meta:get_string("owner") then
+                       drop_item(pos, node)
+               end
+       end,
+       can_dig = function(pos, player)
+               local meta = minetest.get_meta(pos)
+               return player:get_player_name() == meta:get_string("owner")
+       end,
+       after_destruct = remove_item
+})
+
+minetest.register_abm({
+       nodenames = {"xdecor:frame"},
+       interval = 15,
+       chance = 1,
+       action = function(pos, node, active_object_count, active_object_count_wider)
+               if #minetest.get_objects_inside_radius(pos, 0.5) > 0 then
+                       return
+               end
+               update_item(pos, node)
+       end
+})
diff --git a/itemframes.lua b/itemframes.lua
deleted file mode 100644 (file)
index de366b1..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-local tmp = {}
-screwdriver = screwdriver or {}
-
-minetest.register_entity("xdecor:f_item", {
-       hp_max = 1,
-       visual = "wielditem",
-       visual_size = {x=.33,y=.33},
-       collisionbox = {0, 0, 0, 0, 0, 0},
-       physical = false,
-       textures = {"air"},
-       on_activate = function(self, staticdata)
-               if tmp.nodename ~= nil and tmp.texture ~= nil then
-                       self.nodename = tmp.nodename
-                       tmp.nodename = nil
-                       self.texture = tmp.texture
-                       tmp.texture = nil
-               else
-                       if staticdata ~= nil and staticdata ~= "" then
-                               local data = staticdata:split(';')
-                               if data and data[1] and data[2] then
-                                       self.nodename = data[1]
-                                       self.texture = data[2]
-                               end
-                       end
-               end
-               if self.texture ~= nil then
-                       self.object:set_properties({textures={self.texture}})
-               end
-       end,
-       get_staticdata = function(self)
-               if self.nodename ~= nil and self.texture ~= nil then
-                       return self.nodename .. ';' .. self.texture
-               end
-               return ""
-       end
-})
-
-local remove_item = function(pos, node)
-       local objs = nil
-       objs = minetest.get_objects_inside_radius(pos, .5)
-
-       if objs then
-               for _, obj in ipairs(objs) do
-                       if obj and obj:get_luaentity() 
-                        and obj:get_luaentity().name == "xdecor:f_item" then
-                               obj:remove()
-                       end
-               end
-       end
-end
-
-local facedir = {}
-facedir[0] = {x=0, y=0, z=1}
-facedir[1] = {x=1, y=0, z=0}
-facedir[2] = {x=0, y=0, z=-1}
-facedir[3] = {x=-1, y=0, z=0}
-
-local update_item = function(pos, node)
-       remove_item(pos, node)
-       local meta = minetest.get_meta(pos)
-
-       if meta:get_string("item") ~= "" then
-               local posad = facedir[node.param2]
-
-               if not posad then
-                       return
-               end
-               pos.x = pos.x + posad.x*6.5/16
-               pos.y = pos.y + posad.y*6.5/16
-               pos.z = pos.z + posad.z*6.5/16
-               tmp.nodename = node.name
-               tmp.texture = ItemStack(meta:get_string("item")):get_name()
-
-               local e = minetest.add_entity(pos, "xdecor:f_item")
-               local yaw = math.pi*2 - node.param2 * math.pi/2
-               e:setyaw(yaw)
-       end
-end
-
-local drop_item = function(pos, node)
-       local meta = minetest.get_meta(pos)
-       if meta:get_string("item") ~= "" then
-               minetest.add_item(pos, meta:get_string("item"))
-               meta:set_string("item", "")
-       end
-       remove_item(pos, node)
-end
-
-xdecor.register("frame", {
-       description = "Item frame",
-       groups = {snappy=3},
-       on_rotate = screwdriver.disallow,
-       node_box = {
-               type = "fixed",
-               fixed = {-0.5, -0.5, 7/16, 0.5, 0.5, 0.5}
-       },
-       tiles = {
-               "xdecor_wood.png", "xdecor_wood.png", "xdecor_wood.png",
-               "xdecor_wood.png", "xdecor_wood.png", "xdecor_frame.png"
-       }, 
-       inventory_image = "xdecor_frame.png",
-       after_place_node = function(pos, placer, itemstack)
-               local meta = minetest.get_meta(pos)
-               meta:set_string("owner", placer:get_player_name())
-               meta:set_string("infotext", "Item frame (owned by "..placer:get_player_name()..")")
-       end,
-       on_rightclick = function(pos, node, clicker, itemstack)
-               if not itemstack then
-                       return
-               end
-
-               local meta = minetest.get_meta(pos)
-               if clicker:get_player_name() == meta:get_string("owner") then
-                       drop_item(pos, node)
-                       local s = itemstack:take_item()
-                       meta:set_string("item", s:to_string())
-                       update_item(pos, node)
-               end
-
-               return itemstack
-       end,
-       on_punch = function(pos, node, puncher)
-               local meta = minetest.get_meta(pos)
-               if puncher:get_player_name() == meta:get_string("owner") then
-                       drop_item(pos, node)
-               end
-       end,
-       can_dig = function(pos, player)
-               local meta = minetest.get_meta(pos)
-               return player:get_player_name() == meta:get_string("owner")
-       end,
-       after_destruct = remove_item
-})
-
-minetest.register_abm({
-       nodenames = {"xdecor:frame"},
-       interval = 15,
-       chance = 1,
-       action = function(pos, node, active_object_count, active_object_count_wider)
-               if #minetest.get_objects_inside_radius(pos, 0.5) > 0 then
-                       return
-               end
-               update_item(pos, node)
-       end
-})
index 2ae71b4174d93c284b2f8749e43616a80a8058ca..0a00b940c96a0b8c6aedef994e29672e496dc775 100644 (file)
@@ -99,13 +99,24 @@ local function xdig(pos, player)
        local inv = meta:get_inventory()
 
        if not inv:is_empty("input") or not inv:is_empty("output")
-        or not inv:is_empty("fuel") or not inv:is_empty("src") then
+         or not inv:is_empty("fuel") or not inv:is_empty("src") then
                return false
        end
-
        return true
 end
 
+local function xput(pos, listname, index, stack, player)
+       local meta = minetest.get_meta(pos)
+       local inv = meta:get_inventory()
+       local to_stack = inv:get_stack(listname, index)
+
+       if listname == "output" then
+               return 0
+       else
+               return 99
+       end
+end
+
 xdecor.register("worktable", {
        description = "Work Table",
        groups = {snappy=3},
@@ -117,7 +128,8 @@ xdecor.register("worktable", {
        },
        on_construct = xconstruct,
        on_receive_fields = xfields,
-       can_dig = xdig
+       can_dig = xdig,
+       allow_metadata_inventory_put = xput
 })
 
 local function light(mat)