More Blocks
							
								
								
									
										13
									
								
								LICENSE.txt
									
									
									
									
									
										Normal 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. | ||||||
							
								
								
									
										22
									
								
								README.txt
									
									
									
									
									
										Normal 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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -0,0 +1 @@ | |||||||
|  | default | ||||||
							
								
								
									
										358
									
								
								init.lua
									
									
									
									
									
										Normal 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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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") | ||||||
							
								
								
									
										43
									
								
								stairsplus/microblocks.lua
									
									
									
									
									
										Normal 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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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
									
								
							
							
						
						| @@ -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 | ||||||
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_cactus_brick.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 735 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_cactus_checker.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 826 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_circle_stone_bricks.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 646 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_circular_saw_bottom.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 699 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_circular_saw_side.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 587 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_circular_saw_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 667 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_clean_glass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 249 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_coal_checker.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 902 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_coal_glass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 245 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_coal_glass_stairsplus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 278 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_coal_stone.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 545 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_empty_bookshelf.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 675 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_fence_jungle_wood.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 392 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_fence_wood.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 539 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_glass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 978 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_glass_stairsplus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 973 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_glow_glass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 265 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_glow_glass_stairsplus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 287 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_iron_checker.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 884 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_iron_glass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 248 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_iron_glass_stairsplus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 283 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_iron_stone.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 555 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_iron_stone_bricks.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 741 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_jungle_wood.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 362 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_junglestick.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 215 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_obsidian_glass_stairsplus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 209 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_plankstone.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 598 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_plankstone_2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 604 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_rope.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 517 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_split_stone_tile.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 734 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_split_stone_tile_top.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 752 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_stone_bricks.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 650 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_stone_tile.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 700 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_super_glow_glass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 249 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_super_glow_glass_stairsplus.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 288 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_sweeper.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 477 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_trap_glass.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 261 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_trap_stone.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 817 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 387 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 598 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile_center.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 545 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile_down.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 522 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile_flipped.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 554 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile_full.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 594 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile_left.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 507 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile_right.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 533 B | 
							
								
								
									
										
											BIN
										
									
								
								textures/moreblocks_wood_tile_up.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 533 B |