X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=itemframe.lua;h=e491fa1451ca90a997a00147fee7964dc06aa994;hb=df7bfb9f2eef44c9c14e3d314cd8855cb5acf776;hp=615e24be6edb9d7f903bd28ceff042c0bc2323f7;hpb=50f77146b5cd20c81b73796a7fec3a00edc4495c;p=xdecor.git diff --git a/itemframe.lua b/itemframe.lua index 615e24b..e491fa1 100644 --- a/itemframe.lua +++ b/itemframe.lua @@ -1,39 +1,7 @@ local tmp = {} screwdriver = screwdriver or {} -minetest.register_entity("xdecor:f_item", { - hp_max = 1, - visual = "wielditem", - visual_size = {x=.33, y=.33}, - collisionbox = {0}, - physical = false, - textures = {"air"}, - on_activate = function(self, staticdata) - if tmp.nodename and tmp.texture then - self.nodename = tmp.nodename - tmp.nodename = nil - self.texture = tmp.texture - tmp.texture = nil - elseif staticdata 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 - if self.texture then - self.object:set_properties({textures={self.texture}}) - end - end, - get_staticdata = function(self) - if self.nodename and self.texture then - return self.nodename..";"..self.texture - end - return "" - end -}) - -local remove_item = function(pos, node) +local function remove_item(pos, node) local objs = minetest.get_objects_inside_radius(pos, 0.5) if not objs then return end @@ -45,13 +13,12 @@ local remove_item = function(pos, node) 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 facedir = { + [0] = {x=0, y=0, z=1}, {x=1, y=0, z=0}, + {x=0, y=0, z=-1},{x=-1, y=0, z=0} +} -local update_item = function(pos, node) +local function update_item(pos, node) remove_item(pos, node) local meta = minetest.get_meta(pos) local itemstring = meta:get_string("item") @@ -69,44 +36,69 @@ local update_item = function(pos, node) entity:setyaw(yaw) end -local drop_item = function(pos, node) +local function drop_item(pos, node) local meta = minetest.get_meta(pos) - if meta:get_string("item") == "" then return end + local item = meta:get_string("item") + if item == "" then return end - minetest.add_item(pos, meta:get_string("item")) + minetest.add_item(pos, item) meta:set_string("item", "") remove_item(pos, node) end +minetest.register_entity("xdecor:f_item", { + hp_max = 1, + visual = "wielditem", + visual_size = {x=.33, y=.33}, + collisionbox = {0}, + physical = false, + textures = {"air"}, + on_activate = function(self, staticdata) + if tmp.nodename and tmp.texture then + self.nodename = tmp.nodename + tmp.nodename = nil + self.texture = tmp.texture + tmp.texture = nil + elseif staticdata 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 + if self.texture then + self.object:set_properties({textures={self.texture}}) + end + end, + get_staticdata = function(self) + if self.nodename and self.texture then + return self.nodename..";"..self.texture + end + return "" + end +}) + xdecor.register("frame", { description = "Item Frame", groups = {choppy=3, oddly_breakable_by_hand=2}, sounds = default.node_sound_wood_defaults(), on_rotate = screwdriver.disallow, sunlight_propagates = true, - node_box = { - type = "fixed", - fixed = {-0.5, -0.5, 0.4375, 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", + node_box = xdecor.nodebox.slab_z(0.9375), + tiles = {"xdecor_wood.png", "xdecor_wood.png", "xdecor_wood.png", + "xdecor_wood.png", "xdecor_wood.png", "xdecor_frame.png"}, after_place_node = function(pos, placer, itemstack) local meta = minetest.get_meta(pos) local name = placer:get_player_name() - meta:set_string("owner", name) meta:set_string("infotext", "Item Frame (owned by "..name..")") end, on_rightclick = function(pos, node, clicker, itemstack) local meta = minetest.get_meta(pos) local player = clicker:get_player_name() - - if player ~= meta:get_string("owner") or not itemstack then - return - end + local owner = meta:get_string("owner") + if player ~= owner or not itemstack then return end drop_item(pos, node) local itemstring = itemstack:take_item():to_string() @@ -118,33 +110,25 @@ xdecor.register("frame", { on_punch = function(pos, node, puncher) local meta = minetest.get_meta(pos) local player = puncher:get_player_name() + local owner = meta:get_string("owner") - if player ~= meta:get_string("owner") then return end + if player ~= owner then return end drop_item(pos, node) end, can_dig = function(pos, player) local meta = minetest.get_meta(pos) + local pname = player:get_player_name() local owner = meta:get_string("owner") - if not player or player:get_player_name() ~= owner then - return false - end - - return true + return player and pname == owner end, - on_destruct = function(pos) - local meta = minetest.get_meta(pos) - local node = minetest.get_node(pos) - - if meta:get_string("item") == "" then return end - drop_item(pos, node) - end + after_destruct = remove_item }) minetest.register_abm({ nodenames = {"xdecor:frame"}, interval = 15, chance = 1, - action = function(pos, node, _, _) + action = function(pos, node) local num = #minetest.get_objects_inside_radius(pos, 0.5) if num > 0 then return end update_item(pos, node)