Global code style cleaning

master
Jean-Patrick Guerrero 2019-07-23 14:03:20 +02:00
parent f0860cb598
commit 61d9da63fa
17 changed files with 614 additions and 404 deletions

View File

@ -8,5 +8,8 @@ read_globals = {
"stairs", "doors", "xpanes",
"xdecor", "xbg",
table = {fields = {"copy"}},
string = {fields = {"split"}},
"unpack",
"stairsplus",
"mesecon"
}

View File

@ -19,24 +19,29 @@ function xdecor.sit(pos, node, clicker, pointed_thing)
if default.player_attached[player_name] then
pos.y = pos.y - 0.5
clicker:setpos(pos)
clicker:set_eye_offset({x=0, y=0, z=0}, {x=0, y=0, z=0})
clicker:set_eye_offset(vector.new(), vector.new())
clicker:set_physics_override({speed = 1, jump = 1, gravity = 1})
default.player_attached[player_name] = false
default.player_set_animation(clicker, "stand", 30)
elseif not default.player_attached[player_name] and node.param2 <= 3 and
not ctrl.sneak and vector.equals(vel, {x=0,y=0,z=0}) then
not ctrl.sneak and vector.equals(vel, vector.new()) then
clicker:set_eye_offset({x=0, y=-7, z=2}, {x=0, y=0, z=0})
clicker:set_eye_offset({x = 0, y = -7, z = 2}, vector.new())
clicker:set_physics_override({speed = 0, jump = 0, gravity = 1})
clicker:setpos(pos)
default.player_attached[player_name] = true
default.player_set_animation(clicker, "sit", 30)
if node.param2 == 0 then clicker:set_look_yaw(3.15)
elseif node.param2 == 1 then clicker:set_look_yaw(7.9)
elseif node.param2 == 2 then clicker:set_look_yaw(6.28)
elseif node.param2 == 3 then clicker:set_look_yaw(4.75) end
if node.param2 == 0 then
clicker:set_look_yaw(3.15)
elseif node.param2 == 1 then
clicker:set_look_yaw(7.9)
elseif node.param2 == 2 then
clicker:set_look_yaw(6.28)
elseif node.param2 == 3 then
clicker:set_look_yaw(4.75)
end
end
end
@ -47,6 +52,7 @@ function xdecor.sit_dig(pos, digger)
return false
end
end
return true
end

View File

@ -2,21 +2,31 @@
function xdecor.maxn(T)
local n = 0
for k in pairs(T) do
if k > n then n = k end
if k > n then
n = k
end
end
return n
end
-- Returns the length of an hash table.
function xdecor.tablelen(T)
local n = 0
for _ in pairs(T) do n = n + 1 end
for _ in pairs(T) do
n = n + 1
end
return n
end
-- Deep copy of a table. Borrowed from mesecons mod (https://github.com/Jeija/minetest-mod-mesecons).
function xdecor.tablecopy(T)
if type(T) ~= "table" then return T end -- No need to copy.
if type(T) ~= "table" then
return T -- No need to copy.
end
local new = {}
for k, v in pairs(T) do
@ -26,6 +36,7 @@ function xdecor.tablecopy(T)
new[k] = v
end
end
return new
end

View File

@ -1,7 +1,13 @@
xdecor.box = {
slab_y = function(height, shift)
return {-0.5, -0.5 + (shift or 0), -0.5, 0.5, -0.5 + height +
(shift or 0), 0.5}
return {
-0.5,
-0.5 + (shift or 0),
-0.5,
0.5,
-0.5 + height + (shift or 0),
0.5
}
end,
slab_z = function(depth)
return {-0.5, -0.5, -0.5 + depth, 0.5, 0.5, 0.5}
@ -16,12 +22,14 @@ xdecor.box = {
xdecor.nodebox = {
regular = {type = "regular"},
null = {type="fixed", fixed={0,0,0,0,0,0}}
null = {
type = "fixed", fixed = {0,0,0,0,0,0}
}
}
xdecor.pixelbox = function(size, boxes)
local fixed = {}
for _, box in pairs(boxes) do
for _, box in ipairs(boxes) do
-- `unpack` has been changed to `table.unpack` in newest Lua versions.
local x, y, z, w, h, l = unpack(box)
fixed[#fixed + 1] = {
@ -33,10 +41,12 @@ xdecor.pixelbox = function(size, boxes)
((z + l) / size) - 0.5
}
end
return {type = "fixed", fixed = fixed}
end
local mt = {}
mt.__index = function(table, key)
local ref = xdecor.box[key]
local ref_type = type(ref)
@ -55,4 +65,3 @@ mt.__index = function(table, key)
end
setmetatable(xdecor.nodebox, mt)

View File

@ -6,30 +6,30 @@ local default_inventory_formspecs = {
list[context;main;0,0;8,1;]
list[current_player;main;0,2;8,4;]
listring[current_player;main]
listring[context;main] ]]
..default.get_hotbar_bg(0,2),
listring[context;main] ]] ..
default.get_hotbar_bg(0,2),
["16"] = [[ size[8,7]
list[context;main;0,0;8,2;]
list[current_player;main;0,3;8,4;]
listring[current_player;main]
listring[context;main] ]]
..default.get_hotbar_bg(0,3),
listring[context;main] ]] ..
default.get_hotbar_bg(0,3),
["24"] = [[ size[8,8]
list[context;main;0,0;8,3;]
list[current_player;main;0,4;8,4;]
listring[current_player;main]
listring[context;main]" ]]
..default.get_hotbar_bg(0,4),
listring[context;main]" ]] ..
default.get_hotbar_bg(0,4),
["32"] = [[ size[8,9]
list[context;main;0,0.3;8,4;]
list[current_player;main;0,4.85;8,1;]
list[current_player;main;0,6.08;8,3;8]
listring[current_player;main]
listring[context;main] ]]
..default.get_hotbar_bg(0,4.85)
listring[context;main] ]] ..
default.get_hotbar_bg(0,4.85)
}
local function get_formspec_by_size(size)
@ -42,9 +42,9 @@ local default_can_dig = function(pos)
return inv:is_empty("main")
end
function xdecor.register(name, def)
local function xdecor_stairs_alternative(nodename, def)
local mod, name = nodename:match("(.*):(.*)")
for groupname, value in pairs(def.groups) do
if groupname ~= "cracky" and groupname ~= "choppy" and
groupname ~= "flammable" and groupname ~= "crumbly" and
@ -76,6 +76,7 @@ function xdecor.register(name, def)
end
end
function xdecor.register(name, def)
def.drawtype = def.drawtype or (def.mesh and "mesh") or (def.node_box and "nodebox")
def.sounds = def.sounds or default.node_sound_defaults()
@ -108,11 +109,14 @@ function xdecor.register(name, def)
local size = inventory.size or default_inventory_size
local inv = meta:get_inventory()
inv:set_size("main", size)
meta:set_string("formspec", (inventory.formspec or
get_formspec_by_size(size))..xbg)
meta:set_string("formspec",
(inventory.formspec or get_formspec_by_size(size)) .. xbg)
end
def.can_dig = def.can_dig or default_can_dig
elseif infotext and not def.on_construct then
def.on_construct = function(pos)
local meta = minetest.get_meta(pos)

View File

@ -1,18 +1,5 @@
--local t = os.clock()
local mver_major, mver_minor, mver_patch = 0, 4, 16 -- Minetest 0.4.16 minimum.
local client_version = minetest.get_version().string
local major, minor, patch = client_version:match("(%d+).(%d+).(%d+)")
if (major and minor and patch) and
((tonumber(major) < mver_major) or
(mver_major == tonumber(major) and tonumber(minor) < mver_minor) or
(mver_minor == tonumber(minor) and tonumber(patch) < mver_patch)) then
minetest.log("error", "[xdecor] Your Minetest client is too old to run this mod. Disabling.")
return
end
xdecor = {}
local modpath = minetest.get_modpath("xdecor")
@ -21,7 +8,6 @@ dofile(modpath.."/handlers/helpers.lua")
dofile(modpath .. "/handlers/nodeboxes.lua")
dofile(modpath .. "/handlers/registration.lua")
dofile(modpath.."/src/alias.lua")
dofile(modpath .. "/src/nodes.lua")
dofile(modpath .. "/src/recipes.lua")
@ -34,10 +20,10 @@ local subpart = {
"mailbox",
"mechanisms",
"rope",
"workbench"
"workbench",
}
for _, name in pairs(subpart) do
for _, name in ipairs(subpart) do
local enable = minetest.settings:get_bool("enable_xdecor_" .. name)
if enable or enable == nil then
dofile(modpath .. "/src/" .. name .. ".lua")

View File

@ -1 +0,0 @@
minetest.register_alias("xdecor:crafting_guide", "craftguide:book")

View File

@ -5,7 +5,9 @@ local function index_to_xy(idx)
if not idx then
return nil
end
idx = idx - 1
local x = idx % 8
local y = (idx - x) / 8

View File

@ -17,7 +17,9 @@ cauldron.cbox = {
function cauldron.stop_sound(pos)
local spos = minetest.hash_node_position(pos)
if sounds[spos] then minetest.sound_stop(sounds[spos]) end
if sounds[spos] then
minetest.sound_stop(sounds[spos])
end
end
function cauldron.idle_construct(pos)
@ -29,7 +31,10 @@ end
function cauldron.boiling_construct(pos)
local spos = minetest.hash_node_position(pos)
sounds[spos] = minetest.sound_play("xdecor_boiling_water", {
pos=pos, max_hear_distance=5, gain=0.8, loop=true
pos = pos,
max_hear_distance = 5,
gain = 0.8,
loop = true
})
local meta = minetest.get_meta(pos)
@ -58,10 +63,12 @@ function cauldron.filling(pos, node, clicker, itemstack)
itemstack:replace("bucket:bucket_water")
end
minetest.set_node(pos, {name = "xdecor:cauldron_empty", param2 = node.param2})
elseif wield_item:sub(-6) == "_water" and node.name:sub(-6) == "_empty" then
minetest.set_node(pos, {name = "xdecor:cauldron_idle", param2 = node.param2})
itemstack:replace("bucket:bucket_empty")
end
return itemstack
end
end
@ -82,13 +89,17 @@ local function eatable(itemstring)
local item = itemstring:match("[%w_:]+")
local on_use_def = minetest.registered_items[item].on_use
if not on_use_def then return end
return string.format("%q", string.dump(on_use_def)):find("item_eat")
end
function cauldron.boiling_timer(pos)
local node = minetest.get_node(pos)
local objs = minetest.get_objects_inside_radius(pos, 0.5)
if not next(objs) then return true end
if not next(objs) then
return true
end
local ingredients = {}
for _, obj in pairs(objs) do
@ -96,23 +107,29 @@ function cauldron.boiling_timer(pos)
local itemstring = obj:get_luaentity().itemstring
local food = itemstring:match(":([%w_]+)")
for _, ingredient in pairs(ingredients_list) do
for _, ingredient in ipairs(ingredients_list) do
if food and (eatable(itemstring) or food:find(ingredient)) then
ingredients[#ingredients+1] = food break
ingredients[#ingredients + 1] = food
break
end
end
end
end
if #ingredients >= 2 then
for _, obj in pairs(objs) do obj:remove() end
for _, obj in pairs(objs) do
obj:remove()
end
minetest.set_node(pos, {name = "xdecor:cauldron_soup", param2 = node.param2})
end
local node_under = {x = pos.x, y = pos.y - 1, z = pos.z}
if not minetest.get_node(node_under).name:find("fire") then
minetest.set_node(pos, {name = "xdecor:cauldron_idle", param2 = node.param2})
end
return true
end
@ -137,6 +154,7 @@ function cauldron.take_soup(pos, node, clicker, itemstack)
minetest.set_node(pos, {name = "xdecor:cauldron_empty", param2 = node.param2})
end
return itemstack
end
@ -146,11 +164,11 @@ xdecor.register("cauldron_empty", {
on_rotate = screwdriver.rotate_simple,
tiles = {"xdecor_cauldron_top_empty.png", "xdecor_cauldron_sides.png"},
infotext = "Cauldron (empty)",
collision_box = xdecor.pixelbox(16, cauldron.cbox),
on_rightclick = cauldron.filling,
on_construct = function(pos)
cauldron.stop_sound(pos)
end,
on_rightclick = cauldron.filling,
collision_box = xdecor.pixelbox(16, cauldron.cbox)
})
xdecor.register("cauldron_idle", {
@ -162,7 +180,7 @@ xdecor.register("cauldron_idle", {
collision_box = xdecor.pixelbox(16, cauldron.cbox),
on_rightclick = cauldron.filling,
on_construct = cauldron.idle_construct,
on_timer = cauldron.idle_timer
on_timer = cauldron.idle_timer,
})
xdecor.register("cauldron_boiling", {
@ -171,16 +189,20 @@ xdecor.register("cauldron_boiling", {
drop = "xdecor:cauldron_empty",
infotext = "Cauldron (active) - Drop foods inside to make a soup",
damage_per_second = 2,
tiles = {{name="xdecor_cauldron_top_anim_boiling_water.png",
animation={type="vertical_frames", length=3.0}},
"xdecor_cauldron_sides.png"},
tiles = {
{
name = "xdecor_cauldron_top_anim_boiling_water.png",
animation = {type = "vertical_frames", length = 3.0}
},
"xdecor_cauldron_sides.png"
},
collision_box = xdecor.pixelbox(16, cauldron.cbox),
on_rightclick = cauldron.filling,
on_construct = cauldron.boiling_construct,
on_timer = cauldron.boiling_timer,
on_destruct = function(pos)
cauldron.stop_sound(pos)
end,
on_timer = cauldron.boiling_timer
})
xdecor.register("cauldron_soup", {
@ -189,14 +211,18 @@ xdecor.register("cauldron_soup", {
drop = "xdecor:cauldron_empty",
infotext = "Cauldron (active) - Use a bowl to eat the soup",
damage_per_second = 2,
tiles = {{name="xdecor_cauldron_top_anim_soup.png",
animation={type="vertical_frames", length=3.0}},
"xdecor_cauldron_sides.png"},
tiles = {
{
name = "xdecor_cauldron_top_anim_soup.png",
animation = {type = "vertical_frames", length = 3.0}
},
"xdecor_cauldron_sides.png"
},
collision_box = xdecor.pixelbox(16, cauldron.cbox),
on_rightclick = cauldron.take_soup,
on_destruct = function(pos)
cauldron.stop_sound(pos)
end
end,
})
-- Craft items

View File

@ -1,5 +1,6 @@
screwdriver = screwdriver or {}
local ceil, abs, random = math.ceil, math.abs, math.random
local reg_tools = minetest.registered_tools
-- Cost in Mese crystal(s) for enchanting.
local mese_cost = 1
@ -11,13 +12,17 @@ local enchanting = {
damages = 1, -- Sharpness
}
local function cap(S) return S:gsub("^%l", string.upper) end
local function cap(S) return
S:gsub("^%l", string.upper)
end
local function to_percent(orig_value, final_value)
return abs(ceil(((final_value - orig_value) / orig_value) * 100))
end
function enchanting:get_tooltip(enchant, orig_caps, fleshy)
local bonus = {durable = 0, efficiency = 0, damages = 0}
if orig_caps then
bonus.durable = to_percent(orig_caps.uses, orig_caps.uses * enchanting.uses)
local sum_caps_times = 0
@ -28,6 +33,7 @@ function enchanting:get_tooltip(enchant, orig_caps, fleshy)
bonus.efficiency = to_percent(average_caps_time, average_caps_time -
enchanting.times)
end
if fleshy then
bonus.damages = to_percent(fleshy, fleshy + enchanting.damages)
end
@ -37,14 +43,15 @@ function enchanting:get_tooltip(enchant, orig_caps, fleshy)
fast = {"#74ff49", " (+" .. bonus.efficiency .. "%)"},
sharp = {"#ffff00", " (+" .. bonus.damages .. "%)"},
}
return minetest.colorize and minetest.colorize(specs[enchant][1],
"\n" .. cap(enchant) .. specs[enchant][2]) or
"\n" .. cap(enchant) .. specs[enchant][2]
end
local enchant_buttons = {
[[ image_button[3.9,0.85;4,0.92;bg_btn.png;fast;Efficiency]
image_button[3.9,1.77;4,1.12;bg_btn.png;durable;Durability] ]],
"image_button[3.9,0.85;4,0.92;bg_btn.png;fast;Efficiency]" ..
"image_button[3.9,1.77;4,1.12;bg_btn.png;durable;Durability]",
"image_button[3.9,2.9;4,0.92;bg_btn.png;sharp;Sharpness]",
}
@ -63,8 +70,8 @@ function enchanting.formspec(pos, num)
image[2,2.9;1,1;mese_layout.png]
tooltip[sharp;Your weapon inflicts more damages]
tooltip[durable;Your tool last longer]
tooltip[fast;Your tool digs faster] ]]
..default.gui_slots..default.get_hotbar_bg(0.5,4.5)
tooltip[fast;Your tool digs faster] ]] ..
default.gui_slots .. default.get_hotbar_bg(0.5,4.5)
formspec = formspec .. (enchant_buttons[num] or "")
meta:set_string("formspec", formspec)
@ -78,7 +85,7 @@ function enchanting.on_put(pos, listname, _, stack)
"sword",
}
for idx, tools in pairs(tool_groups) do
for idx, tools in ipairs(tool_groups) do
if tools:find(stackname:match(":(%w+)")) then
enchanting.formspec(pos, idx)
end
@ -95,9 +102,12 @@ function enchanting.fields(pos, _, fields, sender)
local mod, name = tool:get_name():match("(.*):(.*)")
local enchanted_tool = (mod or "") .. ":enchanted_" .. (name or "") .. "_" .. next(fields)
if mese:get_count() >= mese_cost and minetest.registered_tools[enchanted_tool] then
if mese:get_count() >= mese_cost and reg_tools[enchanted_tool] then
minetest.sound_play("xdecor_enchanting", {
to_player=sender:get_player_name(), gain=0.8})
to_player = sender:get_player_name(),
gain = 0.8
})
tool:replace(enchanted_tool)
tool:add_wear(orig_wear)
mese:take_item(mese_cost)
@ -112,11 +122,13 @@ function enchanting.dig(pos)
end
local function allowed(tool)
if not tool then return false end
for item in pairs(minetest.registered_tools) do
if item:find("enchanted_"..tool) then return true end
if not tool then return end
for item in pairs(reg_tools) do
if item:find("enchanted_" .. tool) then
return true
end
end
return false
end
function enchanting.put(_, listname, _, stack)
@ -126,17 +138,20 @@ function enchanting.put(_, listname, _, stack)
elseif listname == "tool" and allowed(stackname:match("[^:]+$")) then
return 1
end
return 0
end
function enchanting.on_take(pos, listname)
if listname == "tool" then enchanting.formspec(pos, nil) end
if listname == "tool" then
enchanting.formspec(pos)
end
end
function enchanting.construct(pos)
local meta = minetest.get_meta(pos)
meta:set_string("infotext", "Enchantment Table")
enchanting.formspec(pos, nil)
enchanting.formspec(pos)
local inv = meta:get_inventory()
inv:set_size("tool", 1)
@ -165,8 +180,11 @@ function enchanting.timer(pos)
local minp = {x = pos.x - 2, y = pos.y, z = pos.z - 2}
local maxp = {x = pos.x + 2, y = pos.y + 1, z = pos.z + 2}
local bookshelves = minetest.find_nodes_in_area(minp, maxp, "default:bookshelf")
if #bookshelves == 0 then return true end
if #bookshelves == 0 then
return true
end
local bookshelf_pos = bookshelves[random(1, #bookshelves)]
local x = pos.x - bookshelf_pos.x
@ -184,14 +202,17 @@ function enchanting.timer(pos)
texture = "xdecor_glyph" .. random(1,18) .. ".png"
})
end
return true
end
xdecor.register("enchantment_table", {
description = "Enchantment Table",
tiles = {"xdecor_enchantment_top.png", "xdecor_enchantment_bottom.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"},
"xdecor_enchantment_side.png", "xdecor_enchantment_side.png"
},
groups = {cracky = 1, level = 1},
light_source = 6,
sounds = default.node_sound_stone_defaults(),
@ -204,7 +225,9 @@ xdecor.register("enchantment_table", {
on_metadata_inventory_put = enchanting.on_put,
on_metadata_inventory_take = enchanting.on_take,
allow_metadata_inventory_put = enchanting.put,
allow_metadata_inventory_move = function() return 0 end
allow_metadata_inventory_move = function()
return 0
end,
})
minetest.register_entity("xdecor:book_open", {
@ -227,7 +250,7 @@ function enchanting:register_tools(mod, def)
for tool in pairs(def.tools) do
for material in def.materials:gmatch("[%w_]+") do
for enchant in def.tools[tool].enchants:gmatch("[%w_]+") do
local original_tool = minetest.registered_tools[mod..":"..tool.."_"..material]
local original_tool = reg_tools[mod .. ":" .. tool .. "_" .. material]
if not original_tool then break end
local original_toolcaps = original_tool.tool_capabilities

View File

@ -12,8 +12,8 @@ function hive.construct(pos)
list[context;honey;5,0;1,1;]
list[current_player;main;0,1.35;8,4;]
listring[current_player;main]
listring[context;honey] ]]
..xbg..default.get_hotbar_bg(0,1.35)
listring[context;honey] ]] ..
xbg .. default.get_hotbar_bg(0,1.35)
meta:set_string("formspec", formspec)
meta:set_string("infotext", "Artificial Hive")
@ -25,7 +25,9 @@ end
function hive.timer(pos)
local time = (minetest.get_timeofday() or 0) * 24000
if time < 5500 or time > 18500 then return true end
if time < 5500 or time > 18500 then
return true
end
local inv = minetest.get_meta(pos):get_inventory()
local honeystack = inv:get_stack("honey", 1)
@ -40,8 +42,10 @@ function hive.timer(pos)
inv:add_item("honey", "xdecor:honey")
elseif honey == honey_max then
local timer = minetest.get_node_timer(pos)
timer:stop() return true
timer:stop()
return true
end
return true
end
@ -53,14 +57,20 @@ xdecor.register("hive", {
groups = {choppy=3, oddly_breakable_by_hand=2, flammable=1},
on_construct = hive.construct,
on_timer = hive.timer,
can_dig = function(pos)
local inv = minetest.get_meta(pos):get_inventory()
return inv:is_empty("honey")
end,
on_punch = function(_, _, puncher)
puncher:set_hp(puncher:get_hp() - 2)
end,
allow_metadata_inventory_put = function() return 0 end,
allow_metadata_inventory_put = function()
return 0
end,
on_metadata_inventory_take = function(pos, _, _, stack)
if stack:get_count() == honey_max then
local timer = minetest.get_node_timer(pos)
@ -75,8 +85,13 @@ minetest.register_craftitem("xdecor:honey", {
description = "Honey",
inventory_image = "xdecor_honey.png",
wield_image = "xdecor_honey.png",
groups = {food_honey = 1, food_sugar = 1, flammable = 2, not_in_creative_inventory=1},
on_use = minetest.item_eat(2)
on_use = minetest.item_eat(2),
groups = {
food_honey = 1,
food_sugar = 1,
flammable = 2,
not_in_creative_inventory = 1,
},
})
-- Recipes

View File

@ -6,15 +6,18 @@ local function remove_item(pos, node)
if not objs then return end
for _, obj in pairs(objs) do
if obj and obj:get_luaentity() and
obj:get_luaentity().name == "xdecor:f_item" then
local ent = obj:get_luaentity()
if obj and ent and ent.name == "xdecor:f_item" then
obj:remove() break
end
end
end
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}
[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 function update_item(pos, node)
@ -29,8 +32,8 @@ local function update_item(pos, node)
tmp.texture = ItemStack(itemstring):get_name()
local entity = minetest.add_entity(pos, "xdecor:f_item")
local yaw = math.pi*2 - node.param2 * math.pi/2
entity:setyaw(yaw)
local yaw = (math.pi * 2) - node.param2 * (math.pi / 2)
entity:set_yaw(yaw)
local timer = minetest.get_node_timer(pos)
timer:start(15.0)
@ -64,6 +67,7 @@ function itemframe.timer(pos)
if num == 0 and meta:get_string("item") ~= "" then
update_item(pos, node)
end
return true
end
@ -91,9 +95,10 @@ function itemframe.punch(pos, node, puncher)
local owner = meta:get_string("owner")
local admin = minetest.check_player_privs(player_name, "protection_bypass")
if not admin and player_name ~= owner then return end
if admin and player_name == owner then
drop_item(pos, node)
end
end
function itemframe.dig(pos, player)
if not player then return end
@ -113,8 +118,10 @@ xdecor.register("itemframe", {
sunlight_propagates = true,
inventory_image = "xdecor_itemframe.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_itemframe.png"},
tiles = {
"xdecor_wood.png", "xdecor_wood.png", "xdecor_wood.png",
"xdecor_wood.png", "xdecor_wood.png", "xdecor_itemframe.png"
},
after_place_node = itemframe.after_place,
on_timer = itemframe.timer,
on_rightclick = itemframe.rightclick,
@ -130,7 +137,7 @@ minetest.register_entity("xdecor:f_item", {
physical = false,
textures = {"air"},
on_activate = function(self, staticdata)
local pos = self.object:getpos()
local pos = self.object:get_pos()
if minetest.get_node(pos).name ~= "xdecor:itemframe" then
self.object:remove()
end
@ -148,13 +155,16 @@ minetest.register_entity("xdecor:f_item", {
end
end
if self.texture then
self.object:set_properties({textures={self.texture}})
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
})

View File

@ -2,17 +2,25 @@ local mailbox = {}
screwdriver = screwdriver or {}
local function get_img(img)
if not img then return end
local img_name = img:match("(.*)%.png")
if img_name then return img_name..".png" end
if img_name then
return img_name .. ".png"
end
end
local function img_col(stack)
local def = minetest.registered_items[stack]
if not def then return "" end
if not def then
return ""
end
if def.inventory_image ~= "" then
local img = get_img(def.inventory_image)
if img then return img end
if img then
return img
end
end
if def.tiles then
@ -22,7 +30,10 @@ local function img_col(stack)
elseif type(tile) == "string" then
img = get_img(tile)
end
if img then return img end
if img then
return img
end
end
return ""
@ -44,6 +55,7 @@ function mailbox:formspec(pos, owner, is_owner)
giver = giver .. "#FFFF00," .. giver_name .. "," .. i ..
",#FFFFFF,x " .. stack_count .. ","
img = img .. i .. "=" ..
img_col(stack_name) .. "^\\[resize:16x16,"
end
@ -62,8 +74,9 @@ function mailbox:formspec(pos, owner, is_owner)
"listring[nodemeta:" .. spos .. ";mailbox]" ..
xbg .. default.get_hotbar_bg(0.75, 5.25)
end
return [[ size[8,5]
list[current_player;main;0,1.25;8,4;] ]]..
return "size[8,5]" ..
"list[current_player;main;0,1.25;8,4;]" ..
"label[0,0;Send your goods to\n" ..
(minetest.colorize and
minetest.colorize("#FFFF00", owner) or owner) .. "]" ..
@ -97,8 +110,9 @@ function mailbox.rightclick(pos, node, clicker, itemstack, pointed_thing)
local player = clicker:get_player_name()
local owner = meta:get_string("owner")
minetest.show_formspec(player, "xdecor:mailbox", mailbox:formspec(pos,
owner, (player == owner)))
minetest.show_formspec(player, "xdecor:mailbox",
mailbox:formspec(pos, owner, (player == owner)))
return itemstack
end
@ -112,6 +126,7 @@ function mailbox.put(pos, listname, _, stack, player)
"The mailbox is full")
end
end
return 0
end
@ -139,6 +154,7 @@ function mailbox.allow_take(pos, listname, index, stack, player)
if player:get_player_name() ~= meta:get_string("owner") then
return 0
end
return stack:get_count()
end

View File

@ -35,6 +35,7 @@ end
function plate.timer(pos)
local objs = minetest.get_objects_inside_radius(pos, 0.8)
if not next(objs) or not doors.get then return true end
local minp = {x = pos.x - 2, y = pos.y, z = pos.z - 2}
local maxp = {x = pos.x + 2, y = pos.y, z = pos.z + 2}
local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
@ -47,6 +48,7 @@ function plate.timer(pos)
break
end
end
return true
end
@ -94,6 +96,7 @@ xdecor.register("lever_off", {
sounds = default.node_sound_stone_defaults(),
sunlight_propagates = true,
on_rotate = screwdriver.rotate_simple,
on_rightclick = function(pos, node, clicker, itemstack)
if not doors.get then return itemstack end
local minp = {x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}
@ -103,6 +106,7 @@ xdecor.register("lever_off", {
for i = 1, #doors do
door_toggle(pos, doors[i], clicker)
end
return itemstack
end
})

View File

@ -17,32 +17,40 @@ end
register_pane("bamboo_frame", "Bamboo Frame", {
groups = {choppy = 3, oddly_breakable_by_hand = 2, pane = 1, flammable = 2},
recipe = {{"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"}}
{"default:papyrus", "default:papyrus", "default:papyrus"}
}
})
register_pane("chainlink", "Chainlink", {
groups = {cracky = 3, oddly_breakable_by_hand = 2, pane = 1},
recipe = {{"default:steel_ingot", "", "default:steel_ingot"},
recipe = {
{"default:steel_ingot", "", "default:steel_ingot"},
{"", "default:steel_ingot", ""},
{"default:steel_ingot", "", "default:steel_ingot"}}
{"default:steel_ingot", "", "default:steel_ingot"}
}
})
register_pane("rusty_bar", "Rusty Iron Bars", {
sounds = default.node_sound_stone_defaults(),
groups = {cracky = 2, pane = 1},
recipe = {{"", "default:dirt", ""},
recipe = {
{"", "default:dirt", ""},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}}
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}
}
})
register_pane("wood_frame", "Wood Frame", {
sounds = default.node_sound_wood_defaults(),
groups = {choppy = 2, pane = 1, flammable = 2},
recipe = {{"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"}}
{"group:wood", "group:stick", "group:wood"}
}
})
xdecor.register("baricade", {
@ -81,18 +89,22 @@ end
register_storage("cabinet", "Wooden Cabinet", {
on_rotate = screwdriver.rotate_simple,
tiles = {"xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
tiles = {
"xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
"xdecor_cabinet_sides.png", "xdecor_cabinet_front.png"}
"xdecor_cabinet_sides.png", "xdecor_cabinet_sides.png",
"xdecor_cabinet_sides.png", "xdecor_cabinet_front.png"
}
})
register_storage("cabinet_half", "Half Wooden Cabinet", {
inv_size = 8,
node_box = xdecor.nodebox.slab_y(0.5, 0.5),
on_rotate = screwdriver.rotate_simple,
tiles = {"xdecor_cabinet_sides.png", "xdecor_cabinet_sides.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_half_cabinet_sides.png", "xdecor_half_cabinet_front.png"
}
})
if minetest.get_modpath("moreblocks") then
@ -100,15 +112,19 @@ if minetest.get_modpath("moreblocks") then
else
register_storage("empty_shelf", "Empty Shelf", {
on_rotate = screwdriver.rotate_simple,
tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
"default_wood.png", "default_wood.png^xdecor_empty_shelf.png"}
tiles = {
"default_wood.png", "default_wood.png", "default_wood.png",
"default_wood.png", "default_wood.png^xdecor_empty_shelf.png"
}
})
end
register_storage("multishelf", "Multi Shelf", {
on_rotate = screwdriver.rotate_simple,
tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
"default_wood.png", "default_wood.png^xdecor_multishelf.png"},
tiles = {
"default_wood.png", "default_wood.png", "default_wood.png",
"default_wood.png", "default_wood.png^xdecor_multishelf.png"
},
})
xdecor.register("candle", {
@ -120,12 +136,19 @@ xdecor.register("candle", {
paramtype2 = "wallmounted",
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_floor.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_floor.png",
animation = {type="vertical_frames", length = 1.5}
},
{
name = "xdecor_candle_wall.png",
animation = {type="vertical_frames", length = 1.5}
}
},
selection_box = {
type = "wallmounted",
@ -142,9 +165,12 @@ xdecor.register("chair", {
groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 2},
on_rotate = screwdriver.rotate_simple,
node_box = xdecor.pixelbox(16, {
{3, 0, 11, 2, 16, 2}, {11, 0, 11, 2, 16, 2},
{5, 9, 11.5, 6, 6, 1}, {3, 0, 3, 2, 6, 2},
{11, 0, 3, 2, 6, 2}, {3, 6, 3, 10, 2, 8}
{3, 0, 11, 2, 16, 2},
{11, 0, 11, 2, 16, 2},
{5, 9, 11.5, 6, 6, 1},
{3, 0, 3, 2, 6, 2},
{11, 0, 3, 2, 6, 2},
{3, 6, 3, 10, 2, 8}
}),
can_dig = xdecor.sit_dig,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
@ -175,7 +201,7 @@ local curtain_colors = {
"red",
}
for _, c in pairs(curtain_colors) do
for _, c in ipairs(curtain_colors) do
xdecor.register("curtain_" .. c, {
description = c:gsub("^%l", string.upper) .. " Curtain",
walkable = false,
@ -211,8 +237,10 @@ for _, c in pairs(curtain_colors) do
minetest.register_craft({
output = "xdecor:curtain_" .. c .. " 4",
recipe = {{"", "wool:"..c, ""},
{"", "wool:"..c, ""}}
recipe = {
{"", "wool:" .. c, ""},
{"", "wool:" .. c, ""}
}
})
end
@ -244,30 +272,37 @@ local xdecor_doors = {
japanese = {
{"group:wood", "default:paper"},
{"default:paper", "group:wood"},
{"group:wood", "default:paper"} },
{"group:wood", "default:paper"}
},
prison = {
{"xpanes:bar_flat", "xpanes:bar_flat",},
{"xpanes:bar_flat", "xpanes:bar_flat",},
{"xpanes:bar_flat", "xpanes:bar_flat"} },
{"xpanes:bar_flat", "xpanes:bar_flat"}
},
rusty_prison = {
{"xpanes:rusty_bar_flat", "xpanes:rusty_bar_flat",},
{"xpanes:rusty_bar_flat", "xpanes:rusty_bar_flat",},
{"xpanes:rusty_bar_flat", "xpanes:rusty_bar_flat"} },
{"xpanes:rusty_bar_flat", "xpanes:rusty_bar_flat"}
},
screen = {
{"group:wood", "group:wood"},
{"xpanes:chainlink_flat", "xpanes:chainlink_flat"},
{"group:wood", "group:wood"} },
{"group:wood", "group:wood"}
},
slide = {
{"default:paper", "default:paper"},
{"default:paper", "default:paper"},
{"group:wood", "group:wood"} },
{"group:wood", "group:wood"}
},
woodglass = {
{"default:glass", "default:glass"},
{"group:wood", "group:wood"},
{"group:wood", "group:wood"} }
{"group:wood", "group:wood"}
},
}
local mesecons_register
if minetest.global_exists("mesecon") then
mesecons_register = { effector = {
action_on = function(pos, node)
@ -289,21 +324,25 @@ end
for name, recipe in pairs(xdecor_doors) do
if not doors.register then break end
doors.register(name .. "_door", {
tiles = {{name = "xdecor_"..name.."_door.png", backface_culling=true}},
tiles = {
{name = "xdecor_" .. name .. "_door.png", backface_culling = true}
},
description = name:gsub("%f[%w]%l", string.upper):gsub("_", " ") .. " Door",
inventory_image = "xdecor_" .. name .. "_door_inv.png",
protected = door_access(name),
groups = {choppy = 2, cracky = 2, oddly_breakable_by_hand = 1, door = 1},
recipe = recipe,
mesecons = mesecons_register
mesecons = mesecons_register,
})
end
xdecor.register("enderchest", {
description = "Ender Chest",
tiles = {"xdecor_enderchest_top.png", "xdecor_enderchest_top.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"},
"xdecor_enderchest_side.png", "xdecor_enderchest_front.png"
},
groups = {cracky = 1, choppy = 1},
sounds = default.node_sound_stone_defaults(),
on_rotate = screwdriver.rotate_simple,
@ -315,6 +354,7 @@ xdecor.register("enderchest", {
listring[current_player;enderchest]
listring[current_player;main] ]]
.. xbg .. default.get_hotbar_bg(0,5))
meta:set_string("infotext", "Ender Chest")
end
})
@ -347,11 +387,16 @@ xdecor.register("lantern", {
paramtype2 = "wallmounted",
walkable = false,
groups = {snappy = 3, attached_node = 1},
tiles = {{name="xdecor_lantern.png", animation={type="vertical_frames", length=1.5}}},
tiles = {
{
name = "xdecor_lantern.png",
animation = {type="vertical_frames", length = 1.5}
}
},
selection_box = xdecor.pixelbox(16, {{4, 0, 4, 8, 16, 8}})
})
for _, l in pairs({"iron", "wooden"}) do
for _, l in ipairs({"iron", "wooden"}) do
xdecor.register(l .. "_lightbox", {
description = l:gsub("^%l", string.upper) .. " Light Box",
tiles = {"xdecor_" .. l .. "_lightbox.png"},
@ -361,7 +406,7 @@ for _, l in pairs({"iron", "wooden"}) do
})
end
for _, f in pairs({"dandelion_white", "dandelion_yellow", "geranium",
for _, f in ipairs({"dandelion_white", "dandelion_yellow", "geranium",
"rose", "tulip", "viola"}) do
xdecor.register("potted_" .. f, {
description = "Potted " .. f:gsub("%f[%w]%l", string.upper):gsub("_", " "),
@ -376,8 +421,10 @@ for _, f in pairs({"dandelion_white", "dandelion_yellow", "geranium",
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
@ -403,10 +450,12 @@ xdecor.register("painting_1", {
local num = math.random(4)
local leftover = minetest.item_place_node(
ItemStack("xdecor:painting_" .. num), placer, pointed_thing)
if leftover:get_count() == 0 and
not minetest.setting_getbool("creative_mode") then
itemstack:take_item()
end
return itemstack
end
})
@ -417,8 +466,13 @@ for i = 2, 4 do
paramtype2 = "wallmounted",
drop = "xdecor:painting_1",
sunlight_propagates = true,
groups = {choppy=3, oddly_breakable_by_hand=2, flammable=2,
attached_node=1, not_in_creative_inventory=1},
groups = {
choppy = 3,
oddly_breakable_by_hand = 2,
flammable = 2,
attached_node = 1,
not_in_creative_inventory = 1
},
sounds = default.node_sound_wood_defaults(),
node_box = painting_box
})
@ -455,10 +509,12 @@ register_hard_node("hard_clay", "Hardened Clay")
register_hard_node("moonbrick", "Moon Brick")
register_hard_node("stone_tile", "Stone Tile")
register_hard_node("stone_rune", "Runestone")
register_hard_node("packed_ice", "Packed Ice", {
groups = {cracky = 1, puts_out_fire = 1, slippery = 3},
sounds = default.node_sound_glass_defaults()
})
register_hard_node("wood_tile", "Wooden Tile", {
groups = {choppy = 1, wood = 1, flammable = 2},
sounds = default.node_sound_wood_defaults()
@ -488,7 +544,12 @@ xdecor.register("trampoline", {
tiles = {"xdecor_trampoline.png", "mailbox_blank16.png", "xdecor_trampoline_sides.png"},
groups = {cracky = 3, oddly_breakable_by_hand = 1, fall_damage_add_percent = -80, bouncy = 90},
node_box = xdecor.nodebox.slab_y(0.5),
sounds = {footstep = {name="xdecor_bouncy", gain=0.8}}
sounds = {
footstep = {
name = "xdecor_bouncy",
gain = 0.8
}
}
})
xdecor.register("tv", {
@ -496,12 +557,16 @@ xdecor.register("tv", {
light_source = 11,
groups = {cracky = 3, oddly_breakable_by_hand = 2},
on_rotate = screwdriver.rotate_simple,
tiles = {"xdecor_television_left.png^[transformR270",
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}} }
{
name = "xdecor_television_front_animated.png",
animation = {type = "vertical_frames", length = 80.0}
}
}
})
xdecor.register("woodframed_glass", {

View File

@ -6,6 +6,7 @@ function rope.place(itemstack, placer, pointed_thing)
local pos = pointed_thing.above
local oldnode = minetest.get_node(pos)
local stackname = itemstack:get_name()
if minetest.is_protected(pos, placer:get_player_name()) then
return itemstack
end
@ -18,6 +19,7 @@ function rope.place(itemstack, placer, pointed_thing)
oldnode = minetest.get_node(pos)
end
end
return itemstack
end
@ -31,8 +33,10 @@ function rope.remove(pos, oldnode, digger, rope_name)
below.y = below.y - 1
num = num + 1
end
if num == 0 then return end
digger_inv:add_item("main", rope_name.." "..num)
return true
end
@ -47,8 +51,10 @@ xdecor.register("rope", {
wield_image = "xdecor_rope_inv.png",
selection_box = xdecor.pixelbox(8, {{3, 0, 3, 2, 8, 2}}),
on_place = rope.place,
on_punch = function(pos, node, puncher, pointed_thing)
local player_name = puncher:get_player_name()
if not minetest.is_protected(pos, player_name) or
minetest.get_player_privs(player_name).protection_bypass then
rope.remove(pos, node, puncher, "xdecor:rope")

View File

@ -23,6 +23,7 @@ setmetatable(nodes, {
for i = 1, #t2 do
t1[#t1 + 1] = t2[i]
end
return t1
end
})
@ -49,13 +50,15 @@ workbench.defs = {
{"stair_inner", 1, nil }
}
local repairable_tools = {"pick", "axe", "shovel", "sword", "hoe", "armor", "shield"}
-- Tools allowed to be repaired
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
for _, t in ipairs(repairable_tools) do
if stack:find(t) then
return true
end
end
return false
end
function workbench:get_output(inv, input, name)
@ -64,6 +67,7 @@ function workbench:get_output(inv, input, name)
local nbox = self.defs[i]
local count = min(nbox[2] * input:get_count(), input:get_stack_max())
local item = name .. "_" .. nbox[1]
item = nbox[3] and item or "stairs:" .. nbox[1] .. "_" .. name:match(":(.*)")
output[#output + 1] = item .. " " .. count
end
@ -71,9 +75,8 @@ function workbench:get_output(inv, input, name)
inv:set_list("forms", output)
end
local formspecs = {
-- Main formspec
[[ label[0.9,1.23;Cut]
local main_fs = [[
label[0.9,1.23;Cut]
label[0.9,2.23;Repair]
box[-0.05,1;2.05,0.9;#555555]
box[-0.05,2;2.05,0.9;#555555]
@ -94,19 +97,34 @@ local formspecs = {
listring[current_player;main]
listring[context;forms]
listring[current_player;main]
listring[context;input] ]],
-- Crafting formspec
[[ image[5,1;1,1;gui_furnace_arrow_bg.png^[transformR270]
listring[context;input]
]]
local crafting_fs = [[
image[5,1;1,1;gui_furnace_arrow_bg.png^[transformR270]
button[0,0;1.5,1;back;< Back]
list[current_player;craft;2,0;3,3;]
list[current_player;craftpreview;6,1;1,1;]
listring[current_player;main]
listring[current_player;craft] ]],
-- Storage formspec
[[ list[context;storage;0,1;8,2;]
listring[current_player;craft]
]]
local storage_fs = [[
list[context;storage;0,1;8,2;]
button[0,0;1.5,1;back;< Back]
listring[context;storage]
listring[current_player;main] ]]
listring[current_player;main]
]]
local formspecs = {
-- Main formspec
main_fs,
-- Crafting formspec
crafting_fs,
-- Storage formspec
storage_fs,
}
function workbench:set_formspec(meta, id)
@ -131,11 +149,11 @@ end
function workbench.fields(pos, _, fields)
if fields.quit then return end
local meta = minetest.get_meta(pos)
local id = fields.back and 1 or
fields.craft and 2 or
fields.storage and 3
local id = fields.back and 1 or fields.craft and 2 or fields.storage and 3
if not id then return end
workbench:set_formspec(meta, id)
end
@ -156,12 +174,13 @@ function workbench.timer(pos)
return
end
-- Tool's wearing range: 0-65535 | 0 = new condition
-- Tool's wearing range: 0-65535; 0 = new condition
tool:add_wear(-500)
hammer:add_wear(700)
inv:set_stack("tool", 1, tool)
inv:set_stack("hammer", 1, hammer)
return true
end
@ -174,6 +193,7 @@ function workbench.put(_, listname, _, stack)
listname == "storage" then
return stack:get_count()
end
return 0
end
@ -223,9 +243,11 @@ xdecor.register("workbench", {
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",
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"},
"xdecor_workbench_front.png", "xdecor_workbench_front.png"
},
on_rotate = screwdriver.rotate_simple,
can_dig = workbench.dig,
on_timer = workbench.timer,
@ -237,7 +259,7 @@ xdecor.register("workbench", {
allow_metadata_inventory_move = workbench.move
})
for _, d in pairs(workbench.defs) do
for _, d in ipairs(workbench.defs) do
for i = 1, #nodes do
local node = nodes[i]
local mod_name, item_name = node:match("^(.-):(.*)")
@ -283,14 +305,15 @@ for i=1, #nodes do
sunlight_propagates = true,
on_place = minetest.rotate_node
})
elseif item_name and mod_name then
minetest.register_alias_force(
('%s:%s_innerstair'):format(mod_name, item_name),
('stairs:stair_inner_%s'):format(item_name)
("%s:%s_innerstair"):format(mod_name, item_name),
("stairs:stair_inner_%s"):format(item_name)
)
minetest.register_alias_force(
('%s:%s_outerstair'):format(mod_name, item_name),
('stairs:stair_outer_%s'):format(item_name)
("%s:%s_outerstair"):format(mod_name, item_name),
("stairs:stair_outer_%s"):format(item_name)
)
end
end
@ -302,7 +325,9 @@ minetest.register_tool("xdecor:hammer", {
description = "Hammer",
inventory_image = "xdecor_hammer.png",
wield_image = "xdecor_hammer.png",
on_use = function() do return end end
on_use = function() do
return end
end
})
-- Recipes