"default",
"stairs", "doors", "xpanes",
"xdecor", "xbg",
- table = { fields = { "copy" } },
+ table = {fields = {"copy"}},
+ string = {fields = {"split"}},
"unpack",
+ "stairsplus",
+ "mesecon"
}
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
return false
end
end
+
return true
end
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
new[k] = v
end
end
+
return new
end
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}
}
xdecor.nodebox = {
- regular = {type="regular"},
- null = {type="fixed", fixed={0,0,0,0,0,0}}
+ regular = {type = "regular"},
+ 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] = {
+ fixed[#fixed + 1] = {
(x / size) - 0.5,
(y / size) - 0.5,
(z / size) - 0.5,
((z + l) / size) - 0.5
}
end
- return {type="fixed", fixed=fixed}
+
+ return {type = "fixed", fixed = fixed}
end
local mt = {}
+
mt.__index = function(table, key)
local ref = xdecor.box[key]
local ref_type = type(ref)
if ref_type == "function" then
return function(...)
- return {type="fixed", fixed=ref(...)}
+ return {type = "fixed", fixed = ref(...)}
end
elseif ref_type == "table" then
- return {type="fixed", fixed=ref}
+ return {type = "fixed", fixed = ref}
elseif ref_type == "nil" then
- error(key.."could not be found among nodebox presets and functions")
+ error(key .. "could not be found among nodebox presets and functions")
end
- error("unexpected datatype "..tostring(type(ref)).." while looking for "..key)
+ error("unexpected datatype " .. tostring(type(ref)) .. " while looking for " .. key)
end
setmetatable(xdecor.nodebox, mt)
-
-xbg = default.gui_bg..default.gui_bg_img..default.gui_slots
+xbg = default.gui_bg .. default.gui_bg_img .. default.gui_slots
local default_inventory_size = 32
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)
return inv:is_empty("main")
end
-function xdecor.register(name, def)
- local function xdecor_stairs_alternative(nodename, 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
- groupname ~= "snappy" then
+ groupname ~= "snappy" then
def.groups.groupname = nil
end
end
sounds = def.sounds,
}
)
- elseif minetest.get_modpath("stairs") then
+ elseif minetest.get_modpath("stairs") then
stairs.register_stair_and_slab(name,nodename,
def.groups,
def.tiles,
("%s Stair"):format(def.description),
("%s Slab"):format(def.description),
def.sounds
- )
- end
+ )
+ 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()
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)
end
end
- minetest.register_node("xdecor:"..name, def)
+ minetest.register_node("xdecor:" .. name, def)
local workbench = minetest.settings:get_bool("enable_xdecor_workbench")
if workbench == false and
- (minetest.get_modpath("moreblocks") or minetest.get_modpath("stairs")) then
+ (minetest.get_modpath("moreblocks") or minetest.get_modpath("stairs")) then
if xdecor.stairs_valid_def(def) then
xdecor_stairs_alternative("xdecor:"..name, def)
end
--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")
-dofile(modpath.."/handlers/animations.lua")
-dofile(modpath.."/handlers/helpers.lua")
-dofile(modpath.."/handlers/nodeboxes.lua")
-dofile(modpath.."/handlers/registration.lua")
+dofile(modpath .. "/handlers/animations.lua")
+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")
+dofile(modpath .. "/src/nodes.lua")
+dofile(modpath .. "/src/recipes.lua")
local subpart = {
"chess",
"mailbox",
"mechanisms",
"rope",
- "workbench"
+ "workbench",
}
-for _, name in pairs(subpart) do
- local enable = minetest.settings:get_bool("enable_xdecor_"..name)
+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")
+ dofile(modpath .. "/src/" .. name .. ".lua")
end
end
+++ /dev/null
-minetest.register_alias("xdecor:crafting_guide", "craftguide:book")
if not idx then
return nil
end
+
idx = idx - 1
+
local x = idx % 8
local y = (idx - x) / 8
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)
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)
else
itemstack:replace("bucket:bucket_water")
end
- minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2})
+ 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})
+ minetest.set_node(pos, {name = "xdecor:cauldron_idle", param2 = node.param2})
itemstack:replace("bucket:bucket_empty")
end
+
return itemstack
end
end
function cauldron.idle_timer(pos)
- local below_node = {x=pos.x, y=pos.y-1, z=pos.z}
+ local below_node = {x = pos.x, y = pos.y - 1, z = pos.z}
if not minetest.get_node(below_node).name:find("fire") then
return true
end
local node = minetest.get_node(pos)
- minetest.set_node(pos, {name="xdecor:cauldron_boiling", param2=node.param2})
+ minetest.set_node(pos, {name = "xdecor:cauldron_boiling", param2 = node.param2})
return true
end
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
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
- minetest.set_node(pos, {name="xdecor:cauldron_soup", param2=node.param2})
+ 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}
+ 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})
+ minetest.set_node(pos, {name = "xdecor:cauldron_idle", param2 = node.param2})
end
+
return true
end
itemstack:replace("xdecor:bowl_soup 1")
end
- minetest.set_node(pos, {name="xdecor:cauldron_empty", param2=node.param2})
+ minetest.set_node(pos, {name = "xdecor:cauldron_empty", param2 = node.param2})
end
+
return itemstack
end
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", {
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", {
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", {
- groups = {cracky=2, oddly_breakable_by_hand=1, not_in_creative_inventory=1},
+ groups = {cracky = 2, oddly_breakable_by_hand = 1, not_in_creative_inventory = 1},
on_rotate = screwdriver.rotate_simple,
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
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
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}
+ 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
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
local specs = { -- not finished, to complete
- durable = {"#00baff", " (+"..bonus.durable.."%)"},
- fast = {"#74ff49", " (+"..bonus.efficiency.."%)"},
- sharp = {"#ffff00", " (+"..bonus.damages.."%)"},
+ durable = {"#00baff", " (+" .. bonus.durable .. "%)"},
+ 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]
+ "\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]",
}
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 "")
+ formspec = formspec .. (enchant_buttons[num] or "")
meta:set_string("formspec", formspec)
end
"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
local mese = inv:get_stack("mese", 1)
local orig_wear = tool:get_wear()
local mod, name = tool:get_name():match("(.*):(.*)")
- local enchanted_tool = (mod or "")..":enchanted_"..(name or "").."_"..next(fields)
+ 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)
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)
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)
inv:set_size("mese", 1)
- minetest.add_entity({x=pos.x, y=pos.y+0.85, z=pos.z}, "xdecor:book_open")
+ minetest.add_entity({x = pos.x, y = pos.y + 0.85, z = pos.z}, "xdecor:book_open")
local timer = minetest.get_node_timer(pos)
timer:start(0.5)
end
function enchanting.timer(pos)
local num = #minetest.get_objects_inside_radius(pos, 0.9)
if num == 0 then
- minetest.add_entity({x=pos.x, y=pos.y+0.85, z=pos.z}, "xdecor:book_open")
+ minetest.add_entity({x = pos.x, y = pos.y + 0.85, z = pos.z}, "xdecor:book_open")
end
- 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 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
local y = bookshelf_pos.y - pos.y
local z = pos.z - bookshelf_pos.z
- if tostring(x..z):find(2) then
+ if tostring(x .. z):find(2) then
minetest.add_particle({
pos = bookshelf_pos,
- velocity = {x=x, y=2-y, z=z},
- acceleration = {x=0, y=-2.2, z=0},
+ velocity = {x = x, y = 2 - y, z = z},
+ acceleration = {x = 0, y = -2.2, z = 0},
expirationtime = 1,
size = 1.5,
glow = 5,
- texture = "xdecor_glyph"..random(1,18)..".png"
+ 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",
- "xdecor_enchantment_side.png", "xdecor_enchantment_side.png",
- "xdecor_enchantment_side.png", "xdecor_enchantment_side.png"},
- groups = {cracky=1, level=1},
+ 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, level = 1},
light_source = 6,
sounds = default.node_sound_stone_defaults(),
on_rotate = screwdriver.rotate_simple,
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", {
textures = {"xdecor_book_open.png"},
on_activate = function(self)
local pos = self.object:getpos()
- local pos_under = {x=pos.x, y=pos.y-1, z=pos.z}
+ local pos_under = {x = pos.x, y = pos.y - 1, z = pos.z}
if minetest.get_node(pos_under).name ~= "xdecor:enchantment_table" then
self.object:remove()
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
fleshy = fleshy + enchanting.damages
end
- minetest.register_tool(":"..mod..":enchanted_"..tool.."_"..material.."_"..enchant, {
- description = "Enchanted "..cap(material).." "..cap(tool)..
+ minetest.register_tool(":" .. mod .. ":enchanted_" .. tool .. "_" .. material .. "_" .. enchant, {
+ description = "Enchanted " .. cap(material) .. " " .. cap(tool) ..
self:get_tooltip(enchant, original_groupcaps[group], fleshy),
- inventory_image = original_tool.inventory_image.."^[colorize:violet:50",
+ inventory_image = original_tool.inventory_image .. "^[colorize:violet:50",
wield_image = original_tool.wield_image,
- groups = {not_in_creative_inventory=1},
+ groups = {not_in_creative_inventory = 1},
tool_capabilities = {
groupcaps = groupcaps, damage_groups = {fleshy = fleshy},
full_punch_interval = full_punch_interval,
{"default:diamond", "default:obsidian", "default:diamond"},
{"default:obsidian", "default:obsidian", "default:obsidian"}
}
-})
\ No newline at end of file
+})
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")
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)
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
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)
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
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)
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)
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..")")
+ meta:set_string("infotext", "Item Frame (owned by " .. name .. ")")
end
function itemframe.timer(pos)
if num == 0 and meta:get_string("item") ~= "" then
update_item(pos, node)
end
+
return true
end
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
- drop_item(pos, node)
+ if admin and player_name == owner then
+ drop_item(pos, node)
+ end
end
function itemframe.dig(pos, player)
xdecor.register("itemframe", {
description = "Item Frame",
- groups = {choppy=3, oddly_breakable_by_hand=2, flammable=3},
+ groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
sounds = default.node_sound_wood_defaults(),
on_rotate = screwdriver.disallow,
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,
minetest.register_entity("xdecor:f_item", {
visual = "wielditem",
- visual_size = {x=0.33, y=0.33},
+ visual_size = {x = 0.33, y = 0.33},
collisionbox = {0},
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
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
+ return self.nodename .. ";" .. self.texture
end
+
return ""
end
})
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
elseif type(tile) == "string" then
img = get_img(tile)
end
- if img then return img end
+
+ if img then
+ return img
+ end
end
return ""
end
function mailbox:formspec(pos, owner, is_owner)
- local spos = pos.x..","..pos.y..","..pos.z
+ local spos = pos.x .. "," .. pos.y .. "," .. pos.z
local meta = minetest.get_meta(pos)
local giver, img = "", ""
if is_owner then
for i = 1, 7 do
- local giving = meta:get_string("giver"..i)
+ local giving = meta:get_string("giver" .. i)
if giving ~= "" then
- local stack = meta:get_string("stack"..i)
+ local stack = meta:get_string("stack" .. i)
local giver_name = giving:sub(1,12)
local stack_name = stack:match("[%w_:]+")
local stack_count = stack:match("%s(%d+)") or 1
- giver = giver.."#FFFF00,"..giver_name..","..i..
- ",#FFFFFF,x "..stack_count..","
- img = img..i.."="..
- img_col(stack_name).."^\\[resize:16x16,"
+ giver = giver .. "#FFFF00," .. giver_name .. "," .. i ..
+ ",#FFFFFF,x " .. stack_count .. ","
+
+ img = img .. i .. "=" ..
+ img_col(stack_name) .. "^\\[resize:16x16,"
end
end
box[6,0.72;3.3,3.5;#555555]
listring[current_player;main]
list[current_player;main;0.75,5.25;8,4;]
- tableoptions[background=#00000000;highlight=#00000000;border=false] ]]..
- "tablecolumns[color;text;image,"..img.."0;color;text]"..
- "table[6,0.75;3.3,4;givers;"..giver.."]"..
- "list[nodemeta:"..spos..";mailbox;0,0.75;6,4;]"..
- "listring[nodemeta:"..spos..";mailbox]"..
- xbg..default.get_hotbar_bg(0.75,5.25)
+ tableoptions[background=#00000000;highlight=#00000000;border=false] ]] ..
+ "tablecolumns[color;text;image," .. img .. "0;color;text]" ..
+ "table[6,0.75;3.3,4;givers;" .. giver .. "]" ..
+ "list[nodemeta:" .. spos .. ";mailbox;0,0.75;6,4;]" ..
+ "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;] ]]..
- "label[0,0;Send your goods to\n"..
+
+ 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).."]"..
- "list[nodemeta:"..spos..";drop;3.5,0;1,1;]"..
- xbg..default.get_hotbar_bg(0,1.25)
+ minetest.colorize("#FFFF00", owner) or owner) .. "]" ..
+ "list[nodemeta:" .. spos .. ";drop;3.5,0;1,1;]" ..
+ xbg .. default.get_hotbar_bg(0, 1.25)
end
function mailbox.dig(pos, player)
local player_name = placer:get_player_name()
meta:set_string("owner", player_name)
- meta:set_string("infotext", player_name.."'s Mailbox")
+ meta:set_string("infotext", player_name .. "'s Mailbox")
local inv = meta:get_inventory()
- inv:set_size("mailbox", 6*4)
+ inv:set_size("mailbox", 6 * 4)
inv:set_size("drop", 1)
end
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
return -1
else
minetest.chat_send_player(player:get_player_name(),
- "The mailbox is full")
+ "The mailbox is full")
end
end
+
return 0
end
inv:add_item("mailbox", stack)
for i = 7, 2, -1 do
- meta:set_string("giver"..i, meta:get_string("giver"..(i-1)))
- meta:set_string("stack"..i, meta:get_string("stack"..(i-1)))
+ meta:set_string("giver" .. i, meta:get_string("giver" .. (i - 1)))
+ meta:set_string("stack" .. i, meta:get_string("stack" .. (i - 1)))
end
meta:set_string("giver1", player:get_player_name())
if player:get_player_name() ~= meta:get_string("owner") then
return 0
end
+
return stack:get_count()
end
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},
+ groups = {cracky = 3, oddly_breakable_by_hand = 1},
on_rotate = screwdriver.rotate_simple,
can_dig = mailbox.dig,
on_rightclick = mailbox.rightclick,
if actuator.name:sub(-4) == "_off" then
minetest.set_node(pos_actuator,
- {name=actuator.name:gsub("_off", "_on"), param2=actuator.param2})
+ {name = actuator.name:gsub("_off", "_on"), param2 = actuator.param2})
end
door:open(player)
minetest.after(2, function()
if minetest.get_node(pos_actuator).name:sub(-3) == "_on" then
minetest.set_node(pos_actuator,
- {name=actuator.name, param2=actuator.param2})
+ {name = actuator.name, param2 = actuator.param2})
end
-- Re-get player object (or nil) because 'player' could
-- be an invalid object at this time (player left)
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 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")
for _, player in pairs(objs) do
if player:is_player() then
- for i=1, #doors do
+ for i = 1, #doors do
door_toggle(pos, doors[i], player)
end
break
end
end
+
return true
end
function plate.register(material, desc, def)
- xdecor.register("pressure_"..material.."_off", {
- description = desc.." Pressure Plate",
- tiles = {"xdecor_pressure_"..material..".png"},
+ xdecor.register("pressure_" .. material .. "_off", {
+ description = desc .. " Pressure Plate",
+ tiles = {"xdecor_pressure_" .. material .. ".png"},
drawtype = "nodebox",
node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 1, 14}}),
groups = def.groups,
on_construct = plate.construct,
on_timer = plate.timer
})
- xdecor.register("pressure_"..material.."_on", {
- tiles = {"xdecor_pressure_"..material..".png"},
+ xdecor.register("pressure_" .. material .. "_on", {
+ tiles = {"xdecor_pressure_" .. material .. ".png"},
drawtype = "nodebox",
node_box = xdecor.pixelbox(16, {{1, 0, 1, 14, 0.4, 14}}),
groups = def.groups,
sounds = def.sounds,
- drop = "xdecor:pressure_"..material.."_off",
+ drop = "xdecor:pressure_" .. material .. "_off",
sunlight_propagates = true,
on_rotate = screwdriver.rotate_simple
})
plate.register("wood", "Wooden", {
sounds = default.node_sound_wood_defaults(),
- groups = {choppy=3, oddly_breakable_by_hand=2, flammable=2}
+ groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 2}
})
plate.register("stone", "Stone", {
sounds = default.node_sound_stone_defaults(),
- groups = {cracky=3, oddly_breakable_by_hand=2}
+ groups = {cracky = 3, oddly_breakable_by_hand = 2}
})
xdecor.register("lever_off", {
tiles = {"xdecor_lever_off.png"},
drawtype = "nodebox",
node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
- groups = {cracky=3, oddly_breakable_by_hand=2},
+ groups = {cracky = 3, oddly_breakable_by_hand = 2},
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}
- local maxp = {x=pos.x+2, y=pos.y+1, z=pos.z+2}
+ local minp = {x = pos.x - 2, y = pos.y - 1, z = pos.z - 2}
+ local maxp = {x = pos.x + 2, y = pos.y + 1, z = pos.z + 2}
local doors = minetest.find_nodes_in_area(minp, maxp, "group:door")
- for i=1, #doors do
+ for i = 1, #doors do
door_toggle(pos, doors[i], clicker)
end
+
return itemstack
end
})
tiles = {"xdecor_lever_on.png"},
drawtype = "nodebox",
node_box = xdecor.pixelbox(16, {{2, 1, 15, 12, 14, 1}}),
- groups = {cracky=3, oddly_breakable_by_hand=2, not_in_creative_inventory=1},
+ groups = {cracky = 3, oddly_breakable_by_hand = 2, not_in_creative_inventory = 1},
sounds = default.node_sound_stone_defaults(),
sunlight_propagates = true,
on_rotate = screwdriver.rotate_simple,
{"group:stick"},
{"group:stone"}
}
-})
\ No newline at end of file
+})
local function register_pane(name, desc, def)
xpanes.register_pane(name, {
description = desc,
- tiles = {"xdecor_"..name..".png"},
+ tiles = {"xdecor_" .. name .. ".png"},
drawtype = "airlike",
paramtype = "light",
- textures = {"xdecor_"..name..".png", "xdecor_"..name..".png", "xpanes_space.png"},
- inventory_image = "xdecor_"..name..".png",
- wield_image = "xdecor_"..name..".png",
+ textures = {"xdecor_" .. name .. ".png", "xdecor_" .. name .. ".png", "xpanes_space.png"},
+ inventory_image = "xdecor_" .. name .. ".png",
+ wield_image = "xdecor_" .. name .. ".png",
groups = def.groups,
sounds = def.sounds or default.node_sound_defaults(),
recipe = def.recipe
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"},
- {"default:papyrus", "farming:cotton", "default:papyrus"},
- {"default:papyrus", "default:papyrus", "default:papyrus"}}
+ 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"}
+ }
})
register_pane("chainlink", "Chainlink", {
- 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"}}
+ 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"}
+ }
})
register_pane("rusty_bar", "Rusty Iron Bars", {
sounds = default.node_sound_stone_defaults(),
- groups = {cracky=2, pane=1},
- recipe = {{"", "default:dirt", ""},
- {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
- {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}}
+ groups = {cracky = 2, pane = 1},
+ recipe = {
+ {"", "default:dirt", ""},
+ {"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"},
- {"group:stick", "group:stick", "group:stick"},
- {"group:wood", "group:stick", "group:wood"}}
+ groups = {choppy = 2, pane = 1, flammable = 2},
+ recipe = {
+ {"group:wood", "group:stick", "group:wood"},
+ {"group:stick", "group:stick", "group:stick"},
+ {"group:wood", "group:stick", "group:wood"}
+ }
})
xdecor.register("baricade", {
paramtype2 = "facedir",
inventory_image = "xdecor_baricade.png",
tiles = {"xdecor_baricade.png"},
- groups = {choppy=2, oddly_breakable_by_hand=1, flammable=2},
+ groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
damage_per_second = 4,
selection_box = xdecor.nodebox.slab_y(0.3),
collision_box = xdecor.pixelbox(2, {{0, 0, 1, 2, 2, 0}})
description = "Barrel",
tiles = {"xdecor_barrel_top.png", "xdecor_barrel_top.png", "xdecor_barrel_sides.png"},
on_place = minetest.rotate_node,
- groups = {choppy=2, oddly_breakable_by_hand=1, flammable=2},
+ groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
local function register_storage(name, desc, def)
xdecor.register(name, {
description = desc,
- inventory = {size=def.inv_size or 24},
+ inventory = {size = def.inv_size or 24},
infotext = desc,
tiles = def.tiles,
node_box = def.node_box,
on_rotate = def.on_rotate,
on_place = def.on_place,
- groups = def.groups or {choppy=2, oddly_breakable_by_hand=1, flammable=2},
+ groups = def.groups or {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
end
register_storage("cabinet", "Wooden Cabinet", {
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"
+ }
})
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",
- "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"
+ }
})
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", {
wield_image = "xdecor_candle_wield.png",
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}}
+ 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}
+ }
},
selection_box = {
type = "wallmounted",
description = "Chair",
tiles = {"xdecor_wood.png"},
sounds = default.node_sound_wood_defaults(),
- groups = {choppy=3, oddly_breakable_by_hand=2, flammable=2},
+ 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)
liquid_range = 0,
walkable = false,
selection_box = {type = "regular"},
- groups = {snappy=3, liquid=3, flammable=3},
+ groups = {snappy = 3, liquid = 3, flammable = 3},
sounds = default.node_sound_leaves_defaults()
})
"red",
}
-for _, c in pairs(curtain_colors) do
- xdecor.register("curtain_"..c, {
- description = c:gsub("^%l", string.upper).." Curtain",
+for _, c in ipairs(curtain_colors) do
+ xdecor.register("curtain_" .. c, {
+ description = c:gsub("^%l", string.upper) .. " Curtain",
walkable = false,
tiles = {"wool_white.png"},
color = c,
- inventory_image = "wool_white.png^[colorize:"..c..
+ inventory_image = "wool_white.png^[colorize:" .. c ..
":170^xdecor_curtain_open_overlay.png^[makealpha:255,126,126",
- wield_image = "wool_white.png^[colorize:"..c..":170",
+ wield_image = "wool_white.png^[colorize:" .. c .. ":170",
drawtype = "signlike",
paramtype2 = "colorwallmounted",
- groups = {dig_immediate=3, flammable=3},
- selection_box = {type="wallmounted"},
+ groups = {dig_immediate = 3, flammable = 3},
+ selection_box = {type = "wallmounted"},
on_rightclick = function(pos, node, _, itemstack)
- minetest.set_node(pos, {name="xdecor:curtain_open_"..c, param2=node.param2})
+ minetest.set_node(pos, {name = "xdecor:curtain_open_" .. c, param2 = node.param2})
return itemstack
end
})
- xdecor.register("curtain_open_"..c, {
+ xdecor.register("curtain_open_" .. c, {
tiles = {"wool_white.png^xdecor_curtain_open_overlay.png^[makealpha:255,126,126"},
color = c,
drawtype = "signlike",
paramtype2 = "colorwallmounted",
walkable = false,
- groups = {dig_immediate=3, flammable=3, not_in_creative_inventory=1},
+ groups = {dig_immediate = 3, flammable = 3, not_in_creative_inventory = 1},
selection_box = {type="wallmounted"},
- drop = "xdecor:curtain_"..c,
+ drop = "xdecor:curtain_" .. c,
on_rightclick = function(pos, node, _, itemstack)
- minetest.set_node(pos, {name="xdecor:curtain_"..c, param2=node.param2})
+ minetest.set_node(pos, {name="xdecor:curtain_" .. c, param2 = node.param2})
return itemstack
end
})
minetest.register_craft({
- output = "xdecor:curtain_"..c.." 4",
- recipe = {{"", "wool:"..c, ""},
- {"", "wool:"..c, ""}}
+ output = "xdecor:curtain_" .. c .. " 4",
+ recipe = {
+ {"", "wool:" .. c, ""},
+ {"", "wool:" .. c, ""}
+ }
})
end
xdecor.register("cushion", {
description = "Cushion",
tiles = {"xdecor_cushion.png"},
- groups = {snappy=3, flammable=3, fall_damage_add_percent=-50},
+ groups = {snappy = 3, flammable = 3, fall_damage_add_percent = -50},
on_place = minetest.rotate_node,
node_box = xdecor.nodebox.slab_y(0.5),
can_dig = xdecor.sit_dig,
xdecor.register("cushion_block", {
description = "Cushion Block",
tiles = {"xdecor_cushion.png"},
- groups = {snappy=3, flammable=3, fall_damage_add_percent=-75, not_in_creative_inventory=1}
+ groups = {snappy = 3, flammable = 3, fall_damage_add_percent = -75, not_in_creative_inventory = 1}
})
local function door_access(name)
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)
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}},
- description = name:gsub("%f[%w]%l", string.upper):gsub("_", " ").." Door",
- inventory_image = "xdecor_"..name.."_door_inv.png",
+ doors.register(name .. "_door", {
+ 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},
+ 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",
- "xdecor_enderchest_side.png", "xdecor_enderchest_side.png",
- "xdecor_enderchest_side.png", "xdecor_enderchest_front.png"},
- groups = {cracky=1, choppy=1},
+ 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},
sounds = default.node_sound_stone_defaults(),
on_rotate = screwdriver.rotate_simple,
on_construct = function(pos)
list[current_player;main;0,5;8,4;]
listring[current_player;enderchest]
listring[current_player;main] ]]
- ..xbg..default.get_hotbar_bg(0,5))
+ .. xbg .. default.get_hotbar_bg(0,5))
+
meta:set_string("infotext", "Ender Chest")
end
})
drawtype = "signlike",
walkable = false,
climbable = true,
- groups = {snappy=3, flora=1, attached_node=1, plant=1, flammable=3},
+ groups = {snappy = 3, flora = 1, attached_node = 1, plant = 1, flammable = 3},
paramtype2 = "wallmounted",
selection_box = {type="wallmounted"},
tiles = {"xdecor_ivy.png"},
wield_image = "xdecor_lantern_inv.png",
paramtype2 = "wallmounted",
walkable = false,
- groups = {snappy=3, attached_node=1},
- tiles = {{name="xdecor_lantern.png", animation={type="vertical_frames", length=1.5}}},
+ groups = {snappy = 3, attached_node = 1},
+ 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
- xdecor.register(l.."_lightbox", {
- description = l:gsub("^%l", string.upper).." Light Box",
- tiles = {"xdecor_"..l.."_lightbox.png"},
- groups = {cracky=3, choppy=3, oddly_breakable_by_hand=2},
+for _, l in ipairs({"iron", "wooden"}) do
+ xdecor.register(l .. "_lightbox", {
+ description = l:gsub("^%l", string.upper) .. " Light Box",
+ tiles = {"xdecor_" .. l .. "_lightbox.png"},
+ groups = {cracky = 3, choppy = 3, oddly_breakable_by_hand = 2},
light_source = 13,
sounds = default.node_sound_glass_defaults()
})
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("_", " "),
+ xdecor.register("potted_" .. f, {
+ description = "Potted " .. f:gsub("%f[%w]%l", string.upper):gsub("_", " "),
walkable = false,
- groups = {snappy=3, flammable=3, plant=1, flower=1},
- tiles = {"xdecor_"..f.."_pot.png"},
- inventory_image = "xdecor_"..f.."_pot.png",
+ groups = {snappy = 3, flammable = 3, plant = 1, flower = 1},
+ tiles = {"xdecor_" .. f .. "_pot.png"},
+ inventory_image = "xdecor_" .. f .. "_pot.png",
drawtype = "plantlike",
sounds = default.node_sound_leaves_defaults(),
selection_box = xdecor.nodebox.slab_y(0.3)
})
minetest.register_craft({
- output = "xdecor:potted_"..f,
- recipe = {{"default:clay_brick", "flowers:"..f,
- "default:clay_brick"}, {"", "default:clay_brick", ""}}
+ output = "xdecor:potted_" .. f,
+ recipe = {
+ {"default:clay_brick", "flowers:" .. f, "default:clay_brick"},
+ {"", "default:clay_brick", ""}
+ }
})
end
wield_image = "xdecor_painting_empty.png",
paramtype2 = "wallmounted",
sunlight_propagates = true,
- groups = {choppy=3, oddly_breakable_by_hand=2, flammable=2, attached_node=1},
+ groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 2, attached_node = 1},
sounds = default.node_sound_wood_defaults(),
node_box = painting_box,
node_placement_prediction = "",
on_place = function(itemstack, placer, pointed_thing)
local num = math.random(4)
local leftover = minetest.item_place_node(
- ItemStack("xdecor:painting_"..num), placer, pointed_thing)
+ 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
})
for i = 2, 4 do
- xdecor.register("painting_"..i, {
- tiles = {"xdecor_painting_"..i..".png"},
+ xdecor.register("painting_" .. i, {
+ tiles = {"xdecor_painting_" .. i .. ".png"},
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
})
xdecor.register("stonepath", {
description = "Garden Stone Path",
tiles = {"default_stone.png"},
- groups = {snappy=3},
+ groups = {snappy = 3},
on_rotate = screwdriver.rotate_simple,
sounds = default.node_sound_stone_defaults(),
sunlight_propagates = true,
def = def or {}
xdecor.register(name, {
description = desc,
- tiles = {"xdecor_"..name..".png"},
- groups = def.groups or {cracky=1},
+ tiles = {"xdecor_" .. name .. ".png"},
+ groups = def.groups or {cracky = 1},
sounds = def.sounds or default.node_sound_stone_defaults()
})
end
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},
+ 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},
+ groups = {choppy = 1, wood = 1, flammable = 2},
sounds = default.node_sound_wood_defaults()
})
xdecor.register("table", {
description = "Table",
tiles = {"xdecor_wood.png"},
- groups = {choppy=2, oddly_breakable_by_hand=1, flammable=2},
+ groups = {choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
sounds = default.node_sound_wood_defaults(),
node_box = xdecor.pixelbox(16, {
{0, 14, 0, 16, 2, 16}, {5.5, 0, 5.5, 5, 14, 6}
description = "Tatami",
tiles = {"xdecor_tatami.png"},
wield_image = "xdecor_tatami.png",
- groups = {snappy=3, flammable=3},
+ groups = {snappy = 3, flammable = 3},
sunlight_propagates = true,
node_box = xdecor.nodebox.slab_y(0.0625)
})
xdecor.register("trampoline", {
description = "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},
+ 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", {
description = "Television",
light_source = 11,
- groups = {cracky=3, oddly_breakable_by_hand=2},
+ groups = {cracky = 3, oddly_breakable_by_hand = 2},
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}
+ }
+ }
})
xdecor.register("woodframed_glass", {
drawtype = "glasslike_framed",
sunlight_propagates = true,
tiles = {"xdecor_woodframed_glass.png", "xdecor_woodframed_glass_detail.png"},
- groups = {cracky=2, oddly_breakable_by_hand=1},
+ groups = {cracky = 2, oddly_breakable_by_hand = 1},
sounds = default.node_sound_glass_defaults()
})
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
oldnode = minetest.get_node(pos)
end
end
+
return itemstack
end
function rope.remove(pos, oldnode, digger, rope_name)
local num = 0
- local below = {x=pos.x, y=pos.y, z=pos.z}
+ local below = {x = pos.x, y = pos.y, z = pos.z}
local digger_inv = digger:get_inventory()
while minetest.get_node(below).name == rope_name do
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
drawtype = "plantlike",
walkable = false,
climbable = true,
- groups = {snappy=3, flammable=3},
+ groups = {snappy = 3, flammable = 3},
tiles = {"xdecor_rope.png"},
inventory_image = "xdecor_rope_inv.png",
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")
{"farming:string"},
{"farming:string"}
}
-})
\ No newline at end of file
+})
local nodes = {}
for node, def in pairs(registered_nodes) do
if xdecor.stairs_valid_def(def) then
- nodes[#nodes+1] = node
+ nodes[#nodes + 1] = node
end
end
setmetatable(nodes, {
__concat = function(t1, t2)
- for i=1, #t2 do
- t1[#t1+1] = t2[i]
+ for i = 1, #t2 do
+ t1[#t1 + 1] = t2[i]
end
+
return t1
end
})
-nodes = nodes..WB.custom_nodes_register
+nodes = nodes .. WB.custom_nodes_register
-- Nodeboxes definitions
workbench.defs = {
- -- Name Yield X Y Z W H L
+ -- Name YieldX YZ WH L
{"nanoslab", 16, { 0, 0, 0, 8, 1, 8 }},
{"micropanel", 16, { 0, 0, 0, 16, 1, 8 }},
{"microslab", 8, { 0, 0, 0, 16, 1, 16 }},
{"thinstair", 8, { 0, 7, 0, 16, 1, 8 },
- { 0, 15, 8, 16, 1, 8 }},
+ { 0, 15, 8, 16, 1, 8 }},
{"cube", 4, { 0, 0, 0, 8, 8, 8 }},
{"panel", 4, { 0, 0, 0, 16, 8, 8 }},
{"slab", 2, nil },
{"doublepanel", 2, { 0, 0, 0, 16, 8, 8 },
- { 0, 8, 8, 16, 8, 8 }},
+ { 0, 8, 8, 16, 8, 8 }},
{"halfstair", 2, { 0, 0, 0, 8, 8, 16 },
- { 0, 8, 8, 8, 8, 8 }},
+ { 0, 8, 8, 8, 8, 8 }},
{"stair_outer", 1, nil },
{"stair", 1, nil },
{"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)
local output = {}
- for i=1, #self.defs do
+ for i = 1, #self.defs do
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
+ local item = name .. "_" .. nbox[1]
+
+ item = nbox[3] and item or "stairs:" .. nbox[1] .. "_" .. name:match(":(.*)")
+ output[#output + 1] = item .. " " .. count
end
inv:set_list("forms", output)
end
+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]
+ button[0,0;2,1;craft;Crafting]
+ button[2,0;2,1;storage;Storage]
+ image[3,1;1,1;gui_furnace_arrow_bg.png^[transformR270]
+ image[0,1;1,1;worktable_saw.png]
+ image[0,2;1,1;worktable_anvil.png]
+ image[3,2;1,1;hammer_layout.png]
+ list[context;input;2,1;1,1;]
+ list[context;tool;2,2;1,1;]
+ list[context;hammer;3,2;1,1;]
+ list[context;forms;4,0;4,3;]
+ listring[current_player;main]
+ listring[context;tool]
+ listring[current_player;main]
+ listring[context;hammer]
+ listring[current_player;main]
+ listring[context;forms]
+ listring[current_player;main]
+ 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]
+]]
+
+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]
+]]
+
local formspecs = {
-- Main formspec
- [[ 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]
- button[0,0;2,1;craft;Crafting]
- button[2,0;2,1;storage;Storage]
- image[3,1;1,1;gui_furnace_arrow_bg.png^[transformR270]
- image[0,1;1,1;worktable_saw.png]
- image[0,2;1,1;worktable_anvil.png]
- image[3,2;1,1;hammer_layout.png]
- list[context;input;2,1;1,1;]
- list[context;tool;2,2;1,1;]
- list[context;hammer;3,2;1,1;]
- list[context;forms;4,0;4,3;]
- listring[current_player;main]
- listring[context;tool]
- listring[current_player;main]
- listring[context;hammer]
- listring[current_player;main]
- listring[context;forms]
- listring[current_player;main]
- listring[context;input] ]],
+ main_fs,
+
-- Crafting formspec
- [[ 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] ]],
+ crafting_fs,
+
-- Storage formspec
- [[ list[context;storage;0,1;8,2;]
- button[0,0;1.5,1;back;< Back]
- listring[context;storage]
- listring[current_player;main] ]]
+ storage_fs,
}
function workbench:set_formspec(meta, id)
meta:set_string("formspec",
- "size[8,7;]list[current_player;main;0,3.25;8,4;]"..
- formspecs[id]..xbg..default.get_hotbar_bg(0,3.25))
+ "size[8,7;]list[current_player;main;0,3.25;8,4;]" ..
+ formspecs[id] .. xbg .. default.get_hotbar_bg(0,3.25))
end
function workbench.construct(pos)
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
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
function workbench.put(_, listname, _, stack)
local stackname = stack:get_name()
if (listname == "tool" and stack:get_wear() > 0 and
- workbench:repairable(stackname)) or
- (listname == "input" and registered_nodes[stackname.."_cube"]) or
+ workbench:repairable(stackname)) or
+ (listname == "input" and registered_nodes[stackname .. "_cube"]) or
(listname == "hammer" and stackname == "xdecor:hammer") or
listname == "storage" then
return stack:get_count()
end
+
return 0
end
local stackname = stack:get_name()
if listname == "input" then
- if stackname == inputname and registered_nodes[inputname.."_cube"] then
+ if stackname == inputname and registered_nodes[inputname .. "_cube"] then
workbench:get_output(inv, input, stackname)
else
inv:set_list("forms", {})
xdecor.register("workbench", {
description = "Work Bench",
- groups = {cracky=2, choppy=2, oddly_breakable_by_hand=1},
+ 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,
allow_metadata_inventory_move = workbench.move
})
-for _, d in pairs(workbench.defs) do
-for i=1, #nodes do
+for _, d in ipairs(workbench.defs) do
+for i = 1, #nodes do
local node = nodes[i]
local mod_name, item_name = node:match("^(.-):(.*)")
local def = registered_nodes[node]
tiles = {def.tile_images[1]}
end
- if not registered_nodes["stairs:slab_"..item_name] then
+ if not registered_nodes["stairs:slab_" .. item_name] then
stairs.register_stair_and_slab(item_name, node,
- groups, tiles, def.description.." Stair",
- def.description.." Slab", def.sounds)
+ groups, tiles, def.description .. " Stair",
+ def.description .. " Slab", def.sounds)
end
- minetest.register_node(":"..node.."_"..d[1], {
- description = def.description.." "..d[1]:gsub("^%l", string.upper),
+ minetest.register_node(":" .. node .. "_" .. d[1], {
+ description = def.description .. " " .. d[1]:gsub("^%l", string.upper),
paramtype = "light",
paramtype2 = "facedir",
drawtype = "nodebox",
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
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