minetest.register_tool("xdecor:flint_steel", {
description = "Flint & Steel",
inventory_image = "xdecor_flint_steel.png",
- tool_capabilities = {
- groupcaps = { igniter = {uses=10, maxlevel=1} }
- },
on_use = function(itemstack, user, pointed_thing)
local player = user:get_player_name()
- if pointed_thing.type == "node" and
- minetest.get_node(pointed_thing.above).name == "air" then
- if not minetest.is_protected(pointed_thing.above, player) then
- minetest.set_node(pointed_thing.above, {name="xdecor:fire"})
+ local pt = pointed_thing
+
+ if pt.type == "node" and minetest.get_node(pt.above).name == "air" then
+ if not minetest.is_protected(pt.above, player) then
+ minetest.set_node(pt.above, {name="xdecor:fire"})
else
- minetest.chat_send_player(player, "This area is protected.")
+ minetest.chat_send_player(player, "[!] This area is protected")
end
end
xdecor.register("enchantment_table", {
description = "Enchantment Table",
- tiles = {
- "xdecor_enchantment_top.png", "xdecor_enchantment_bottom.png",
- "xdecor_enchantment_side.png", "xdecor_enchantment_side.png",
- "xdecor_enchantment_side.png", "xdecor_enchantment_side.png"
- },
+ tiles = {"xdecor_enchantment_top.png", "xdecor_enchantment_bottom.png",
+ "xdecor_enchantment_side.png", "xdecor_enchantment_side.png",
+ "xdecor_enchantment_side.png", "xdecor_enchantment_side.png"},
groups = {cracky=1, oddly_breakable_by_hand=1, level=1},
sounds = default.node_sound_stone_defaults(),
on_rotate = screwdriver.rotate_simple,
-local tmp = {}
+local tmp, itemframe = {}, {}
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)
+function itemframe:remove_item(pos, node)
local objs = minetest.get_objects_inside_radius(pos, 0.5)
if not objs then return 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 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)
- remove_item(pos, node)
+function itemframe:update_item(pos, node)
+ self:remove_item(pos, node)
local meta = minetest.get_meta(pos)
local itemstring = meta:get_string("item")
local posad = facedir[node.param2]
entity:setyaw(yaw)
end
-local drop_item = function(pos, node)
+function itemframe: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)
+ self: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},
sunlight_propagates = true,
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"
- },
+ 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()
+ local owner = meta:get_string("owner")
+ if player ~= owner or not itemstack then return end
- if player ~= meta:get_string("owner") or not itemstack then
- return
- end
-
- drop_item(pos, node)
+ itemframe:drop_item(pos, node)
local itemstring = itemstack:take_item():to_string()
meta:set_string("item", itemstring)
- update_item(pos, node)
+ itemframe:update_item(pos, node)
return itemstack
end,
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
- drop_item(pos, node)
+ if player ~= owner then return end
+ itemframe: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,
- after_destruct = remove_item
+ after_destruct = itemframe:remove_item(pos, node)
})
minetest.register_abm({
action = function(pos, node)
local num = #minetest.get_objects_inside_radius(pos, 0.5)
if num > 0 then return end
- update_item(pos, node)
+ itemframe:update_item(pos, node)
end
})
xdecor.register("mailbox", {
description = "Mailbox",
- tiles = {
- "xdecor_mailbox_top.png", "xdecor_mailbox_bottom.png",
- "xdecor_mailbox_side.png", "xdecor_mailbox_side.png",
- "xdecor_mailbox.png", "xdecor_mailbox.png",
- },
+ tiles = {"xdecor_mailbox_top.png", "xdecor_mailbox_bottom.png",
+ "xdecor_mailbox_side.png", "xdecor_mailbox_side.png",
+ "xdecor_mailbox.png", "xdecor_mailbox.png"},
groups = {cracky=3, oddly_breakable_by_hand=1},
on_rotate = screwdriver.rotate_simple,
can_dig = mailbox.dig,
inventory_image = "xdecor_bamboo_frame.png",
wield_image = "xdecor_bamboo_frame.png",
groups = {choppy=3, oddly_breakable_by_hand=2, pane=1, flammable=2},
- recipe = {
- {"default:papyrus", "default:papyrus", "default:papyrus"},
- {"default:papyrus", "farming:cotton", "default:papyrus"},
- {"default:papyrus", "default:papyrus", "default:papyrus"}
- }
+ recipe = { {"default:papyrus", "default:papyrus", "default:papyrus"},
+ {"default:papyrus", "farming:cotton", "default:papyrus"},
+ {"default:papyrus", "default:papyrus", "default:papyrus"} }
})
xdecor.register("baricade", {
groups = {choppy=2, oddly_breakable_by_hand=1, flammable=3},
sounds = default.node_sound_wood_defaults(),
on_rotate = screwdriver.rotate_simple,
- tiles = {
- "xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
- "xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
- "xdecor_cabinet_sides.png", "xdecor_cabinet_front.png"
- }
+ tiles = {"xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
+ "xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
+ "xdecor_cabinet_sides.png", "xdecor_cabinet_front.png"}
})
xdecor.register("cabinet_half", {
groups = {choppy=3, oddly_breakable_by_hand=2, flammable=3},
sounds = default.node_sound_wood_defaults(),
node_box = xdecor.nodebox.slab_y(0.5, 0.5),
- tiles = {
- "xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
- "xdecor_half_cabinet_sides.png", "xdecor_half_cabinet_sides.png",
- "xdecor_half_cabinet_sides.png", "xdecor_half_cabinet_front.png"
- }
+ tiles = {"xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
+ "xdecor_half_cabinet_sides.png", "xdecor_half_cabinet_sides.png",
+ "xdecor_half_cabinet_sides.png", "xdecor_half_cabinet_front.png"}
})
xdecor.register("candle", {
legacy_wallmounted = true,
walkable = false,
groups = {dig_immediate=3, attached_node=1},
- tiles = {
- { name = "xdecor_candle_floor.png",
- animation = {type="vertical_frames", length=1.5} },
- { name = "xdecor_candle_ceiling.png",
- animation = {type="vertical_frames", length=1.5} },
- { name = "xdecor_candle_wall.png",
- animation = {type="vertical_frames", length=1.5} }
+ tiles = {{name = "xdecor_candle_floor.png",
+ animation = {type="vertical_frames", length=1.5}},
+ {name = "xdecor_candle_ceiling.png",
+ animation = {type="vertical_frames", length=1.5}},
+ {name = "xdecor_candle_wall.png",
+ animation = {type="vertical_frames", length=1.5}}
},
selection_box = {
type = "wallmounted",
inventory_image = "xdecor_chainlink.png",
wield_image = "xdecor_chainlink.png",
groups = {cracky=3, oddly_breakable_by_hand=2, pane=1},
- recipe = {
- {"default:steel_ingot", "", "default:steel_ingot"},
- {"", "default:steel_ingot", ""},
- {"default:steel_ingot", "", "default:steel_ingot"}
- }
+ recipe = { {"default:steel_ingot", "", "default:steel_ingot"},
+ {"", "default:steel_ingot", ""},
+ {"default:steel_ingot", "", "default:steel_ingot"} }
})
-- The following nodedef is licensed under WTFPL for granting a possible re-use
minetest.register_craft({
output = "xdecor:curtain_"..c.." 4",
- recipe = {
- {"", "wool:"..c, ""},
- {"", "wool:"..c, ""}
- }
+ recipe = { {"", "wool:"..c, ""},
+ {"", "wool:"..c, ""} }
})
end
xdecor.register("cushion_block", {
tiles = {"xdecor_cushion.png"},
- groups = {snappy=3, flammable=3, fall_damage_add_percent=-75, not_in_creative_inventory=1},
- drop = "xdecor:cushion 2"
+ groups = {snappy=3, flammable=3, fall_damage_add_percent=-75, not_in_creative_inventory=1}
})
local function door_access(door) return door:find("prison") end
xdecor.register("enderchest", {
description = "Ender Chest",
- tiles = {
- "xdecor_enderchest_top.png", "xdecor_enderchest_top.png",
- "xdecor_enderchest_side.png", "xdecor_enderchest_side.png",
- "xdecor_enderchest_side.png", "xdecor_enderchest_front.png"
- },
+ tiles = {"xdecor_enderchest_top.png", "xdecor_enderchest_top.png",
+ "xdecor_enderchest_side.png", "xdecor_enderchest_side.png",
+ "xdecor_enderchest_side.png", "xdecor_enderchest_front.png"},
groups = {cracky=1, choppy=1, oddly_breakable_by_hand=1},
sounds = default.node_sound_stone_defaults(),
on_rotate = screwdriver.rotate_simple,
drawtype = "plantlike",
light_source = 14,
walkable = false,
- tiles = {
- { name = "xdecor_fire_anim.png",
- animation = {type="vertical_frames", length=1.5} }
- },
+ tiles = {{ name = "xdecor_fire_anim.png",
+ animation = {type="vertical_frames", length=1.5 }}},
damage_per_second = 4,
drop = "",
- selection_box = {
- type = "fixed", fixed = {-0.3, -0.5, -0.3, 0.3, -0.3, 0.3}
- },
+ selection_box = xdecor.pixelbox(16, {{4, 0, 4, 8, 3, 8}}),
groups = {dig_immediate=3, hot=3, not_in_creative_inventory=1}
})
legacy_wallmounted = true,
walkable = false,
groups = {dig_immediate=3, attached_node=1},
- tiles = {"xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png",
- "xdecor_lantern.png"},
+ tiles = {"xdecor_lantern_floor.png", "xdecor_lantern_ceiling.png", "xdecor_lantern.png"},
selection_box = {
type = "wallmounted",
wall_top = {-0.25, -0.4, -0.25, 0.25, 0.5, 0.25},
sounds = default.node_sound_glass_defaults()
})
-local flowers = {"dandelion_white", "dandelion_yellow", "geranium", "rose",
- "tulip", "viola"}
-
-for _, f in pairs(flowers) do
+for _, f in pairs({"dandelion_white", "dandelion_yellow", "geranium",
+ "rose", "tulip", "viola"}) do
xdecor.register("potted_"..f, {
description = string.gsub("Potted Flowers ("..f..")", "_", " "),
walkable = false,
minetest.register_craft({
output = "xdecor:potted_"..f,
- recipe = {
- {"default:clay_brick", "flowers:"..f, "default:clay_brick"},
- {"", "default:clay_brick", ""}
- }
+ recipe = { {"default:clay_brick", "flowers:"..f, "default:clay_brick"},
+ {"", "default:clay_brick", ""} }
})
end
inventory_image = "xdecor_rusty_bars.png",
wield_image = "xdecor_rusty_bars.png",
groups = {cracky=3, oddly_breakable_by_hand=2, pane=1},
- recipe = {
- {"", "default:dirt", ""},
- {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
- {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}
- }
+ recipe = { {"", "default:dirt", ""},
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
+ {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"} }
})
+
minetest.register_alias("xpanes:rust_bar", "xpanes:rusty_bar")
for i = 1, 15 do
minetest.register_alias("xpanes:rust_bar_"..i, "xpanes:rusty_bar_"..i)
selection_box = xdecor.nodebox.slab_y(0.05)
})
-local stonish = {"desertstone_tile", "stone_tile", "stone_rune",
- "coalstone_tile", "hard_clay"}
-
-for _, t in pairs(stonish) do
+for _, t in pairs({"desertstone_tile", "stone_tile", "stone_rune",
+ "coalstone_tile", "hard_clay"}) do
xdecor.register(t, {
drawtype = "normal",
description = string.gsub(" "..t, "%W%l", string.upper):sub(2):gsub("_", " "),
light_source = 11,
groups = {snappy=3},
on_rotate = screwdriver.rotate_simple,
- tiles = {
- "xdecor_television_left.png^[transformR270",
- "xdecor_television_left.png^[transformR90",
- "xdecor_television_left.png^[transformFX",
- "xdecor_television_left.png", "xdecor_television_back.png",
- { name = "xdecor_television_front_animated.png",
- animation = {type="vertical_frames", length=80.0} }
- }
+ tiles = { "xdecor_television_left.png^[transformR270",
+ "xdecor_television_left.png^[transformR90",
+ "xdecor_television_left.png^[transformFX",
+ "xdecor_television_left.png", "xdecor_television_back.png",
+ {name = "xdecor_television_front_animated.png",
+ animation = {type="vertical_frames", length=80.0}} }
})
xpanes.register_pane("wood_frame", {
wield_image = "xdecor_wood_frame.png",
groups = {choppy=3, oddly_breakable_by_hand=2, pane=1, flammable=3},
sounds = default.node_sound_wood_defaults(),
- recipe = {
- {"group:wood", "group:stick", "group:wood"},
- {"group:stick", "group:stick", "group:stick"},
- {"group:wood", "group:stick", "group:wood"}
- }
+ recipe = { {"group:wood", "group:stick", "group:wood"},
+ {"group:stick", "group:stick", "group:stick"},
+ {"group:wood", "group:stick", "group:wood"} }
})
xdecor.register("woodframed_glass", {
-- Code by Mirko K. (modified by Temperest, Wulfsdad and kilbith) (License: GPL).
minetest.register_on_punchnode(function(pos, oldnode, digger)
if oldnode.name == "xdecor:rope" then
- rope.remove(pos, oldnode, digger, "xdecor:rope")
+ rope:remove(pos, oldnode, digger, "xdecor:rope")
end
end)
return itemstack
end
-function rope.remove(pos, oldnode, digger, rope_name)
+function rope:remove(pos, oldnode, digger, rope_name)
local num = 0
local below = {x=pos.x, y=pos.y, z=pos.z}
local digger_inv = digger:get_inventory()
tiles = {"xdecor_rope.png"},
inventory_image = "xdecor_rope_inv.png",
wield_image = "xdecor_rope_inv.png",
- selection_box = {
- type = "fixed",
- fixed = {-0.15, -0.5, -0.15, 0.15, 0.5, 0.15}
- },
+ selection_box = xdecor.pixelbox(8, {{3, 0, 3, 2, 8, 2}}),
on_place = rope.place
})
}
-- Tools allowed to be repaired.
-function workbench:repairable_tools(stack)
- local tools = [[ pick, axe, shovel, sword, hoe, armor, shield ]]
- return tools:find(stack:match(":(%w+)"))
+function workbench:repairable(stack)
+ local tools = {"pick", "axe", "shovel", "sword", "hoe", "armor", "shield"}
+ for _, t in pairs(tools) do
+ if stack:find(t) then return true end
+ end
+ return false
end
function workbench:get_output(inv, input, name)
inv:set_stack("tool", 1, tool)
inv:set_stack("hammer", 1, hammer)
-
return true
end
function workbench.put(_, listname, _, stack)
local stackname = stack:get_name()
- if (listname == "tool" and stack:get_wear() > 0 and workbench:repairable_tools(stackname)) or
- (listname == "input" and minetest.registered_nodes[stackname.."_cube"]) or
- (listname == "hammer" and stackname == "xdecor:hammer") or
- listname == "storage" then
+ if (listname == "tool" and stack:get_wear() > 0 and workbench:repairable(stackname)) or
+ (listname == "input" and minetest.registered_nodes[stackname.."_cube"]) or
+ (listname == "hammer" and stackname == "xdecor:hammer") or
+ listname == "storage" then
return stack:get_count()
end
return 0
if listname == "input" then
if stack:get_name() == input:get_name() then
workbench:get_output(inv, input, stack:get_name())
- else inv:set_list("forms", {}) end
+ else
+ inv:set_list("forms", {})
+ end
elseif listname == "forms" then
input:take_item(math.ceil(stack:get_count() / workbench.defs[index][2]))
inv:set_stack("input", 1, input)
description = "Work Bench",
groups = {cracky=2, choppy=2, oddly_breakable_by_hand=1},
sounds = default.node_sound_wood_defaults(),
- tiles = {
- "xdecor_workbench_top.png", "xdecor_workbench_top.png",
- "xdecor_workbench_sides.png", "xdecor_workbench_sides.png",
- "xdecor_workbench_front.png", "xdecor_workbench_front.png"
- },
+ tiles = {"xdecor_workbench_top.png", "xdecor_workbench_top.png",
+ "xdecor_workbench_sides.png", "xdecor_workbench_sides.png",
+ "xdecor_workbench_front.png", "xdecor_workbench_front.png"},
on_rotate = screwdriver.rotate_simple,
can_dig = workbench.dig,
on_timer = workbench.timer,