mirror of
https://github.com/minetest-mods/moreblocks.git
synced 2024-12-27 19:20:21 +01:00
Merge ShadowNinja's rewrite.
This commit is contained in:
parent
396945ed3e
commit
8337a6c192
@ -1,6 +1,6 @@
|
|||||||
+---- zlib/libpng license ----+
|
+---- zlib/libpng license ----+
|
||||||
|
|
||||||
Copyright (c) 2013 Calinou
|
Copyright (c) 2013-2014 Calinou and contributors
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
|
This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
|
||||||
|
24
README.txt
24
README.txt
@ -1,22 +1,12 @@
|
|||||||
Calinou's Minetest Mods
|
MoreBlocks
|
||||||
=====================
|
==========
|
||||||
|
|
||||||
Calinou's Mods for Minetest [http://minetest.net], a free and opensource Minecraft-like game.
|
MoreBlocks for Minetest (http://minetest.net), a free and open source infinite
|
||||||
|
world block sandbox game.
|
||||||
|
|
||||||
This Git repository is mostly made for servers; it allows easy updating.
|
To install, just clone this repository into your "mods" folder.
|
||||||
|
|
||||||
To install, just clone this repository somewhere, then copy the "calinou_mods" folder in the "mods/minetest" folder of Minetest's installation folder.
|
MoreBlocks code is under the zlib/libpng license, textures are under CC BY-SA 3.0 unported.
|
||||||
|
|
||||||
|
Forum thread: http://forum.minetest.net/viewtopic.php?id=509
|
||||||
|
|
||||||
|
|
||||||
Misc stuff
|
|
||||||
=====================
|
|
||||||
|
|
||||||
All these mods' source codes, except More Ores are under the zlib/libpng license. More Ores is under the GNU GPLv3; the mods' textures are under the CC BY-SA 3.0 Unported.
|
|
||||||
|
|
||||||
Mods' forum threads:
|
|
||||||
More Blocks: http://minetest.net/forum/viewtopic.php?id=509
|
|
||||||
More Ores: http://minetest.net/forum/viewtopic.php?id=549
|
|
||||||
Map Tools: http://minetest.net/forum/viewtopic.php?id=1882
|
|
||||||
Doors+: http://minetest.net/forum/viewtopic.php?id=2059
|
|
||||||
Stairs+: http://minetest.net/forum/viewtopic.php?id=2092
|
|
||||||
|
155
aliases.lua
155
aliases.lua
@ -1,149 +1,9 @@
|
|||||||
-- Aliases (some of them are about the default mod, some about moreblocks)
|
|
||||||
|
|
||||||
-- Additional default aliases
|
|
||||||
|
|
||||||
minetest.register_alias("woodpick", "default:pick_wood")
|
|
||||||
minetest.register_alias("woodenpick", "default:pick_wood")
|
|
||||||
minetest.register_alias("stonepick", "default:pick_stone")
|
|
||||||
minetest.register_alias("steelpick", "default:pick_steel")
|
|
||||||
minetest.register_alias("ironpick", "default:pick_steel")
|
|
||||||
minetest.register_alias("mesepick", "default:pick_mese")
|
|
||||||
|
|
||||||
minetest.register_alias("woodaxe", "default:axe_wood")
|
|
||||||
minetest.register_alias("woodenaxe", "default:axe_wood")
|
|
||||||
minetest.register_alias("stoneaxe", "default:axe_stone")
|
|
||||||
minetest.register_alias("steelaxe", "default:axe_steel")
|
|
||||||
minetest.register_alias("ironaxe", "default:axe_steel")
|
|
||||||
|
|
||||||
minetest.register_alias("woodshovel", "default:shovel_wood")
|
|
||||||
minetest.register_alias("woodenshovel", "default:shovel_wood")
|
|
||||||
minetest.register_alias("stoneshovel", "default:shovel_stone")
|
|
||||||
minetest.register_alias("steelshovel", "default:shovel_steel")
|
|
||||||
minetest.register_alias("ironshovel", "default:shovel_steel")
|
|
||||||
|
|
||||||
minetest.register_alias("woodsword", "default:sword_wood")
|
|
||||||
minetest.register_alias("woodensword", "default:sword_wood")
|
|
||||||
minetest.register_alias("stonesword", "default:sword_stone")
|
|
||||||
minetest.register_alias("steelsword", "default:sword_steel")
|
|
||||||
minetest.register_alias("ironsword", "default:sword_steel")
|
|
||||||
|
|
||||||
minetest.register_alias("grass", "default:dirt_with_grass")
|
|
||||||
minetest.register_alias("grassblock", "default:dirt_with_grass")
|
|
||||||
minetest.register_alias("grass_block", "default:dirt_with_grass")
|
|
||||||
|
|
||||||
minetest.register_alias("grassfootsteps", "default:dirt_with_grass_footsteps")
|
|
||||||
minetest.register_alias("grass_footsteps", "default:dirt_with_grass_footsteps")
|
|
||||||
|
|
||||||
minetest.register_alias("jungle_tree", "default:jungletree")
|
|
||||||
|
|
||||||
minetest.register_alias("stick", "default:stick")
|
|
||||||
minetest.register_alias("sign", "default:sign_wall")
|
|
||||||
minetest.register_alias("fence", "default:fence_wood")
|
|
||||||
minetest.register_alias("coal", "default:coal_lump")
|
|
||||||
minetest.register_alias("iron", "default:iron_lump")
|
|
||||||
minetest.register_alias("clay", "default:clay_lump")
|
|
||||||
minetest.register_alias("steel", "default:steel_ingot")
|
|
||||||
minetest.register_alias("steel_block", "default:steelblock")
|
|
||||||
|
|
||||||
minetest.register_alias("stonebrick", "default:stonebrick")
|
|
||||||
minetest.register_alias("stonebricks", "default:stonebrick")
|
|
||||||
minetest.register_alias("stone_brick", "default:stonebrick")
|
|
||||||
minetest.register_alias("stone_bricks", "default:stonebrick")
|
|
||||||
|
|
||||||
minetest.register_alias("screwdriver", "screwdriver:screwdriver")
|
|
||||||
minetest.register_alias("screw_driver", "screwdriver:screw_driver")
|
|
||||||
minetest.register_alias("screwdrive", "screwdriver:screw_driver")
|
|
||||||
minetest.register_alias("screw_drive", "screwdriver:screw_driver")
|
|
||||||
minetest.register_alias("sd", "screwdriver:screw_driver")
|
|
||||||
|
|
||||||
|
|
||||||
minetest.register_alias("obsidian", "default:obsidian")
|
|
||||||
minetest.register_alias("obsidianglass", "default:obsidian_glass")
|
|
||||||
minetest.register_alias("obsidian_glass", "default:obsidian_glass")
|
|
||||||
|
|
||||||
-- More Blocks aliases
|
-- More Blocks aliases
|
||||||
|
|
||||||
minetest.register_alias("circlestonebrick", "moreblocks:circle_stone_bricks")
|
|
||||||
minetest.register_alias("circlestonebricks", "moreblocks:circle_stone_bricks")
|
|
||||||
minetest.register_alias("circlestone_brick", "moreblocks:circle_stone_bricks")
|
|
||||||
minetest.register_alias("circlestone_bricks", "moreblocks:circle_stone_bricks")
|
|
||||||
minetest.register_alias("circle_stonebrick", "moreblocks:circle_stone_bricks")
|
|
||||||
minetest.register_alias("circle_stonebricks", "moreblocks:circle_stone_bricks")
|
|
||||||
minetest.register_alias("circle_stone_brick", "moreblocks:circle_stone_bricks")
|
|
||||||
minetest.register_alias("circle_stone_bricks", "moreblocks:circle_stone_bricks")
|
|
||||||
|
|
||||||
minetest.register_alias("sweeper", "moreblocks:sweeper")
|
minetest.register_alias("sweeper", "moreblocks:sweeper")
|
||||||
minetest.register_alias("circularsaw", "moreblocks:circular_saw")
|
|
||||||
minetest.register_alias("circular_saw", "moreblocks:circular_saw")
|
minetest.register_alias("circular_saw", "moreblocks:circular_saw")
|
||||||
minetest.register_alias("cs", "moreblocks:circular_saw")
|
|
||||||
|
|
||||||
minetest.register_alias("sweep", "moreblocks:sweeper")
|
|
||||||
minetest.register_alias("junglestick", "moreblocks:jungle_stick")
|
|
||||||
minetest.register_alias("jungle_stick", "moreblocks:jungle_stick")
|
minetest.register_alias("jungle_stick", "moreblocks:jungle_stick")
|
||||||
|
|
||||||
minetest.register_alias("stonesquare", "moreblocks:stone_tile")
|
|
||||||
minetest.register_alias("stonesquares", "moreblocks:stone_tile")
|
|
||||||
minetest.register_alias("stone_square", "moreblocks:stone_tile")
|
|
||||||
minetest.register_alias("stone_squares", "moreblocks:stone_tile")
|
|
||||||
minetest.register_alias("stonetile", "moreblocks:stone_tile")
|
|
||||||
minetest.register_alias("stonetiles", "moreblocks:stone_tile")
|
|
||||||
minetest.register_alias("stone_tile", "moreblocks:stone_tile")
|
|
||||||
minetest.register_alias("stone_tiles", "moreblocks:stone_tile")
|
|
||||||
|
|
||||||
minetest.register_alias("splitstonesquare", "moreblocks:split_stone_tile")
|
|
||||||
minetest.register_alias("splitstonesquares", "moreblocks:split_stone_tile")
|
|
||||||
minetest.register_alias("split_stone_square", "moreblocks:split_stone_tile")
|
|
||||||
minetest.register_alias("split_stone_squares", "moreblocks:split_stone_tile")
|
|
||||||
minetest.register_alias("split_stonesquare", "moreblocks:split_stone_tile")
|
|
||||||
minetest.register_alias("split_stonesquares", "moreblocks:split_stone_tile")
|
|
||||||
|
|
||||||
minetest.register_alias("coalstone", "moreblocks:coal_stone")
|
|
||||||
minetest.register_alias("coal_stone", "moreblocks:coal_stone")
|
|
||||||
|
|
||||||
minetest.register_alias("ironstone", "moreblocks:iron_stone")
|
|
||||||
minetest.register_alias("iron_stone", "moreblocks:iron_stone")
|
|
||||||
|
|
||||||
minetest.register_alias("coalglass", "moreblocks:coal_glass")
|
|
||||||
minetest.register_alias("coal_glass", "moreblocks:coal_glass")
|
|
||||||
|
|
||||||
minetest.register_alias("ironglass", "moreblocks:iron_glass")
|
|
||||||
minetest.register_alias("iron_glass", "moreblocks:iron_glass")
|
|
||||||
|
|
||||||
minetest.register_alias("glowglass", "moreblocks:glow_glass")
|
|
||||||
minetest.register_alias("glow_glass", "moreblocks:glow_glass")
|
|
||||||
|
|
||||||
minetest.register_alias("superglowglass", "moreblocks:super_glow_glass")
|
|
||||||
minetest.register_alias("super_glowglass", "moreblocks:super_glow_glass")
|
|
||||||
minetest.register_alias("super_glow_glass", "moreblocks:super_glow_glass")
|
|
||||||
|
|
||||||
minetest.register_alias("plankstone", "moreblocks:plankstone")
|
|
||||||
|
|
||||||
minetest.register_alias("cactusbrick", "moreblocks:cactus_brick")
|
|
||||||
minetest.register_alias("cactus_brick", "moreblocks:cactus_brick")
|
|
||||||
|
|
||||||
minetest.register_alias("cactuschecker", "moreblocks:cactus_checker")
|
|
||||||
minetest.register_alias("cactus_checker", "moreblocks:cactus_checker")
|
|
||||||
|
|
||||||
minetest.register_alias("coalchecker", "moreblocks:coal_checker")
|
|
||||||
minetest.register_alias("coal_checker", "moreblocks:coal_checker")
|
|
||||||
|
|
||||||
minetest.register_alias("ironchecker", "moreblocks:iron_checker")
|
|
||||||
minetest.register_alias("iron_checker", "moreblocks:iron_checker")
|
|
||||||
|
|
||||||
minetest.register_alias("woodtile", "moreblocks:wood_tile")
|
|
||||||
minetest.register_alias("woodentile", "moreblocks:wood_tile")
|
|
||||||
minetest.register_alias("wood_tile", "moreblocks:wood_tile")
|
|
||||||
minetest.register_alias("wooden_tile", "moreblocks:wood_tile")
|
|
||||||
|
|
||||||
minetest.register_alias("woodtile_full", "moreblocks:wood_tile_full")
|
|
||||||
minetest.register_alias("woodentile_full", "moreblocks:wood_tile_full")
|
|
||||||
minetest.register_alias("wood_tile_full", "moreblocks:wood_tile_full")
|
|
||||||
minetest.register_alias("wooden_tile_full", "moreblocks:wood_tile_full")
|
|
||||||
minetest.register_alias("full_woodtile", "moreblocks:wood_tile_full")
|
|
||||||
minetest.register_alias("full_woodentile", "moreblocks:wood_tile_full")
|
|
||||||
minetest.register_alias("full_wood_tile", "moreblocks:wood_tile_full")
|
|
||||||
minetest.register_alias("full_wooden_tile", "moreblocks:wood_tile_full")
|
|
||||||
|
|
||||||
-- Old block/item replacement
|
-- Old block/item replacement
|
||||||
|
|
||||||
minetest.register_alias("moreblocks:oerkkiblock", "default:mossycobble")
|
minetest.register_alias("moreblocks:oerkkiblock", "default:mossycobble")
|
||||||
@ -156,6 +16,10 @@ minetest.register_alias("moreblocks:stonebrick", "default:stonebrick")
|
|||||||
minetest.register_alias("moreblocks:junglewood", "default:junglewood")
|
minetest.register_alias("moreblocks:junglewood", "default:junglewood")
|
||||||
minetest.register_alias("moreblocks:jungle_wood", "default:junglewood")
|
minetest.register_alias("moreblocks:jungle_wood", "default:junglewood")
|
||||||
|
|
||||||
|
for _, t in pairs(circular_saw.names) do
|
||||||
|
minetest.register_alias("moreblocks:"..t[1].."_jungle_wood"..t[2],
|
||||||
|
"moreblocks:"..t[1].."_junglewood"..t[2])
|
||||||
|
end
|
||||||
minetest.register_alias("moreblocks:horizontaltree", "moreblocks:horizontal_tree")
|
minetest.register_alias("moreblocks:horizontaltree", "moreblocks:horizontal_tree")
|
||||||
minetest.register_alias("moreblocks:horizontaljungletree", "moreblocks:horizontal_jungle_tree")
|
minetest.register_alias("moreblocks:horizontaljungletree", "moreblocks:horizontal_jungle_tree")
|
||||||
minetest.register_alias("moreblocks:stonesquare", "moreblocks:stone_tile")
|
minetest.register_alias("moreblocks:stonesquare", "moreblocks:stone_tile")
|
||||||
@ -187,20 +51,25 @@ minetest.register_alias("moreblocks:junglestick", "moreblocks:jungle_stick")
|
|||||||
minetest.register_alias("moreblocks:splitstonesquare","moreblocks:split_stone_tile")
|
minetest.register_alias("moreblocks:splitstonesquare","moreblocks:split_stone_tile")
|
||||||
minetest.register_alias("moreblocks:allfacestree","moreblocks:all_faces_tree")
|
minetest.register_alias("moreblocks:allfacestree","moreblocks:all_faces_tree")
|
||||||
|
|
||||||
-- ABM for Horizontal_tree (fix facedir).
|
-- ABM for horizontal trees (fix facedir).
|
||||||
|
|
||||||
|
local horizontal_tree_convert_facedir = {7, 12, 9, 18}
|
||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
nodenames = {"moreblocks:horizontal_tree","moreblocks:horizontal_jungle_tree"},
|
nodenames = {"moreblocks:horizontal_tree","moreblocks:horizontal_jungle_tree"},
|
||||||
interval = 1,
|
interval = 1,
|
||||||
chance = 1,
|
chance = 1,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
local convert_facedir={7,12,9,18}
|
|
||||||
if node.name == "moreblocks:horizontal_tree" then
|
if node.name == "moreblocks:horizontal_tree" then
|
||||||
node.name = "default:tree"
|
node.name = "default:tree"
|
||||||
else
|
else
|
||||||
node.name = "default:jungletree"
|
node.name = "default:jungletree"
|
||||||
end
|
end
|
||||||
minetest.set_node(pos, {name=node.name,param2=convert_facedir[node.param2+1]})
|
node.param2 = node.param2 < 3 and node.param2 or 0
|
||||||
|
minetest.set_node(pos, {
|
||||||
|
name = node.name,
|
||||||
|
param2 = horizontal_tree_convert_facedir[node.param2 + 1]
|
||||||
|
})
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
556
circular_saw.lua
556
circular_saw.lua
@ -1,311 +1,315 @@
|
|||||||
-- Load translation library if intllib is installed
|
|
||||||
|
|
||||||
local S
|
local S = moreblocks.gettext
|
||||||
if (minetest.get_modpath("intllib")) then
|
circular_saw = {}
|
||||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
|
||||||
S = intllib.Getter(minetest.get_current_modname())
|
|
||||||
else
|
|
||||||
S = function ( s ) return s end
|
|
||||||
end
|
|
||||||
|
|
||||||
circular_saw = {};
|
circular_saw.known_stairs = setmetatable({}, {
|
||||||
|
__newindex = function(k, v)
|
||||||
circular_saw.known_stairs = {}
|
local modname = minetest.get_current_modname()
|
||||||
|
print(("Mod %s tried to add node %s to the circular saw"
|
||||||
|
.." manually!"):format(modname, v))
|
||||||
-- Register known moreblocks stairs.
|
end,
|
||||||
for i,v in ipairs({"default:wood", "default:stone", "default:cobble", "default:mossycobble", "default:brick", "default:sandstone",
|
})
|
||||||
"default:steelblock", "default:desert_stone", "default:glass", "default:tree", "default:jungletree", "default:stonebrick",
|
|
||||||
"default:obsidian", "default:obsidian_glass", "default:stone_bricks", "default:junglewood", "default:goldblock",
|
|
||||||
"default:copperblock", "default:bronzeblock", "default:diamondblock", "default:desert_stonebrick", "default:sandstonebrick",
|
|
||||||
|
|
||||||
"moreblocks:coal_stone", "moreblocks:iron_stone", "moreblocks:coal_checker", "moreblocks:iron_checker",
|
|
||||||
"moreblocks:cactus_checker", "moreblocks:coal_glass", "moreblocks:iron_glass", "moreblocks:glow_glass",
|
|
||||||
"moreblocks:super_glow_glass", "moreblocks:wooden_tile", "moreblocks:stone_tile", "moreblocks:split_stone_tile",
|
|
||||||
"moreblocks:coal_stone_bricks","moreblocks:iron_stone_bricks", "moreblocks:circle_stone_bricks",
|
|
||||||
"moreblocks:wood_tile_centered", "moreblocks:wood_tile_full", "moreblocks:plank_stone"}) do
|
|
||||||
table.insert(circular_saw.known_stairs, v);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
-- This is populated by stairsplus:register_all
|
||||||
|
circular_saw.known_nodes = {}
|
||||||
|
|
||||||
-- How many microblocks does this shape at the output inventory cost?
|
-- How many microblocks does this shape at the output inventory cost?
|
||||||
circular_saw.cost_in_microblocks = { 1, 1, 1, 1, 1, 1, 1, 2,
|
circular_saw.cost_in_microblocks = {
|
||||||
|
1, 1, 1, 1, 1, 1, 1, 2,
|
||||||
2, 3, 2, 4, 2, 4, 5, 6,
|
2, 3, 2, 4, 2, 4, 5, 6,
|
||||||
7, 1, 1, 2, 4, 6, 7, 8,
|
7, 1, 1, 2, 4, 6, 7, 8,
|
||||||
3, 1, 1, 2, 4, 0, 0, 0, };
|
3, 1, 1, 2, 4, 0, 0, 0,
|
||||||
|
|
||||||
-- anz: amount of input material in microblocks.
|
|
||||||
circular_saw.get_stair_output_inv = function(modname, material, anz, max)
|
|
||||||
|
|
||||||
local max_offered = 99;
|
|
||||||
|
|
||||||
if(not(max) or (max == nil) or tonumber(max) > 99 or tonumber(max) < 1) then
|
|
||||||
max_offered = 99;
|
|
||||||
else
|
|
||||||
max_offered = tonumber(max);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- If there is nothing inside display empty inventory.
|
|
||||||
if(anz < 1) then
|
|
||||||
return { "", "", "", "", "", "", "",
|
|
||||||
"", "", "", "", "", "", "",
|
|
||||||
"", "", "", "", "", "", "",
|
|
||||||
"", "", "", "", "", "", ""};
|
|
||||||
end
|
|
||||||
|
|
||||||
return {
|
|
||||||
|
|
||||||
modname .. ":micro_" .. material .. "_1 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":panel_" .. material .. "_1 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":micro_" .. material .. "_2 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":panel_" .. material .. "_2 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":micro_" .. material .. "_4 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":panel_" .. material .. "_4 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":micro_" .. material .. " " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":panel_" .. material .. " " .. math.min(math.floor(anz/2), max_offered),
|
|
||||||
|
|
||||||
modname .. ":micro_" .. material .. "_12 " .. math.min(math.floor(anz/2), max_offered),
|
|
||||||
modname .. ":panel_" .. material .. "_12 " .. math.min(math.floor(anz/3), max_offered),
|
|
||||||
modname .. ":micro_" .. material .. "_14 " .. math.min(math.floor(anz/2), max_offered),
|
|
||||||
modname .. ":panel_" .. material .. "_14 " .. math.min(math.floor(anz/4), max_offered),
|
|
||||||
modname .. ":micro_" .. material .. "_15 " .. math.min(math.floor(anz/2), max_offered),
|
|
||||||
modname .. ":panel_" .. material .. "_15 " .. math.min(math.floor(anz/4), max_offered),
|
|
||||||
modname .. ":stair_" .. material .. "_outer " .. math.min(math.floor(anz/5), max_offered),
|
|
||||||
modname .. ":stair_" .. material .. " " .. math.min(math.floor(anz/6), max_offered),
|
|
||||||
|
|
||||||
modname .. ":stair_" .. material .. "_inner " .. math.min(math.floor(anz/7), max_offered),
|
|
||||||
modname .. ":slab_" .. material .. "_1 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":slab_" .. material .. "_2 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":slab_" .. material .. "_quarter " .. math.min(math.floor(anz/2), max_offered),
|
|
||||||
modname .. ":slab_" .. material .. " " .. math.min(math.floor(anz/4), max_offered),
|
|
||||||
modname .. ":slab_" .. material .. "_three_quarter " .. math.min(math.floor(anz/6), max_offered),
|
|
||||||
modname .. ":slab_" .. material .. "_14 " .. math.min(math.floor(anz/7), max_offered),
|
|
||||||
modname .. ":slab_" .. material .. "_15 " .. math.min(math.floor(anz/8), max_offered),
|
|
||||||
|
|
||||||
modname .. ":stair_" .. material .. "_half " .. math.min(math.floor(anz/3), max_offered),
|
|
||||||
modname .. ":stair_" .. material .. "_alt_1 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":stair_" .. material .. "_alt_2 " .. math.min(math.floor(anz/1), max_offered),
|
|
||||||
modname .. ":stair_" .. material .. "_alt_4 " .. math.min(math.floor(anz/2), max_offered),
|
|
||||||
modname .. ":stair_" .. material .. "_alt " .. math.min(math.floor(anz/4), max_offered),
|
|
||||||
|
|
||||||
"",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
circular_saw.names = {
|
||||||
|
{"micro", "_1"},
|
||||||
|
{"panel", "_1"},
|
||||||
|
{"micro", "_2"},
|
||||||
|
{"panel", "_2"},
|
||||||
|
{"micro", "_4"},
|
||||||
|
{"panel", "_4"},
|
||||||
|
{"micro", ""},
|
||||||
|
{"panel", ""},
|
||||||
|
{"micro", "_12"},
|
||||||
|
{"panel", "_12"},
|
||||||
|
{"micro", "_14"},
|
||||||
|
{"panel", "_14"},
|
||||||
|
{"micro", "_15"},
|
||||||
|
{"panel", "_15"},
|
||||||
|
{"stair", "_outer"},
|
||||||
|
{"stair", ""},
|
||||||
|
{"stair", "_inner"},
|
||||||
|
{"slab", "_1"},
|
||||||
|
{"slab", "_2"},
|
||||||
|
{"slab", "_quarter"},
|
||||||
|
{"slab", ""},
|
||||||
|
{"slab", "_three_quarter"},
|
||||||
|
{"slab", "_14"},
|
||||||
|
{"slab", "_15"},
|
||||||
|
{"stair", "_half"},
|
||||||
|
{"stair", "_alt_1"},
|
||||||
|
{"stair", "_alt_2"},
|
||||||
|
{"stair", "_alt_4"},
|
||||||
|
{"stair", "_alt"},
|
||||||
|
}
|
||||||
|
|
||||||
|
function circular_saw:get_cost(inv, stackname)
|
||||||
|
for i, item in pairs(inv:get_list("output")) do
|
||||||
|
if item:get_name() == stackname then
|
||||||
|
return circular_saw.cost_in_microblocks[i]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function circular_saw:get_output_inv(modname, material, amount, max)
|
||||||
|
if (not max or max < 1) then
|
||||||
|
max = 99
|
||||||
|
end
|
||||||
|
|
||||||
|
local list = {}
|
||||||
|
-- If there is nothing inside display empty inventory
|
||||||
|
if amount < 1 then
|
||||||
|
return list
|
||||||
|
end
|
||||||
|
|
||||||
|
for i, t in ipairs(circular_saw.names) do
|
||||||
|
local cost = circular_saw.cost_in_microblocks[i]
|
||||||
|
table.insert(list, modname..":"..t[1].."_"..material..t[2]
|
||||||
|
.." "..math.min(math.floor(amount/cost), max))
|
||||||
|
end
|
||||||
|
return list
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Reset empty circular_saw after last full block has been taken out (or the circular_saw has been placed the first tiem); note: max_offered is not reset.
|
-- Reset empty circular_saw after last full block has been taken out
|
||||||
circular_saw.reset_circular_saw = function(pos)
|
-- (or the circular_saw has been placed the first time)
|
||||||
local meta = minetest.env:get_meta(pos);
|
-- note: max_offered is not reset
|
||||||
local inv = meta:get_inventory();
|
function circular_saw:reset(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
|
||||||
inv:set_list("input", { "" });
|
inv:set_list("input", {})
|
||||||
inv:set_list("micro", { "" });
|
inv:set_list("micro", {})
|
||||||
inv:set_list("output", circular_saw.get_stair_output_inv("", "", 0, meta:get_string("max_offered")));
|
inv:set_list("output", {})
|
||||||
meta:set_int("anz", 0);
|
meta:set_int("anz", 0)
|
||||||
|
|
||||||
meta:set_string("infotext", S("Circular saw, empty (owned by %s)"):format((meta:get_string("owner") or "")));
|
meta:set_string("infotext",
|
||||||
|
S("Circular saw, empty (owned by %s)")
|
||||||
|
:format(meta:get_string("owner") or ""))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Player has taken something out of the box or placed something inside; that amounts to count microblocks.
|
-- Player has taken something out of the box or placed something inside
|
||||||
circular_saw.update_inventory = function(pos, amount)
|
-- that amounts to count microblocks
|
||||||
local meta = minetest.env:get_meta(pos);
|
function circular_saw:update_inventory(pos, amount)
|
||||||
local inv = meta:get_inventory();
|
local meta = minetest.get_meta(pos)
|
||||||
local akt = meta:get_int("anz");
|
local inv = meta:get_inventory()
|
||||||
|
|
||||||
-- The material is receicled automaticly
|
amount = meta:get_int("anz") + amount
|
||||||
inv:set_list("recycle", { "" });
|
|
||||||
|
|
||||||
if(akt + amount < 1) then -- If the last block is taken out
|
-- The material is recycled automaticly.
|
||||||
|
inv:set_list("recycle", {})
|
||||||
circular_saw.reset_circular_saw(pos);
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
if amount < 1 then -- If the last block is taken out.
|
||||||
|
self:reset(pos)
|
||||||
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local stack = inv:get_stack("input", 1);
|
local stack = inv:get_stack("input", 1)
|
||||||
-- At least one "normal" block is necessary to see what kind of stairs are requested.
|
-- At least one "normal" block is necessary to see what kind of stairs are requested.
|
||||||
if(stack:is_empty()) then
|
if stack:is_empty() then
|
||||||
|
-- Any microblocks not taken out yet are now lost.
|
||||||
-- Any microblocks not taken out yet are now lost (covers material loss in the machine).
|
-- (covers material loss in the machine)
|
||||||
circular_saw.reset_circular_saw(pos);
|
self:reset(pos)
|
||||||
return;
|
return
|
||||||
|
|
||||||
end
|
end
|
||||||
local node_name = stack:get_name();
|
local node_name = stack:get_name()
|
||||||
local liste = node_name:split(":");
|
local name_parts = circular_saw.known_nodes[node_name]
|
||||||
local modname = liste[1];
|
local modname = name_parts[1]
|
||||||
local material = liste[2];
|
local material = name_parts[2]
|
||||||
|
|
||||||
-- Display as many full blocks as possible.
|
-- Display as many full blocks as possible
|
||||||
inv:set_list("input", { modname.. ":" .. material .. " " .. math.floor( (akt + amount) / 8) });
|
inv:set_list("input", {
|
||||||
|
node_name.." ".. math.floor(amount / 8)
|
||||||
|
})
|
||||||
|
|
||||||
-- The stairnodes made of default nodes use moreblocks namespace, other mods keep own.
|
-- The stairnodes made of default nodes use moreblocks namespace, other mods keep own.
|
||||||
if(modname == "default") then modname = "moreblocks"; end
|
if modname == "default" then
|
||||||
--print("circular_saw set to " ..modname.. " : " ..material.. " with " .. (akt+amount) .. " microblocks.");
|
modname = "moreblocks"
|
||||||
|
end
|
||||||
|
--print("circular_saw set to " ..modname.. " : "
|
||||||
|
-- ..material.. " with "..(amount).." microblocks.")
|
||||||
|
|
||||||
-- 0-7 microblocks may remain as a rest.
|
-- 0-7 microblocks may remain left-over.
|
||||||
inv:set_list("micro", { modname.. ":micro_" .. material .. "_bottom " .. ((akt + amount) % 8) });
|
inv:set_list("micro", {
|
||||||
-- Display.
|
modname..":micro_"..material.."_bottom "..(amount % 8)
|
||||||
inv:set_list("output", circular_saw.get_stair_output_inv(modname, material, (akt + amount), meta:get_string("max_offered")));
|
})
|
||||||
-- Store how many microblocks are available.
|
-- Display
|
||||||
meta:set_int("anz", (akt+amount));
|
inv:set_list("output",
|
||||||
|
self:get_output_inv(modname, material, amount,
|
||||||
|
meta:get_int("max_offered")))
|
||||||
|
-- Store how many microblocks are available
|
||||||
|
meta:set_int("anz", amount)
|
||||||
|
|
||||||
meta:set_string("infotext", S("Circular saw, working with %s (owned by %s)"):format(material,(meta:get_string("owner") or "")));
|
meta:set_string("infotext",
|
||||||
|
S("Circular saw, working with %s (owned by %s)")
|
||||||
|
:format(material, meta:get_string("owner") or ""))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- The amount of items offered per shape can be configured.
|
-- The amount of items offered per shape can be configured
|
||||||
circular_saw.on_receive_fields = function(pos, formname, fields, sender)
|
function circular_saw.on_receive_fields(pos, formname, fields, sender)
|
||||||
local meta = minetest.env:get_meta(pos);
|
local meta = minetest.get_meta(pos)
|
||||||
if tonumber(fields.max_offered) and tonumber(fields.max_offered) > 0 and tonumber(fields.max_offered) < 99 then
|
local max = tonumber(fields.max_offered)
|
||||||
meta:set_string("max_offered", fields.max_offered);
|
if max and max > 0 then
|
||||||
circular_saw.update_inventory(pos, 0); -- Update to show the correct number of items.
|
meta:set_string("max_offered", max)
|
||||||
|
-- update to show the correct number of items
|
||||||
|
circular_saw:update_inventory(pos, 0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Moving the inventory of the circular_saw around is not allowed because it is a fictional inventory.
|
-- Moving the inventory of the circular_saw around is not allowed because it
|
||||||
circular_saw.allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
-- is a fictional inventory. Moving inventory around would be rather
|
||||||
-- Moving inventory around would be rather immpractical and make things more difficult to calculate.
|
-- impractical and make things more difficult to calculate.
|
||||||
return 0;
|
function circular_saw.allow_metadata_inventory_move(
|
||||||
|
pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- Only input- and recycle-slot are intended as input slots.
|
-- Only input- and recycle-slot are intended as input slots
|
||||||
circular_saw.allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
function circular_saw.allow_metadata_inventory_put(
|
||||||
|
pos, listname, index, stack, player)
|
||||||
-- The player is not allowed to put something in there.
|
-- The player is not allowed to put something in there
|
||||||
if(listname == "output" or listname == "micro") then
|
if listname == "output" or listname == "micro" then
|
||||||
return 0;
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
local meta = minetest.env:get_meta(pos);
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory();
|
local inv = meta:get_inventory()
|
||||||
|
local stackname = stack:get_name()
|
||||||
|
local count = stack:get_count()
|
||||||
|
|
||||||
-- Only alow those items that are offered in the output inventory to be recycled.
|
-- Only alow those items that are offered in the output inventory to be recycled
|
||||||
if(listname == "recycle" and not(inv:contains_item("output", stack:get_name()))) then
|
if listname == "recycle" then
|
||||||
return 0;
|
if not inv:contains_item("output", stackname) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
local stackmax = stack:get_stack_max()
|
||||||
|
local instack = inv:get_stack("input", 1)
|
||||||
|
local microstack = inv:get_stack("micro", 1)
|
||||||
|
local incount = instack:get_count()
|
||||||
|
local incost = (incount * 8) + microstack:get_count()
|
||||||
|
local maxcost = (stackmax * 8) + 7
|
||||||
|
local cost = circular_saw:get_cost(inv, stackname)
|
||||||
|
if (incost + cost) > maxcost then
|
||||||
|
return math.max((maxcost - incost) / cost, 0)
|
||||||
|
end
|
||||||
|
return count
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Only accept certain blocks as input which are known to be craftable into stairs.
|
-- Only accept certain blocks as input which are known to be craftable into stairs
|
||||||
if(listname == "input") then
|
if listname == "input" then
|
||||||
|
if not inv:is_empty("input") and
|
||||||
for i,v in ipairs(circular_saw.known_stairs) do
|
inv:get_stack("input", index):get_name() ~= stackname then
|
||||||
|
return 0
|
||||||
if(circular_saw.known_stairs[ i ] == stack:get_name()) and inv:room_for_item("input", stack) then
|
|
||||||
return stack:get_count();
|
|
||||||
end
|
end
|
||||||
|
for name, t in pairs(circular_saw.known_nodes) do
|
||||||
|
if name == stackname and inv:room_for_item("input", stack) then
|
||||||
|
return count
|
||||||
end
|
end
|
||||||
return 0;
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
return 0
|
||||||
return stack:get_count()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Taking is allowed from all slots (even the internal microblock slot).
|
|
||||||
|
|
||||||
-- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material.
|
|
||||||
circular_saw.on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
||||||
|
|
||||||
-- We need to find out if the circular_saw is already set to a specific material or not.
|
|
||||||
local meta = minetest.env:get_meta(pos);
|
|
||||||
local inv = meta:get_inventory();
|
|
||||||
|
|
||||||
-- Putting something into the input slot is only possible if that had been empty before or did contain something of the same material.
|
|
||||||
if( listname=="input") then
|
|
||||||
|
|
||||||
if( not( inv:is_empty("input"))) then
|
|
||||||
|
|
||||||
local old_stack = inv:get_stack("input", 1 );
|
|
||||||
if( old_stack:get_name() ~= stack:get_name() ) then
|
|
||||||
return 0;
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Each new block is worth 8 microblocks.
|
-- Taking is allowed from all slots (even the internal microblock slot)
|
||||||
circular_saw.update_inventory(pos, 8 * stack:get_count());
|
-- Putting something in is slightly more complicated than taking anything
|
||||||
|
-- because we have to make sure it is of a suitable material
|
||||||
|
function circular_saw.on_metadata_inventory_put(
|
||||||
|
pos, listname, index, stack, player)
|
||||||
|
-- We need to find out if the circular_saw is already set to a
|
||||||
|
-- specific material or not
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
local stackname = stack:get_name()
|
||||||
|
local count = stack:get_count()
|
||||||
|
|
||||||
elseif(listname=="recycle") then
|
-- Putting something into the input slot is only possible if that had
|
||||||
|
-- been empty before or did contain something of the same material
|
||||||
-- Lets look which shape this represents.
|
if listname == "input" then
|
||||||
for i,v in ipairs(inv:get_list("output")) do
|
-- Each new block is worth 8 microblocks
|
||||||
|
circular_saw:update_inventory(pos, 8 * count)
|
||||||
if(v:get_name() == stack:get_name()) then
|
elseif listname == "recycle" then
|
||||||
|
-- Lets look which shape this represents
|
||||||
local value = circular_saw.cost_in_microblocks[ i ] * stack:get_count();
|
local cost = circular_saw:get_cost(inv, stackname)
|
||||||
--print("\nRecycling " .. (v:get_name()) .. " into " ..value.. " microblocks.");
|
circular_saw:update_inventory(pos, cost * count)
|
||||||
|
|
||||||
-- We get value microblocks back.
|
|
||||||
circular_saw.update_inventory(pos, value);
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- The player takes something.
|
function circular_saw.on_metadata_inventory_take(
|
||||||
circular_saw.on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
pos, listname, index, stack, player)
|
||||||
|
-- If it is one of the offered stairs: find out how many
|
||||||
-- If it is one of the offered stairs: find out how many microblocks have to be substracted.
|
-- microblocks have to be substracted
|
||||||
if (listname=="output") then
|
if listname == "output" then
|
||||||
|
-- We do know how much each block at each position costs
|
||||||
-- We do know how much each block at each position costs.
|
local cost = circular_saw.cost_in_microblocks[index]
|
||||||
local cost = circular_saw.cost_in_microblocks[ index ] * stack:get_count();
|
* stack:get_count()
|
||||||
|
|
||||||
circular_saw.update_inventory(pos, -1 * cost);
|
|
||||||
|
|
||||||
elseif (listname=="micro") then
|
|
||||||
|
|
||||||
-- Each microblock costs 1 microblock.
|
|
||||||
circular_saw.update_inventory(pos, -1 * 1 * stack:get_count());
|
|
||||||
|
|
||||||
elseif (listname=="input") then
|
|
||||||
|
|
||||||
-- Each normal (= full) block taken costs 8 microblocks.
|
|
||||||
circular_saw.update_inventory(pos, -1 * 8 * stack:get_count());
|
|
||||||
|
|
||||||
|
circular_saw:update_inventory(pos, -cost)
|
||||||
|
elseif listname == "micro" then
|
||||||
|
-- Each microblock costs 1 microblock
|
||||||
|
circular_saw:update_inventory(pos, -stack:get_count())
|
||||||
|
elseif listname == "input" then
|
||||||
|
-- Each normal (= full) block taken costs 8 microblocks
|
||||||
|
circular_saw:update_inventory(pos, 8 * -stack:get_count())
|
||||||
end
|
end
|
||||||
-- The recycle field plays no role here since it is processed immediately.
|
-- The recycle field plays no role here since it is processed immediately.
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
circular_saw.on_construct_init = function(pos, formspec)
|
function circular_saw.on_construct(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("formspec", "size[11,9]"..
|
||||||
|
"label[0,0;"..S("Input\nmaterial").."]"..
|
||||||
|
"list[current_name;input;1.5,0;1,1;]"..
|
||||||
|
"label[0,1;"..S("Left-over").."]"..
|
||||||
|
"list[current_name;micro;1.5,1;1,1;]"..
|
||||||
|
"label[0,2;"..S("Recycle\noutput").."]"..
|
||||||
|
"list[current_name;recycle;1.5,2;1,1;]"..
|
||||||
|
"field[0.3,3.5;1,1;max_offered;"..S("Max")..":;${max_offered}]"..
|
||||||
|
"button[1,3.2;1,1;Set;"..S("Set").."]"..
|
||||||
|
"list[current_name;output;2.8,0;8,4;]"..
|
||||||
|
"list[current_player;main;1.5,5;8,4;]")
|
||||||
|
|
||||||
local meta = minetest.env:get_meta(pos)
|
meta:set_int("anz", 0) -- No microblocks inside yet
|
||||||
meta:set_string("formspec", formspec);
|
meta:set_string("max_offered", 99) -- How many items of this kind are offered by default?
|
||||||
|
|
||||||
meta:set_int( "anz", 0); -- No microblocks inside yet.
|
|
||||||
meta:set_string("max_offered", 99); -- How many items of this kind are offered by default?
|
|
||||||
meta:set_string("infotext", S("Circular saw, empty"))
|
meta:set_string("infotext", S("Circular saw, empty"))
|
||||||
|
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("input", 1) -- Input slot for full blocks of material x
|
inv:set_size("input", 1) -- Input slot for full blocks of material x
|
||||||
inv:set_size("micro", 1) -- Storage for 1-7 surplus microblocks
|
inv:set_size("micro", 1) -- Storage for 1-7 surplus microblocks
|
||||||
inv:set_size("recycle", 1) -- Surplus partial blocks can be placed here
|
inv:set_size("recycle", 1) -- Surplus partial blocks can be placed here
|
||||||
inv:set_size("output", 32) -- 4*7 versions of stair-parts of material x
|
inv:set_size("output", 4*8) -- 4x8 versions of stair-parts of material x
|
||||||
|
|
||||||
circular_saw.reset_circular_saw(pos);
|
circular_saw:reset(pos)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
circular_saw.can_dig = function(pos,player)
|
function circular_saw.can_dig(pos,player)
|
||||||
local meta = minetest.env:get_meta(pos);
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
if not inv:is_empty("input") then
|
if not inv:is_empty("input") or
|
||||||
return false
|
not inv:is_empty("micro") or
|
||||||
elseif not inv:is_empty("micro") then
|
not inv:is_empty("recycle") then
|
||||||
return false
|
|
||||||
elseif not inv:is_empty("recycle") then
|
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Can be digged by anyone when empty (not only by the owner)
|
-- Can be dug by anyone when empty (not only by the owner)
|
||||||
return true
|
return true
|
||||||
end,
|
end
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:circular_saw", {
|
minetest.register_node("moreblocks:circular_saw", {
|
||||||
description = S("Circular Saw"),
|
description = S("Circular Saw"),
|
||||||
@ -313,71 +317,43 @@ minetest.register_node("moreblocks:circular_saw", {
|
|||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
{-0.4, -0.5, -0.4, -0.25, 0.25, -0.25}, -- leg
|
{-0.4, -0.5, -0.4, -0.25, 0.25, -0.25}, -- Leg
|
||||||
{0.25, -0.5, 0.25, 0.4, 0.25, 0.4}, -- leg
|
{0.25, -0.5, 0.25, 0.4, 0.25, 0.4}, -- Leg
|
||||||
{-0.4, -0.5, 0.25, -0.25, 0.25, 0.4}, -- leg
|
{-0.4, -0.5, 0.25, -0.25, 0.25, 0.4}, -- Leg
|
||||||
{0.25, -0.5, -0.4, 0.4, 0.25, -0.25}, -- leg
|
{0.25, -0.5, -0.4, 0.4, 0.25, -0.25}, -- Leg
|
||||||
{-0.5, 0.25, -0.5, 0.5, 0.375, 0.5}, -- tabletop
|
{-0.5, 0.25, -0.5, 0.5, 0.375, 0.5}, -- Tabletop
|
||||||
{-0.01, 0.4375, -0.125, 0.01, 0.5, 0.125}, -- saw blade (top)
|
{-0.01, 0.4375, -0.125, 0.01, 0.5, 0.125}, -- Saw blade (top)
|
||||||
{-0.01, 0.375, -0.1875, 0.01, 0.4375, 0.1875}, -- saw blade (bottom)
|
{-0.01, 0.375, -0.1875, 0.01, 0.4375, 0.1875}, -- Saw blade (bottom)
|
||||||
{-0.25, -0.0625, -0.25, 0.25, 0.25, 0.25}, -- motor case
|
{-0.25, -0.0625, -0.25, 0.25, 0.25, 0.25}, -- Motor case
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
tiles = {"moreblocks_circular_saw_top.png", "moreblocks_circular_saw_bottom.png", "moreblocks_circular_saw_side.png"},
|
tiles = {"moreblocks_circular_saw_top.png",
|
||||||
|
"moreblocks_circular_saw_bottom.png",
|
||||||
|
"moreblocks_circular_saw_side.png"},
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {cracky=2},
|
groups = {cracky=2},
|
||||||
on_construct = function(pos)
|
on_construct = circular_saw.on_construct,
|
||||||
return circular_saw.on_construct_init(pos,
|
can_dig = circular_saw.can_dig,
|
||||||
"size[10,9]" ..
|
-- Set owner of this circular saw
|
||||||
"list[current_name;input;0,0;1,1;]" ..
|
|
||||||
"label[0,0;"..S("Input material").."]" ..
|
|
||||||
"list[current_name;micro;0,1;1,1;]" ..
|
|
||||||
"label[0,1;"..S("Rest/microblocks").."]" ..
|
|
||||||
"field[0.3,2.5;1,1;max_offered;"..S("Max:")..";${max_offered}]" ..
|
|
||||||
"button[1,2;1,1;Set;"..S("Set").."]" ..
|
|
||||||
"list[current_name;recycle;0,3;1,1;]" ..
|
|
||||||
"label[0,3;"..S("Recycle output").."]" ..
|
|
||||||
"list[current_name;output;2,0;8,4;]" ..
|
|
||||||
"list[current_player;main;1,5;8,4;]");
|
|
||||||
end,
|
|
||||||
|
|
||||||
can_dig = function(pos,player)
|
|
||||||
return circular_saw.can_dig(pos, player);
|
|
||||||
end,
|
|
||||||
|
|
||||||
-- Set owner of this circular saw.
|
|
||||||
after_place_node = function(pos, placer)
|
after_place_node = function(pos, placer)
|
||||||
local meta = minetest.env:get_meta(pos);
|
local meta = minetest.get_meta(pos)
|
||||||
|
local owner = placer and placer:get_player_name() or ""
|
||||||
meta:set_string("owner", (placer:get_player_name() or ""));
|
meta:set_string("owner", owner)
|
||||||
meta:set_string("infotext", S("Circular saw is empty (owned by %s)"):format((placer:get_player_name() or "")));
|
meta:set_string("infotext",
|
||||||
|
S("Circular saw is empty (owned by %s)")
|
||||||
|
:format(owner))
|
||||||
end,
|
end,
|
||||||
|
|
||||||
-- The amount of items offered per shape can be configured.
|
-- The amount of items offered per shape can be configured
|
||||||
on_receive_fields = function(pos, formname, fields, sender)
|
on_receive_fields = circular_saw.on_receive_fields,
|
||||||
return circular_saw.on_receive_fields(pos, formname, fields, sender);
|
allow_metadata_inventory_move = circular_saw.allow_metadata_inventory_move,
|
||||||
end,
|
-- Only input- and recycle-slot are intended as input slots
|
||||||
|
allow_metadata_inventory_put = circular_saw.allow_metadata_inventory_put,
|
||||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
-- Taking is allowed from all slots (even the internal microblock slot). Moving is forbidden.
|
||||||
return circular_saw.allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player);
|
-- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material
|
||||||
end,
|
on_metadata_inventory_put = circular_saw.on_metadata_inventory_put,
|
||||||
|
on_metadata_inventory_take = circular_saw.on_metadata_inventory_take,
|
||||||
-- Only input- and recycle-slot are intended as input slots.
|
|
||||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
||||||
return circular_saw.allow_metadata_inventory_put(pos, listname, index, stack, player);
|
|
||||||
end,
|
|
||||||
|
|
||||||
-- Taking is allowed from all slots (even the internal microblock slot); moving is forbidden.
|
|
||||||
|
|
||||||
-- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material.
|
|
||||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
||||||
return circular_saw.on_metadata_inventory_put(pos, listname, index, stack, player);
|
|
||||||
end,
|
|
||||||
|
|
||||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
|
||||||
return circular_saw.on_metadata_inventory_take(pos, listname, index, stack, player);
|
|
||||||
end
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
30
config.lua
Normal file
30
config.lua
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
|
||||||
|
moreblocks.config = {}
|
||||||
|
|
||||||
|
local function getbool_default(setting, default)
|
||||||
|
local value = minetest.setting_getbool(setting)
|
||||||
|
if value == nil then
|
||||||
|
value = default
|
||||||
|
end
|
||||||
|
return value
|
||||||
|
end
|
||||||
|
|
||||||
|
local function setting(settingtype, name, default)
|
||||||
|
if settingtype == "bool" then
|
||||||
|
moreblocks.config[name] =
|
||||||
|
getbool_default("moreblocks."..name, default)
|
||||||
|
else
|
||||||
|
moreblocks.config[name] =
|
||||||
|
minetest.setting_get("moreblocks."..name) or default
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Whether to direct wood based on player yaw when placing the block (true or false)
|
||||||
|
setting("bool", "wood_facedir", true)
|
||||||
|
|
||||||
|
-- Allow stair/slab crafting without a circular saw or not (true or false)
|
||||||
|
setting("bool", "allow_stair_slab_crafting", false)
|
||||||
|
|
||||||
|
-- Show stairs/slabs/panels/microblocks in creative inventory (true or false)
|
||||||
|
setting("bool", "show_stairsplus_creative_inv", false)
|
||||||
|
|
@ -352,3 +352,4 @@ minetest.register_craft({
|
|||||||
{ "default:tree", "", "default:tree"},
|
{ "default:tree", "", "default:tree"},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1 +1,2 @@
|
|||||||
default
|
default
|
||||||
|
intllib?
|
||||||
|
376
init.lua
376
init.lua
@ -1,375 +1,31 @@
|
|||||||
--[[
|
--[[
|
||||||
****
|
-- More Blocks (moreblocks) by Calinou
|
||||||
More Blocks
|
-- Licensed under the zlib/libpng license for code and CC BY-SA for textures, see LICENSE.txt for info.
|
||||||
by Calinou
|
|
||||||
Licensed under the zlib/libpng license for code and CC BY-SA for textures, see LICENSE.txt for info.
|
|
||||||
****
|
|
||||||
--]]
|
--]]
|
||||||
|
|
||||||
moreblocks = {}
|
moreblocks = {}
|
||||||
|
|
||||||
-- Load translation library if intllib is installed
|
-- Load translation library if intllib is installed
|
||||||
|
|
||||||
local S
|
local S = nil
|
||||||
if (minetest.get_modpath("intllib")) then
|
if intllib then
|
||||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
S = intllib.Getter()
|
||||||
S = intllib.Getter(minetest.get_current_modname())
|
|
||||||
else
|
else
|
||||||
S = function(s) return s end
|
S = function(s) return s end
|
||||||
end
|
end
|
||||||
moreblocks.gettext = S
|
moreblocks.gettext = S
|
||||||
|
|
||||||
dofile(minetest.get_modpath("moreblocks").."/_config.txt")
|
local modpath = minetest.get_modpath("moreblocks")
|
||||||
|
|
||||||
dofile(minetest.get_modpath("moreblocks").."/ownership.lua")
|
dofile(modpath.."/config.lua")
|
||||||
dofile(minetest.get_modpath("moreblocks").."/redefinitions.lua")
|
dofile(modpath.."/circular_saw.lua")
|
||||||
dofile(minetest.get_modpath("moreblocks").."/crafting.lua")
|
dofile(modpath.."/stairsplus/init.lua")
|
||||||
dofile(minetest.get_modpath("moreblocks").."/aliases.lua")
|
dofile(modpath.."/nodes.lua")
|
||||||
dofile(minetest.get_modpath("moreblocks").."/stairsplus_convert.lua")
|
dofile(modpath.."/redefinitions.lua")
|
||||||
dofile(minetest.get_modpath("moreblocks").."/stairsplus/stairs.lua")
|
dofile(modpath.."/crafting.lua")
|
||||||
dofile(minetest.get_modpath("moreblocks").."/stairsplus/slabs.lua")
|
dofile(modpath.."/aliases.lua")
|
||||||
dofile(minetest.get_modpath("moreblocks").."/stairsplus/panels.lua")
|
|
||||||
dofile(minetest.get_modpath("moreblocks").."/stairsplus/microblocks.lua")
|
|
||||||
dofile(minetest.get_modpath("moreblocks").."/stairsplus/aliases.lua")
|
|
||||||
dofile(minetest.get_modpath("moreblocks").."/stairsplus.lua")
|
|
||||||
dofile(minetest.get_modpath("moreblocks").."/circular_saw.lua")
|
|
||||||
|
|
||||||
-- Blocks
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile", {
|
|
||||||
description = S("Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile.png", "moreblocks_wood_tile.png", "moreblocks_wood_tile.png", "moreblocks_wood_tile.png", "moreblocks_wood_tile.png^[transformR90", "moreblocks_wood_tile.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile_flipped", {
|
|
||||||
description = S("Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile_flipped.png", "moreblocks_wood_tile_flipped.png", "moreblocks_wood_tile_flipped.png", "moreblocks_wood_tile_flipped.png", "moreblocks_wood_tile_flipped.png^[transformR90", "moreblocks_wood_tile_flipped.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile_center", {
|
|
||||||
description = S("Centered Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile_center.png", "moreblocks_wood_tile_center.png", "moreblocks_wood_tile_center.png", "moreblocks_wood_tile_center.png", "moreblocks_wood_tile_center.png^[transformR90", "moreblocks_wood_tile_center.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile_full", {
|
|
||||||
description = S("Full Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile_full.png", "moreblocks_wood_tile_full.png", "moreblocks_wood_tile_full.png",
|
|
||||||
"moreblocks_wood_tile_full.png", "moreblocks_wood_tile_full.png^[transformR90", "moreblocks_wood_tile_full.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile_up", {
|
|
||||||
description = S("Up Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile_up.png", "moreblocks_wood_tile_up.png", "moreblocks_wood_tile_up.png",
|
|
||||||
"moreblocks_wood_tile_up.png", "moreblocks_wood_tile_up.png^[transformR90", "moreblocks_wood_tile_up.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile_down", {
|
|
||||||
description = S("Down Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile_down.png", "moreblocks_wood_tile_down.png", "moreblocks_wood_tile_down.png",
|
|
||||||
"moreblocks_wood_tile_down.png", "moreblocks_wood_tile_down.png^[transformR90", "moreblocks_wood_tile_down.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile_left", {
|
|
||||||
description = S("Left Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile_left.png", "moreblocks_wood_tile_left.png", "moreblocks_wood_tile_left.png",
|
|
||||||
"moreblocks_wood_tile_left.png", "moreblocks_wood_tile_left.png^[transformR90", "moreblocks_wood_tile_left.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:wood_tile_right", {
|
|
||||||
description = S("Right Wooden Tile"),
|
|
||||||
tiles = {"moreblocks_wood_tile_right.png", "moreblocks_wood_tile_right.png", "moreblocks_wood_tile_right.png",
|
|
||||||
"moreblocks_wood_tile_right.png", "moreblocks_wood_tile_right.png^[transformR90", "moreblocks_wood_tile_right.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:circle_stone_bricks", {
|
|
||||||
description = S("Circle Stone Bricks"),
|
|
||||||
tiles = {"moreblocks_circle_stone_bricks.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:coal_stone_bricks", {
|
|
||||||
description = S("Coal Stone Bricks"),
|
|
||||||
tiles = {"moreblocks_coal_stone_bricks.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:iron_stone_bricks", {
|
|
||||||
description = S("Iron Stone Bricks"),
|
|
||||||
tiles = {"moreblocks_iron_stone_bricks.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:stone_tile", {
|
|
||||||
description = S("Stone Tile"),
|
|
||||||
tiles = {"moreblocks_stone_tile.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:split_stone_tile", {
|
|
||||||
description = S("Split Stone Tile"),
|
|
||||||
tiles = {"moreblocks_split_stone_tile_top.png", "moreblocks_split_stone_tile.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:plankstone", {
|
|
||||||
description = S("Plankstone"),
|
|
||||||
tiles = {"moreblocks_plankstone.png", "moreblocks_plankstone.png", "moreblocks_plankstone.png",
|
|
||||||
"moreblocks_plankstone.png", "moreblocks_plankstone.png^[transformR90", "moreblocks_plankstone.png^[transformR90"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:iron_glass", {
|
|
||||||
description = S("Iron Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_iron_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_iron_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:coal_glass", {
|
|
||||||
description = S("Coal Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_coal_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_coal_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:clean_glass", {
|
|
||||||
description = S("Clean Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_clean_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_clean_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:cactus_brick", {
|
|
||||||
description = S("Cactus Brick"),
|
|
||||||
tiles = {"moreblocks_cactus_brick.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:cactus_checker", {
|
|
||||||
description = S("Cactus Checker"),
|
|
||||||
tiles = {"moreblocks_cactus_checker.png", "moreblocks_cactus_checker.png", "moreblocks_cactus_checker.png",
|
|
||||||
"moreblocks_cactus_checker.png", "moreblocks_cactus_checker.png^[transformR90", "moreblocks_cactus_checker.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:empty_bookshelf", {
|
|
||||||
description = S("Empty Bookshelf"),
|
|
||||||
tiles = {"default_wood.png", "default_wood.png", "moreblocks_empty_bookshelf.png"},
|
|
||||||
groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2,flammable=3},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:coal_stone", {
|
|
||||||
description = S("Coal Stone"),
|
|
||||||
tiles = {"moreblocks_coal_stone.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:iron_stone", {
|
|
||||||
description = S("Iron Stone"),
|
|
||||||
tiles = {"moreblocks_iron_stone.png"},
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:coal_checker", {
|
|
||||||
description = S("Coal Checker"),
|
|
||||||
tiles = {"moreblocks_coal_checker.png", "moreblocks_coal_checker.png", "moreblocks_coal_checker.png",
|
|
||||||
"moreblocks_coal_checker.png", "moreblocks_coal_checker.png^[transformR90", "moreblocks_coal_checker.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:iron_checker", {
|
|
||||||
description = S("Iron Checker"),
|
|
||||||
tiles = {"moreblocks_iron_checker.png", "moreblocks_iron_checker.png", "moreblocks_iron_checker.png",
|
|
||||||
"moreblocks_iron_checker.png", "moreblocks_iron_checker.png^[transformR90", "moreblocks_iron_checker.png^[transformR90"},
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:trap_stone", {
|
|
||||||
description = S("Trap Stone"),
|
|
||||||
tiles = {"moreblocks_trap_stone.png"},
|
|
||||||
walkable = false,
|
|
||||||
groups = {cracky=3},
|
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:trap_glass", {
|
|
||||||
description = S("Trap Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_trap_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_trap_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
walkable = false,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:fence_jungle_wood", {
|
|
||||||
description = S("Jungle Wood Fence"),
|
|
||||||
drawtype = "fencelike",
|
|
||||||
tiles = {"moreblocks_jungle_wood.png"},
|
|
||||||
inventory_image = "moreblocks_fence_jungle_wood.png",
|
|
||||||
wield_image = "moreblocks_fence_jungle_wood.png",
|
|
||||||
paramtype = "light",
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
|
|
||||||
},
|
|
||||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:all_faces_tree", {
|
|
||||||
description = S("All-faces Tree"),
|
|
||||||
tiles = {"default_tree_top.png"},
|
|
||||||
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
furnace_burntime = 30,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:all_faces_jungle_tree", {
|
|
||||||
description = S("All-faces Tree"),
|
|
||||||
tiles = {"default_jungletree_top.png"},
|
|
||||||
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
furnace_burntime = 30,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:glow_glass", {
|
|
||||||
description = S("Glow Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_glow_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_glow_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
light_source = 11,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:trap_glow_glass", {
|
|
||||||
description = S("Trap Glow Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_glow_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_glow_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
light_source = 11,
|
|
||||||
walkable = false,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:super_glow_glass", {
|
|
||||||
description = S("Super Glow Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_super_glow_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_super_glow_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
light_source = 15,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:trap_super_glow_glass", {
|
|
||||||
description = S("Trap Super Glow Glass"),
|
|
||||||
drawtype = "glasslike",
|
|
||||||
tiles = {"moreblocks_glow_glass.png"},
|
|
||||||
inventory_image = minetest.inventorycube("moreblocks_glow_glass.png"),
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
light_source = 11,
|
|
||||||
walkable = false,
|
|
||||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
|
||||||
sounds = default.node_sound_glass_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("moreblocks:rope", {
|
|
||||||
description = S("Rope"),
|
|
||||||
drawtype = "signlike",
|
|
||||||
tiles = {"moreblocks_rope.png"},
|
|
||||||
inventory_image = "moreblocks_rope.png",
|
|
||||||
wield_image = "moreblocks_rope.png",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "wallmounted",
|
|
||||||
walkable = false,
|
|
||||||
climbable = true,
|
|
||||||
selection_box = {
|
|
||||||
type = "wallmounted",
|
|
||||||
},
|
|
||||||
groups = {snappy=3,flammable=2},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Items
|
|
||||||
|
|
||||||
minetest.register_craftitem("moreblocks:sweeper", {
|
|
||||||
description = S("Sweeper"),
|
|
||||||
inventory_image = "moreblocks_sweeper.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("moreblocks:jungle_stick", {
|
|
||||||
description = S("Jungle Stick"),
|
|
||||||
inventory_image = "moreblocks_junglestick.png",
|
|
||||||
groups = {stick=1},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("moreblocks:nothing", {
|
|
||||||
on_use = minetest.item_eat(0),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
if minetest.setting_getbool("log_mod") then
|
||||||
print(S("[moreblocks] loaded."))
|
print(S("[moreblocks] loaded."))
|
||||||
|
end
|
||||||
|
|
||||||
|
319
nodes.lua
Normal file
319
nodes.lua
Normal file
@ -0,0 +1,319 @@
|
|||||||
|
|
||||||
|
local S = moreblocks.gettext
|
||||||
|
|
||||||
|
local sound_wood = default.node_sound_wood_defaults()
|
||||||
|
local sound_stone = default.node_sound_stone_defaults()
|
||||||
|
local sound_glass = default.node_sound_glass_defaults()
|
||||||
|
local sound_leaves = default.node_sound_leaves_defaults()
|
||||||
|
|
||||||
|
local function tile_tiles(name)
|
||||||
|
local tex = "moreblocks_"..name..".png"
|
||||||
|
return {tex, tex, tex, tex, tex.."^[transformR90", tex.."^[transformR90"}
|
||||||
|
end
|
||||||
|
|
||||||
|
local nodes = {
|
||||||
|
["wood_tile"] = {
|
||||||
|
description = S("Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
},
|
||||||
|
["wood_tile_flipped"] = {
|
||||||
|
description = S("Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile_flipped"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["wood_tile_center"] = {
|
||||||
|
description = S("Centered Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile_center"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
},
|
||||||
|
["wood_tile_full"] = {
|
||||||
|
description = S("Full Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile_full"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
},
|
||||||
|
["wood_tile_up"] = {
|
||||||
|
description = S("Up Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile_up"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["wood_tile_down"] = {
|
||||||
|
description = S("Down Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile_down"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["wood_tile_left"] = {
|
||||||
|
description = S("Left Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile_left"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["wood_tile_right"] = {
|
||||||
|
description = S("Right Wooden Tile"),
|
||||||
|
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("wood_tile_right"),
|
||||||
|
sounds = sound_wood,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["circle_stone_bricks"] = {
|
||||||
|
description = S("Circle Stone Bricks"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["coal_stone_bricks"] = {
|
||||||
|
description = S("Coal Stone Bricks"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["iron_stone_bricks"] = {
|
||||||
|
description = S("Iron Stone Bricks"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["stone_tile"] = {
|
||||||
|
description = S("Stone Tile"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["split_stone_tile"] = {
|
||||||
|
description = S("Split Stone Tile"),
|
||||||
|
tiles = {"moreblocks_split_stone_tile_top.png",
|
||||||
|
"moreblocks_split_stone_tile.png"},
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["plankstone"] = {
|
||||||
|
description = S("Plankstone"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
tiles = tile_tiles("plankstone"),
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["iron_glass"] = {
|
||||||
|
description = S("Iron Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
},
|
||||||
|
["coal_glass"] = {
|
||||||
|
description = S("Coal Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
},
|
||||||
|
["clean_glass"] = {
|
||||||
|
description = S("Clean Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
},
|
||||||
|
["cactus_brick"] = {
|
||||||
|
description = S("Cactus Brick"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["cactus_checker"] = {
|
||||||
|
description = S("Cactus Checker"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
tiles = tile_tiles("cactus_checker"),
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["empty_bookshelf"] = {
|
||||||
|
description = S("Empty Bookshelf"),
|
||||||
|
tiles = {"default_wood.png", "default_wood.png",
|
||||||
|
"moreblocks_empty_bookshelf.png"},
|
||||||
|
groups = {snappy=2,choppy=3,oddly_breakable_by_hand=2,flammable=3},
|
||||||
|
sounds = sound_wood,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["coal_stone"] = {
|
||||||
|
description = S("Coal Stone"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["iron_stone"] = {
|
||||||
|
description = S("Iron Stone"),
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["coal_checker"] = {
|
||||||
|
description = S("Coal Checker"),
|
||||||
|
tiles = tile_tiles("coal_checker"),
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["iron_checker"] = {
|
||||||
|
description = S("Iron Checker"),
|
||||||
|
tiles = tile_tiles("iron_checker"),
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
},
|
||||||
|
["trap_stone"] = {
|
||||||
|
description = S("Trap Stone"),
|
||||||
|
walkable = false,
|
||||||
|
groups = {cracky=3},
|
||||||
|
sounds = sound_stone,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["trap_glass"] = {
|
||||||
|
description = S("Trap Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
walkable = false,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["fence_jungle_wood"] = {
|
||||||
|
description = S("Jungle Wood Fence"),
|
||||||
|
drawtype = "fencelike",
|
||||||
|
tiles = {"moreblocks_jungle_wood.png"},
|
||||||
|
inventory_image = "moreblocks_fence_jungle_wood.png",
|
||||||
|
wield_image = "moreblocks_fence_jungle_wood.png",
|
||||||
|
paramtype = "light",
|
||||||
|
selection_box = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
|
||||||
|
},
|
||||||
|
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=2},
|
||||||
|
sounds = sound_wood,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["all_faces_tree"] = {
|
||||||
|
description = S("All-faces Tree"),
|
||||||
|
tiles = {"default_tree_top.png"},
|
||||||
|
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
||||||
|
sounds = sound_wood,
|
||||||
|
furnace_burntime = 30,
|
||||||
|
},
|
||||||
|
["all_faces_jungle_tree"] = {
|
||||||
|
description = S("All-faces Tree"),
|
||||||
|
tiles = {"default_jungletree_top.png"},
|
||||||
|
groups = {tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
|
||||||
|
sounds = sound_wood,
|
||||||
|
furnace_burntime = 30,
|
||||||
|
},
|
||||||
|
["glow_glass"] = {
|
||||||
|
description = S("Glow Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
light_source = 11,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
},
|
||||||
|
["trap_glow_glass"] = {
|
||||||
|
description = S("Trap Glow Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
tiles = {"moreblocks_glow_glass.png"},
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
light_source = 11,
|
||||||
|
walkable = false,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["super_glow_glass"] = {
|
||||||
|
description = S("Super Glow Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
light_source = 15,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
},
|
||||||
|
["trap_super_glow_glass"] = {
|
||||||
|
description = S("Trap Super Glow Glass"),
|
||||||
|
drawtype = "glasslike",
|
||||||
|
tiles = {"moreblocks_super_glow_glass.png"},
|
||||||
|
paramtype = "light",
|
||||||
|
sunlight_propagates = true,
|
||||||
|
light_source = 11,
|
||||||
|
walkable = false,
|
||||||
|
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3},
|
||||||
|
sounds = sound_glass,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
["rope"] = {
|
||||||
|
description = S("Rope"),
|
||||||
|
drawtype = "signlike",
|
||||||
|
inventory_image = "moreblocks_rope.png",
|
||||||
|
wield_image = "moreblocks_rope.png",
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "wallmounted",
|
||||||
|
walkable = false,
|
||||||
|
climbable = true,
|
||||||
|
selection_box = {
|
||||||
|
type = "wallmounted",
|
||||||
|
},
|
||||||
|
groups = {snappy=3,flammable=2},
|
||||||
|
sounds = sound_leaves,
|
||||||
|
no_stairs = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for name, def in pairs(nodes) do
|
||||||
|
def.tiles = def.tiles or {"moreblocks_"..name..".png"}
|
||||||
|
minetest.register_node("moreblocks:"..name, def)
|
||||||
|
minetest.register_alias(name, "moreblocks:"..name)
|
||||||
|
if not def.no_stairs then
|
||||||
|
local groups = {}
|
||||||
|
for k, v in pairs(def.groups) do groups[k] = v end
|
||||||
|
stairsplus:register_all("moreblocks", name, "moreblocks:"..name, {
|
||||||
|
description = def.description,
|
||||||
|
groups = groups,
|
||||||
|
tiles = def.tiles,
|
||||||
|
sunlight_propagates = def.sunlight_propagates,
|
||||||
|
light_source = def.light_source,
|
||||||
|
sounds = def.sounds,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
-- Items
|
||||||
|
|
||||||
|
minetest.register_craftitem("moreblocks:sweeper", {
|
||||||
|
description = S("Sweeper"),
|
||||||
|
inventory_image = "moreblocks_sweeper.png",
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("moreblocks:jungle_stick", {
|
||||||
|
description = S("Jungle Stick"),
|
||||||
|
inventory_image = "moreblocks_junglestick.png",
|
||||||
|
groups = {stick=1},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("moreblocks:nothing", {
|
||||||
|
inventory_image = "invisible.png",
|
||||||
|
on_use = function() end,
|
||||||
|
})
|
||||||
|
|
@ -70,203 +70,66 @@ minetest.register_craft({
|
|||||||
|
|
||||||
-- Redefinitions of some default nodes
|
-- Redefinitions of some default nodes
|
||||||
|
|
||||||
minetest.register_node(":default:ladder", {
|
-- Don't bother overriding nodes if minetest.override_item isn't available
|
||||||
description = "Ladder",
|
if minetest.override_item then
|
||||||
drawtype = "signlike",
|
|
||||||
tiles = {"default_ladder.png"},
|
|
||||||
inventory_image = "default_ladder.png",
|
|
||||||
wield_image = "default_ladder.png",
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
paramtype2 = "wallmounted",
|
|
||||||
walkable = false,
|
|
||||||
climbable = true,
|
|
||||||
selection_box = {
|
|
||||||
type = "wallmounted",
|
|
||||||
},
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=3,flammable=2},
|
|
||||||
legacy_wallmounted = true,
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
|
||||||
|
|
||||||
if wood_facedir == true
|
if moreblocks.config.wood_facedir then
|
||||||
then
|
minetest.override_item("default:wood", {
|
||||||
minetest.register_node(":default:wood", {
|
|
||||||
description = "Wooden Planks",
|
|
||||||
tiles = {"default_wood.png"},
|
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node(":default:sapling", {
|
-- Let there be light!
|
||||||
description = "Sapling",
|
|
||||||
drawtype = "plantlike",
|
minetest.override_item("default:ladder", {
|
||||||
visual_scale = 1.0,
|
|
||||||
tiles = {"default_sapling.png"},
|
|
||||||
inventory_image = "default_sapling.png",
|
|
||||||
wield_image = "default_sapling.png",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
|
||||||
},
|
|
||||||
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
|
|
||||||
sounds = default.node_sound_defaults(),
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(":default:dry_shrub", {
|
minetest.override_item("default:sapling", {
|
||||||
description = "Dry Shrub",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
visual_scale = 1.0,
|
|
||||||
tiles = {"default_dry_shrub.png"},
|
|
||||||
inventory_image = "default_dry_shrub.png",
|
|
||||||
wield_image = "default_dry_shrub.png",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
|
||||||
groups = {snappy=3,flammable=3,attached_node=1},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-1/3, -1/2, -1/3, 1/3, 1/6, 1/3},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(":default:papyrus", {
|
minetest.override_item("default:dry_shrub", {
|
||||||
description = "Papyrus",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
tiles = {"default_papyrus.png"},
|
|
||||||
inventory_image = "default_papyrus.png",
|
|
||||||
wield_image = "default_papyrus.png",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.5, 0.3}
|
|
||||||
},
|
|
||||||
groups = {snappy=3,flammable=2},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(":default:fence_wood", {
|
minetest.override_item("default:papyrus", {
|
||||||
description = "Wooden Fence",
|
|
||||||
drawtype = "fencelike",
|
|
||||||
tiles = {"default_wood.png"},
|
|
||||||
inventory_image = "default_fence.png",
|
|
||||||
wield_image = "default_fence.png",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
|
|
||||||
},
|
|
||||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(":default:junglegrass", {
|
minetest.override_item("default:fence_wood", {
|
||||||
description = "Jungle Grass",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
visual_scale = 1.3,
|
|
||||||
tiles = {"default_junglegrass.png"},
|
|
||||||
inventory_image = "default_junglegrass.png",
|
|
||||||
wield_image = "default_junglegrass.png",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
walkable = false,
|
|
||||||
buildable_to = true,
|
|
||||||
is_ground_content = true,
|
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
drop = {
|
|
||||||
max_items = 1,
|
|
||||||
items = {
|
|
||||||
{items = {'farming:seed_cotton'},rarity = 8},
|
|
||||||
{items = {'default:junglegrass'}},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
groups = {snappy=3,flammable=2,flora=1,attached_node=1},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(":default:junglesapling", {
|
minetest.override_item("default:junglegrass", {
|
||||||
description = "Jungle Sapling",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
tiles = {"default_junglesapling.png"},
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
walkable = false,
|
sunlight_propagates = true,
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.3, -0.5, -0.3, 0.3, 0.35, 0.3}
|
|
||||||
},
|
|
||||||
groups = {snappy=2,dig_immediate=3,flammable=2,attached_node=1},
|
|
||||||
sounds = default.node_sound_defaults(),
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node(":default:grass_1", {
|
minetest.override_item("default:junglesapling", {
|
||||||
description = "Grass",
|
paramtype = "light",
|
||||||
drawtype = "plantlike",
|
sunlight_propagates = true,
|
||||||
tiles = {"default_grass_1.png"},
|
})
|
||||||
-- use a bigger inventory image
|
|
||||||
|
minetest.override_item("default:grass_1", {
|
||||||
|
-- Use a bigger inventory image
|
||||||
inventory_image = "default_grass_3.png",
|
inventory_image = "default_grass_3.png",
|
||||||
wield_image = "default_grass_3.png",
|
wield_image = "default_grass_3.png",
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
|
||||||
buildable_to = true,
|
|
||||||
drop = {
|
|
||||||
max_items = 1,
|
|
||||||
items = {
|
|
||||||
{items = {'farming:seed_wheat'},rarity = 5},
|
|
||||||
{items = {'default:grass_1'}},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
groups = {snappy=3,flammable=3,flora=1,attached_node=1},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
|
||||||
},
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
-- place a random grass node
|
|
||||||
local stack = ItemStack("default:grass_"..math.random(1,5))
|
|
||||||
local ret = minetest.item_place(stack, placer, pointed_thing)
|
|
||||||
return ItemStack("default:grass_1 "..itemstack:get_count()-(1-ret:get_count()))
|
|
||||||
end,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
for i = 2, 5 do
|
for i = 2, 5 do
|
||||||
minetest.register_node(":default:grass_"..i, {
|
minetest.override_item("default:grass_"..i, {
|
||||||
description = "Grass",
|
|
||||||
drawtype = "plantlike",
|
|
||||||
tiles = {"default_grass_"..i..".png"},
|
|
||||||
inventory_image = "default_grass_"..i..".png",
|
|
||||||
wield_image = "default_grass_"..i..".png",
|
|
||||||
paramtype = "light",
|
paramtype = "light",
|
||||||
sunlight_propagates = true,
|
sunlight_propagates = true,
|
||||||
walkable = false,
|
|
||||||
buildable_to = true,
|
|
||||||
is_ground_content = true,
|
|
||||||
drop = {
|
|
||||||
max_items = 1,
|
|
||||||
items = {
|
|
||||||
{items = {'farming:seed_wheat'},rarity = 5},
|
|
||||||
{items = {'default:grass_1'}},
|
|
||||||
}
|
|
||||||
},
|
|
||||||
groups = {snappy=3,flammable=3,flora=1,attached_node=1,not_in_creative_inventory=1},
|
|
||||||
sounds = default.node_sound_leaves_defaults(),
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, -5/16, 0.5},
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
end -- End if minetest.override_item
|
||||||
|
|
||||||
|
25
stairsplus/API.md
Normal file
25
stairsplus/API.md
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
API documentation for StairsPlus
|
||||||
|
================================
|
||||||
|
- - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
* `stairsplus:register_all(modname, subname, recipeitem, fields)`
|
||||||
|
Registers a stair, slab, panel, microblock, and any other types of
|
||||||
|
microblocks to be added in the future.
|
||||||
|
Also registers the node with the circular saw.
|
||||||
|
Example:
|
||||||
|
```lua
|
||||||
|
stairsplus:register_all("moreblocks", "wood", "defaut:wood", {
|
||||||
|
description = "Wooden",
|
||||||
|
tiles = {"default_wood.png"},
|
||||||
|
groups = {oddly_breakabe_by_hand=1},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
})
|
||||||
|
```
|
||||||
|
The following register only a particular type of microblock.
|
||||||
|
You will probably never want to use them directly.
|
||||||
|
|
||||||
|
* `stairsplus:register_stair(modname, subname, recipeitem, fields)`
|
||||||
|
* `stairsplus:register_slab(modname, subname, recipeitem, fields)`
|
||||||
|
* `stairsplus:register_panel(modname, subname, recipeitem, fields)`
|
||||||
|
* `stairsplus:register_micro(modname, subname, recipeitem, fields)`
|
||||||
|
|
@ -1,4 +1,5 @@
|
|||||||
function register_stairsplus_alias(modname, origname, newname)
|
|
||||||
|
local function register_stairsplus_alias(modname, origname, newname)
|
||||||
minetest.register_alias(modname..":slab_"..origname, "moreblocks:slab_"..newname)
|
minetest.register_alias(modname..":slab_"..origname, "moreblocks:slab_"..newname)
|
||||||
minetest.register_alias(modname..":slab_"..origname.."_inverted", "moreblocks:slab_"..newname.."_inverted")
|
minetest.register_alias(modname..":slab_"..origname.."_inverted", "moreblocks:slab_"..newname.."_inverted")
|
||||||
minetest.register_alias(modname..":slab_"..origname.."_wall", "moreblocks:slab_"..newname.."_wall")
|
minetest.register_alias(modname..":slab_"..origname.."_wall", "moreblocks:slab_"..newname.."_wall")
|
||||||
@ -59,3 +60,4 @@ register_stairsplus_alias("moreblocks", "splitstonesquare", "split_stone_tile")
|
|||||||
register_stairsplus_alias("moreblocks", "woodtile", "wood_tile")
|
register_stairsplus_alias("moreblocks", "woodtile", "wood_tile")
|
||||||
register_stairsplus_alias("moreblocks", "woodtile_centered", "wood_tile_centered")
|
register_stairsplus_alias("moreblocks", "woodtile_centered", "wood_tile_centered")
|
||||||
register_stairsplus_alias("moreblocks", "woodtile_full", "wood_tile_full")
|
register_stairsplus_alias("moreblocks", "woodtile_full", "wood_tile_full")
|
||||||
|
|
||||||
|
132
stairsplus/conversion.lua
Normal file
132
stairsplus/conversion.lua
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
-- Function to convert all stairs/slabs/etc nodes from
|
||||||
|
-- inverted, wall, etc to regular + 6d facedir
|
||||||
|
|
||||||
|
local dirs1 = {21, 20, 23, 22, 21}
|
||||||
|
local dirs2 = {15, 8, 17, 6, 15}
|
||||||
|
local dirs3 = {14, 11, 16, 5, 14}
|
||||||
|
|
||||||
|
function stairsplus:register_6dfacedir_conversion(modname, material)
|
||||||
|
--print("Register stairsplus 6d facedir conversion")
|
||||||
|
--print('ABM for '..modname..' "'..material..'"')
|
||||||
|
|
||||||
|
local objects_list1 = {
|
||||||
|
modname..":slab_"..material.."_inverted",
|
||||||
|
modname..":slab_"..material.."_quarter_inverted",
|
||||||
|
modname..":slab_"..material.."_three_quarter_inverted",
|
||||||
|
modname..":stair_"..material.."_inverted",
|
||||||
|
modname..":stair_"..material.."_wall",
|
||||||
|
modname..":stair_"..material.."_wall_half",
|
||||||
|
modname..":stair_"..material.."_wall_half_inverted",
|
||||||
|
modname..":stair_"..material.."_half_inverted",
|
||||||
|
modname..":stair_"..material.."_right_half_inverted",
|
||||||
|
modname..":panel_"..material.."_vertical",
|
||||||
|
modname..":panel_"..material.."_top",
|
||||||
|
}
|
||||||
|
|
||||||
|
local objects_list2 = {
|
||||||
|
modname..":slab_"..material.."_wall",
|
||||||
|
modname..":slab_"..material.."_quarter_wall",
|
||||||
|
modname..":slab_"..material.."_three_quarter_wall",
|
||||||
|
modname..":stair_"..material.."_inner_inverted",
|
||||||
|
modname..":stair_"..material.."_outer_inverted",
|
||||||
|
modname..":micro_"..material.."_top"
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, object in pairs(objects_list1) do
|
||||||
|
local flip_upside_down = false
|
||||||
|
local flip_to_wall = false
|
||||||
|
|
||||||
|
local dest_object = object
|
||||||
|
|
||||||
|
if string.find(dest_object, "_inverted") then
|
||||||
|
flip_upside_down = true
|
||||||
|
dest_object = string.gsub(dest_object, "_inverted", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
if string.find(object, "_top") then
|
||||||
|
flip_upside_down = true
|
||||||
|
dest_object = string.gsub(dest_object, "_top", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
if string.find(dest_object, "_wall") then
|
||||||
|
flip_to_wall = true
|
||||||
|
dest_object = string.gsub(dest_object, "_wall", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
if string.find(dest_object, "_vertical") then
|
||||||
|
flip_to_wall = true
|
||||||
|
dest_object = string.gsub(dest_object, "_vertical", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
if string.find(dest_object, "_half") and not string.find(dest_object, "_right_half") then
|
||||||
|
dest_object = string.gsub(dest_object, "_half", "_right_half")
|
||||||
|
elseif string.find(dest_object, "_right_half") then
|
||||||
|
dest_object = string.gsub(dest_object, "_right_half", "_half")
|
||||||
|
end
|
||||||
|
|
||||||
|
--print(" +---> convert "..object)
|
||||||
|
--print(" | to "..dest_object)
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {object},
|
||||||
|
interval = 1,
|
||||||
|
chance = 1,
|
||||||
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
local fdir = node.param2 or 0
|
||||||
|
|
||||||
|
if flip_upside_down and not flip_to_wall then
|
||||||
|
nfdir = dirs1[fdir + 2]
|
||||||
|
elseif flip_to_wall and not flip_upside_down then
|
||||||
|
nfdir = dirs2[fdir + 1]
|
||||||
|
elseif flip_to_wall and flip_upside_down then
|
||||||
|
nfdir = dirs3[fdir + 2]
|
||||||
|
end
|
||||||
|
minetest.set_node(pos, {name = dest_object, param2 = nfdir})
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, object in pairs(objects_list2) do
|
||||||
|
local flip_upside_down = false
|
||||||
|
local flip_to_wall = false
|
||||||
|
|
||||||
|
local dest_object = object
|
||||||
|
|
||||||
|
if string.find(dest_object, "_inverted") then
|
||||||
|
flip_upside_down = true
|
||||||
|
dest_object = string.gsub(dest_object, "_inverted", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
if string.find(dest_object, "_top") then
|
||||||
|
flip_upside_down = true
|
||||||
|
dest_object = string.gsub(dest_object, "_top", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
if string.find(dest_object, "_wall") then
|
||||||
|
flip_to_wall = true
|
||||||
|
dest_object = string.gsub(dest_object, "_wall", "")
|
||||||
|
end
|
||||||
|
|
||||||
|
--print(" +---> convert "..object)
|
||||||
|
--print(" | to "..dest_object)
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {object},
|
||||||
|
interval = 1,
|
||||||
|
chance = 1,
|
||||||
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
||||||
|
local fdir = node.param2
|
||||||
|
local nfdir = 20
|
||||||
|
|
||||||
|
if flip_upside_down and not flip_to_wall then
|
||||||
|
nfdir = dirs1[fdir + 1]
|
||||||
|
elseif flip_to_wall and not flip_upside_down then
|
||||||
|
nfdir = dirs2[fdir + 2]
|
||||||
|
|
||||||
|
end
|
||||||
|
minetest.set_node(pos, {name = dest_object, param2 = nfdir})
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
45
stairsplus/init.lua
Normal file
45
stairsplus/init.lua
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
-- Nodes will be called <modname>:{stair,slab,panel,micro}_<subname>
|
||||||
|
|
||||||
|
local modpath = minetest.get_modpath("moreblocks").."/stairsplus"
|
||||||
|
|
||||||
|
stairsplus = {}
|
||||||
|
stairsplus.expect_infinite_stacks = false
|
||||||
|
|
||||||
|
if not minetest.get_modpath("unified_inventory") and
|
||||||
|
minetest.setting_getbool("creative_mode") then
|
||||||
|
stairsplus.expect_infinite_stacks = true
|
||||||
|
end
|
||||||
|
|
||||||
|
function stairsplus:register_all(modname, subname, recipeitem, fields)
|
||||||
|
fields = fields or {}
|
||||||
|
fields.groups = fields.groups or {}
|
||||||
|
if not moreblocks.config.show_stairsplus_creative_inv then
|
||||||
|
fields.groups.not_in_creative_inventory = 1
|
||||||
|
end
|
||||||
|
self:register_stair(modname, subname, recipeitem, fields)
|
||||||
|
self:register_slab (modname, subname, recipeitem, fields)
|
||||||
|
self:register_panel(modname, subname, recipeitem, fields)
|
||||||
|
self:register_micro(modname, subname, recipeitem, fields)
|
||||||
|
self:register_6dfacedir_conversion(modname, subname)
|
||||||
|
circular_saw.known_nodes[recipeitem] = {modname, subname}
|
||||||
|
end
|
||||||
|
|
||||||
|
function register_stair_slab_panel_micro(modname, subname, recipeitem, groups, images, description, drop, light)
|
||||||
|
stairsplus:register_all(modname, subname, recipeitem, {
|
||||||
|
groups = groups,
|
||||||
|
tiles = images,
|
||||||
|
description = description,
|
||||||
|
drop = drop,
|
||||||
|
light_source = light
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
dofile(modpath.."/conversion.lua")
|
||||||
|
dofile(modpath.."/stairs.lua")
|
||||||
|
dofile(modpath.."/slabs.lua")
|
||||||
|
dofile(modpath.."/panels.lua")
|
||||||
|
dofile(modpath.."/microblocks.lua")
|
||||||
|
dofile(modpath.."/aliases.lua")
|
||||||
|
dofile(modpath.."/registrations.lua")
|
||||||
|
|
@ -1,142 +1,86 @@
|
|||||||
-- Load translation library if intllib is installed
|
-- Load translation library if intllib is installed
|
||||||
|
|
||||||
local S
|
local S
|
||||||
if (minetest.get_modpath("intllib")) then
|
if intllib then
|
||||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
|
||||||
S = intllib.Getter(minetest.get_current_modname())
|
S = intllib.Getter(minetest.get_current_modname())
|
||||||
else
|
else
|
||||||
S = function(s) return s end
|
S = function(s) return s end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Node will be called <modname>micro_<subname>
|
-- Node will be called <modname>:micro_<subname>
|
||||||
|
|
||||||
function register_micro(modname, subname, recipeitem, groups, images, description, drop, light)
|
function register_micro(modname, subname, recipeitem, groups, images, description, drop, light)
|
||||||
|
return stairsplus:register_micro(modname, subname, recipeitem, {
|
||||||
minetest.register_node(":"..modname .. ":micro_" .. subname, {
|
|
||||||
description = S("%s Microblock"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":micro_" .. drop,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
groups = groups,
|
||||||
|
tiles = images,
|
||||||
|
description = description,
|
||||||
|
drop = drop,
|
||||||
|
light_source = light,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function stairsplus:register_micro(modname, subname, recipeitem, fields)
|
||||||
|
local defs = {
|
||||||
|
[""] = {
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0, 0, 0.5},
|
fixed = {-0.5, -0.5, 0, 0, 0, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_1"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":micro_" .. subname .. "_1", {
|
|
||||||
description = S("%s Microblock"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":micro_" .. drop .. "_1",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0, -0.4375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0, -0.4375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_2"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":micro_" .. subname .. "_2", {
|
|
||||||
description = S("%s Microblock"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":micro_" .. drop .. "_2",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0, -0.375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0, -0.375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_4"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":micro_" .. subname .. "_4", {
|
|
||||||
description = S("%s Microblock"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":micro_" .. drop .. "_4",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0, -0.25, 0.5},
|
fixed = {-0.5, -0.5, 0, 0, -0.25, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_12"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":micro_" .. subname .. "_12", {
|
|
||||||
description = S("%s Microblock"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":micro_" .. drop .. "_12",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0, 0.25, 0.5},
|
fixed = {-0.5, -0.5, 0, 0, 0.25, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_14"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":micro_" .. subname .. "_14", {
|
|
||||||
description = S("%s Microblock"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":micro_" .. drop .. "_14",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0, 0.375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0, 0.375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_15"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":micro_" .. subname .. "_15", {
|
|
||||||
description = S("%s Microblock"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":micro_" .. drop .. "_15",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0, 0.4375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0, 0.4375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
}
|
||||||
on_place = stairsplus_rotate_and_place
|
}
|
||||||
})
|
|
||||||
|
local desc = S("%s Microblock"):format(fields.description)
|
||||||
|
for alternate, def in pairs(defs) do
|
||||||
|
def.drawtype = "nodebox"
|
||||||
|
def.paramtype = "light"
|
||||||
|
def.paramtype2 = "facedir"
|
||||||
|
def.on_place = minetest.rotate_node
|
||||||
|
for k, v in pairs(fields) do
|
||||||
|
def[k] = v
|
||||||
|
end
|
||||||
|
def.description = desc
|
||||||
|
if fields.drop then
|
||||||
|
def.drop = modname..":micro_"..fields.drop..alternate
|
||||||
|
end
|
||||||
|
minetest.register_node(":"..modname..":micro_"..subname..alternate, def)
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_alias(modname..":micro_"..subname.."_bottom", modname..":micro_"..subname)
|
minetest.register_alias(modname..":micro_"..subname.."_bottom", modname..":micro_"..subname)
|
||||||
end
|
end
|
||||||
|
@ -1,135 +1,87 @@
|
|||||||
-- Load translation library if intllib is installed
|
-- Load translation library if intllib is installed
|
||||||
|
|
||||||
local S
|
local S
|
||||||
if (minetest.get_modpath("intllib")) then
|
if intllib then
|
||||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
|
||||||
S = intllib.Getter(minetest.get_current_modname())
|
S = intllib.Getter(minetest.get_current_modname())
|
||||||
else
|
else
|
||||||
S = function(s) return s end
|
S = function(s) return s end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Node will be called <modname>panel_<subname>
|
-- Node will be called <modname>:panel_<subname>
|
||||||
|
|
||||||
function register_panel(modname, subname, recipeitem, groups, images, description, drop, light)
|
function register_panel(modname, subname, recipeitem, groups, images, description, drop, light)
|
||||||
|
return stairsplus:register_panel(modname, subname, recipeitem, {
|
||||||
minetest.register_node(":" .. modname .. ":panel_" .. subname, {
|
|
||||||
description = S("%s Panel"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":panel_" .. drop,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
groups = groups,
|
||||||
|
tiles = images,
|
||||||
|
description = description,
|
||||||
|
drop = drop,
|
||||||
|
light_source = light,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
function stairsplus:register_panel(modname, subname, recipeitem, fields)
|
||||||
|
local defs = {
|
||||||
|
[""] = {
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0.5, 0, 0.5},
|
fixed = {-0.5, -0.5, 0, 0.5, 0, 0.5},
|
||||||
},
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
},
|
||||||
})
|
["_1"] = {
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":panel_" .. subname .. "_1", {
|
|
||||||
description = S("%s Panel"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":panel_" .. drop .. "_1",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0.5, -0.4375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0.5, -0.4375, 0.5},
|
||||||
},
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
},
|
||||||
})
|
["_2"] = {
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":panel_" .. subname .. "_2", {
|
|
||||||
description = S("%s Panel"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":panel_" .. drop .. "_2",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0.5, -0.375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0.5, -0.375, 0.5},
|
||||||
},
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
},
|
||||||
})
|
["_4"] = {
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":panel_" .. subname .. "_4", {
|
|
||||||
description = S("%s Panel"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":panel_" .. drop .. "_4",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0.5, -0.25, 0.5},
|
fixed = {-0.5, -0.5, 0, 0.5, -0.25, 0.5},
|
||||||
},
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
},
|
||||||
})
|
["_12"] = {
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":panel_" .. subname .. "_12", {
|
|
||||||
description = S("%s Panel"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":panel_" .. drop .. "_12",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0.5, 0.25, 0.5},
|
fixed = {-0.5, -0.5, 0, 0.5, 0.25, 0.5},
|
||||||
},
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
},
|
||||||
})
|
["_14"] = {
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":panel_" .. subname .. "_14", {
|
|
||||||
description = S("%s Panel"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":panel_" .. drop .. "_14",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0.5, 0.375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0.5, 0.375, 0.5},
|
||||||
},
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
},
|
||||||
})
|
["_15"] = {
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":panel_" .. subname .. "_15", {
|
|
||||||
description = S("%s Panel"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":panel_" .. drop .. "_15",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, 0, 0.5, 0.4375, 0.5},
|
fixed = {-0.5, -0.5, 0, 0.5, 0.4375, 0.5},
|
||||||
},
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
|
local desc = S("%s Panel"):format(fields.description)
|
||||||
|
for alternate, def in pairs(defs) do
|
||||||
|
def.drawtype = "nodebox"
|
||||||
|
def.paramtype = "light"
|
||||||
|
def.paramtype2 = "facedir"
|
||||||
|
def.on_place = minetest.rotate_node
|
||||||
|
for k, v in pairs(fields) do
|
||||||
|
def[k] = v
|
||||||
|
end
|
||||||
|
def.description = desc
|
||||||
|
if fields.drop then
|
||||||
|
def.drop = modname..":panel_"..fields.drop..alternate
|
||||||
|
end
|
||||||
|
minetest.register_node(":"..modname..":panel_"..subname..alternate, def)
|
||||||
|
end
|
||||||
|
|
||||||
minetest.register_alias(modname..":panel_"..subname.."_bottom", modname..":panel_"..subname)
|
minetest.register_alias(modname..":panel_"..subname.."_bottom", modname..":panel_"..subname)
|
||||||
end
|
end
|
||||||
|
45
stairsplus/registrations.lua
Normal file
45
stairsplus/registrations.lua
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
-- Default stairs/slabs/panels/microblocks
|
||||||
|
|
||||||
|
local default_nodes = {
|
||||||
|
"stone",
|
||||||
|
"cobble",
|
||||||
|
"mossycobble",
|
||||||
|
"brick",
|
||||||
|
"sandstone",
|
||||||
|
"steelblock",
|
||||||
|
"goldblock",
|
||||||
|
"copperblock",
|
||||||
|
"bronzeblock",
|
||||||
|
"diamondblock",
|
||||||
|
"desert_stone",
|
||||||
|
"glass",
|
||||||
|
"tree",
|
||||||
|
"wood",
|
||||||
|
"jungletree",
|
||||||
|
"junglewood",
|
||||||
|
"obsidian",
|
||||||
|
"obsidian_glass",
|
||||||
|
"stonebrick",
|
||||||
|
"desert_stonebrick",
|
||||||
|
"sandstonebrick",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, name in pairs(default_nodes) do
|
||||||
|
local nodename = "default:"..name
|
||||||
|
local ndef = minetest.registered_nodes[nodename]
|
||||||
|
local groups = {}
|
||||||
|
for k, v in pairs(ndef.groups) do groups[k] = v end
|
||||||
|
local drop
|
||||||
|
if type(ndef.drop) == "string" then
|
||||||
|
drop = ndef.drop:sub(9)
|
||||||
|
end
|
||||||
|
stairsplus:register_all("moreblocks", name, nodename, {
|
||||||
|
description = ndef.description,
|
||||||
|
drop = drop,
|
||||||
|
groups = groups,
|
||||||
|
sounds = ndef.sounds,
|
||||||
|
tiles = ndef.tiles,
|
||||||
|
sunlight_propagates = ndef.sunlight_propagates,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
@ -1,164 +1,90 @@
|
|||||||
-- Load translation library if intllib is installed
|
-- Load translation library if intllib is installed
|
||||||
|
|
||||||
local S
|
local S
|
||||||
if (minetest.get_modpath("intllib")) then
|
if intllib then
|
||||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
|
||||||
S = intllib.Getter(minetest.get_current_modname())
|
S = intllib.Getter(minetest.get_current_modname())
|
||||||
else
|
else
|
||||||
S = function(s) return s end
|
S = function(s) return s end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Node will be called <modname>slab_<subname>
|
-- Node will be called <modname>:slab_<subname>
|
||||||
|
|
||||||
function register_slab(modname, subname, recipeitem, groups, images, description, drop, light)
|
function register_slab(modname, subname, recipeitem, groups, images, description, drop, light)
|
||||||
|
return stairsplus:register_slab(modname, subname, recipeitem, {
|
||||||
minetest.register_node(":" .. modname .. ":slab_" .. subname, {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":slab_" .. drop,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
groups = groups,
|
||||||
|
tiles = images,
|
||||||
|
description = description,
|
||||||
|
drop = drop,
|
||||||
|
light_source = light,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function stairsplus:register_slab(modname, subname, recipeitem, fields)
|
||||||
|
local defs = {
|
||||||
|
[""] = {
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
on_place = stairsplus_rotate_and_place
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":stairs:slab_" .. subname, {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
drop = modname .. ":slab_" .. drop,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
["_quarter"] = {
|
||||||
on_place = stairsplus_rotate_and_place
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":slab_" .. subname .. "_quarter", {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":slab_" .. drop .. "_quarter",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_three_quarter"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":slab_" .. subname .. "_three_quarter", {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":slab_" .. drop .. "_three_quarter",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0.25, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0.25, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_1"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":slab_" .. subname .. "_1", {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":slab_" .. drop .. "_1",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_2"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":slab_" .. subname .. "_2", {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":slab_" .. drop .. "_2",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_14"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":slab_" .. subname .. "_14", {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":slab_" .. drop .. "_14",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0.375, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0.375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_15"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":slab_" .. subname .. "_15", {
|
|
||||||
description = S("%s Slab"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":slab_" .. drop .. "_15",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5},
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0.4375, 0.5},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
}
|
||||||
})
|
local desc = S("%s Slab"):format(fields.description)
|
||||||
|
for alternate, def in pairs(defs) do
|
||||||
|
def.drawtype = "nodebox"
|
||||||
|
def.paramtype = "light"
|
||||||
|
def.paramtype2 = "facedir"
|
||||||
|
def.on_place = minetest.rotate_node
|
||||||
|
for k, v in pairs(fields) do
|
||||||
|
def[k] = v
|
||||||
|
end
|
||||||
|
def.description = desc
|
||||||
|
if fields.drop then
|
||||||
|
def.drop = modname..":slab_"..fields.drop..alternate
|
||||||
|
end
|
||||||
|
minetest.register_node(":"..modname..":slab_"..subname..alternate, def)
|
||||||
|
end
|
||||||
|
minetest.register_alias("stairs:slab_"..subname, modname..":slab_"..subname)
|
||||||
|
|
||||||
-- Unregister default recipes, optional, see _config.txt
|
-- Unregister default recipes, optional, see config.lua
|
||||||
|
|
||||||
if allow_stair_slab_crafting == false
|
if not moreblocks.config.allow_stair_slab_crafting then
|
||||||
then
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "moreblocks:nothing 1",
|
output = "moreblocks:nothing 1",
|
||||||
recipe = {
|
recipe = {
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
-- Load translation library if intllib is installed
|
-- Load translation library if intllib is installed
|
||||||
|
|
||||||
local S
|
local S
|
||||||
if (minetest.get_modpath("intllib")) then
|
if intllib then
|
||||||
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
|
||||||
S = intllib.Getter(minetest.get_current_modname())
|
S = intllib.Getter(minetest.get_current_modname())
|
||||||
else
|
else
|
||||||
S = function(s) return s end
|
S = function(s) return s end
|
||||||
@ -11,16 +10,19 @@ end
|
|||||||
-- Node will be called <modname>:stair_<subname>
|
-- Node will be called <modname>:stair_<subname>
|
||||||
|
|
||||||
function register_stair(modname, subname, recipeitem, groups, images, description, drop, light)
|
function register_stair(modname, subname, recipeitem, groups, images, description, drop, light)
|
||||||
|
return stairsplus:register_stair(modname, subname, recipeitem, {
|
||||||
minetest.register_node(":" .. modname .. ":stair_" .. subname, {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
groups = groups,
|
||||||
|
tiles = images,
|
||||||
|
description = description,
|
||||||
|
drop = drop,
|
||||||
|
light_source = light,
|
||||||
|
sounds = default.node_sound_stone_defaults(),
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
function stairsplus:register_stair(modname, subname, recipeitem, fields)
|
||||||
|
local defs = {
|
||||||
|
[""] = {
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -28,38 +30,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0, 0, 0.5, 0.5, 0.5},
|
{-0.5, 0, 0, 0.5, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
on_place = stairsplus_rotate_and_place
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":stairs:stair_" .. subname, {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = {cracky=3, not_in_creative_inventory=1},
|
|
||||||
node_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {
|
|
||||||
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
|
||||||
{-0.5, 0, 0, 0.5, 0.5, 0.5},
|
|
||||||
},
|
},
|
||||||
},
|
["_half"] = {
|
||||||
sounds = default.node_sound_stone_defaults(),
|
|
||||||
on_place = stairsplus_rotate_and_place
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":stair_" .. subname .. "_half", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -67,19 +39,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0, 0, 0, 0.5, 0.5},
|
{-0.5, 0, 0, 0, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_right_half" ]= {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":stair_" .. subname .. "_right_half", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -87,20 +48,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{0, 0, 0, 0.5, 0.5, 0.5},
|
{0, 0, 0, 0.5, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_inner"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":stair_" .. subname .. "_inner", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":stair_" .. drop .. "_inner",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -109,20 +58,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0, -0.5, 0, 0.5, 0},
|
{-0.5, 0, -0.5, 0, 0.5, 0},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_outer"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":"..modname .. ":stair_" .. subname .. "_outer", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
drop = modname .. ":stair_" .. drop .. "_outer",
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -130,19 +67,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0, 0, 0, 0.5, 0.5},
|
{-0.5, 0, 0, 0, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_alt"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":stair_" .. subname .. "_alt", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -150,19 +76,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0, 0, 0.5, 0.5, 0.5},
|
{-0.5, 0, 0, 0.5, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_alt_1"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":stair_" .. subname .. "_alt_1", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -170,19 +85,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0.4375, 0, 0.5, 0.5, 0.5},
|
{-0.5, 0.4375, 0, 0.5, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_alt_2"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":stair_" .. subname .. "_alt_2", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -190,19 +94,8 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0.375, 0, 0.5, 0.5, 0.5},
|
{-0.5, 0.375, 0, 0.5, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
["_alt_4"] = {
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node(":" .. modname .. ":stair_" .. subname .. "_alt_4", {
|
|
||||||
description = S("%s Stairs"):format(S(description)),
|
|
||||||
drawtype = "nodebox",
|
|
||||||
tiles = images,
|
|
||||||
light_source = light,
|
|
||||||
paramtype = "light",
|
|
||||||
paramtype2 = "facedir",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
groups = groups,
|
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
fixed = {
|
fixed = {
|
||||||
@ -210,14 +103,30 @@ function register_stair(modname, subname, recipeitem, groups, images, descriptio
|
|||||||
{-0.5, 0.25, 0, 0.5, 0.5, 0.5},
|
{-0.5, 0.25, 0, 0.5, 0.5, 0.5},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
sounds = default.node_sound_stone_defaults(),
|
},
|
||||||
on_place = stairsplus_rotate_and_place
|
}
|
||||||
})
|
|
||||||
|
|
||||||
-- Unregister default recipes, optional, see _config.txt
|
local desc = S("%s Stairs"):format(fields.description)
|
||||||
|
for alternate, def in pairs(defs) do
|
||||||
|
def.drawtype = "nodebox"
|
||||||
|
def.paramtype = "light"
|
||||||
|
def.paramtype2 = "facedir"
|
||||||
|
def.on_place = minetest.rotate_node
|
||||||
|
for k, v in pairs(fields) do
|
||||||
|
def[k] = v
|
||||||
|
end
|
||||||
|
def.description = desc
|
||||||
|
if fields.drop then
|
||||||
|
def.drop = modname..":stair_"..fields.drop..alternate
|
||||||
|
end
|
||||||
|
minetest.register_node(":"..modname..":stair_"..subname..alternate, def)
|
||||||
|
end
|
||||||
|
minetest.register_alias(":stairs:stair_"..subname, modname..":stair_"..subname)
|
||||||
|
|
||||||
if allow_stair_slab_crafting == false
|
|
||||||
then
|
-- Unregister default recipes, optional, see config.lua
|
||||||
|
|
||||||
|
if not moreblocks.config.allow_stair_slab_crafting then
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "moreblocks:nothing 1",
|
output = "moreblocks:nothing 1",
|
||||||
recipe = {
|
recipe = {
|
||||||
|
Loading…
Reference in New Issue
Block a user