From 85aea72376f98a8fc17c3f109a4dd0d987c2b6eb Mon Sep 17 00:00:00 2001 From: Calinou Date: Thu, 11 Jul 2013 20:33:02 +0200 Subject: [PATCH] More Blocks --- LICENSE.txt | 13 + README.md | 2 - README.txt | 22 + _config.txt | 11 + aliases.lua | 183 ++++++++ circular_saw.lua | 365 +++++++++++++++ crafting.lua | 375 +++++++++++++++ depends.txt | 1 + init.lua | 358 +++++++++++++++ locale/es.txt | 52 +++ locale/fr.txt | 54 +++ redefinitions.lua | 287 ++++++++++++ stairsplus.lua | 434 ++++++++++++++++++ stairsplus/aliases.lua | 61 +++ stairsplus/microblocks.lua | 43 ++ stairsplus/panels.lua | 42 ++ stairsplus/slabs.lua | 127 +++++ stairsplus/stairs.lua | 248 ++++++++++ stairsplus_convert.lua | 133 ++++++ textures/moreblocks_cactus_brick.png | Bin 0 -> 735 bytes textures/moreblocks_cactus_checker.png | Bin 0 -> 826 bytes textures/moreblocks_circle_stone_bricks.png | Bin 0 -> 646 bytes textures/moreblocks_circular_saw_bottom.png | Bin 0 -> 699 bytes textures/moreblocks_circular_saw_side.png | Bin 0 -> 587 bytes textures/moreblocks_circular_saw_top.png | Bin 0 -> 667 bytes textures/moreblocks_clean_glass.png | Bin 0 -> 249 bytes textures/moreblocks_coal_checker.png | Bin 0 -> 902 bytes textures/moreblocks_coal_glass.png | Bin 0 -> 245 bytes textures/moreblocks_coal_glass_stairsplus.png | Bin 0 -> 278 bytes textures/moreblocks_coal_stone.png | Bin 0 -> 545 bytes textures/moreblocks_empty_bookshelf.png | Bin 0 -> 675 bytes textures/moreblocks_fence_jungle_wood.png | Bin 0 -> 392 bytes textures/moreblocks_fence_wood.png | Bin 0 -> 539 bytes textures/moreblocks_glass.png | Bin 0 -> 978 bytes textures/moreblocks_glass_stairsplus.png | Bin 0 -> 973 bytes textures/moreblocks_glow_glass.png | Bin 0 -> 265 bytes textures/moreblocks_glow_glass_stairsplus.png | Bin 0 -> 287 bytes textures/moreblocks_iron_checker.png | Bin 0 -> 884 bytes textures/moreblocks_iron_glass.png | Bin 0 -> 248 bytes textures/moreblocks_iron_glass_stairsplus.png | Bin 0 -> 283 bytes textures/moreblocks_iron_stone.png | Bin 0 -> 555 bytes textures/moreblocks_iron_stone_bricks.png | Bin 0 -> 741 bytes textures/moreblocks_jungle_wood.png | Bin 0 -> 362 bytes textures/moreblocks_junglestick.png | Bin 0 -> 215 bytes .../moreblocks_obsidian_glass_stairsplus.png | Bin 0 -> 209 bytes textures/moreblocks_plankstone.png | Bin 0 -> 598 bytes textures/moreblocks_plankstone_2.png | Bin 0 -> 604 bytes textures/moreblocks_rope.png | Bin 0 -> 517 bytes textures/moreblocks_split_stone_tile.png | Bin 0 -> 734 bytes textures/moreblocks_split_stone_tile_top.png | Bin 0 -> 752 bytes textures/moreblocks_stone_bricks.png | Bin 0 -> 650 bytes textures/moreblocks_stone_tile.png | Bin 0 -> 700 bytes textures/moreblocks_super_glow_glass.png | Bin 0 -> 249 bytes ...moreblocks_super_glow_glass_stairsplus.png | Bin 0 -> 288 bytes textures/moreblocks_sweeper.png | Bin 0 -> 477 bytes textures/moreblocks_trap_glass.png | Bin 0 -> 261 bytes textures/moreblocks_trap_stone.png | Bin 0 -> 817 bytes textures/moreblocks_wood.png | Bin 0 -> 387 bytes textures/moreblocks_wood_tile.png | Bin 0 -> 598 bytes textures/moreblocks_wood_tile_center.png | Bin 0 -> 545 bytes textures/moreblocks_wood_tile_down.png | Bin 0 -> 522 bytes textures/moreblocks_wood_tile_flipped.png | Bin 0 -> 554 bytes textures/moreblocks_wood_tile_full.png | Bin 0 -> 594 bytes textures/moreblocks_wood_tile_left.png | Bin 0 -> 507 bytes textures/moreblocks_wood_tile_right.png | Bin 0 -> 533 bytes textures/moreblocks_wood_tile_up.png | Bin 0 -> 533 bytes 66 files changed, 2809 insertions(+), 2 deletions(-) create mode 100644 LICENSE.txt delete mode 100644 README.md create mode 100644 README.txt create mode 100644 _config.txt create mode 100644 aliases.lua create mode 100644 circular_saw.lua create mode 100644 crafting.lua create mode 100644 depends.txt create mode 100644 init.lua create mode 100644 locale/es.txt create mode 100644 locale/fr.txt create mode 100644 redefinitions.lua create mode 100644 stairsplus.lua create mode 100644 stairsplus/aliases.lua create mode 100644 stairsplus/microblocks.lua create mode 100644 stairsplus/panels.lua create mode 100644 stairsplus/slabs.lua create mode 100644 stairsplus/stairs.lua create mode 100644 stairsplus_convert.lua create mode 100644 textures/moreblocks_cactus_brick.png create mode 100644 textures/moreblocks_cactus_checker.png create mode 100644 textures/moreblocks_circle_stone_bricks.png create mode 100644 textures/moreblocks_circular_saw_bottom.png create mode 100644 textures/moreblocks_circular_saw_side.png create mode 100644 textures/moreblocks_circular_saw_top.png create mode 100644 textures/moreblocks_clean_glass.png create mode 100644 textures/moreblocks_coal_checker.png create mode 100644 textures/moreblocks_coal_glass.png create mode 100644 textures/moreblocks_coal_glass_stairsplus.png create mode 100644 textures/moreblocks_coal_stone.png create mode 100644 textures/moreblocks_empty_bookshelf.png create mode 100644 textures/moreblocks_fence_jungle_wood.png create mode 100644 textures/moreblocks_fence_wood.png create mode 100644 textures/moreblocks_glass.png create mode 100644 textures/moreblocks_glass_stairsplus.png create mode 100644 textures/moreblocks_glow_glass.png create mode 100644 textures/moreblocks_glow_glass_stairsplus.png create mode 100644 textures/moreblocks_iron_checker.png create mode 100644 textures/moreblocks_iron_glass.png create mode 100644 textures/moreblocks_iron_glass_stairsplus.png create mode 100644 textures/moreblocks_iron_stone.png create mode 100644 textures/moreblocks_iron_stone_bricks.png create mode 100644 textures/moreblocks_jungle_wood.png create mode 100644 textures/moreblocks_junglestick.png create mode 100644 textures/moreblocks_obsidian_glass_stairsplus.png create mode 100644 textures/moreblocks_plankstone.png create mode 100644 textures/moreblocks_plankstone_2.png create mode 100644 textures/moreblocks_rope.png create mode 100644 textures/moreblocks_split_stone_tile.png create mode 100644 textures/moreblocks_split_stone_tile_top.png create mode 100644 textures/moreblocks_stone_bricks.png create mode 100644 textures/moreblocks_stone_tile.png create mode 100644 textures/moreblocks_super_glow_glass.png create mode 100644 textures/moreblocks_super_glow_glass_stairsplus.png create mode 100644 textures/moreblocks_sweeper.png create mode 100644 textures/moreblocks_trap_glass.png create mode 100644 textures/moreblocks_trap_stone.png create mode 100644 textures/moreblocks_wood.png create mode 100644 textures/moreblocks_wood_tile.png create mode 100644 textures/moreblocks_wood_tile_center.png create mode 100644 textures/moreblocks_wood_tile_down.png create mode 100644 textures/moreblocks_wood_tile_flipped.png create mode 100644 textures/moreblocks_wood_tile_full.png create mode 100644 textures/moreblocks_wood_tile_left.png create mode 100644 textures/moreblocks_wood_tile_right.png create mode 100644 textures/moreblocks_wood_tile_up.png diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..f42bd64 --- /dev/null +++ b/LICENSE.txt @@ -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. diff --git a/README.md b/README.md deleted file mode 100644 index f0f635d..0000000 --- a/README.md +++ /dev/null @@ -1,2 +0,0 @@ -moreblocks -========== diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..4c15581 --- /dev/null +++ b/README.txt @@ -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 diff --git a/_config.txt b/_config.txt new file mode 100644 index 0000000..b4395f4 --- /dev/null +++ b/_config.txt @@ -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 diff --git a/aliases.lua b/aliases.lua new file mode 100644 index 0000000..f13b443 --- /dev/null +++ b/aliases.lua @@ -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") diff --git a/circular_saw.lua b/circular_saw.lua new file mode 100644 index 0000000..1e385c9 --- /dev/null +++ b/circular_saw.lua @@ -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 + +}) diff --git a/crafting.lua b/crafting.lua new file mode 100644 index 0000000..f772409 --- /dev/null +++ b/crafting.lua @@ -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"}, + } +}) diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..562cf63 --- /dev/null +++ b/depends.txt @@ -0,0 +1 @@ +default diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..fb74721 --- /dev/null +++ b/init.lua @@ -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), +}) diff --git a/locale/es.txt b/locale/es.txt new file mode 100644 index 0000000..d11ba49 --- /dev/null +++ b/locale/es.txt @@ -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 diff --git a/locale/fr.txt b/locale/fr.txt new file mode 100644 index 0000000..e537a8c --- /dev/null +++ b/locale/fr.txt @@ -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 diff --git a/redefinitions.lua b/redefinitions.lua new file mode 100644 index 0000000..0456733 --- /dev/null +++ b/redefinitions.lua @@ -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(), +}) diff --git a/stairsplus.lua b/stairsplus.lua new file mode 100644 index 0000000..82822bf --- /dev/null +++ b/stairsplus.lua @@ -0,0 +1,434 @@ +-- Nodes will be called :{stair,slab,panel,micro}_ + +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) diff --git a/stairsplus/aliases.lua b/stairsplus/aliases.lua new file mode 100644 index 0000000..3fcd867 --- /dev/null +++ b/stairsplus/aliases.lua @@ -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") diff --git a/stairsplus/microblocks.lua b/stairsplus/microblocks.lua new file mode 100644 index 0000000..2a1943a --- /dev/null +++ b/stairsplus/microblocks.lua @@ -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 micro_ + +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 + diff --git a/stairsplus/panels.lua b/stairsplus/panels.lua new file mode 100644 index 0000000..8a00b7f --- /dev/null +++ b/stairsplus/panels.lua @@ -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 panel_ + +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 + diff --git a/stairsplus/slabs.lua b/stairsplus/slabs.lua new file mode 100644 index 0000000..458c8b9 --- /dev/null +++ b/stairsplus/slabs.lua @@ -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 slab_ + +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 + diff --git a/stairsplus/stairs.lua b/stairsplus/stairs.lua new file mode 100644 index 0000000..ae06e73 --- /dev/null +++ b/stairsplus/stairs.lua @@ -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 :stair_ + +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 + diff --git a/stairsplus_convert.lua b/stairsplus_convert.lua new file mode 100644 index 0000000..7d6b94b --- /dev/null +++ b/stairsplus_convert.lua @@ -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 diff --git a/textures/moreblocks_cactus_brick.png b/textures/moreblocks_cactus_brick.png new file mode 100644 index 0000000000000000000000000000000000000000..bdd4b929152236d9540647b4a90e0d9024978d92 GIT binary patch literal 735 zcmV<50wDc~P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3UvJBNw#e0vmp0`Y50W%ou#({{ib?+sQ-aG+7 zhl;DZDSIo859{xUBpTDyt0Gny#89u-F>koc;Vk^yH3`*PHOxSV8j>g7qwrK!Bo0~; z!89aFMUYtN{^=q=f9;$1p2Nc<78h^QJL^%cRmrjpfQyR@y!Sw0)ND5CbUG|8FL82w zg0x?>Y@+@3>J|^SAOGj`gcZQ{{a38+tOW-y6)lV?&Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3e+XWoP@mIgnHl^hY zQW!~D@j!%$WE;VYiP0F%jvi+8U*O`h+qUemEW7OFX{X&>ym<0xG?9xL5KPnrmXVB6 zx1>J?*jYxqmi61#!x!(L=lOi{Jnv89-o1N+y}dp8eBRjDm@Cm0hLJ#(Yp<^f!%#Ar z)NZ%k9>2{zHh`g>ogL@TpLck8CEz_Z$jFEx9ejizk>%j=fu~QO3d2ws zhP=WQ()gFDsVVh(-TwZ*R;wkD#`pLbbuL}HC69UFJw!*DLP-eP6HFbKpSmEO6`VTRg-J4hSYEC)H{- zgTcW1`Z|A{cKjHh)9?3%VJM0s*=&{{Fo7j}K`=c%Et}2S+uO6eyv(Oqz#$%zOeSq_ zZ;PTxp-|vCo{4!`V-@0*yIkjv%#2Tmvud#=5K5&!@I07*qoM6N<$ Eg2(5D&Hw-a literal 0 HcmV?d00001 diff --git a/textures/moreblocks_circle_stone_bricks.png b/textures/moreblocks_circle_stone_bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..03bbcbbdeb28053c2f933504c676f6710e0f9a6b GIT binary patch literal 646 zcmV;10(t$3P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyf3 z4ly*d8<27U00IU{L_t(I%Wad*QX4T4gg=EX+bdbxQvh?q1qsLSLLrqrwjmUU#Owvb zYW1@wRh}GVFBK|toSJEMPq)){rhMbv9r*tnb066DxO;Z;4b4}BXAl1Xe0|38%uL}bNJ)IT?`z7lf3g|-sAmz-b zi%S415n)!>XkEW8iI8$00S-u|iWFi_RCE~qIZ2$vTZ=(@%^hxdM@eyH2KI{>uS zXsxM?(fdYWV6;X={?TfTVK$rb^z<|y)>(`9o=Pc2h;d{PQo__V0N#6IN&sw!p*XUa zv2I)D#uOKKaCP+=5h2FN_VpEjxiQ6suImsHWVa*cOo)-q zW&^2f9Zf|vZ#Qz#*m)09V(MH&-+SIyi1DApR-5N%QcTFZm%Z=C gFCJs!f0a_=FIr9=rkkkTGXMYp07*qoM6N<$g0~pF2XskIMF-sj6B7^=DFFQS00077NklR>T^EZN~dQo-c({pR045 zL*Kui10VnZGh1eW%+>;sjsRE?5fK0e0LVb$-9e;t(+*|TI7*3^O+9#6N-FikU=t||-1cV%7~CKGrPf_%knQW66V4@#Ce_3m#ltKvK_s74V7K=r%*ZcPQnCgbOaV1ON z^}-+kz>FXW;y89)cez{|W3<+1XJ?DWB6KAY0O@C2NhI>3fKUwddcFC4E`+$axQOHU z>gsAd9=F@=yfy^DHblZXKYi6~#Y>hKWljEmUDubFm$TVyycvOI|0qO1Yw z2rHPmsLH^VmYvCDVy(TqyNl!47^9R*)3nuUS#|RlO(ylz0I;LNs|3N6@)>*+twvJ=cljVA9mPsuM=t8nNFvjPDg8fb92MYgTWw8 z(=Q(rF!wvb%cgRU-gZGkDW^8}&tolw7!HT`_xDj00T>JhLWt2}1fr!bS2~lv=ZBsI zGk{MgE>7OGBX`(J0DL&^>#PR4I~sb@_k3x$O)K&U9C`}C4@Fi hu6h8zrvQ|d`3FtDI(1Ut6`lY9002ovPDHLkV1n)lHG=>E literal 0 HcmV?d00001 diff --git a/textures/moreblocks_circular_saw_side.png b/textures/moreblocks_circular_saw_side.png new file mode 100644 index 0000000000000000000000000000000000000000..a5570950bb38a43373f547ca00ccc7d3a59552e1 GIT binary patch literal 587 zcmV-R0<`^!P)pF2XskIMF-sj6B7?9yfVIe0005%NklHY&5XIkkXT9t7 z1<*->D2hN-p|~P-np8CK|I%MWPm#h!L=&OA1TNux-Vd*Dhr$JQru)r%qtVQxuIuoU z;uj5EUS87Y>rba|oUIvv5E{cGxPRyYT)aIYLP!${0K{>6eD(~$7efxe_N)Zv~T#WI@-A-$rbN+JufyPXdYZkV(aZLk2 z1kAizt(cjaMMNpJ-|ug4Z(Yqq0N4&kCaQc0sI&k?)OB5qv8pPqbxH{UGy8EO03{Pu ztX1(zh13HmrCeQI#Te_l77?v=2%+n`-E$A1F;=U>A`-^f)I21qs%pJnTWg7^lu}A* znx^mj^8UOv6jE$zrmr`vcS|P#j@enB|9$^>0B~`-n9;`xN)xc%d2VWTwrux9S~&MV zp~nc|WYNxavcSQQuUfM|Bn~NVc7wC}5b_Z7>}ae8uzm6~wpN2^vl~K+l{MBGh6qGj z!>!@7r3*2Kn9r7O?#!w)Y>nk|%!}3##2F3X=dZs$O=&s;*zP<8AJ1O{@F@$ZJUnxy zbl)F9dh>f|ExSfT#IOS341;L<=P<;{Sq;gR(j3#Yc>*xTG#@|!SXJ{j0Du6nMgxdx Z`UjaO2Ik7e2+#lk002ovPDHLkV1mv50!#n^ literal 0 HcmV?d00001 diff --git a/textures/moreblocks_circular_saw_top.png b/textures/moreblocks_circular_saw_top.png new file mode 100644 index 0000000000000000000000000000000000000000..cec4aaab9869b2a90437637e3333f02d96bd262f GIT binary patch literal 667 zcmV;M0%ZM(P)VGd000McNliru-2)R74jXO$-n#$*0w_sD zK~y-)ZIew-8$l3-znbZuUqd7i!a>R+$pR@GPQeK{8VBGCoF)>RWRWPbLokH#^mMyt zrm`4gSs`y#QopWx^{Ps)E-w^7n4qeRs({cBBLF5%03{JYWMb-;Z%PaAPHP(1b5I#V zOtCiMdA;HLeFMP!sOE5%5#va1haLCZvc)W)0wXC!W^kcLrKijdBm&!NBtp|gy3ixr z(yPXE{}eC)d2Xl*iw+wQi;jx(Jt6b}xGqu`hAK0l5lJ)jC3j{N86&QXxG1Ne>mo8nGNYIx%c;t8Yv9(%QE3{_-Q6AM=jSwy2bdJ_(wU)X z2aHI9>pDm*3h1z*DoW6v9kd5Aw4FoJY?{~@5lJvM9dRM03zOrB#mB%tR_g&6=)wp( z@yfiwrXxmG={BA+GqgcLM>-z~ao8nzYCO43xBHP&=Ry~zKc?}@>CpiSlzF5o4FBTe zS-p#$?;*8R6)aZ{Q)VgiqnhV7Fsmy5hl5$Y7sJ|ZIIMG?*8$T7&tlb56_#}uX?=W^ zVEO2Faa~vtVXs9;KNJ*vUkRlBKD5B*edm*=Py0j8Xve&`04-v002ovPDHLkV1jvv BBrE^` literal 0 HcmV?d00001 diff --git a/textures/moreblocks_clean_glass.png b/textures/moreblocks_clean_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..906a3c1af0b9719154251ba5770ed7eb0e71a6b1 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^O7g zlo&W?rp~GXif|TqL>4nJa0`JjyPv#}l(B76cywvy7WEC;+@4v1FQO;!`BQVma66x)%fZZz?QN5K zqWUB6s-LI~|D0ueJS-tEZ1Z=~4yK@63uMHW%0#F=yY`odm0`xR4c8uUGhS@aP&l?s qNWgcAa@2}7n*R@4eA#p@J6=>OP%!7o%q>7iFnGH9xvXPx#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3@~8FWQhbVF}# zZDnqB07G(RVRU6=Aa`kWXdp*PO;A^X4i^9b0`o~kK~y-)J(Igi^jrW%SB@u{t082@ zh<8C49T7pM5o`oSA4Rb6O{{za8=t_^Qe`SZ3-K~3#JOLHnu*6u=J*#Mzt!$Gti|5O z+1c4|tyZH@DBw5_=jZ1LArL|kMG=RGhuF4_X_|b0e{*?xiEZ2TdOZN-@T5`rM$^74{Kqd`8O$8}xy_V#cbhkCt^ zVHgN0B~nV_I7VwtDwX=n@9%F+)5NkYwAMsX#BeyITCMW)^TXuiBvNaQ=Xt!ny&2PfGaL>PLI`}{$MZatQXCu{u(r0w;^HD7 zA0K2g8H&XsT5Iz8JgruX)zwu-qYU69fS~6t5rIk4q+H_cXx-Fnwp~7Z1Vg2%gxOVgTVkH1VIomGc$wM8r!x>l7w6? zhwuAXmWAuOEG#S_=H}+e<#N<&H7b<~)6>&9j)PK)ZnukRnmjx_kR%DSv$G6`L&7iw zpxtgGlO&-~D3HlyxWB*W>+1_CCCkgp3{p`uaMe*Xt2Q5pf*< zO?qo35-rO@DTS1hFbo-uMqFK85r!dQ7$T+Q^YatW^9X`~g@pyQ))b3H c^7%af0TZix2Sj_%X8-^I07*qoM6N<$f^1xs(*OVf literal 0 HcmV?d00001 diff --git a/textures/moreblocks_coal_glass.png b/textures/moreblocks_coal_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..d7c830d471e4d2d45aabf5b23d0bfd5a18e6576b GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ60P$34;^W({BQWBuiW)N}Tg^b5rw57@Uhz6H8K46v{J8 zG8EiBeFMT9`NV;Wl001;Lo7}w=VWF5I^V#0DIDQivKp;cnD+s>WyTNLBu`9qOuVopluAEu6{1-oD!MPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyl9 z4Gt5zD|Jf%00E&%L_t(I%XN}VuBt!~hQB6EMo$VmDQ zOn2~{+?w^H>VK80>)I)$h@uF9aU6NS-#F(O#}NQ)EsMp1Y5AU5L{LhhwMImEJRT%T z!ufm#Ktw3ZGBjzezs_p2**JhSO#_4Zd>+uFC}Oo*0nl|F0Da#F#_>3gq-jc?=Q!uW z5NmDtpi)9FOpw!s^% zHE|S0+-|o&3;?v&f%fb50$?_q0bq=wD2h)C%jFWSbzmSOfmKyiVYo3SfOK7lQi`~3 z+mN|227sn%02qdWBuV)B`60`)(Ch(3gxI5ctpG()gt(>){4ny>I)LYKosI00000NkvXXu0mjfNqqC< literal 0 HcmV?d00001 diff --git a/textures/moreblocks_empty_bookshelf.png b/textures/moreblocks_empty_bookshelf.png new file mode 100644 index 0000000000000000000000000000000000000000..56fc713431c0bfc10e50377d7e450b9eb8dc2daf GIT binary patch literal 675 zcmV;U0$lxxP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3iZBcG-!rS+fycEy^ z5%{{q=ov}82N7h&id}4hg3D(uk@e}T)Q)NEfORo#TMET+*>ZSKR)Xv-4AAwffmN61zuoFzyC) zSM|{FH{{C{ze$mKqq`dcS+ydxkf$kml>%UgYKK@i8+={?P&NUXFP68|=SN5VSsT66 zGkS<|763(yIGYiS5NM;YvLW|@rh$=$wuXTKJLt$07g5xbSi#+i1-7Wm7Z?0@4&J=` z%HiRCvh3!*XZ#!2Igm2BhjU}HVu2mTou5(YM@1AUvJ7kDTQbx69JyJ1>CD*5Ow`+zSjQ4-n6fpYNQUoFeN6jIez~Z^9+rbA71rbr+s|l~VZjQGa4?%8QL70(Y)*K0-AbW|YuPgfBL)%k?u3{JlP3!pdyk!B++;r943JviO_frUNF11_lN-zrW6Q zjE<66o@-Dlq4(q4YxBczpUX>pdFm?pZvVd{0T1&($CAV&llmLP} z`~L?(py1=fY#!hG|B7dl(vpq{Bqst@1xytItGsPg_}g_&VnFA!O|jGE9Cx=H4${h`hG~~Y-G)Ow>G(@tQGgy`+Ha7b!Z_<{Ol$4OT^X19E#q1)63BOz0CzJ@} zENfEQ`0z|DTWw`v5>G?L!&jHLYn;1P_E7QhHg0}HlQT}Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW1s?%42*8A&2LJ#8tw}^dR5;7c zkw0(KP!vax?dRBmkQAG!NGT}lz<>%W5)uPak&qA)Ux6JlF*7i+AoXjoAXZoyU;_!1 zg|ed{k>I2v#f}@l=YNl(RosSV>cXAxJ@?+bkdv>#bqen>=~C zed1xyAKlYoln_QUl*)Pee#a01zbBd%D@QmAfn2)n-G@&&ZXL&U5yGx6Snr-eTP0-{ zl0=dhkMHUqgCTk9(Dns&x51a*H?Cj1O1wWKj%TDG;G^NX@Vr?v9WuMaq=CC@R3$?-Odape6*CW%BxC|1g6oFqpq^voqG6)i#~g3p5*N zdD|Nw06e=uTPE5BjOAi=q@k5ylqJStp8z=LT|t+MvQ(gprGVR88zfQ@#WN;=`f@YJ&>4Qa#d+Vy5DkK#!9ThMz@1w+ zj_K(K5%IpnEK;1&6xSZ1Gs%Pdo5ys|0gHNe`nyMxRF#EbPaoA?0Y)LN#az#u-uT1} d7Ipt0^%oDf&+9E}8chHI002ovPDHLkV1kTAB|mLR^7@ z%a)v6w&dK(WhYlGJF{xV*~N>mELwDR$>J+(*WTK?_3n-x_jc{Nf8fC5BS#(|JNER< znHLu?zPf(>&7C{%?%)6L@Zra&Pd~kW{q^I=pI^WJ{{H>fj~{=2{rdao&%b~F{sRpk z1*0J_m_r~WI*bSCKE{$DzhDN3XE)M7oFs2|7lsa2Sq~tGv%n*=n1O*?2!t6g-L3lr z6l5>)^mS#w&CM^YBGzz7?t<8 literal 0 HcmV?d00001 diff --git a/textures/moreblocks_glass_stairsplus.png b/textures/moreblocks_glass_stairsplus.png new file mode 100644 index 0000000000000000000000000000000000000000..d222b62e85e9ac69d1e57ce984f83126523d3714 GIT binary patch literal 973 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4nEnR%gt#tSa&p;{b1RpfT(RuT zsugD!FTS#9(bXl3udH2rYwOm#J9gaLwd?+Y1CNg!d3@~H(=%sYT)g<|`t>(=?!3Ey z|HH$FAD=$`^!oMJj~{=2{rda+_g_DL{Q33k@1H;a{{8z8v}hEJhQMGB0md&g=L6lx zSQ6wH%;50sMjD8d?NMQuIzW2S-9C5 zUM@2H02K1{ba4!kxLn)M$i<+*!Ti0!b;95OYbS2v>SntX@lx^yld6E;s~Wbmyt|av z|7_a5)UDf5c*C3ub+eu7(*z6j!}Qj?{B_~EKBqOqGjZ0$m&p?wfrc`8y85}Sb4q9e E00Q5L!vFvP literal 0 HcmV?d00001 diff --git a/textures/moreblocks_glow_glass.png b/textures/moreblocks_glow_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..84991fabcb5d219302cdd50a79eb331cf751e119 GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgg)9%e3m_DAhHyMaQIC9V-A&iT2y zsd*&~&PAz-C8;S2<(VZJ3hti10pX2&;y^_yo-U3d7N?W{{9p0Ho>}aG#`WVJ-h8YA zOF8=E)Y!ZjH*x>7e}C-dtpEDI{tG{4t%*CdN^Ex9fB)={JC=O6H$B8J*fC|6Q=v}4 zb%vlMhVm;mdJCOQlw3tkC)?#Nnz%xzTR)qb;iZ1+Z0B1C-vRAo@O1TaS?83{1OVV( BR}cUI literal 0 HcmV?d00001 diff --git a/textures/moreblocks_glow_glass_stairsplus.png b/textures/moreblocks_glow_glass_stairsplus.png new file mode 100644 index 0000000000000000000000000000000000000000..235179c14359becd0cc5a0213195045ffeb775d9 GIT binary patch literal 287 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)GYdC^y!Pu=hk!zoC9V-A&iT2ysd*&~&PAz-C8;S2 z<(VZJ3hti10pX2&;y^|1o-U3d7N?g^_U3C);Bm=(tXOhbR(01G7Pr01$4=SA#| zz1_M-_{A9)g=`N)=3gwGt;Q9FUMhu~+5*1%?NHlm-FYT<&D{HJ25Tqg*S8g>Np5;* zJ6mRr^@^KH#}{mO)2XzKEY3SBb9~n6Po}SgU&OsKdT94+RYaITPN>_BN7lcjy;~+d ZW42?i&wJrlD+6>AgQu&X%Q~loCIIJcWR(B_ literal 0 HcmV?d00001 diff --git a/textures/moreblocks_iron_checker.png b/textures/moreblocks_iron_checker.png new file mode 100644 index 0000000000000000000000000000000000000000..f852884e22ab90c4dbebbc81783d1938f7f80c41 GIT binary patch literal 884 zcmV-)1B?8LP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW30qPbDbP< zdwaX-_xltI1suoW{QMj#B>-U<(r7fu<#K46#%i_V^74{wHp_fI2SB#lZECgJkNDqc z+cvgslS-w~G>vYzORv|X-EIRQgdmkl5yvrGNs=%gkI{7<*L8{G7|-)qE|=uh(IcT8)E)1LpHNnx-8GX^UySn*Vk8+Qk2VOf*@eES^?mB9#Sbqp-`Y&t@85nLJ$Nf zr6`q3Xqtvn3fFZR4u^ERT`H9dnM{T#iZD$R@%;R}iJ}O@FpyGme}9kXd7PY_FdB`x zxVXSHO@bgm2tlXQq1WrtY&JPQK1P0heG!Hs>-CzCj}L?poSvRCnM@cA1|&(s=jSJe zVUQ#V!{LxjCd2jh_0Rv9ril;&r4+VpBZL5;P$+P8bcB==(=>5i7sD|AfVWyLDwPWI zcTXwh-)SBm9#}4yESF29lze}Gv$M0qVzHo7sgNWIySuwsmc@Tyr+mtXn(>_g0000< KMNUMnLSTXn|AjCB literal 0 HcmV?d00001 diff --git a/textures/moreblocks_iron_glass.png b/textures/moreblocks_iron_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5cd1e7752056d781f71eb90014b4f1605227d4 GIT binary patch literal 248 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW zg+Z8+Vb&Z8pdfpRr>`sfZ60P$Nj?F_-Nry6$r9Iy66gHf+|;}h2Ir#G#FEq$h4Rdj z3TaA0vwuM+ugfB8nlBd%RaiF4RPZ!4!i_=RdpXOyy(n`Srs;g{*5qYVjwCG=xq2?2>3!|<-QUhxPF?uS{8$Ft z?BZ$3-BQiBO&^^)ec1H8+nmBXJ9DxcI}}Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyl9 z4Gl0bVORP900FB>L_t(I%Vm>Gj;k;bMUO3yO!z2<6~GFz&}=Sam?erDgRn`WOoDsR zvPItW1YxPF&b_xR&gXLwLLj9CVB0o6pAR7fLI?nO?-OF!b5EyJN&{dVM^t=7aWUdPM6LT~ec!Vz tOS+R%qVD&5njBMzOB5f>zi(hq_X~K^71_R@tpET3002ovPDHLkV1oN&>YxAs literal 0 HcmV?d00001 diff --git a/textures/moreblocks_iron_stone_bricks.png b/textures/moreblocks_iron_stone_bricks.png new file mode 100644 index 0000000000000000000000000000000000000000..1b0ed5ce744d78fe6b364eeabd2fe3d7e4cfd9fb GIT binary patch literal 741 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyf3 z3@s!}UkN1u00L!6L_t(I%T<$0Z_`i^g}-}i5@aWF^909b5hRu=RgqX!EKrg77r-Au z2=?6|fha5Bryx~TSrrP~Ql(YwJZvXvVz*7_UI!_W07ByV9xJX3 zz`N~_EJ?)c+qY^Aq9NUGkHKifpXmi?4ZtLhu?sd*2>fmbAp}RQWBR>-y}fT38bx8b z$c;<}rBcdDDf&^AqDsktz+0;sF#-q_(H}ZCVK{J=j&#tS8;}}$0G#*b70*ujc zh}NLcX#o&MsaThnQ?i*1*=!cmv|z^2&gW-9HpYwR&lYv zfWmd}@agjx=0>Yk%ZyJ?>GT6?Ge4V}$o0WeMT8qN8K$8mDy1N1`NB#HS4 X!sHfNhu^{p00000NkvXXu0mjf@Rd2@ literal 0 HcmV?d00001 diff --git a/textures/moreblocks_jungle_wood.png b/textures/moreblocks_jungle_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..ebc64858d592ef7a88f3a7725cdfd24ea590ee0e GIT binary patch literal 362 zcmV-w0hRuVP)Px#32;bRa{vGi!vFvd!vV){sAK>D00(qQO+^RX1sV?tDaJr5X8-^I{7FPXR4C7N zQo(8hK@5FcqX!Q~krm2<%R&V~aK(eaQ1I$^3jK~Ey$OX{=Cl;Lh_Z({%+Tr~n1&O;C}KB~Rm8OcDX;_quFEFN=xRR2x8Z2DHk?*7<&~D_wEx>}i5( zBvV#G&Em(v2NoKXt0BXsLvfOnEGr1%&_{6&ZnOw}C?8o-U3d7N?UF zB#IQyyM3>p*ZZzsVt#AL+3)x2oCK3q+&@oy%`fR`#4tT=5zm3;GZ!$nm^?OZkT`3> zs}N=!#_VyiCy`<0tUw+GcVlKC5bkm8dv=hKp@`9^(s+U81fUfRp00i_>zopr01(_k Aa{vGU literal 0 HcmV?d00001 diff --git a/textures/moreblocks_obsidian_glass_stairsplus.png b/textures/moreblocks_obsidian_glass_stairsplus.png new file mode 100644 index 0000000000000000000000000000000000000000..eb758f173735252afc2790fbf11b6d51bd1a9644 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP)i^UV7-m7-QmtcR$)c)Pu-f2rYk>jaf(YxS|AXR!@#|8#sO7+Zt1RA xhe`#Zskc73C<`B~kh`$NXL`v2kIXVQ2AvOT*3O>uzW{Aw@O1TaS?83{1OSL$KP~_O literal 0 HcmV?d00001 diff --git a/textures/moreblocks_plankstone.png b/textures/moreblocks_plankstone.png new file mode 100644 index 0000000000000000000000000000000000000000..ac866b8c993812080071d9495ac3729c020437d1 GIT binary patch literal 598 zcmV-c0;&CpP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyl9 z4G}cad(OT900GuXL_t(I%YBkRZ__{+ho6hj_SsGji79C$5J`tn6{HNnj8usM1~yg( zz6xK255Q+Yl~|CNKpiTPN|azDRFpdS;>1ag!HwIHHoxWWJ>C7@Klg}dPns4$2mye# zmZb%Nxs~kPZg5qubk<@SD#_i4FGRZ21EXrO#b97 zPfk!OAj=FEOQ=+J;qiXEdbrnVZyH!@@s%QqLaen_8<{aoXAAB%HJ|}FNzzRN-*pg( zDmy?J1njh0oSiyrk0xdeKoB;ny;NR}CVeCrufvT27V}F}DTE+11}xZ% z8loToz~lu7kGgD=^n8W+^%;{F)nTsOvXzUqoWl(UZ(j7bW_bJVBd$}!_neB4df;O6 zf>620qrs3MY-|i_rF!6Ur}wmqGh@o?5G3CYkzWQWklsidfYy3#KOT>{r8Vb29OQ$J z-T>tNhhzG^CIDySj5tXyD~cije#Qxt=>oYz^lBUZUb7mU$qTxz7HPT;Q51zJuT~md zhv1;t9mlf>pcEMV*EW-jz3v#d1z82Aye9x&si{qHTSw<9=aZP}D{e0hU`^MAX kBj&|y?M!*Kl9$<%f9LMP1+z^R@Bjb+07*qoM6N<$f`_pI?EnA( literal 0 HcmV?d00001 diff --git a/textures/moreblocks_plankstone_2.png b/textures/moreblocks_plankstone_2.png new file mode 100644 index 0000000000000000000000000000000000000000..52656b003f1cae7f91c8a581620f3564844f0f72 GIT binary patch literal 604 zcmV-i0;BzjP)q!6r0qIFZ zK~y-)b(1@96G0S(zwypKytZdM@RAV8R2GE7O{fti%738YcTrO!(IC-5Ljw|#zy*$_ zNGK~5BQmR1=dUfZXA5L*QUHcm8H0XzuL9q7VAX#s47YurgS@!Z^}xOj z6Lt}J4dOT^2m&UP3HtUH3q(rMZo0^`(<5?|(hNIWZTz_WUCm%J;n!%yv?u`Zd>??! z7)()CEo>5+VTW;|>x7;kkpKCLDayL4FmUTrJbQZIx=sV%bL#!Jn=Ym(2?Lkc=Yzer z){g1tICXFHl0?}4T37rcNkt}?BmWR!@wnq zBBCg&<*KzNj$=NLJ~8NbIfUG#NK=$(tr0??lmb90MV4g*UV~m&aTp3Yoh=YTkY$D} ztCZGiRf1XCJ8ADG8Yi0Eq%?fbK`BKXcL`e|VHjeqrPEO~L`Cd%72`zn_T$ez*^3uv q$97)M_S6SZ%$D>X+&lQy0saHDWX{5if~8jg0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt- z3n>{-5Zq}1000?uMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0004CNklZfrW!0(Y_%dtq>~pM1SzH9;H2W>GdR2W0zN|@!UyQ!;^JOA zdFvn=sM?!J+FXu9K}7y3@f$x5zw>=?4#3gsfl7b9@^ONAvl7o-Uy&djsr2PI&=*A1 zs{y;uiii!kd+^a~J76+H|3$>snMmzNp9>IprUKyY224^2>Rf=&+bKkeo50gYTp>up zZ}}J)UAV7e`~+b;L~dWAX06BibwcS>gFep(FrK-2k|1~5LD*8!xUv}lWK5Z?hR0$h z=-7mMm6%qrv9_br;`St^3R3(E*~Dm3Xlv+N4tj9${^TRJio43s(d5k}0l=&&Q|tt; zE+AJ?sC*$&+Ry+1GZ7V}$QTMR^aM<#0xTbjPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn) z4iX9(QYIV#0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~0006t zNklGq7TCc(!E?f6>tj{!Xe=q%teB z#Ov#8o~8+73{_Pjr9^AZvMhM-0ZKiDfcKslBQZwmx<(Jfz{|@E-g~O5V&8ZE0_L1q z*R=rL-QCf39oAYtK0c5sCAMt?DCl)vb3UH|Fvf6mbAyx;=NtgmT8`sDYmKg|iWno? zwqcAR##nx~*0L-M<2Z6Uoya*OgrI2}a?Xt7h*V0IB7oMKrfHB;avTRrDbD9JDJ6su zgb)xy;Jv@RODUnX##&pb=A4mI5@Y1rzkAH@T5>-{9o2Fr!CdP5Z7{mAXH!((( zQbkG#0b>k(-(#(1nkG_8%=3&6A@KS6N#FN4=Wx!kt}8+a_I>9#jxs#&{lz-1nWpJ- z-nI>`HK)^wx~|KVQ%YRtb7f(z#e0vGl9UoTXS6Yf=jUgts$yMNLI^0OP)cEpDZ!fO zxkyq;s49%BsCGy#xvE?NQFwq+d0;zr;1=#&z5U89s@7zQ36 zABizyjQP*9zmif)b7kx%fhy8IOp)*b9;MR_TuU3>5>g&OhL8Ql5+;2u4{x4NGbXG`N28I z@9!^lU1N-)>pGgIK`+a~+uIv$+w$=6K;QSw^Gw^e|E=@B@5SD$Q&m;*4}ltHLbT;y Q6951J07*qoM6N<$f?BOa00000 literal 0 HcmV?d00001 diff --git a/textures/moreblocks_split_stone_tile_top.png b/textures/moreblocks_split_stone_tile_top.png new file mode 100644 index 0000000000000000000000000000000000000000..76e39dfb7c1c0f1bff033677cb1de2eec6083582 GIT binary patch literal 752 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyn) z5ECu4`z%ZV0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~0006< zNklxq61DR4{Sr&jDy(~+brrEn+Utc4oq^c?athH?0hEfWt zwI;^MJkO+*h%utICg)69mU!bl-3ODSoZ zhLjRQ2to)5A@JT`{-u;qN@1feaz+vwd}S#V`y27-NVr z?zvlQS(b&mt`R~ojw3Nf;KF<91fh%XQY%oJUm=v8e^!c ziVyPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iyf3 z4l@csOz&F&00Ih0L_t(I%T<%jPa825#D6BMP1fGpX>LK4N>$ECAle&;{{QE4EDU~g6t%7S ze))}?#R6+BUE5NQ$23n*09b25sZ^*G-g}&L0Q_1kC~j|mGy6EB>v}?n2!ftWIKXc< zIOkA#uasi7UZYU_UH_pF_DrgZ(P)%p10q6*abP`C3X~$m$bSgizNe_h6$&-51L&&a zcs|E_KRg0pvJVGLr&9`}D{7>{ z9vMt}$Rm7x*;1AzWm%#t4G4R{)``GaOY!;SWav8uMGa~Bd3}wkG#3}=JUl)E3?$mr zNx`8o#K^Yq-}Py#u;g)h@0ri%v|R_X=Wey)F)OG| z@?^PMCk3@JY2Heu*k+ax!eH#D%VS=)+jki-Mk68=&N;mIgb)cK4u=QCw&iZQB8154 z=~oaTgn$6PX()=(h%ed5r=}r=QE+a`;^u}!&}yUUyN*o=)H#u}*$j1lb|z(64iSEf k!w(O!ee(lkFgLc5fAzW#hp;TLg#Z8m07*qoM6N<$f(i5%y#N3J literal 0 HcmV?d00001 diff --git a/textures/moreblocks_stone_tile.png b/textures/moreblocks_stone_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..20b070e6faea7c81d26ecdb092c9f25e82282521 GIT binary patch literal 700 zcmV;t0z>_YP)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW3$(y`0I2mC zBOwG*N~Dx%ng%`3GoPQIgb*;sux%Uv0!u0U{{B|LG)-KuSDbVF{QMwu&Uo(uD!pkM zhG77}TFc>ZKuSs5wg5Qi*!LZ+HQE?MN(t{h)>=|Z^=9WB>$pJ#*=YGG_Gz~fDdhltfX&SWmo|F>PG~t{B;BYw9$DF2#QVQF)(f2*xdz4b7lqjX3 zt+j01hB1cA)vC`o2eN&GC5TbULBiwnZt$&pFq%j4={pB&9^(_w}|X zVBdFy5IE=X-qUp*LWrtFKH~@>a5|j;7{?LsJ?pySy|2-|yu8%8`1ttv`!}q$mFk?M zlv4c*A&^pXKA&mZmdoWr(==FXxn8eyU58%RmGAFw#&P8B?Ty>*#^do|9LN90dD}Le ibL5N)aZ$4Imr5ycnYHVJNo4Eh| zpZ{Ne`>v(`J3lem=_iJE`yT%Pe{Ka&aiF3OPZ!4!i_=RdU*v2s;Bl!wsLOg#Q)h?6Tql7!pZ~1dGGmGE zv-P#^v+oE_nCPgfa4;#=H}XxVj-Q*?kLc9dPdsPeePt1}eOKMHbLk0TGhaND?b{fB z)Ww+NMuPON5T5$vDRRYkXY7qXaYAhR#N$>;J__Fr{kNQ!nR@QlvA)U&oKfE2@{;|d cr#)i~JXrhPb(`oWpqm&xUHx3vIVCg!0K!;lQ2+n{ literal 0 HcmV?d00001 diff --git a/textures/moreblocks_sweeper.png b/textures/moreblocks_sweeper.png new file mode 100644 index 0000000000000000000000000000000000000000..e901ef0cb5b57e4eb00831166a833a27ca09e0eb GIT binary patch literal 477 zcmV<30V4j1P)Px#24YJ`L;yknA^-`QWtw~d000SaNLh0L01m_e01m_fl`9S#00007bV*G`2ipt- z5Hu-<*33u%00CV|L_t(I%gvI{N&-<7hrfH(nHZfB6VV_H!c8qAXcgkJrwDt5h{9D5 zP!Mip!IxbQFQ=yX>BoLufJfWzY* z1yCqvRX&#?pUaGTgMNbTy#xTEkOUxXX#lKkm^|7~Q@vsqzPLS5njWBBs_|KAk11k-0xnL3;)*^6jh?8aMa;e}K=T&%M Til*yj00000NkvXXu0mjf=7PK< literal 0 HcmV?d00001 diff --git a/textures/moreblocks_trap_glass.png b/textures/moreblocks_trap_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d1c268328654606f9a5c1ac449a7d0379bc1fa GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^O7g zlo&W?rp~GXif|TqL>4nJa0`Jjnu<@WmUOkqk9zq9i*-|}oZyFVSFd`DTew48d_`D~7@ z3W%F0@65MaTt+5E^8B32#;XGC?2*TQf4BdWzCdgS$TVTqjSYfq%=rxKBo3$_Z;?CY z-e+@6k~xC+pjgL`MO^c>+0~>vPi^|K$&6wD5x*x}vf5&R4r1_h^>bP0l+XkKnr2cC literal 0 HcmV?d00001 diff --git a/textures/moreblocks_trap_stone.png b/textures/moreblocks_trap_stone.png new file mode 100644 index 0000000000000000000000000000000000000000..05a253145800da25e85b4c0b78fee2e7a664d1e8 GIT binary patch literal 817 zcmV-11J3-3P)Px#32;bRa{vGf6951U69E94oEQKA00(qQO+^RW39*0H1Gx%YbR^YtD2487%0s*N?qO#EPM1Azcx$p+XSe1iXf<|lvqb}^mi zy_pLs^#7G~I5ulv3AqWm%?_9v&WIjC;MFBuSQK zWm%@{2x^B0H7!e06>;yM@IydWuvNUx7&Ri5JF&#Ip>^nRaJ!$s;ZV{ zIhjm$yPaWRG#b6zY^+LNraQ>pD$S+qUyO@AZ0Vn#OTFo8=&mIRL=- z{kyxn^Ye4h^ZNb%X0v&EdNNIubDkv0YPE7*x2h`3QsC(+W$ZnrbTAk|2q~qCqL`-X zd7i4OyWP$-&GmYXF@Al0JsOtq>sR;wURM-lKA%sg(=ZJ4JXaJ2LP!Wnl0?%qUDpl6 za2)6SVuf5+^Zj-Z1Scma7~|*XXCZ`P7}0LSOu0L4}u`i^YM5r%kpS6ilQh8f+&h?+g`8N!{KnbTq=rkb#*0466*I` zZ_J%er><*Bk_^KD0AP%L-*+76=H|vQ49l`6lga1L1kLB0IR5_WQ|Iz>@7J$rHp@>> v>1xHBMtuB$mto{MZN^sH?L(^tOjG#}wcu^<`6p)U00000NkvXXu0mjfow;}E literal 0 HcmV?d00001 diff --git a/textures/moreblocks_wood.png b/textures/moreblocks_wood.png new file mode 100644 index 0000000000000000000000000000000000000000..66f2b7228161d6681ab3da2e94a7c2931475d3de GIT binary patch literal 387 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85sBugD~Uq{1qucLG}_)Usv`!%rbmN;uESQ_5)2}_H=O!(Kufk zWSh<8C{Wuz+3DzNem<730|_z*Ff>8EDPVddq?jc zV$pGHPc5&#`sUp1esklKze@Y0&(;5DkXxZ{)?6Q4&eK9$| z_Tt}z9=npJ{t<4n3A(Jg&~KB8&;cjropvcZO4dYsp4_xZfUounSHMFz<~i#a`(0ms z+g$yB<*7Gu6HI6AuwNN5H8N!Nnn{bgQk(M%E^B6+ob9sNm9Wfgu2s#pn$|rHM{M6~ e+?mZ@z$o;%?DXGEPj_GlF?hQAxvXVGd000McNliru-2w^_It?&47vTT^0pm$T zK~y-)eUrOx6G0e-zwyp^_F|hViWNg)i^dTVija5!E)^vOqT`u(4|oJbhlE5GB?X0P zh{S^8L|%J#XFcAbSYP5e$*E?F|I9h(KO^40e(C`PHN5v!-U9-+sOabg*P&#vb(fKX zNBaqxakOKJod+n@U@|TF{VxOH-K!x0XQOj&LZ(-iih!^wG1lRQBhnHY0)*iCQExqX zIOy#X0B9|VLxo?IAQZmxn8IPLqrcw)Isp7iC%Xhq=@Hc&lY-1XQBxw%M(0FH zdnc$BlBmJMy<~kig@Zs5$B>Q<@?M9@OS4fFDiDG{;~BXv>LT5=aXjp`ay+R%idbd_|1uX+&EkOvVGd000McNliru-2xgBBmyN82nPTF0j^0z zK~y-)eUrV56Hye!e=qZ9=gXu}+zkW;Qzdb?NF#!+V6ojcTiE#j_*Ynotyqax7J{w1 zZlMV*8wdy@^W6E!Oy*f6FPk?RJEj^)XOkIqh}X|gECthfypxnBs*xN(ZWpA9YD|L8Kgp$GKfkzQJm~V` z?T?kTb%NHKN^3w+E-M}lBZ9EKQ6-)}8R~6gO6_pxAVMW2?NE{z4zAlG{yJk(EZN zjL4JJ^X2DB3|x;#2#+L9q2;0hy<8Cb0qBx6&p5v*fU9eQqkhMl{mb{?NpgoYS8GO> ztjGZf{DAS`rnNWH^kif`yuS~yV^%XdD}v_jvp26!IGx8U1*3kiaYgHe(|OFNFSE^I jnemJIIsXs!QwR79+~L4}>Aka000000NkvXXu0mjf(kSuw literal 0 HcmV?d00001 diff --git a/textures/moreblocks_wood_tile_down.png b/textures/moreblocks_wood_tile_down.png new file mode 100644 index 0000000000000000000000000000000000000000..aedddfbd4d4f39b79488f5d5a4310fec8ebe4e95 GIT binary patch literal 522 zcmV+l0`>igP)VGd000McNliru-2xgBB`D{z@Q?ri0hdWc zK~y-)b(1k}+dvRS-;zsFq#|{J1qcoh6@hKog;V4N0aCbglOj!;oF=7DkTO*Omxga) zKyecpFl@j`fD~G5SCmLj3W<@HqJFhAJM;PZXI6baI~F#u$O`}>9eQzvDqle#yy|#~ zqv61dzhD34PnKd`~R#yeK?f5F-@lKGFHDk9^kAYNxR-}REAagUC>PpcTW?q@pZqqlVEEK->!Zw zFIKULP>KMGyeRo{_Qo5h9*rNpuO$)e?{zRXr<-cBMMx9{OrGaF{4vz)_04z!teyXD zgp!bUOJlPfQ8`JhAyA+cxA#+Ex+XXo_Pp6&{1_3(nzS7u#T-pF2XskIMF-si8WA`cJ_oEI0005WNkl$DO^eh(5PdzVo=zv5 z@iaK>y21$JDy!f{ym%1i=E0-j$=~On@GgP}MdqM8u(*&}aa__f-RY#0@{rjOS>LG& z-m9-y;@zuLT%!&R07(%5Q$+v-0DzfWWC|B$nJ%5RzNAW$-?bvj)KO zeE0NZHtaAa7Hw@ESO_3!MYHL_#+3BstmwAASbiVI&#grb=QB4$hY}B-T;7*W$gjzSc}E;2SkyQ zQOgVwFN)`We0mfc7Uy|CaEg6 zetEvbKiH?FW4ZogyCjVzgvd8L=gSvQj&TFd8ggYlKb)9dh3gY0ieeSdXA}Gf6Y`;1 zZ!8$|!&?BXuNk7fyy{FG%2s*dtRY2Fq6k8)e{XkXNMZ@DN0IEPtGxL5_2SLqVegW7 s{qk{W+U|=1#7Y7veVAtA=FbE83x$*D#cVg`RR91007*qoM6N<$g2w>(?*IS* literal 0 HcmV?d00001 diff --git a/textures/moreblocks_wood_tile_full.png b/textures/moreblocks_wood_tile_full.png new file mode 100644 index 0000000000000000000000000000000000000000..0c28e92cd655363807df718c313fb59917be0763 GIT binary patch literal 594 zcmV-Y0pF2XskIMF-si8WAQDlbS1A0005;NklEe*ITKec;RQzx@gb0A{wEfwXN0 zwC}(=5fK3l0397af1KvEJw+|GcdmQCKfb=sz~wxBI1RP#-fai)$92)`TiNNuplfL+ zZS+bfhyZjlrGbcx(~0}~_%QkRd(l+#%Wa9l-BVq1J%}+l;QD<%#54uRRdGB69uvzT_5z!)n(%&85A32OhZ`0p!18^X1!* gqxC@W4#=hb1HN1wdnO6|`v3p{07*qoM6N<$f=KcbivR!s literal 0 HcmV?d00001 diff --git a/textures/moreblocks_wood_tile_left.png b/textures/moreblocks_wood_tile_left.png new file mode 100644 index 0000000000000000000000000000000000000000..b84166f241a5ddcaab6d7c0684f85d0cb333957d GIT binary patch literal 507 zcmVVGd000McNliru-2xgBB`yxpRiyv`0fDxu zfA#&2FXzVq{P;Pc4RQVLb3?&+I@`FES<^`lAnOU4HJz7WXDhk5yf_O0q6&l%C_?}Q zeo=D%VYHz{r^Dy9)C%6d8DOkum`Yp`p;V9A-#HJDhMU{TMga@IRw94@ag;IReBEZTNnn{YgxEft&` x?srVGd000McNliru-2xgBB{OZ;IeY*B0isDn zK~y-)jgvob6G0Hgf9u=3^PaIggrx{1QaLCTY2XVWQKU;lktS`vNhCfA4Fxqwhzim1 zFCYqALRhkhgv2fE`f}$R3j3_PvlH>US%!;bJLu6^jU^2%snyCF=O`p0tgrqmY2xw|ZDt&`&g39uS5d(m$8{xUlF4`#X4N zF-gDCMrGKm_rEC#=tdfs6^JS@v4)NUrRY=z-q|(LWR_x*{+cw7HHir^k&r|hO2PS@ zEGy8JY1_?%NDHdWaUMh|V5wku^9H}{9DP2Xu79eJtU@=6NsL(;xH7U7tew+~HTvT? z1=1@wO(~7@9y%cc$l{WuYd{KoHb>vz9c;*d{`wmSqagrqKmWvK0X|zPQz7#_1Hg0* z>g@EP0F5>P?hXh15A<~g)|aYHIGLq*XO~mhwxaFA$t>mFr|J5zs`0D#IbVnNsRR52 XDTBPxM>>G>00000NkvXXu0mjfsNLwf literal 0 HcmV?d00001 diff --git a/textures/moreblocks_wood_tile_up.png b/textures/moreblocks_wood_tile_up.png new file mode 100644 index 0000000000000000000000000000000000000000..62219102b10f1bef3a35d735f7f01aa490d89bd5 GIT binary patch literal 533 zcmV+w0_y#VP)VGd000McNliru-2xgBB_nWPDHs3%0isDn zK~y-)m6N@1(?A%;e`lZTk2YBfYLEpIp3(#w+XKQj9Da+1Vb8*e^NX>bYlB&w(}q9*huI0A&A zUoYp&bhFSZ1HktsQQ%=#B?u4G7*t+U6g74|fTLB0Rv90@ED56ld(t493Z*MlB~WDz zj$m~A0N@0YDgp+#e0M1jOr? zXNLczy$nE3XN!$}`z3C|u9u%@DbPKQ9q8Zr-3dHMhC9RY>g`uf$D@DBXq6$`o@`sE z-wJU#4pZlO*05Pn-7Oe3|n8V!`>7C00000NkvXXu0mjf8yDtv literal 0 HcmV?d00001