More Blocks

This commit is contained in:
Calinou 2013-07-11 20:33:02 +02:00
parent f9bddb6dda
commit 85aea72376
66 changed files with 2809 additions and 2 deletions

13
LICENSE.txt Normal file
View File

@ -0,0 +1,13 @@
+---- zlib/libpng license ----+
Copyright (c) 2013 Calinou
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.
Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.

View File

@ -1,2 +0,0 @@
moreblocks
==========

22
README.txt Normal file
View File

@ -0,0 +1,22 @@
Calinou's Minetest Mods
=====================
Calinou's Mods for Minetest [http://minetest.net], a free and opensource Minecraft-like game.
This Git repository is mostly made for servers; it allows easy updating.
To install, just clone this repository somewhere, then copy the "calinou_mods" folder in the "mods/minetest" folder of Minetest's installation folder.
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

11
_config.txt Normal file
View File

@ -0,0 +1,11 @@
------------------------------------------------------------------------------
------------------------------ CONFIGURATION ---------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
-------- Change settings by changing the values after the "=". ---------------
------------------------------------------------------------------------------
-- Whether to direct wood based on player yaw when placing the block
wood_facedir = true

183
aliases.lua Normal file
View File

@ -0,0 +1,183 @@
-- 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("sweeper", "moreblocks:sweeper")
minetest.register_alias("circularsaw", "moreblocks:circular_saw")
minetest.register_alias("circular_saw", "moreblocks:circular_saw")
minetest.register_alias("screwdriver", "moreblocks:screwdriver")
minetest.register_alias("screw_driver", "moreblocks:screw_driver")
minetest.register_alias("screwdrive", "moreblocks:screw_driver")
minetest.register_alias("screw_drive", "moreblocks:screw_driver")
minetest.register_alias("sweep", "moreblocks:sweeper")
minetest.register_alias("junglestick", "moreblocks:jungle_stick")
minetest.register_alias("jungle_stick", "moreblocks:jungle_stick")
minetest.register_alias("obsidian", "default:obsidian")
minetest.register_alias("obsidianglass", "default:obsidian_glass")
minetest.register_alias("obsidian_glass", "default:obsidian_glass")
-- 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("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
minetest.register_alias("moreblocks:oerkkiblock", "default:mossycobble")
minetest.register_alias("moreblocks:screwdriver", "screwdriver:screwdriver")
-- Node and item renaming
minetest.register_alias("moreblocks:stone_bricks", "default:stonebrick")
minetest.register_alias("moreblocks:stonebrick", "default:stonebrick")
minetest.register_alias("moreblocks:junglewood", "default:junglewood")
minetest.register_alias("moreblocks:jungle_wood", "default:junglewood")
minetest.register_alias("moreblocks:horizontaltree", "moreblocks:horizontal_tree")
minetest.register_alias("moreblocks:horizontaljungletree", "moreblocks:horizontal_jungle_tree")
minetest.register_alias("moreblocks:stonesquare", "moreblocks:stone_tile")
minetest.register_alias("moreblocks:circlestonebrick", "moreblocks:circle_stone_bricks")
minetest.register_alias("moreblocks:ironstonebrick", "moreblocks:iron_stone_bricks")
minetest.register_alias("moreblocks:fence_junglewood", "moreblocks:fence_jungle_wood")
minetest.register_alias("moreblocks:coalstone", "moreblocks:coal_stone")
minetest.register_alias("moreblocks:ironstone", "moreblocks:iron_stone")
minetest.register_alias("moreblocks:woodtile", "moreblocks:wood_tile")
minetest.register_alias("moreblocks:woodtile_full", "moreblocks:wood_tile_full")
minetest.register_alias("moreblocks:woodtile_centered", "moreblocks:wood_tile_centered")
minetest.register_alias("moreblocks:woodtile_up", "moreblocks:wood_tile_up")
minetest.register_alias("moreblocks:woodtile_down", "moreblocks:wood_tile_down")
minetest.register_alias("moreblocks:woodtile_left", "moreblocks:wood_tile_left")
minetest.register_alias("moreblocks:woodtile_right", "moreblocks:wood_tile_right")
minetest.register_alias("moreblocks:coalglass", "moreblocks:coal_glass")
minetest.register_alias("moreblocks:ironglass", "moreblocks:iron_glass")
minetest.register_alias("moreblocks:glowglass", "moreblocks:glow_glass")
minetest.register_alias("moreblocks:superglowglass", "moreblocks:super_glow_glass")
minetest.register_alias("moreblocks:trapglass", "moreblocks:trap_glass")
minetest.register_alias("moreblocks:trapstone", "moreblocks:trap_stone")
minetest.register_alias("moreblocks:cactuschecker", "moreblocks:cactus_checker")
minetest.register_alias("moreblocks:coalchecker", "moreblocks:coal_checker")
minetest.register_alias("moreblocks:ironchecker", "moreblocks:iron_checker")
minetest.register_alias("moreblocks:cactusbrick", "moreblocks:cactus_brick")
minetest.register_alias("moreblocks:cleanglass", "moreblocks:clean_glass")
minetest.register_alias("moreblocks:emptybookshelf", "moreblocks:empty_bookshelf")
minetest.register_alias("moreblocks:junglestick", "moreblocks:jungle_stick")
minetest.register_alias("moreblocks:splitstonesquare","moreblocks:split_stone_tile")
minetest.register_alias("moreblocks:allfacestree","moreblocks:all_faces_tree")

365
circular_saw.lua Normal file
View File

@ -0,0 +1,365 @@
-- Load translation library if intllib is installed
local S
if (minetest.get_modpath("intllib")) then
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 = {}
-- Register known moreblocks stairs
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: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
-- How many microblocks does this shape at the output inventory cost?
circular_saw.cost_in_microblocks = { 6, 7, 5, 3, 2, 4, 6,
2, 1, 4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 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 .. ":stair_" .. material .. " " .. math.min(math.floor(anz/6), max_offered),
modname .. ":stair_" .. material .. "_inner " .. math.min(math.floor(anz/7), max_offered),
modname .. ":stair_" .. material .. "_outer " .. math.min(math.floor(anz/5), max_offered),
modname .. ":stair_" .. material .. "_half " .. math.min(math.floor(anz/3), 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 .. ":panel_" .. material .. "_bottom " .. math.min(math.floor(anz/2), max_offered),
modname .. ":micro_" .. material .. "_bottom " .. math.min(math.floor(anz/1), max_offered),
modname .. ":stair_" .. material .. "_alt " .. math.min(math.floor(anz/4), max_offered),
"",
}
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
circular_saw.reset_circular_saw = function(pos)
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory();
inv:set_list("input", { "" });
inv:set_list("micro", { "" });
inv:set_list("output", circular_saw.get_stair_output_inv("", "", 0, meta:get_string("max_offered")));
meta:set_int("anz", 0);
meta:set_string("infotext", "Circular saw, empty (owned by " .. (meta:get_string("owner") or "") .. ")");
end
-- Player has taken something out of the box or placed something inside; that amounts to count microblocks
circular_saw.update_inventory = function(pos, amount)
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory();
local akt = meta:get_int("anz");
-- The material is receicled automaticly
inv:set_list("recycle", { "" });
if(akt + amount < 1) then -- If the last block is taken out
circular_saw.reset_circular_saw(pos);
return;
end
local stack = inv:get_stack("input", 1);
-- At least one "normal" block is necessary to see what kind of stairs are requested
if(stack:is_empty()) then
-- Any microblocks not taken out yet are now lost (covers material loss in the machine)
circular_saw.reset_circular_saw(pos);
return;
end
local node_name = stack:get_name();
local liste = node_name:split(":");
local modname = liste[1];
local material = liste[2];
-- Display as many full blocks as possible
inv:set_list("input", { modname.. ":" .. material .. " " .. math.floor( (akt + amount) / 8) });
-- The stairnodes made of default nodes use moreblocks namespace, other mods keep own.
if(modname == "default") then modname = "moreblocks"; end
--print("circular_saw set to " ..modname.. " : " ..material.. " with " .. (akt+amount) .. " microblocks.");
-- 0-7 microblocks may remain as a rest
inv:set_list("micro", { modname.. ":micro_" .. material .. "_bottom " .. ((akt + amount) % 8) });
-- Display
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
meta:set_int("anz", (akt+amount));
meta:set_string("infotext", "Circular saw, working with " ..material.. " (owned by " .. (meta:get_string("owner") or "") .. ")");
end
-- The amount of items offered per shape can be configured
circular_saw.on_receive_fields = function(pos, formname, fields, sender)
local meta = minetest.env:get_meta(pos);
if(fields.max_offered and tonumber(fields.max_offered) > 0 and tonumber(fields.max_offered) < 99) then
meta:set_string("max_offered", fields.max_offered);
circular_saw.update_inventory(pos, 0); -- update to show the correct number of items
end
end
-- Moving the inventory of the circular_saw around is not allowed because it is a fictional inventory
circular_saw.allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
-- Moving inventory around would be rather immpractical and make things more difficult to calculate
return 0;
end
-- Only input- and recycle-slot are intended as input slots
circular_saw.allow_metadata_inventory_put = function(pos, listname, index, stack, player)
-- The player is not allowed to put something in there
if(listname == "output" or listname == "micro") then
return 0;
end
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory();
-- 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
return 0;
end
-- Only accept certain blocks as input which are known to be craftable into stairs
if(listname == "input") then
for i,v in ipairs(circular_saw.known_stairs) do
if(circular_saw.known_stairs[ i ] == stack:get_name()) then
return stack:get_count();
end
end
return 0;
end
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
-- Each new block is worth 8 microblocks
circular_saw.update_inventory(pos, 8 * stack:get_count());
elseif(listname=="recycle") then
-- Lets look which shape this represents
for i,v in ipairs(inv:get_list("output")) do
if(v:get_name() == stack:get_name()) then
local value = circular_saw.cost_in_microblocks[ i ] * stack:get_count();
--print("\nRecycling " .. (v:get_name()) .. " into " ..value.. " microblocks.");
-- We get value microblocks back
circular_saw.update_inventory(pos, value);
end
end
end
end
-- The player takes something
circular_saw.on_metadata_inventory_take = function(pos, listname, index, stack, player)
-- If it is one of the offered stairs: find out how many microblocks have to be substracted
if(listname=="output") then
-- We do know how much each block at each position costs
local cost = circular_saw.cost_in_microblocks[ index ] * stack:get_count();
circular_saw.update_inventory(pos, -1 * cost);
elseif(listname=="mikro") 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());
end
-- The recycle field plays no role here since it is processed immediately
end
circular_saw.on_construct_init = function(pos, formspec)
local meta = minetest.env:get_meta(pos)
meta:set_string("formspec", formspec);
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", "Circular saw, empty")
local inv = meta:get_inventory()
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("recycle", 1) -- Surplus partial blocks can be placed here
inv:set_size("output", 28) -- 4*7 versions of stair-parts of material x
circular_saw.reset_circular_saw(pos);
end
circular_saw.can_dig = function(pos,player)
local meta = minetest.env:get_meta(pos);
local inv = meta:get_inventory()
if not inv:is_empty("input") then
return false
elseif not inv:is_empty("micro") then
return false
elseif not inv:is_empty("recycle") then
return false
end
-- Can be digged by anyone when empty (not only by the owner)
return true
end,
minetest.register_node("moreblocks:circular_saw", {
description = S("Circular Saw"),
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-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.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.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.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
},
},
selection_box = {
type = "fixed",
fixed = {
{-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.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.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.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
},
},
tiles = {"moreblocks_circular_saw_top.png", "moreblocks_circular_saw_bottom.png", "moreblocks_circular_saw_side.png"},
paramtype = "light",
sunlight_propagates = true,
paramtype2 = "facedir",
groups = {cracky=2},
on_construct = function(pos)
return circular_saw.on_construct_init(pos,
"size[10,9]" ..
"list[current_name;input;0,0;1,1;]" ..
"label[0,0;Input material]" ..
"list[current_name;micro;0,1;1,1;]" ..
"label[0,1;Rest/microblocks]" ..
"field[0.3,2.5;1,1;max_offered;Max:;${max_offered}]" ..
"button[1,2;1,1;Set;Set]" ..
"list[current_name;recycle;0,3;1,1;]" ..
"label[0,3;Recycle output]" ..
"list[current_name;output;2,0;7,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)
local meta = minetest.env:get_meta(pos);
meta:set_string("owner", (placer:get_player_name() or ""));
meta:set_string("infotext", "Circular saw is empty (owned by " .. (placer:get_player_name() or "") .. ")");
end,
-- The amount of items offered per shape can be configured
on_receive_fields = function(pos, formname, fields, sender)
return circular_saw.on_receive_fields(pos, formname, fields, sender);
end,
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
return circular_saw.allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player);
end,
-- 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
})

375
crafting.lua Normal file
View File

@ -0,0 +1,375 @@
-- Crafting
minetest.register_craft({
output = "default:stick 1",
recipe = {
{"default:dry_shrub"},
}
})
minetest.register_craft({
output = "default:dirt_with_grass 1",
recipe = {
{"default:junglegrass"},
{"default:dirt"},
}
})
minetest.register_craft({
output = "default:dirt_with_grass 1",
recipe = {
{"default:mese"},
{"default:dirt"},
}
})
minetest.register_craft({
output = "default:mossycobble 1",
recipe = {
{"default:junglegrass"},
{"default:cobble"},
}
})
minetest.register_craft({
output = "default:mossycobble 1",
recipe = {
{"default:mese"},
{"default:cobble"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile 9",
recipe = {
{"default:wood", "default:wood", "default:wood"},
{"default:wood", "default:wood", "default:wood"},
{"default:wood", "default:wood", "default:wood"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile_flipped 1",
recipe = {
{"moreblocks:woodtile"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile_center 9",
recipe = {
{"default:wood", "default:wood", "default:wood"},
{"default:wood", "moreblocks:woodtile", "default:wood"},
{"default:wood", "default:wood", "default:wood"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile_full 4",
recipe = {
{"moreblocks:woodtile", "moreblocks:woodtile"},
{"moreblocks:woodtile", "moreblocks:woodtile"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile_up 1",
recipe = {
{"default:stick"},
{"moreblocks:woodtile_center"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile_down 1",
recipe = {
{"moreblocks:woodtile_center"},
{"default:stick"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile_left 1",
recipe = {
{"default:stick", "moreblocks:woodtile_center"},
}
})
minetest.register_craft({
output = "moreblocks:woodtile_right 1",
recipe = {
{"moreblocks:woodtile_center", "default:stick"},
}
})
minetest.register_craft({
output = "moreblocks:junglestick 4",
recipe = {
{"default:junglewood"},
}
})
minetest.register_craft({
output = "moreblocks:fence_jungle_wood 2",
recipe = {
{"moreblocks:jungle_stick", "moreblocks:jungle_stick", "moreblocks:jungle_stick"},
{"moreblocks:jungle_stick", "moreblocks:jungle_stick", "moreblocks:jungle_stick"},
}
})
minetest.register_craft({
output = "moreblocks:circle_stone_bricks 8",
recipe = {
{"default:stone", "default:stone", "default:stone"},
{"default:stone", "", "default:stone"},
{"default:stone", "default:stone", "default:stone"},
}
})
minetest.register_craft({
output = "moreblocks:all_faces_tree 8",
recipe = {
{"default:tree", "default:tree", "default:tree"},
{"default:tree", "", "default:tree"},
{"default:tree", "default:tree", "default:tree"},
}
})
minetest.register_craft({
output = "moreblocks:all_faces_jungle_tree 8",
recipe = {
{"default:jungletree", "default:jungletree", "default:jungletree"},
{"default:jungletree", "", "default:jungletree"},
{"default:jungletree", "default:jungletree", "default:jungletree"},
}
})
minetest.register_craft({
output = "moreblocks:sweeper 3",
recipe = {
{"default:junglegrass"},
{"default:stick"},
}
})
minetest.register_craft({
output = "moreblocks:stone_tile 4",
recipe = {
{"default:cobble", "default:cobble"},
{"default:cobble", "default:cobble"},
}
})
minetest.register_craft({
output = "moreblocks:split_stone_tile 1",
recipe = {
{"moreblocks:stone_tile"},
}
})
minetest.register_craft({
output = "moreblocks:empty_bookshelf 1",
recipe = {
{"moreblocks:sweeper"},
{"default:bookshelf"},
}
})
minetest.register_craft({
output = "moreblocks:iron_stone_bricks 1",
type = "shapeless",
recipe = {"default:steel_ingot", "default:stone_brick"},
})
minetest.register_craft({
output = "default:wood 4",
recipe = {
{"moreblocks:horizontal_tree"},
}
})
minetest.register_craft({
output = "default:junglewood 4",
recipe = {
{"moreblocks:horizontal_jungle_tree"},
}
})
minetest.register_craft({
output = "moreblocks:plankstone 4",
recipe = {
{"default:stone", "default:wood"},
{"default:wood", "default:stone"},
}
})
minetest.register_craft({
output = "moreblocks:plankstone 4",
recipe = {
{"default:wood", "default:stone"},
{"default:stone", "default:wood"},
}
})
minetest.register_craft({
output = "moreblocks:coal_checker 4",
recipe = {
{"default:stone", "default:coal_lump"},
{"default:coal_lump", "default:stone"},
}
})
minetest.register_craft({
output = "moreblocks:coal_checker 4",
recipe = {
{"default:coal_lump", "default:stone"},
{"default:stone", "default:coal_lump"},
}
})
minetest.register_craft({
output = "moreblocks:iron_checker 4",
recipe = {
{"default:steel_ingot", "default:stone"},
{"default:stone", "default:steel_ingot"},
}
})
minetest.register_craft({
output = "moreblocks:iron_checker 4",
recipe = {
{"default:stone", "default:steel_ingot"},
{"default:steel_ingot", "default:stone"},
}
})
minetest.register_craft({
output = "default:chest_locked 1",
type = "shapeless",
recipe = {"default:steel_ingot", "default:chest"},
})
minetest.register_craft({
output = "moreblocks:iron_glass 1",
type = "shapeless",
recipe = {"default:steel_ingot", "default:glass"},
})
minetest.register_craft({
output = "moreblocks:coal_glass 1",
type = "shapeless",
recipe = {"default:coal_lump", "default:glass"},
})
minetest.register_craft({
output = "moreblocks:clean_glass 1",
type = "shapeless",
recipe = {"moreblocks:sweeper", "default:glass"},
})
minetest.register_craft({
output = "moreblocks:glow_glass 1",
type = "shapeless",
recipe = {"default:torch", "default:glass"},
})
minetest.register_craft({
output = "moreblocks:super_glow_glass 1",
type = "shapeless",
recipe = {"default:torch", "default:torch", "default:glass"},
})
minetest.register_craft({
output = "moreblocks:coal_stone 1",
type = "shapeless",
recipe = {"default:coal_lump", "default:stone"},
})
minetest.register_craft({
output = "moreblocks:iron_stone 1",
type = "shapeless",
recipe = {"default:iron_lump", "default:stone"},
})
minetest.register_craft({
output = "moreblocks:trap_stone 12",
type = "shapeless",
recipe = {"default:mese", "default:stone"},
})
minetest.register_craft({
output = "moreblocks:trap_glass 12",
type = "shapeless",
recipe = {"default:mese", "default:glass"},
})
minetest.register_craft({
output = "moreblocks:cactus_brick 1",
type = "shapeless",
recipe = {"default:cactus", "default:brick"},
})
minetest.register_craft({
output = "moreblocks:cactus_checker 4",
recipe = {
{"default:cactus", "default:stone"},
{"default:stone", "default:cactus"},
}
})
minetest.register_craft({
output = "moreblocks:cactuschecker 4",
recipe = {
{"default:stone", "default:cactus"},
{"default:cactus", "default:stone"},
}
})
minetest.register_craft({
output = "moreblocks:rope 2",
recipe = {
{"default:junglegrass"},
{"default:junglegrass"},
{"default:junglegrass"},
}
})
minetest.register_craft({
output = "moreblocks:horizontal_tree 2",
recipe = {
{"default:tree", "", "default:tree"},
}
})
minetest.register_craft({
output = "default:tree 2",
recipe = {
{"moreblocks:horizontal_tree"},
{"moreblocks:horizontal_tree"},
}
})
minetest.register_craft({
output = "moreblocks:horizontal_jungle_tree 2",
recipe = {
{"default:jungletree", "", "default:jungletree"},
}
})
minetest.register_craft({
output = "default:jungletree 2",
recipe = {
{"moreblocks:horizontal_jungle_tree"},
{"moreblocks:horizontal_jungle_tree"},
}
})
minetest.register_craft({
output = "moreblocks:circular_saw 1",
recipe = {
{ "", "default:steel_ingot", "" },
{ "default:tree", "default:tree", "default:tree"},
{ "default:tree", "", "default:tree"},
}
})

1
depends.txt Normal file
View File

@ -0,0 +1 @@
default

358
init.lua Normal file
View File

@ -0,0 +1,358 @@
-- Load translation library if intllib is installed
local S
if (minetest.get_modpath("intllib")) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
else
S = function ( s ) return s end
end
dofile(minetest.get_modpath("moreblocks").."/_config.txt")
dofile(minetest.get_modpath("moreblocks").."/redefinitions.lua")
dofile(minetest.get_modpath("moreblocks").."/crafting.lua")
dofile(minetest.get_modpath("moreblocks").."/aliases.lua")
dofile(minetest.get_modpath("moreblocks").."/stairsplus_convert.lua")
dofile(minetest.get_modpath("moreblocks").."/stairsplus/stairs.lua")
dofile(minetest.get_modpath("moreblocks").."/stairsplus/slabs.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")
print(S("[moreblocks] loaded."))
--[[
****
More Blocks
by Calinou
Licensed under the zlib/libpng license for code and CC BY-SA for textures, see LICENSE.txt for info.
****
--]]
-- 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: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:horizontal_tree", {
description = S("Horizontal Tree"),
tiles = {"default_tree.png", "default_tree.png", "default_tree.png^[transformR90",
"default_tree.png^[transformR90", "default_tree_top.png", "default_tree_top.png"},
paramtype2 = "facedir",
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:horizontal_jungle_tree", {
description = S("Horizontal Jungle Tree"),
tiles = {"default_jungletree.png", "default_jungletree.png", "default_jungletree.png^[transformR90",
"default_jungletree.png^[transformR90", "default_jungletree_top.png", "default_jungletree_top.png"},
paramtype2 = "facedir",
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_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: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: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",
})
minetest.register_craftitem("moreblocks:nothing", {
inventory_image = "invisible.png",
on_use = minetest.item_eat(0),
})

52
locale/es.txt Normal file
View File

@ -0,0 +1,52 @@
# Translation by kaeza
[moreblocks] loaded. = [moreblocks] cargado.
Jungle Wooden Planks = Tablones de madera de jungla
Empty Bookshelf = Estante para libros vacío
Clean Glass = Cristal Limpio
Plankstone = Tablones de piedra
Wooden Tile = Parquet
Full Wooden Tile = Parquet Completo
Centered Wooden Tile = Parquet Centrado
Up Wooden Tile = Parquet Superior
Down Wooden Tile = Parquet Inferior
Left Wooden Tile = Parquet Izquierdo
Right Wooden Tile = Parquet Derecho
Circle Stone Bricks = Bloques de Piedra Circulares
Stone Tile = Baldosa de Piedra
Split Stone Tile = Baldosas de Piedra Partida
Glow Glass = Cristal Brillante
Super Glow Glass = Cristal Súper Brillante
Coal Glass = Cristal con Carbón
Iron Glass = Cristal con Hierro
Coal Checker = Cuadros de Carbón
Iron Checker = Cuadros de Hierro
Trap Stone = Piedra Trampa
Trap Glass = Cristal Trampa
Coal Stone = Carbón y Piedra
Iron Stone = Hierro y Piedra
Cactus Checker = Cuadros de Cactus
Cactus Brick = Ladrillos de Cactus
Sweeper = Limpiador
Jungle Stick = Varita de Madera de Jungla
Horizontal Tree = Tronco de árbol horizontal
Horizontal Jungle Tree = Tronco de árbol de la jungla horizontal
Rope = Soga
All-faces Tree = Tronco de Árbol
%s Stairs = Escalera de %s
%s Slab = Losa de %s
%s Panel = Panel de %s
%s Microblock = Microbloque de %s
Wooden = Madera
Papyrus = Papiro
Dry Shrub = Arbusto Desértico
Sapling = Brote de Árbol
Wooden Planks = Tablones de Madera
Ladder = Escalera de Mano
Glass = Cristal
%s Pane = Panel de %s
%s Fence = Valla de %s

54
locale/fr.txt Normal file
View File

@ -0,0 +1,54 @@
# Translation by Calinou
[moreblocks] loaded. = [moreblocks] a été chargé.
Jungle Wooden Planks = Planches de bois de jungle
Empty Bookshelf = Étagère vide
Clean Glass = Verre propre
Plankstone = Pierre-bois
Wooden Tile = Dalle en bois
Full Wooden Tile = Dalle en bois complète
Centered Wooden Tile = Dalle en bois centrée
Up Wooden Tile = Dalle en bois vers le haut
Down Wooden Tile = Dalle en bois vers le bas
Left Wooden Tile = Dalle en bois vers la gauche
Right Wooden Tile = Dalle en bois vers la droite
Circle Stone Bricks = Briques en pierre circulaires
Stone Tile = Dalle en pierre
Split Stone Tile = Dalle en pierre découpée
Glow Glass = Verre brillant
Super Glow Glass = Verre très brillant
Coal Glass = Verre en charbon
Iron Glass = Verre en fer
Coal Checker = Damier en charbon
Iron Checker = Damier en fer
Trap Stone = Pierre à piège
Trap Glass = Verre à piège
Coal Stone = Pierre en charbon
Iron Stone = Pierre en fer
Cactus Checker = Damier en cactus
Cactus Brick = Briques en cactus
Sweeper = Balai
Jungle Stick = Bâton en bois de jungle
Horizontal Tree = Tronc d'arbre horizontal
Horizontal Jungle Tree = Tronc d'arbre de jungle horizontal
Rope = Corde
All-faces Tree = Tronc d'arbre
Wooden = bois
Papyrus = Papyrus
Dry Shrub = Buisson mort
Sapling = Pousse d'arbre
Wooden Planks = Planches de bois
Ladder = Échelle
Glass = Verre
Circular Saw = Scie circulaire
%s Stairs = Escaliers en %s
%s Slab = Demi-dalle en %s
%s Panel = Barre en %s
%s Microblock = Microbloc en %s
%s Pane = Panneau en %s
%s Fence = Barrière en %s

287
redefinitions.lua Normal file
View File

@ -0,0 +1,287 @@
-- Redefinitions of some default crafting recipes
minetest.register_craft({
output = "default:sign_wall 4",
recipe = {
{"default:wood", "default:wood", "default:wood"},
{"default:wood", "default:wood", "default:wood"},
{"", "default:stick", ""},
}
})
minetest.register_craft({
output = "default:ladder 3",
recipe = {
{"default:stick", "", "default:stick"},
{"default:stick", "default:stick", "default:stick"},
{"default:stick", "", "default:stick"},
}
})
minetest.register_craft({
output = "default:paper 3",
recipe = {
{"default:papyrus", "default:papyrus", "default:papyrus"},
}
})
minetest.register_craft({
output = "default:rail 16",
recipe = {
{"default:steel_ingot", "", "default:steel_ingot"},
{"default:steel_ingot", "default:stick", "default:steel_ingot"},
{"default:steel_ingot", "", "default:steel_ingot"},
}
})
minetest.register_craft({
output = "default:axe_wood",
recipe = {
{"default:wood", "default:wood"},
{"default:stick", "default:wood"},
{"default:stick", ""},
}
})
minetest.register_craft({
output = "default:axe_stone",
recipe = {
{"default:cobble", "default:cobble"},
{"default:stick", "default:cobble"},
{"default:stick", ""},
}
})
minetest.register_craft({
output = "default:axe_steel",
recipe = {
{"default:steel_ingot", "default:steel_ingot"},
{"default:stick", "default:steel_ingot"},
{"default:stick", ""},
}
})
-- Tool repair buff (15% bonus instead of 2%)
minetest.register_craft({
type = "toolrepair",
additional_wear = -0.15,
})
-- Redefinitions of some default nodes
minetest.register_node(":default:ladder", {
description = "Ladder",
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
then
minetest.register_node(":default:wood", {
description = "Wooden Planks",
tiles = {"default_wood.png"},
paramtype2 = "facedir",
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3,wood=1},
sounds = default.node_sound_wood_defaults(),
})
end
minetest.register_node(":default:sapling", {
description = "Sapling",
drawtype = "plantlike",
visual_scale = 1.0,
tiles = {"default_sapling.png"},
inventory_image = "default_sapling.png",
wield_image = "default_sapling.png",
paramtype = "light",
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", {
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",
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", {
description = "Papyrus",
drawtype = "plantlike",
tiles = {"default_papyrus.png"},
inventory_image = "default_papyrus.png",
wield_image = "default_papyrus.png",
paramtype = "light",
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", {
description = "Wooden Fence",
drawtype = "fencelike",
tiles = {"default_wood.png"},
inventory_image = "default_fence.png",
wield_image = "default_fence.png",
paramtype = "light",
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:grass_1", {
description = "Grass",
drawtype = "plantlike",
tiles = {"default_grass_1.png"},
inventory_image = "default_grass_1.png",
wield_image = "default_grass_1.png",
paramtype = "light",
walkable = false,
sunlight_propagates = true,
groups = {snappy=3,flammable=3,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.3125, 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,
})
minetest.register_node(":default:grass_2", {
description = "Grass",
drawtype = "plantlike",
tiles = {"default_grass_2.png"},
paramtype = "light",
walkable = false,
sunlight_propagates = true,
drop = "default:grass_1",
groups = {snappy=3,flammable=3,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, -0.3125, 0.5},
},
})
minetest.register_node(":default:grass_3", {
description = "Grass",
drawtype = "plantlike",
tiles = {"default_grass_3.png"},
paramtype = "light",
walkable = false,
sunlight_propagates = true,
drop = "default:grass_1",
groups = {snappy=3,flammable=3,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, -0.3125, 0.5},
},
})
minetest.register_node(":default:grass_4", {
description = "Grass",
drawtype = "plantlike",
tiles = {"default_grass_4.png"},
paramtype = "light",
walkable = false,
sunlight_propagates = true,
drop = "default:grass_1",
groups = {snappy=3,flammable=3,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, -0.3125, 0.5},
},
})
minetest.register_node(":default:grass_5", {
description = "Grass",
drawtype = "plantlike",
tiles = {"default_grass_5.png"},
paramtype = "light",
walkable = false,
sunlight_propagates = true,
drop = "default:grass_1",
groups = {snappy=3,flammable=3,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, -0.3125, 0.5},
},
})
minetest.register_node(":default:junglegrass", {
description = "Jungle Grass",
drawtype = "plantlike",
visual_scale = 1.25,
tiles = {"default_junglegrass.png"},
paramtype = "light",
walkable = false,
sunlight_propagates = true,
groups = {snappy=3,flammable=2,attached_node=1},
sounds = default.node_sound_leaves_defaults(),
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.3125, 0.5},
},
})
minetest.register_node(":default:junglesapling", {
description = "Jungle Sapling",
drawtype = "plantlike",
sunlight_propagates = true,
tiles = {"default_junglesapling.png"},
paramtype = "light",
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(),
})

434
stairsplus.lua Normal file
View File

@ -0,0 +1,434 @@
-- Nodes will be called <modname>:{stair,slab,panel,micro}_<subname>
if minetest.get_modpath("unified_inventory") or not minetest.setting_getbool("creative_mode") then
stairsplus_expect_infinite_stacks = false
else
stairsplus_expect_infinite_stacks = true
end
-- these vales are in order: facedir in degrees = 90, 0, 270, 180, 90
local dirs1 = { 21, 20, 23, 22, 21 }
local dirs2 = { 15, 8, 17, 6, 15 }
local dirs3 = { 14, 11, 16, 5, 14 }
stairsplus_players_onwall = {}
minetest.register_chatcommand("st", {
params = "",
description = "Toggle stairsplus between placing wall/vertical stairs/panels and normal.",
func = function(name, param)
stairsplus_players_onwall[name] = not stairsplus_players_onwall[name]
if stairsplus_players_onwall[name] then
minetest.chat_send_player(name, "Stairsplus: Placing wall stairs/vertical panels.")
else
minetest.chat_send_player(name, "Stairsplus: Placing floor/ceiling stairs/panels.")
end
end
})
stairsplus_can_it_stack = function(itemstack, placer, pointed_thing)
return false
--[[
if pointed_thing.type ~= "node" then
return itemstack
end
-- If it's being placed on an another similar one, replace it with
-- a full block
local slabpos = nil
local slabnode = nil
local p1 = pointed_thing.above
p1 = {x = p1.x, y = p1.y - 1, z = p1.z}
local n1 = minetest.env:get_node(p1)
if n1.name == modname .. ":slab_" .. subname then
slabpos = p1
slabnode = n1
end
if slabpos then
-- Remove the slab at slabpos
minetest.env:remove_node(slabpos)
-- Make a fake stack of a single item and try to place it
local fakestack = ItemStack(recipeitem)
pointed_thing.above = slabpos
fakestack = minetest.item_place(fakestack, placer, pointed_thing)
-- If the item was taken from the fake stack, decrement original
if not fakestack or fakestack:is_empty() then
itemstack:take_item(1)
-- Else put old node back
else
minetest.env:set_node(slabpos, slabnode)
end
return itemstack
end
if n1.name == modname .. ":slab_" .. subname .. "_quarter" then
slabpos = p1
slabnode = n1
end
if slabpos then
-- Remove the slab at slabpos
minetest.env:remove_node(slabpos)
-- Make a fake stack of a single item and try to place it
local fakestack = ItemStack(modname .. ":slab_" .. subname .. "_three_quarter")
pointed_thing.above = slabpos
fakestack = minetest.item_place(fakestack, placer, pointed_thing)
-- If the item was taken from the fake stack, decrement original
if not fakestack or fakestack:is_empty() then
itemstack:take_item(1)
-- Else put old node back
else
minetest.env:set_node(slabpos, slabnode)
end
return itemstack
end
-- Otherwise place regularly
return minetest.item_place(itemstack, placer, pointed_thing)
]]--
end
local function get_nodedef_field(nodename, fieldname)
if not minetest.registered_nodes[nodename] then
return nil
end
return minetest.registered_nodes[nodename][fieldname]
end
function stairsplus_rotate_and_place(itemstack, placer, pointed_thing, onwall)
local node = minetest.env:get_node(pointed_thing.under)
if not minetest.registered_nodes[node.name] or not minetest.registered_nodes[node.name].on_rightclick then
local above = pointed_thing.above
local under = pointed_thing.under
local top = {x=under.x, y=under.y+1, z=under.z}
local pitch = placer:get_look_pitch()
local node = minetest.env:get_node(above)
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
local wield_name = itemstack:get_name()
local slab = string.find(wield_name, "slab")
local panel = string.find(wield_name, "panel")
local micro = string.find(wield_name, "micro")
local iswall = (above.x ~= under.x) or (above.z ~= under.z)
local isceiling = (above.x == under.x) and (above.z == under.z) and (pitch > 0)
if get_nodedef_field(minetest.env:get_node(under).name, "buildable_to") then
if slab then fdir = 0 end
minetest.env:add_node(under, {name = wield_name, param2 = fdir }) -- place right side up
elseif not get_nodedef_field(minetest.env:get_node(above).name, "buildable_to") then
return
elseif onwall or (iswall and (slab or panel)) then
if slab then
minetest.env:add_node(above, {name = wield_name, param2 = dirs2[fdir+2] }) -- place with wall slab rotation
else
minetest.env:add_node(above, {name = wield_name, param2 = dirs3[fdir+2] }) -- place with wall panel/micro rotation
end
elseif isceiling then
local nfdir = dirs1[fdir+2]
if slab then nfdir = 22 end
minetest.env:add_node(above, {name = wield_name, param2 = nfdir }) -- place upside down variant
else
if slab then fdir = 0 end
minetest.env:add_node(above, {name = wield_name, param2 = fdir }) -- place right side up
end
if not stairsplus_expect_infinite_stacks then
itemstack:take_item()
return itemstack
end
else
minetest.registered_nodes[node.name].on_rightclick(pointed_thing.under, node, placer)
end
end
function register_stair_slab_panel_micro(modname, subname, recipeitem, groups, images, description, drop, light)
register_stair(modname, subname, recipeitem, groups, images, description, drop, light)
register_slab( modname, subname, recipeitem, groups, images, description, drop, light)
register_panel(modname, subname, recipeitem, groups, images, description, drop, light)
register_micro(modname, subname, recipeitem, groups, images, description, drop, light)
register_6dfacedir_conversion(modname, subname)
end
-- Default stairs/slabs/panels/microblocks
register_stair_slab_panel_micro("moreblocks", "wood", "default:wood",
{not_in_creative_inventory=1,snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"default_wood.png"},
"Wooden",
"wood",
0)
register_stair_slab_panel_micro("moreblocks", "stone", "default:stone",
{not_in_creative_inventory=1,cracky=3},
{"default_stone.png"},
"Stone",
"cobble",
0)
register_stair_slab_panel_micro("moreblocks", "cobble", "default:cobble",
{not_in_creative_inventory=1,cracky=3},
{"default_cobble.png"},
"Cobblestone",
"cobble",
0)
register_stair_slab_panel_micro("moreblocks", "mossycobble", "default:mossycobble",
{not_in_creative_inventory=1,cracky=3},
{"default_mossycobble.png"},
"Mossy Cobblestone",
"mossycobble",
0)
register_stair_slab_panel_micro("moreblocks", "brick", "default:brick",
{not_in_creative_inventory=1,cracky=3},
{"default_brick.png"},
"Brick",
"brick",
0)
register_stair_slab_panel_micro("moreblocks", "sandstone", "default:sandstone",
{not_in_creative_inventory=1,crumbly=2,cracky=2},
{"default_sandstone.png"},
"Sandstone",
"sandstone",
0)
register_stair_slab_panel_micro("moreblocks", "steelblock", "default:steelblock",
{not_in_creative_inventory=1,cracky=1,level=2},
{"default_steel_block.png"},
"Steel Block",
"steelblock",
0)
register_stair_slab_panel_micro("moreblocks", "goldblock", "default:goldblock",
{not_in_creative_inventory=1,cracky=1},
{"default_gold_block.png"},
"Gold Block",
"goldblock",
0)
register_stair_slab_panel_micro("moreblocks", "copperblock", "default:copperblock",
{not_in_creative_inventory=1,cracky=1,level=2},
{"default_copper_block.png"},
"Copper Block",
"copperblock",
0)
register_stair_slab_panel_micro("moreblocks", "bronzeblock", "default:bronzeblock",
{not_in_creative_inventory=1,cracky=1,level=2},
{"default_bronze_block.png"},
"Bronze Block",
"bronzeblock",
0)
register_stair_slab_panel_micro("moreblocks", "diamondblock", "default:diamondblock",
{not_in_creative_inventory=1,cracky=1,level=3},
{"default_diamond_block.png"},
"Diamond Block",
"diamondblock",
0)
register_stair_slab_panel_micro("moreblocks", "desert_stone", "default:desert_stone",
{not_in_creative_inventory=1,cracky=3},
{"default_desert_stone.png"},
"Desert Stone",
"desert_stone",
0)
register_stair_slab_panel_micro("moreblocks", "glass", "default:glass",
{not_in_creative_inventory=1,snappy=2,cracky=3,oddly_breakable_by_hand=3},
{"moreblocks_glass_stairsplus.png"},
"Glass",
"glass",
0)
register_stair_slab_panel_micro("moreblocks", "tree", "default:tree",
{not_in_creative_inventory=1,tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
{"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
"Tree",
"tree",
0)
register_stair_slab_panel_micro("moreblocks", "jungletree", "default:jungletree",
{not_in_creative_inventory=1,tree=1,snappy=1,choppy=2,oddly_breakable_by_hand=1,flammable=2},
{"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
"Jungle Tree",
"jungletree",
0)
register_stair_slab_panel_micro("moreblocks", "obsidian", "default:obsidian",
{not_in_creative_inventory=1,cracky=1,level=2},
{"default_obsidian.png"},
"Obsidian",
"obsidian",
0)
register_stair_slab_panel_micro("moreblocks", "obsidian_glass", "default:obsidian_glass",
{not_in_creative_inventory=1,cracky=3,oddly_breakable_by_hand=3},
{"moreblocks_obsidian_glass_stairsplus.png"},
"Obsidian Glass",
"obsidian_glass",
0)
register_stair_slab_panel_micro("moreblocks", "stonebrick", "default:stonebrick",
{not_in_creative_inventory=1,cracky=3},
{"default_stone_brick.png"},
"Stone Bricks",
"stone_bricks",
0)
register_stair_slab_panel_micro("moreblocks", "desert_stonebrick", "default:desert_stonebrick",
{not_in_creative_inventory=1,cracky=3},
{"default_desert_stone_brick.png"},
"Desert Stone Bricks",
"desert_stonebrick",
0)
register_stair_slab_panel_micro("moreblocks", "sandstonebrick", "default:sandstonebrick",
{not_in_creative_inventory=1,cracky=3},
{"default_sandstone_brick.png"},
"Sandstone Bricks",
"sandstonebrick",
0)
-- More Blocks stairs/slabs/panels/microblocks
register_stair_slab_panel_micro("moreblocks", "circle_stone_bricks", "moreblocks:circle_stone_bricks",
{not_in_creative_inventory=1,cracky=3},
{"moreblocks_circle_stone_bricks.png"},
"Circle Stone Bricks",
"circle_stone_bricks",
0)
register_stair_slab_panel_micro("moreblocks", "iron_stone_bricks", "moreblocks:iron_stone_bricks",
{not_in_creative_inventory=1,cracky=3},
{"moreblocks_iron_stone_bricks.png"},
"Iron Stone Bricks",
"iron_stone_bricks",
0)
register_stair_slab_panel_micro("moreblocks", "stone_tile", "moreblocks:stone_tile",
{not_in_creative_inventory=1,cracky=3},
{"moreblocks_stone_tile.png"},
"Stonesquare",
"stone_tile",
0)
register_stair_slab_panel_micro("moreblocks", "split_stone_tile", "moreblocks:split_stone_tile",
{not_in_creative_inventory=1,cracky=3},
{"moreblocks_split_stone_tile_top.png", "moreblocks_split_stone_tile.png"},
"Split Stonesquare",
"split_stone_tile",
0)
register_stair_slab_panel_micro("moreblocks", "jungle_wood", "default:junglewood",
{not_in_creative_inventory=1,snappy=1, choppy=2, oddly_breakable_by_hand=2,flammable=3},
{"default_junglewood.png"},
"Jungle Wood",
"jungle_wood",
0)
register_stair_slab_panel_micro("moreblocks", "plankstone", "moreblocks:plankstone",
{not_in_creative_inventory=1,cracky=3},
{"moreblocks_plankstone.png", "moreblocks_plankstone.png", "moreblocks_plankstone.png",
"moreblocks_plankstone.png", "moreblocks_plankstone.png^[transformR90", "moreblocks_plankstone.png^[transformR90"},
"Plankstone",
"plankstone",
0)
register_stair_slab_panel_micro("moreblocks", "coal_checker", "moreblocks:coal_checker",
{not_in_creative_inventory=1,cracky=3},
{"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"},
"Coal Checker",
"coal_checker",
0)
register_stair_slab_panel_micro("moreblocks", "iron_checker", "moreblocks:iron_checker",
{not_in_creative_inventory=1,cracky=3},
{"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"},
"Iron Checker",
"iron_checker",
0)
register_stair_slab_panel_micro("moreblocks", "cactus_checker", "moreblocks:cactus_checker",
{not_in_creative_inventory=1,cracky=3},
{"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"},
"Cactus Checker",
"cactus_checker",
0)
register_stair_slab_panel_micro("moreblocks", "coal_stone", "moreblocks:coal_stone",
{not_in_creative_inventory=1,cracky=3},
{"moreblocks_coal_stone.png"},
"Coal Stone",
"coal_stone",
0)
register_stair_slab_panel_micro("moreblocks", "iron_stone", "moreblocks:iron_stone",
{not_in_creative_inventory=1,cracky=3},
{"moreblocks_iron_stone.png"},
"Iron Stone",
"iron_stone",
0)
register_stair_slab_panel_micro("moreblocks", "glow_glass", "moreblocks:glow_glass",
{not_in_creative_inventory=1,snappy=2,cracky=3,oddly_breakable_by_hand=3},
{"moreblocks_glow_glass_stairsplus.png"},
"Glow Glass",
"glow_glass",
11)
register_stair_slab_panel_micro("moreblocks", "super_glow_glass", "moreblocks:super_glow_glass",
{not_in_creative_inventory=1,snappy=2, cracky=3, oddly_breakable_by_hand=3},
{"moreblocks_super_glow_glass_stairsplus.png"},
"Super Glow Glass",
"super_glow_glass",
15)
register_stair_slab_panel_micro("moreblocks", "coal_glass", "moreblocks:coal_glass",
{not_in_creative_inventory=1,snappy=2, cracky=3, oddly_breakable_by_hand=3},
{"moreblocks_coal_glass_stairsplus.png"},
"Coal Glass",
"coal_glass",
0)
register_stair_slab_panel_micro("moreblocks", "iron_glass", "moreblocks:iron_glass",
{not_in_creative_inventory=1,snappy=2,cracky=3,oddly_breakable_by_hand=3},
{"moreblocks_iron_glass_stairsplus.png"},
"Iron Glass",
"iron_glass",
0)
register_stair_slab_panel_micro("moreblocks", "wood_tile", "moreblocks:wood_tile",
{not_in_creative_inventory=1,snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"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"},
"Wooden Tile",
"wood_tile",
0)
register_stair_slab_panel_micro("moreblocks", "wood_tile_center", "moreblocks:wood_tile_center",
{not_in_creative_inventory=1,snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"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"},
"Centered Wooden Tile",
"wood_tile_center",
0)
register_stair_slab_panel_micro("moreblocks", "wood_tile_full", "moreblocks:wood_tile_full",
{not_in_creative_inventory=1,snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=3},
{"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"},
"Full Wooden Tile",
"wood_tile_full",
0)

61
stairsplus/aliases.lua Normal file
View File

@ -0,0 +1,61 @@
function register_stairsplus_alias(modname, origname, 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 .. "_wall", "moreblocks:slab_" .. newname .. "_wall")
minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter", "moreblocks:slab_" .. newname .. "_quarter")
minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_inverted", "moreblocks:slab_" .. newname .. "_quarter_inverted")
minetest.register_alias(modname .. ":slab_" .. origname .. "_quarter_wall", "moreblocks:slab_" .. newname .. "_quarter_wall")
minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter", "moreblocks:slab_" .. newname .. "_three_quarter")
minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_inverted", "moreblocks:slab_" .. newname .. "_three_quarter_inverted")
minetest.register_alias(modname .. ":slab_" .. origname .. "_three_quarter_wall", "moreblocks:slab_" .. newname .. "_three_quarter_wall")
minetest.register_alias(modname .. ":stair_" .. origname, "moreblocks:stair_" .. newname)
minetest.register_alias(modname .. ":stair_" .. origname .. "_inverted", "moreblocks:stair_" .. newname .. "_inverted")
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall", "moreblocks:stair_" .. newname .. "_wall")
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", "moreblocks:stair_" .. newname .. "_wall_half")
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", "moreblocks:stair_" .. newname .. "_wall_half_inverted")
minetest.register_alias(modname .. ":stair_" .. origname .. "_half", "moreblocks:stair_" .. newname .. "_half")
minetest.register_alias(modname .. ":stair_" .. origname .. "_half_inverted", "moreblocks:stair_" .. newname .. "_half_inverted")
minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half", "moreblocks:stair_" .. newname .. "_right_half")
minetest.register_alias(modname .. ":stair_" .. origname .. "_right_half_inverted", "moreblocks:stair_" .. newname .. "_right_half_inverted")
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half", "moreblocks:stair_" .. newname .. "_wall_half")
minetest.register_alias(modname .. ":stair_" .. origname .. "_wall_half_inverted", "moreblocks:stair_" .. newname .. "_wall_half_inverted")
minetest.register_alias(modname .. ":stair_" .. origname .. "_inner", "moreblocks:stair_" .. newname .. "_inner")
minetest.register_alias(modname .. ":stair_" .. origname .. "_inner_inverted", "moreblocks:stair_" .. newname .. "_inner_inverted")
minetest.register_alias(modname .. ":stair_" .. origname .. "_outer", "moreblocks:stair_" .. newname .. "_outer")
minetest.register_alias(modname .. ":stair_" .. origname .. "_outer_inverted", "moreblocks:stair_" .. newname .. "_outer_inverted")
minetest.register_alias(modname .. ":panel_" .. origname .. "_bottom", "moreblocks:panel_" .. newname .. "_bottom")
minetest.register_alias(modname .. ":panel_" .. origname .. "_top", "moreblocks:panel_" .. newname .. "_top")
minetest.register_alias(modname .. ":panel_" .. origname .. "_vertical", "moreblocks:panel_" .. newname .. "_vertical")
minetest.register_alias(modname .. ":micro_" .. origname .. "_bottom", "moreblocks:micro_" .. newname .. "_bottom")
minetest.register_alias(modname .. ":micro_" .. origname .. "_top", "moreblocks:micro_" .. newname .. "_top")
end
register_stairsplus_alias("stairsplus", "stone", "stone")
register_stairsplus_alias("stairsplus", "wood", "wood")
register_stairsplus_alias("stairsplus", "cobble", "cobble")
register_stairsplus_alias("stairsplus", "brick", "brick")
register_stairsplus_alias("stairsplus", "sandstone", "sandstone")
register_stairsplus_alias("stairsplus", "glass", "glass")
register_stairsplus_alias("stairsplus", "tree", "tree")
register_stairsplus_alias("stairsplus", "jungletree", "jungletree")
register_stairsplus_alias("stairsplus", "desert_stone", "desert_stone")
register_stairsplus_alias("stairsplus", "steelblock", "steelblock")
register_stairsplus_alias("stairsplus", "mossycobble", "mossycobble")
register_stairsplus_alias("moreblocks", "coalstone", "coal_stone")
register_stairsplus_alias("moreblocks", "junglewood", "jungle_wood")
register_stairsplus_alias("moreblocks", "circlestonebrick", "circle_stone_bricks")
register_stairsplus_alias("moreblocks", "ironstone", "iron_stone")
register_stairsplus_alias("moreblocks", "coalglass", "coal_glass")
register_stairsplus_alias("moreblocks", "ironglass", "iron_glass")
register_stairsplus_alias("moreblocks", "glowglass", "glow_glass")
register_stairsplus_alias("moreblocks", "superglowglass", "super_glow_glass")
register_stairsplus_alias("moreblocks", "coalchecker", "coal_checker")
register_stairsplus_alias("moreblocks", "ironchecker", "iron_checker")
register_stairsplus_alias("moreblocks", "cactuschecker", "cactus_checker")
register_stairsplus_alias("moreblocks", "ironstonebrick", "iron_stone_bricks")
register_stairsplus_alias("moreblocks", "stonesquare", "stone_tile")
register_stairsplus_alias("moreblocks", "splitstonesquare", "split_stone_tile")
register_stairsplus_alias("moreblocks", "woodtile", "wood_tile")
register_stairsplus_alias("moreblocks", "woodtile_centered", "wood_tile_centered")
register_stairsplus_alias("moreblocks", "woodtile_full", "wood_tile_full")

View File

@ -0,0 +1,43 @@
-- Load translation library if intllib is installed
local S
if (minetest.get_modpath("intllib")) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
else
S = function ( s ) return s end
end
-- Node will be called <modname>micro_<subname>
function register_micro(modname, subname, recipeitem, groups, images, description, drop, light)
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,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, 0, 0, 0, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, 0, 0, 0, 0.5},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
minetest.register_alias(modname..":micro_"..subname.."_bottom", modname..":micro_"..subname)
end

42
stairsplus/panels.lua Normal file
View File

@ -0,0 +1,42 @@
-- Load translation library if intllib is installed
local S
if (minetest.get_modpath("intllib")) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
else
S = function ( s ) return s end
end
-- Node will be called <modname>panel_<subname>
function register_panel(modname, subname, recipeitem, groups, images, description, drop, light)
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,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, 0, 0.5, 0, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, 0, 0.5, 0, 0.5},
},
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
minetest.register_alias(modname..":panel_"..subname.."_bottom", modname..":panel_"..subname)
end

127
stairsplus/slabs.lua Normal file
View File

@ -0,0 +1,127 @@
-- Load translation library if intllib is installed
local S
if (minetest.get_modpath("intllib")) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
else
S = function ( s ) return s end
end
-- Node will be called <modname>slab_<subname>
function register_slab(modname, subname, recipeitem, groups, images, description, drop, light)
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,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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 = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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 = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.25, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0.25, 0.5},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
-- Unregister default recipes
minetest.register_craft({
output = "moreblocks:nothing 1",
recipe = {
{recipeitem, recipeitem, recipeitem},
},
})
end

248
stairsplus/stairs.lua Normal file
View File

@ -0,0 +1,248 @@
-- Load translation library if intllib is installed
local S
if (minetest.get_modpath("intllib")) then
dofile(minetest.get_modpath("intllib").."/intllib.lua")
S = intllib.Getter(minetest.get_current_modname())
else
S = function ( s ) return s end
end
-- Node will be called <modname>:stair_<subname>
function register_stair(modname, subname, recipeitem, groups, images, description, drop, light)
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,
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},
},
},
selection_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},
},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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},
},
},
selection_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},
},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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 = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0, 0, 0.5},
{-0.5, 0, 0, 0, 0.5, 0.5},
},
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0, 0, 0.5},
{-0.5, 0, 0, 0, 0.5, 0.5},
},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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 = {
type = "fixed",
fixed = {
{0, -0.5, -0.5, 0.5, 0, 0.5},
{0, 0, 0, 0.5, 0.5, 0.5},
},
},
selection_box = {
type = "fixed",
fixed = {
{0, -0.5, -0.5, 0.5, 0, 0.5},
{0, 0, 0, 0.5, 0.5, 0.5},
},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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 = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.5, 0.5},
{-0.5, 0, -0.5, 0, 0.5, 0},
},
},
selection_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},
{-0.5, 0, -0.5, 0, 0.5, 0},
},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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 = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0, 0.5, 0.5},
},
},
selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0, 0.5, 0.5},
},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
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 = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0},
{-0.5, 0, 0, 0.5, 0.5, 0.5},
},
},
sounds = default.node_sound_stone_defaults(),
on_place = function(itemstack, placer, pointed_thing)
local keys=placer:get_player_control()
stairsplus_rotate_and_place(itemstack, placer, pointed_thing, keys["sneak"])
return itemstack
end
})
-- Unregister default recipes
minetest.register_craft({
output = "moreblocks:nothing 1",
recipe = {
{recipeitem, "", ""},
{recipeitem, recipeitem, ""},
{recipeitem, recipeitem, recipeitem},
},
})
minetest.register_craft({
output = "moreblocks:nothing 1",
recipe = {
{"", "", recipeitem},
{"", recipeitem, recipeitem},
{recipeitem, recipeitem, recipeitem},
},
})
end

133
stairsplus_convert.lua Normal file
View File

@ -0,0 +1,133 @@
-- 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 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 j in ipairs(objects_list1) do
local flip_upside_down = false
local flip_to_wall = false
local object = objects_list1[j]
local dest_object = objects_list1[j]
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
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.env:add_node(pos, {name = dest_object, param2 = nfdir})
end
})
end
for j in ipairs(objects_list2) do
local flip_upside_down = false
local flip_to_wall = false
local object = objects_list2[j]
local dest_object = objects_list2[j]
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.env:add_node(pos, {name = dest_object, param2 = nfdir})
end
})
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 646 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 675 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 978 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 973 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 287 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 555 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 741 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 517 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 752 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 288 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 598 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B