pax_global_header00006660000000000000000000000064140664500220014511gustar00rootroot0000000000000052 comment=1f1959ba54e503043aa1f90e2639beb1353a9c5a moreblocks-2.2.0/000077500000000000000000000000001406645002200136525ustar00rootroot00000000000000moreblocks-2.2.0/.editorconfig000066400000000000000000000003141406645002200163250ustar00rootroot00000000000000root = true [*] charset = utf-8 end_of_line = lf indent_style = space indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true [*.{lua,luacheckrc}] indent_style = tab indent_size = 4 moreblocks-2.2.0/.github/000077500000000000000000000000001406645002200152125ustar00rootroot00000000000000moreblocks-2.2.0/.github/workflows/000077500000000000000000000000001406645002200172475ustar00rootroot00000000000000moreblocks-2.2.0/.github/workflows/build.yml000066400000000000000000000010461406645002200210720ustar00rootroot00000000000000name: build on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@master - uses: actions/setup-python@master - run: | sudo apt-get update -qq sudo apt-get install -qqq luarocks - name: Install pre-commit run: pip3 install pre-commit - name: Install LuaCheck run: luarocks install --local luacheck - name: Run LuaCheck using pre-commit run: | pre-commit run --all-files $HOME/.luarocks/bin/luacheck . moreblocks-2.2.0/.luacheckrc000066400000000000000000000007241406645002200157620ustar00rootroot00000000000000std = "lua51+minetest" unused_args = false allow_defined_top = true max_line_length = 999 stds.minetest = { read_globals = { "DIR_DELIM", "minetest", "core", "dump", "vector", "nodeupdate", "VoxelManip", "VoxelArea", "PseudoRandom", "ItemStack", "default", table = { fields = { "copy", }, }, } } read_globals = { "intllib", "protector", "isprotect", "IsPlayerNodeOwner", "HasOwner", "getLastOwner", "GetNodeOwnerName", } moreblocks-2.2.0/.pre-commit-config.yaml000066400000000000000000000003631406645002200201350ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v3.3.0 hooks: - id: fix-byte-order-marker - id: end-of-file-fixer - id: trailing-whitespace - id: mixed-line-ending args: [--fix=lf] moreblocks-2.2.0/CHANGELOG.md000066400000000000000000000112561406645002200154700ustar00rootroot00000000000000# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [2.2.0] - 2021-06-28 ### Changed - Refactored recipe override mechanism to avoid re-coding recipes when we only want to change the amount produced. - [Realigned rail recipe to the changes made in Minetest Game.](https://github.com/minetest-mods/moreblocks/pull/169) - All rail recipes (standard, power, break) were boosted by 50%. ### Fixed - [Shapeless crafting recipes are now handled in redefinitions.](https://github.com/minetest-mods/moreblocks/pull/171) - [Aliases are now resolved in Stairs+ circular saw cost calculation.](https://github.com/minetest-mods/moreblocks/pull/175) - [Fixed strange placement behavior for non-default Stairs+ nodes.](https://github.com/minetest-mods/moreblocks/pull/168) - [Fixed stairs placement over oddly-shaped nodes.](https://github.com/minetest-mods/moreblocks/pull/166) ## [2.1.0] - 2020-12-14 ### Added - Clean Glass versions of Trap and (Super) Glowing Glass. - Compressed desert cobblestone. ### Changed - Revised placing strategy that takes into account which side of the face (top/bottom for horizontal, left/right for vertical placement) is being clicked. Aux (sprint/special, default E) key can be used to place the node with the orientation it would have if placed from the other side. When placing nodes next to nodes of the same gategory (e.g.slab to slab) the other node's orientation is copied, flipping it placing on top or below an upright or upside-down node. In this case the aux key will disable the special processing of same-category nodes. ### Fixed - Revised minetest_game crafting recipe overrides to match Minetest 5.0.0 and later. ### Removed - Legacy Stairs+ conversion code. - It was only required to import worlds last edited before Q3 2013. ## [2.0.0] - 2019-11-25 ### Added - Stairs+ nodes for ice. - `settingtypes.txt` file to allow configuring settings in the main menu. - Polish translation. ### Changed - The minimum supported Minetest version is now 5.0.0. - Stairs+ nodes now emit one light level less compared to full nodes to make up for their smaller visual size. ### Fixed - Fixed a recipe conflict that made Centered Wooden Tiles impossible to craft. ## [1.3.0] - 2019-03-23 ### Changed - Stairs+ are now displayed in the creative inventory by default. - Localization files now use the gettext `.po` format. - Updated intllib support to avoid using deprecated functions. ### Fixed - Node rotation now works correctly when placing Stairs+ nodes. - Stairs+ glasslike nodes' textures are now easier to see. ## [1.2.0] - 2018-11-24 ### Added - Stairs+ nodes for `basic_materials`'s concrete, cement and brass blocks. - Listring add for circular saw. - **Stairs+:** New API function `stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields)`. ### Fixed - The papyrus crafting recipe override is now properly applied over the `default` mod's recipe. - Centered wooden tiles are now craftable. - Wool Stairs+ nodes can no longer be used in crafting. - The circular saw can no longer replace items from the player's inventory when it is full. ### Changed - New crafting recipes for: - Stone Tile - Circle Stone Bricks - Stairs+: - Moved definitions to `stairsplus.defs` table into a separate file. - Moved recipe definitions to `stairsplus.register_recipes` function into a separate file. ## [1.1.0] - 2017-10-04 ### Added - 3 new node shapes in the circular saw (thin slabs, available in "L-shaped", "corner-shaped" and "U-shaped" variations), all with 1/16 thickness. - New Stairs+ nodes: - Coral Skeleton - Desert Sandstone, Silver Sandstone - Desert Sandstone Brick, Silver Sandstone Brick - Desert Sandstone Block, Silver Sandstone Block - Obsidian Block - Sandstone Block - Stone Block, Desert Stone Block - Straw - Tin Block - Wool (all colors) - Other mods can now get a list of all the defined Stairs+ shapes. ## 1.0.0 - 2017-02-19 - Initial versioned release. [Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v2.2.0...HEAD [2.2.0]: https://github.com/minetest-mods/moreblocks/compare/v2.1.0...v2.2.0 [2.1.0]: https://github.com/minetest-mods/moreblocks/compare/v2.0.0...v2.1.0 [2.0.0]: https://github.com/minetest-mods/moreblocks/compare/v1.3.0...v2.0.0 [1.3.0]: https://github.com/minetest-mods/moreblocks/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/minetest-mods/moreblocks/compare/v1.1.0...v1.2.0 [1.1.0]: https://github.com/minetest-mods/moreblocks/compare/v1.0.0...v1.1.0 moreblocks-2.2.0/CONTRIBUTING.md000066400000000000000000000007201406645002200161020ustar00rootroot00000000000000# Contributing to More Blocks Thank you for your interest in More Blocks! Before contributing, be sure to know about these few guidelines: - Contributions have to be licensed under the zlib license (or compatible) for code, and CC BY-SA 3.0 (or compatible) for assets. - Make sure to update the changelog, keeping the [changelog format](http://keepachangelog.com/en/1.0.0/) we use. - Don't bump the version yourself. Maintainers will do this when necessary. moreblocks-2.2.0/LICENSE.md000066400000000000000000000015631406645002200152630ustar00rootroot00000000000000# zlib license Copyright © 2011-2020 Hugo Locurcio and contributors **This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** 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. moreblocks-2.2.0/README.md000066400000000000000000000047741406645002200151450ustar00rootroot00000000000000# More Blocks [![Build status](https://github.com/minetest-mods/moreblocks/workflows/build/badge.svg)](https://github.com/minetest-mods/moreblocks/actions) More Blocks for [Minetest](https://www.minetest.net/), a free and open source infinite world block sandbox game. [**Forum topic**](https://forum.minetest.net/viewtopic.php?f=11&t=509) ## Installation ### Download the mod To install More Blocks, clone this Git repository into your Minetest's `mods/` directory: ```bash git clone https://github.com/minetest-mods/moreblocks.git ``` You can also [download a ZIP archive](https://github.com/minetest-mods/moreblocks/archive/master.zip) of More Blocks. ### Enable the mod Once you have installed More Blocks, you need to enable it in Minetest. The procedure is as follows: #### Using the client's main menu This is the easiest way to enable More Blocks when playing in singleplayer (or on a server hosted from a client). 1. Start Minetest and switch to the **Local Game** tab. 2. Select the world you want to enable More Blocks in. 3. Click **Configure**, then enable `moreblocks` by double-clicking it (or ticking the **Enabled** checkbox). 4. Save the changes, then start a game on the world you enabled More Blocks on. 5. More Blocks should now be running on your world. #### Using a text editor This is the recommended way to enable the mod on a server without using a GUI. 1. Make sure Minetest is not currently running (otherwise, it will overwrite the changes when exiting). 2. Open the world's `world.mt` file using a text editor. 3. Add the following line at the end of the file: ```text load_mod_moreblocks = true ``` If the line is already present in the file, then replace `false` with `true` on that line. 4. Save the file, then start a game on the world you enabled More Blocks on. 5. More Blocks should now be running on your world. ## Version compatibility More Blocks is currently primarily tested with Minetest 5.3.0. It may or may not work with newer or older versions. Issues arising in older versions than 5.0.0 will generally not be fixed. ## License Copyright © 2011-2020 Hugo Locurcio and contributors - More Blocks code is licensed under the zlib license, see [`LICENSE.md`](LICENSE.md) for details. - Unless otherwise specified, More Blocks textures are licensed under [CC BY-SA 3.0 Unported](https://creativecommons.org/licenses/by-sa/3.0/). `moreblocks_copperpatina.png` was created by pithydon, and is licensed under [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/). moreblocks-2.2.0/aliases.lua000066400000000000000000000121301406645002200157730ustar00rootroot00000000000000--[[ More Blocks: alias definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- More Blocks aliases: minetest.register_alias("sweeper", "moreblocks:sweeper") minetest.register_alias("circular_saw", "moreblocks:circular_saw") minetest.register_alias("jungle_stick", "moreblocks:jungle_stick") -- 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:fence_junglewood", "default:fence_junglewood") minetest.register_alias("moreblocks:fence_jungle_wood", "default:fence_junglewood") minetest.register_alias("moreblocks:jungle_stick", "default:stick") for _, t in pairs(circular_saw.names) do minetest.register_alias("moreblocks:" .. t[1] .. "_jungle_wood" .. t[2], "moreblocks:" .. t[1] .. "_junglewood" .. t[2]) end minetest.register_alias("moreblocks:horizontaltree", "moreblocks:horizontal_tree") minetest.register_alias("moreblocks: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: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_offset") minetest.register_alias("moreblocks:wood_tile_up", "moreblocks:wood_tile_offset") 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") minetest.register_alias("moreblocks:empty_bookshelf","moreblocks:empty_shelf") minetest.register_alias("moreblocks:split_stone_tile_alt","moreblocks:checker_stone_tile") -- ABM for horizontal trees (fix facedir): local horizontal_tree_convert_facedir = {7, 12, 9, 18} minetest.register_abm({ nodenames = {"moreblocks:horizontal_tree","moreblocks:horizontal_jungle_tree"}, interval = 1, chance = 1, action = function(pos, node) if node.name == "moreblocks:horizontal_tree" then node.name = "default:tree" else node.name = "default:jungletree" end node.param2 = node.param2 < 3 and node.param2 or 0 minetest.set_node(pos, { name = node.name, param2 = horizontal_tree_convert_facedir[node.param2 + 1] }) end, }) minetest.register_lbm({ name = "moreblocks:reduce_wood_tile_redundancy", nodenames = { "moreblocks:wood_tile_left", "moreblocks:wood_tile_down", "moreblocks:wood_tile_right", "moreblocks:wood_tile_flipped", }, action = function(pos, node) if node.name:find("left") then minetest.set_node(pos, {name = "moreblocks:wood_tile_offset", param2=1}) elseif node.name:find("down") then minetest.set_node(pos, {name = "moreblocks:wood_tile_offset", param2=2}) elseif node.name:find("right") then minetest.set_node(pos, {name = "moreblocks:wood_tile_offset", param2=3}) else -- wood_tile_flipped minetest.set_node(pos, {name = "moreblocks:wood_tile", param2=1}) end minetest.log('action', "LBM replaced " .. node.name .. " at " .. minetest.pos_to_string(pos)) end, }) moreblocks-2.2.0/circular_saw.lua000066400000000000000000000347671406645002200170540ustar00rootroot00000000000000--[[ More Blocks: circular saw Copyright © 2011-2020 Hugo Locurcio, Sokomine and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] local S = moreblocks.S local F = minetest.formspec_escape circular_saw = {} circular_saw.known_stairs = setmetatable({}, { __newindex = function(k, v) local modname = minetest.get_current_modname() print(("WARNING: mod %s tried to add node %s to the circular saw" .. " manually."):format(modname, v)) end, }) -- This is populated by stairsplus:register_all: circular_saw.known_nodes = {} -- How many microblocks does this shape at the output inventory cost: -- It may cause slight loss, but no gain. circular_saw.cost_in_microblocks = { 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 2, 4, 2, 4, 5, 6, 7, 1, 1, 2, 4, 6, 7, 8, 1, 2, 2, 3, 1, 1, 2, 4, 4, 2, 6, 7, 3, 7, 7, 4, 8, 3, 2, 6, 2, 1, 3, 4 } circular_saw.names = { {"micro", "_1"}, {"panel", "_1"}, {"micro", "_2"}, {"panel", "_2"}, {"micro", "_4"}, {"panel", "_4"}, {"micro", ""}, {"panel", ""}, {"micro", "_12"}, {"panel", "_12"}, {"micro", "_14"}, {"panel", "_14"}, {"micro", "_15"}, {"panel", "_15"}, {"stair", "_outer"}, {"stair", ""}, {"stair", "_inner"}, {"slab", "_1"}, {"slab", "_2"}, {"slab", "_quarter"}, {"slab", ""}, {"slab", "_three_quarter"}, {"slab", "_14"}, {"slab", "_15"}, {"slab", "_two_sides"}, {"slab", "_three_sides"}, {"slab", "_three_sides_u"}, {"stair", "_half"}, {"stair", "_alt_1"}, {"stair", "_alt_2"}, {"stair", "_alt_4"}, {"stair", "_alt"}, {"slope", ""}, {"slope", "_half"}, {"slope", "_half_raised"}, {"slope", "_inner"}, {"slope", "_inner_half"}, {"slope", "_inner_half_raised"}, {"slope", "_inner_cut"}, {"slope", "_inner_cut_half"}, {"slope", "_inner_cut_half_raised"}, {"slope", "_outer"}, {"slope", "_outer_half"}, {"slope", "_outer_half_raised"}, {"slope", "_outer_cut"}, {"slope", "_outer_cut_half"}, {"slope", "_outer_cut_half_raised"}, {"slope", "_cut"}, } function circular_saw:get_cost(inv, stackname) local name = minetest.registered_aliases[stackname] or stackname for i, item in pairs(inv:get_list("output")) do if item:get_name() == name then return circular_saw.cost_in_microblocks[i] end end end function circular_saw:get_output_inv(modname, material, amount, max) if (not max or max < 1 or max > 99) then max = 99 end local list = {} local pos = #list -- If there is nothing inside, display empty inventory: if amount < 1 then return list end for i = 1, #circular_saw.names do local t = circular_saw.names[i] local cost = circular_saw.cost_in_microblocks[i] local balance = math.min(math.floor(amount/cost), max) local nodename = modname .. ":" .. t[1] .. "_" .. material .. t[2] if minetest.registered_nodes[nodename] then pos = pos + 1 list[pos] = nodename .. " " .. balance end end return list end -- Reset empty circular_saw after last full block has been taken out -- (or the circular_saw has been placed the first time) -- Note: max_offered is not reset: function circular_saw:reset(pos) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local owned_by = meta:get_string("owner") if owned_by and owned_by ~= "" then owned_by = (" (%s)"):format(S("owned by @1", meta:get_string("owner"))) else owned_by = "" end inv:set_list("input", {}) inv:set_list("micro", {}) inv:set_list("output", {}) meta:set_int("anz", 0) meta:set_string("infotext", S("Circular Saw is empty") .. owned_by) end -- Player has taken something out of the box or placed something inside -- that amounts to count microblocks: function circular_saw:update_inventory(pos, amount) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() amount = meta:get_int("anz") + amount -- The material is recycled automatically. inv:set_list("recycle", {}) if amount < 1 then -- If the last block is taken out. self:reset(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) self:reset(pos) return end local node_name = stack:get_name() or "" local node_def = stack:get_definition() local name_parts = circular_saw.known_nodes[node_name] or "" local modname = name_parts[1] or "" local material = name_parts[2] or "" local owned_by = meta:get_string("owner") if owned_by and owned_by ~= "" then owned_by = (" (%s)"):format(S("owned by @1", meta:get_string("owner"))) else owned_by = "" end inv:set_list("input", { -- Display as many full blocks as possible: node_name.. " " .. math.floor(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 " .. (amount) .. " microblocks.") -- 0-7 microblocks may remain left-over: inv:set_list("micro", { modname .. ":micro_" .. material .. " " .. (amount % 8) }) -- Display: inv:set_list("output", self:get_output_inv(modname, material, amount, meta:get_int("max_offered"))) -- Store how many microblocks are available: meta:set_int("anz", amount) meta:set_string("infotext", S("Circular Saw is working on @1", node_def and node_def.description or material ) .. owned_by ) end -- The amount of items offered per shape can be configured: function circular_saw.on_receive_fields(pos, formname, fields, sender) local meta = minetest.get_meta(pos) local max = tonumber(fields.max_offered) if max and max > 0 then meta:set_string("max_offered", max) -- Update to show the correct number of items: circular_saw:update_inventory(pos, 0) end end -- Moving the inventory of the circular_saw around is not allowed because it -- is a fictional inventory. Moving inventory around would be rather -- impractical and make things more difficult to calculate: function circular_saw.allow_metadata_inventory_move( pos, from_list, from_index, to_list, to_index, count, player) return 0 end -- Only input- and recycle-slot are intended as input slots: function circular_saw.allow_metadata_inventory_put( 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.get_meta(pos) local inv = meta:get_inventory() local stackname = stack:get_name() local count = stack:get_count() -- Only allow those items that are offered in the output inventory to be recycled: if listname == "recycle" then if not inv:contains_item("output", stackname) then return 0 end local stackmax = stack:get_stack_max() local instack = inv:get_stack("input", 1) local microstack = inv:get_stack("micro", 1) local incount = instack:get_count() local incost = (incount * 8) + microstack:get_count() local maxcost = (stackmax * 8) + 7 local cost = circular_saw:get_cost(inv, stackname) if (incost + cost) > maxcost then return math.max((maxcost - incost) / cost, 0) end return count end -- Only accept certain blocks as input which are known to be craftable into stairs: if listname == "input" then if not inv:is_empty("input") then if inv:get_stack("input", index):get_name() ~= stackname then return 0 end end if not inv:is_empty("micro") then local microstackname = inv:get_stack("micro", 1):get_name():gsub("^.+:micro_", "", 1) local cutstackname = stackname:gsub("^.+:", "", 1) if microstackname ~= cutstackname then return 0 end end for name, t in pairs(circular_saw.known_nodes) do if name == stackname and inv:room_for_item("input", stack) then return count end end return 0 end end -- 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: function circular_saw.on_metadata_inventory_put( pos, listname, index, stack, player) -- We need to find out if the circular_saw is already set to a -- specific material or not: local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local stackname = stack:get_name() local count = stack:get_count() -- 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 * count) elseif listname == "recycle" then -- Lets look which shape this represents: local cost = circular_saw:get_cost(inv, stackname) local input_stack = inv:get_stack("input", 1) -- check if this would not exceed input itemstack max_stacks if input_stack:get_count() + ((cost * count) / 8) <= input_stack:get_stack_max() then circular_saw:update_inventory(pos, cost * count) end end end function circular_saw.allow_metadata_inventory_take(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local input_stack = inv:get_stack(listname, index) local player_inv = player:get_inventory() if not player_inv:room_for_item("main", input_stack) then return 0 else return stack:get_count() end end function circular_saw.on_metadata_inventory_take( pos, listname, index, stack, player) -- Prevent (inbuilt) swapping between inventories with different blocks -- corrupting player inventory or Saw with 'unknown' items. local meta = minetest.get_meta(pos) local inv = meta:get_inventory() local input_stack = inv:get_stack(listname, index) if not input_stack:is_empty() and input_stack:get_name()~=stack:get_name() then local player_inv = player:get_inventory() if player_inv:room_for_item("main", input_stack) then player_inv:add_item("main", input_stack) end circular_saw:reset(pos) return end -- If it is one of the offered stairs: find out how many -- microblocks have to be subtracted: 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, -cost) elseif listname == "micro" then -- Each microblock costs 1 microblock: circular_saw:update_inventory(pos, -stack:get_count()) elseif listname == "input" then -- Each normal (= full) block taken costs 8 microblocks: circular_saw:update_inventory(pos, 8 * -stack:get_count()) end -- The recycle field plays no role here since it is processed immediately. end function circular_saw.on_construct(pos) local meta = minetest.get_meta(pos) local fancy_inv = default.gui_bg..default.gui_bg_img..default.gui_slots meta:set_string( "formspec", "size[11,10]"..fancy_inv.. "label[0,0;" ..F(S("Input\nmaterial")).. "]" .. "list[current_name;input;1.5,0;1,1;]" .. "label[0,1;" ..F(S("Left-over")).. "]" .. "list[current_name;micro;1.5,1;1,1;]" .. "label[0,2;" ..F(S("Recycle\noutput")).. "]" .. "list[current_name;recycle;1.5,2;1,1;]" .. "field[0.3,3.5;1,1;max_offered;" ..F(S("Max")).. ":;${max_offered}]" .. "button[1,3.2;1,1;Set;" ..F(S("Set")).. "]" .. "list[current_name;output;2.8,0;8,6;]" .. "list[current_player;main;1.5,6.25;8,4;]" .. "listring[current_name;output]" .. "listring[current_player;main]" .. "listring[current_name;input]" .. "listring[current_player;main]" .. "listring[current_name;micro]" .. "listring[current_player;main]" .. "listring[current_name;recycle]" .. "listring[current_player;main]" ) meta:set_int("anz", 0) -- No microblocks inside yet. meta:set_string("max_offered", 99) -- How many items of this kind are offered by default? meta:set_string("infotext", S("Circular Saw is 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", 6*8) -- 6x8 versions of stair-parts of material x. circular_saw:reset(pos) end function circular_saw.can_dig(pos,player) local meta = minetest.get_meta(pos) local inv = meta:get_inventory() if not inv:is_empty("input") or not inv:is_empty("micro") or not inv:is_empty("recycle") then return false end -- Can be dug 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 }, }, tiles = {"moreblocks_circular_saw_top.png", "moreblocks_circular_saw_bottom.png", "moreblocks_circular_saw_side.png"}, paramtype = "light", sunlight_propagates = true, paramtype2 = "facedir", groups = {choppy = 2,oddly_breakable_by_hand = 2}, sounds = default.node_sound_wood_defaults(), on_construct = circular_saw.on_construct, can_dig = circular_saw.can_dig, -- Set the owner of this circular saw. after_place_node = function(pos, placer) local meta = minetest.get_meta(pos) local owner = placer and placer:get_player_name() or "" local owned_by = owner if owner ~= "" then owned_by = (" (%s)"):format(S("owned by @1", owner)) end meta:set_string("owner", owner) meta:set_string("infotext", S("Circular Saw is empty") .. owned_by) end, -- The amount of items offered per shape can be configured: on_receive_fields = circular_saw.on_receive_fields, allow_metadata_inventory_move = circular_saw.allow_metadata_inventory_move, -- Only input- and recycle-slot are intended as input slots: allow_metadata_inventory_put = circular_saw.allow_metadata_inventory_put, allow_metadata_inventory_take = circular_saw.allow_metadata_inventory_take, -- 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 = circular_saw.on_metadata_inventory_put, on_metadata_inventory_take = circular_saw.on_metadata_inventory_take, }) moreblocks-2.2.0/config.lua000066400000000000000000000013721406645002200156250ustar00rootroot00000000000000--[[ More Blocks: configuration handling Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] moreblocks.config = {} local function getbool_default(setting, default) local value = minetest.settings:get_bool(setting) if value == nil then value = default end return value end local function setting(settingtype, name, default) if settingtype == "bool" then moreblocks.config[name] = getbool_default("moreblocks." .. name, default) else moreblocks.config[name] = minetest.settings:get("moreblocks." .. name) or default end end -- Show stairs/slabs/panels/microblocks in creative inventory (true or false): setting("bool", "stairsplus_in_creative_inventory", true) moreblocks-2.2.0/crafting.lua000066400000000000000000000373051406645002200161620ustar00rootroot00000000000000--[[ More Blocks: crafting recipes Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] minetest.register_craft({ output = "default:stick", recipe = {{"default:dry_shrub"},} }) minetest.register_craft({ output = "default:stick", recipe = {{"group:sapling"},} }) minetest.register_craft({ output = "default:wood", recipe = { {"default:stick", "default:stick"}, {"default:stick", "default:stick"}, } }) minetest.register_craft({ output = "default:dirt_with_grass", type = "shapeless", recipe = {"default:junglegrass", "default:dirt"}, }) minetest.register_craft({ output = "default:mossycobble", type = "shapeless", recipe = {"default:junglegrass", "default:cobble"}, }) minetest.register_craft({ output = "moreblocks:wood_tile 9", recipe = { {"group:wood", "group:wood", "group:wood"}, {"group:wood", "group:wood", "group:wood"}, {"group:wood", "group:wood", "group:wood"}, } }) -- This must be registered after `moreblocks:wood_tile` to avoid recipe conflicts, -- since `moreblocks:wood_tile` is part of `group:wood` minetest.register_craft({ output = "moreblocks:wood_tile_center 9", recipe = { {"group:wood", "group:wood", "group:wood"}, {"group:wood", "moreblocks:wood_tile", "group:wood"}, {"group:wood", "group:wood", "group:wood"}, } }) minetest.register_craft({ type = "shapeless", output = "moreblocks:wood_tile", recipe = {"moreblocks:wood_tile_flipped"} }) minetest.register_craft({ output = "moreblocks:wood_tile_full 4", recipe = { {"moreblocks:wood_tile", "moreblocks:wood_tile"}, {"moreblocks:wood_tile", "moreblocks:wood_tile"}, } }) minetest.register_craft({ output = "moreblocks:wood_tile_offset", recipe = { {"default:stick"}, {"moreblocks:wood_tile_center"}, } }) minetest.register_craft({ type = "shapeless", output = "moreblocks:wood_tile_offset", recipe = {"moreblocks:wood_tile_down"} }) minetest.register_craft({ type = "shapeless", output = "moreblocks:wood_tile_offset", recipe = {"moreblocks:wood_tile_left"} }) minetest.register_craft({ type = "shapeless", output = "moreblocks:wood_tile_offset", recipe = {"moreblocks:wood_tile_right"} }) minetest.register_craft({ output = "moreblocks:circle_stone_bricks 5", recipe = { {"", "default:stone", ""}, {"default:stone", "default:coal_lump", "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:all_faces_pine_tree 8", recipe = { {"default:pine_tree", "default:pine_tree", "default:pine_tree"}, {"default:pine_tree", "", "default:pine_tree"}, {"default:pine_tree", "default:pine_tree", "default:pine_tree"}, } }) minetest.register_craft({ output = "moreblocks:all_faces_acacia_tree 8", recipe = { {"default:acacia_tree", "default:acacia_tree", "default:acacia_tree"}, {"default:acacia_tree", "", "default:acacia_tree"}, {"default:acacia_tree", "default:acacia_tree", "default:acacia_tree"}, } }) minetest.register_craft({ output = "moreblocks:all_faces_aspen_tree 8", recipe = { {"default:aspen_tree", "default:aspen_tree", "default:aspen_tree"}, {"default:aspen_tree", "", "default:aspen_tree"}, {"default:aspen_tree", "default:aspen_tree", "default:aspen_tree"}, } }) minetest.register_craft({ output = "moreblocks:sweeper 4", recipe = { {"default:junglegrass"}, {"default:stick"}, } }) minetest.register_craft({ output = "moreblocks:stone_tile 9", recipe = { {"default:cobble", "default:cobble", "default:cobble"}, {"default:cobble", "default:stone", "default:cobble"}, {"default:cobble", "default:cobble", "default:cobble"}, } }) minetest.register_craft({ output = "moreblocks:split_stone_tile", recipe = { {"moreblocks:stone_tile"}, } }) minetest.register_craft({ output = "moreblocks:checker_stone_tile", recipe = { {"moreblocks:split_stone_tile"}, } }) -- When approaching the below craft, loop back to cobblestone, which can then be used to craft stone tiles again minetest.register_craft({ output = "default:cobble", recipe = { {"moreblocks:checker_stone_tile"}, } }) minetest.register_craft({ output = "moreblocks:grey_bricks 2", type = "shapeless", recipe = {"default:stone", "default:brick"}, }) minetest.register_craft({ output = "moreblocks:grey_bricks 2", type = "shapeless", recipe = {"default:stonebrick", "default:brick"}, }) minetest.register_craft({ output = "moreblocks:empty_shelf", type = "shapeless", recipe = {"moreblocks:sweeper", "default:bookshelf"}, replacements = {{"default:bookshelf", "default:book 3"}}, -- When obtaining an empty shelf, return the books used in it as well }) minetest.register_craft({ output = "moreblocks:empty_shelf", type = "shapeless", recipe = {"moreblocks:sweeper", "vessels:shelf"}, replacements = {{"vessels:shelf", "vessels:glass_bottle 3"}}, }) minetest.register_craft({ type = "shapeless", output = "default:bookshelf", recipe = {"moreblocks:empty_shelf", "default:book", "default:book", "default:book"}, }) minetest.register_craft({ output = "moreblocks:empty_shelf", recipe = { {"group:wood", "group:wood", "group:wood"}, {"", "", ""}, {"group:wood", "group:wood", "group:wood"}, } }) minetest.register_craft({ output = "moreblocks:coal_stone_bricks 4", recipe = { {"moreblocks:coal_stone", "moreblocks:coal_stone"}, {"moreblocks:coal_stone", "moreblocks:coal_stone"}, } }) minetest.register_craft({ output = "moreblocks:iron_stone_bricks 4", recipe = { {"moreblocks:iron_stone", "moreblocks:iron_stone"}, {"moreblocks:iron_stone", "moreblocks:iron_stone"}, } }) minetest.register_craft({ output = "moreblocks:plankstone 4", recipe = { {"group:stone", "group:wood"}, {"group:wood", "group:stone"}, } }) minetest.register_craft({ output = "moreblocks:plankstone 4", recipe = { {"group:wood", "group:stone"}, {"group:stone", "group: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", type = "shapeless", recipe = {"default:steel_ingot", "default:chest"}, }) minetest.register_craft({ output = "default:chest_locked", type = "shapeless", recipe = {"default:copper_ingot", "default:chest"}, }) minetest.register_craft({ output = "default:chest_locked", type = "shapeless", recipe = {"default:bronze_ingot", "default:chest"}, }) minetest.register_craft({ output = "default:chest_locked", type = "shapeless", recipe = {"default:gold_ingot", "default:chest"}, }) minetest.register_craft({ output = "moreblocks:iron_glass", type = "shapeless", recipe = {"default:steel_ingot", "default:glass"}, }) minetest.register_craft({ output = "default:glass", type = "shapeless", recipe = {"default:coal_lump", "moreblocks:iron_glass"}, }) minetest.register_craft({ output = "moreblocks:coal_glass", type = "shapeless", recipe = {"default:coal_lump", "default:glass"}, }) minetest.register_craft({ output = "default:glass", type = "shapeless", recipe = {"default:steel_ingot", "moreblocks:coal_glass"}, }) minetest.register_craft({ output = "moreblocks:clean_glass", type = "shapeless", recipe = {"moreblocks:sweeper", "default:glass"}, }) minetest.register_craft({ output = "moreblocks:trap_clean_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass"}, }) minetest.register_craft({ output = "moreblocks:trap_clean_glass", type = "shapeless", recipe = {"moreblocks:sweeper", "moreblocks:trap_glass"}, }) minetest.register_craft({ output = "moreblocks:glow_glass", type = "shapeless", recipe = {"default:torch", "default:glass"}, }) minetest.register_craft({ output = "moreblocks:clean_glow_glass", type = "shapeless", recipe = {"default:torch", "moreblocks:clean_glass"}, }) minetest.register_craft({ output = "moreblocks:clean_glow_glass", type = "shapeless", recipe = {"moreblocks:sweeper", "moreblocks:glow_glass"}, }) minetest.register_craft({ output = "moreblocks:trap_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:glass", "default:torch"}, }) minetest.register_craft({ output = "moreblocks:trap_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:glow_glass"}, }) -- several recipes are possible for the trap+clean+glow, we only present 3 of them minetest.register_craft({ output = "moreblocks:trap_clean_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glow_glass"}, }) minetest.register_craft({ output = "moreblocks:trap_clean_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass", "default:torch"}, }) minetest.register_craft({ output = "moreblocks:trap_clean_glow_glass", type = "shapeless", recipe = {"moreblocks:sweeper", "moreblocks:trap_glow_glass" }, }) minetest.register_craft({ output = "moreblocks:super_glow_glass", type = "shapeless", recipe = {"default:torch", "default:torch", "default:glass"}, }) minetest.register_craft({ output = "moreblocks:super_glow_glass", type = "shapeless", recipe = {"default:torch", "moreblocks:glow_glass"}, }) minetest.register_craft({ output = "moreblocks:clean_super_glow_glass", type = "shapeless", recipe = {"default:torch", "default:torch", "moreblocks:clean_glass"}, }) minetest.register_craft({ output = "moreblocks:clean_super_glow_glass", type = "shapeless", recipe = {"default:torch", "moreblocks:clean_glow_glass"}, }) minetest.register_craft({ output = "moreblocks:clean_super_glow_glass", type = "shapeless", recipe = {"moreblocks:sweeper", "moreblocks:super_glow_glass"}, }) minetest.register_craft({ output = "moreblocks:trap_super_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:glass", "default:torch", "default:torch"}, }) minetest.register_craft({ output = "moreblocks:trap_super_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:super_glow_glass"}, }) -- several recipes are possible for the trap+clean+glow, we only present 4 of them minetest.register_craft({ output = "moreblocks:trap_clean_super_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:clean_super_glow_glass"}, }) minetest.register_craft({ output = "moreblocks:trap_clean_super_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glow_glass", "default:torch"}, }) minetest.register_craft({ output = "moreblocks:trap_clean_super_glow_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass", "default:torch", "default:torch"}, }) minetest.register_craft({ output = "moreblocks:trap_clean_super_glow_glass", type = "shapeless", recipe = {"moreblocks:sweeper", "moreblocks:trap_super_glow_glass" }, }) minetest.register_craft({ output = "moreblocks:coal_stone", type = "shapeless", recipe = {"default:coal_lump", "default:stone"}, }) minetest.register_craft({ output = "default:stone", type = "shapeless", recipe = {"default:steel_ingot", "moreblocks:coal_stone"}, }) minetest.register_craft({ output = "moreblocks:iron_stone", type = "shapeless", recipe = {"default:steel_ingot", "default:stone"}, }) minetest.register_craft({ output = "default:stone", type = "shapeless", recipe = {"default:coal_lump", "moreblocks:iron_stone"}, }) minetest.register_craft({ output = "moreblocks:trap_stone", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:stone"}, }) minetest.register_craft({ output = "moreblocks:trap_desert_stone", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:desert_stone"}, }) minetest.register_craft({ output = "moreblocks:trap_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:glass"}, }) minetest.register_craft({ output = "moreblocks:trap_obsidian_glass", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:obsidian_glass"}, }) minetest.register_craft({ output = "moreblocks:trap_obsidian", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:obsidian"}, }) minetest.register_craft({ output = "moreblocks:trap_sandstone", type = "shapeless", recipe = {"default:mese_crystal_fragment", "default:sandstone"}, }) minetest.register_craft({ output = "moreblocks:cactus_brick", 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 3", recipe = { {"default:junglegrass"}, {"default:junglegrass"}, {"default:junglegrass"}, } }) minetest.register_craft({ output = "moreblocks:dirt_compressed", recipe = { {'default:dirt', 'default:dirt', 'default:dirt'}, {'default:dirt', 'default:dirt', 'default:dirt'}, {'default:dirt', 'default:dirt', 'default:dirt'}, } }) minetest.register_craft({ output = "default:dirt 9", recipe = {{"moreblocks:dirt_compressed"}}, }) minetest.register_craft({ output = "moreblocks:cobble_compressed", recipe = { {"default:cobble", "default:cobble", "default:cobble"}, {"default:cobble", "default:cobble", "default:cobble"}, {"default:cobble", "default:cobble", "default:cobble"}, } }) minetest.register_craft({ output = "default:cobble 9", recipe = { {"moreblocks:cobble_compressed"}, } }) minetest.register_craft({ output = "moreblocks:desert_cobble_compressed", recipe = { {"default:desert_cobble", "default:desert_cobble", "default:desert_cobble"}, {"default:desert_cobble", "default:desert_cobble", "default:desert_cobble"}, {"default:desert_cobble", "default:desert_cobble", "default:desert_cobble"}, } }) minetest.register_craft({ output = "default:desert_cobble 9", recipe = { {"moreblocks:desert_cobble_compressed"}, } }) minetest.register_craft({ type = "cooking", output = "moreblocks:tar", recipe = "default:pine_tree", }) minetest.register_craft({ type = "shapeless", output = "moreblocks:copperpatina", recipe = {"group:water_bucket", "default:copperblock"}, replacements = { {"group:water_bucket", "bucket:bucket_empty"} } }) minetest.register_craft({ output = "default:copper_ingot 9", recipe = { {"moreblocks:copperpatina"}, } }) if minetest.settings:get_bool("moreblocks.circular_saw_crafting") ~= false then -- “If nil or true then” minetest.register_craft({ output = "moreblocks:circular_saw", recipe = { { "", "default:steel_ingot", "" }, { "group:wood", "group:wood", "group:wood"}, { "group:wood", "", "group:wood"}, } }) end moreblocks-2.2.0/init.lua000066400000000000000000000013671406645002200153270ustar00rootroot00000000000000--[[ ===================================================================== ** More Blocks ** By Calinou, with the help of ShadowNinja and VanessaE. Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. ===================================================================== --]] moreblocks = {} local modpath = minetest.get_modpath("moreblocks") local S, NS = dofile(modpath .. "/intllib.lua") moreblocks.S = S moreblocks.NS = NS dofile(modpath .. "/config.lua") dofile(modpath .. "/circular_saw.lua") dofile(modpath .. "/stairsplus/init.lua") dofile(modpath .. "/nodes.lua") dofile(modpath .. "/redefinitions.lua") dofile(modpath .. "/crafting.lua") dofile(modpath .. "/aliases.lua") moreblocks-2.2.0/intllib.lua000066400000000000000000000021411406645002200160100ustar00rootroot00000000000000-- Fallback functions for when `intllib` is not installed. -- Code released under Unlicense . -- Get the latest version of this file at: -- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua local function format(str, ...) local args = { ... } local function repl(escape, open, num, close) if escape == "" then local replacement = tostring(args[tonumber(num)]) if open == "" then replacement = replacement..close end return replacement else return "@"..open..num..close end end return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) end local gettext, ngettext if minetest.get_modpath("intllib") then if intllib.make_gettext_pair then -- New method using gettext. gettext, ngettext = intllib.make_gettext_pair() else -- Old method using text files. gettext = intllib.Getter() end end -- Fill in missing functions. gettext = gettext or function(msgid, ...) return format(msgid, ...) end ngettext = ngettext or function(msgid, msgid_plural, n, ...) return format(n==1 and msgid or msgid_plural, ...) end return gettext, ngettext moreblocks-2.2.0/locale/000077500000000000000000000000001406645002200151115ustar00rootroot00000000000000moreblocks-2.2.0/locale/de.po000066400000000000000000000112671406645002200160500ustar00rootroot00000000000000# German translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # Xanthin, 2014. # CodeXP , 2018. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "Kreissäge" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" "Ausgangs-\n" "material" #: circular_saw.lua msgid "Left-over" msgstr "Rest" #: circular_saw.lua msgid "Max" msgstr "Anzahl" #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" "Wiederver-\n" "werten" #: circular_saw.lua msgid "Set" msgstr "Ok" #: circular_saw.lua msgid "owned by @1" msgstr "gehört @1" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "Kreissäge ist leer" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "Kreissäge arbeitet mit @1" #: init.lua msgid "[moreblocks] loaded." msgstr "[moreblocks] geladen." #: nodes.lua msgid "Deprecated" msgstr "veraltet" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "allseitiger Akazienbaumstamm" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "allseitiger Espenbaumstamm" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "allseitiger Tropenbaumstamm" #: nodes.lua msgid "All-faces Pine Tree" msgstr "allseitiger Kieferbaumstamm" #: nodes.lua msgid "All-faces Tree" msgstr "allseitiger Baumstamm" #: nodes.lua msgid "Cactus Brick" msgstr "Kaktusziegel" #: nodes.lua msgid "Cactus Checker" msgstr "Kaktus-Mosaik" #: nodes.lua msgid "Centered Wooden Tile" msgstr "Holzfliese mittig" #: nodes.lua msgid "Checker Stone Tile" msgstr "Stein-Mosaik" #: nodes.lua msgid "Circle Stone Bricks" msgstr "Kreissteinziegel" #: nodes.lua msgid "Clean Glass" msgstr "Klares Glas" #: nodes.lua msgid "Coal Checker" msgstr "Kohlen-Mosaik" #: nodes.lua msgid "Coal Glass" msgstr "Kohleglas" #: nodes.lua msgid "Coal Stone" msgstr "Kohlestein" #: nodes.lua msgid "Coal Stone Bricks" msgstr "Kohlesteinziegel" #: nodes.lua msgid "Compressed Cobblestone" msgstr "Gepresster Kopfsteinpflaster" #: nodes.lua msgid "Compressed Desert Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Dirt" msgstr "Gepresste Erde" #: nodes.lua msgid "Copper Patina Block" msgstr "Kupfer Edelrostblock" #: nodes.lua msgid "Empty Shelf" msgstr "Leeres Regal" #: nodes.lua msgid "Full Wooden Tile" msgstr "Vollholzfliese" #: nodes.lua msgid "Glow Glass" msgstr "Leuchtglas" #: nodes.lua msgid "Iron Checker" msgstr "Metall-Mosaik" #: nodes.lua msgid "Iron Glass" msgstr "metallisiertes Glas" #: nodes.lua msgid "Iron Stone" msgstr "Eisenstein" #: nodes.lua msgid "Iron Stone Bricks" msgstr "Eisensteinziegel" #: nodes.lua msgid "Plankstone" msgstr "Brettstein" #: nodes.lua msgid "Rope" msgstr "Seil" #: nodes.lua msgid "Split Stone Tile" msgstr "Geteilte Steinfliese" #: nodes.lua msgid "Stone Bricks" msgstr "Steinziegel" #: nodes.lua msgid "Stone Tile" msgstr "Steinfliese" #: nodes.lua msgid "Super Glow Glass" msgstr "Superleuchtglas" #: nodes.lua msgid "Sweeper" msgstr "Besen" #: nodes.lua msgid "Tar" msgstr "Teer" #: nodes.lua msgid "Trap Desert Stone" msgstr "Wüstensteinfalle" #: nodes.lua msgid "Trap Glass" msgstr "Glasfalle" #: nodes.lua msgid "Trap Glow Glass" msgstr "Leuchtglasfalle" #: nodes.lua msgid "Trap Obsidian" msgstr "Obsidianfalle" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "Obsidianglasfalle" #: nodes.lua msgid "Trap Sandstone" msgstr "Sandsteinfalle" #: nodes.lua msgid "Trap Stone" msgstr "Steinfalle" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "Superleuchtglasfalle" #: nodes.lua msgid "Wooden Tile" msgstr "Holzfliese" #: nodes.lua msgid "Offset Wooden Tile" msgstr "Holzfliese versetzt" #: nodes.lua msgid "Downwards Wooden Tile" msgstr "Holzfliese unten" #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "Holzfliese links" #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "Holzfliese rechts" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "Tut mir leid, dieser Bereich gehört @1." #: ownership.lua msgid "someone" msgstr "jemand" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "%smikroblock" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "%splatte" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "%sneigung" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "%spaneel" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "%streppe" moreblocks-2.2.0/locale/es.po000066400000000000000000000103241406645002200160600ustar00rootroot00000000000000# Spanish translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # kaeza, 2013. # CodeXP , 2018. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" #: circular_saw.lua msgid "Left-over" msgstr "" #: circular_saw.lua msgid "Max" msgstr "" #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" #: circular_saw.lua msgid "Set" msgstr "" #: circular_saw.lua msgid "owned by @1" msgstr "" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "" #: init.lua msgid "[moreblocks] loaded." msgstr "[moreblocks] cargado." #: nodes.lua msgid "Deprecated" msgstr "" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "" #: nodes.lua msgid "All-faces Pine Tree" msgstr "" #: nodes.lua msgid "All-faces Tree" msgstr "Tronco de Árbol" #: nodes.lua msgid "Cactus Brick" msgstr "Ladrillos de Cactus" #: nodes.lua msgid "Cactus Checker" msgstr "Cuadros de Cactus" #: nodes.lua msgid "Centered Wooden Tile" msgstr "Parquet Centrado" #: nodes.lua msgid "Checker Stone Tile" msgstr "" #: nodes.lua msgid "Circle Stone Bricks" msgstr "Bloques de Piedra Circulares" #: nodes.lua msgid "Clean Glass" msgstr "Cristal Limpio" #: nodes.lua msgid "Coal Checker" msgstr "Cuadros de Carbón" #: nodes.lua msgid "Coal Glass" msgstr "Cristal con Carbón" #: nodes.lua msgid "Coal Stone" msgstr "Carbón y Piedra" #: nodes.lua msgid "Coal Stone Bricks" msgstr "" #: nodes.lua msgid "Compressed Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Desert Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Dirt" msgstr "" #: nodes.lua msgid "Copper Patina Block" msgstr "" #: nodes.lua msgid "Empty Shelf" msgstr "" #: nodes.lua msgid "Full Wooden Tile" msgstr "Parquet Completo" #: nodes.lua msgid "Glow Glass" msgstr "Cristal Brillante" #: nodes.lua msgid "Iron Checker" msgstr "Cuadros de Hierro" #: nodes.lua msgid "Iron Glass" msgstr "Cristal con Hierro" #: nodes.lua msgid "Iron Stone" msgstr "Hierro y Piedra" #: nodes.lua msgid "Iron Stone Bricks" msgstr "" #: nodes.lua msgid "Plankstone" msgstr "Tablones de piedra" #: nodes.lua msgid "Rope" msgstr "Soga" #: nodes.lua msgid "Split Stone Tile" msgstr "Baldosas de Piedra Partida" #: nodes.lua msgid "Stone Bricks" msgstr "" #: nodes.lua msgid "Stone Tile" msgstr "Baldosa de Piedra" #: nodes.lua msgid "Super Glow Glass" msgstr "Cristal Súper Brillante" #: nodes.lua msgid "Sweeper" msgstr "Limpiador" #: nodes.lua msgid "Tar" msgstr "" #: nodes.lua msgid "Trap Desert Stone" msgstr "" #: nodes.lua msgid "Trap Glass" msgstr "Cristal Trampa" #: nodes.lua msgid "Trap Glow Glass" msgstr "" #: nodes.lua msgid "Trap Obsidian" msgstr "" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "" #: nodes.lua msgid "Trap Sandstone" msgstr "" #: nodes.lua msgid "Trap Stone" msgstr "Piedra Trampa" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "" #: nodes.lua msgid "Wooden Tile" msgstr "Parquet" #: nodes.lua msgid "Offset Wooden Tile" msgstr "" #: nodes.lua msgid "Downwards Wooden Tile" msgstr "" #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "" #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "" #: ownership.lua msgid "someone" msgstr "" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "Microbloque de %s" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "Losa de %s" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "Panel de %s" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "Escalera de %s" moreblocks-2.2.0/locale/fr.po000066400000000000000000000121371406645002200160640ustar00rootroot00000000000000# French translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # Hugo Locurcio , 2013-2019. # Jat15, 2013. # CodeXP , 2018. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: 2019-03-20 21:10+0100\n" "Last-Translator: Hugo Locurcio \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "Scie circulaire" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" "Matériau\n" "d'entrée" #: circular_saw.lua msgid "Left-over" msgstr "Reste" #: circular_saw.lua msgid "Max" msgstr "Max" #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" "Sortie à\n" "recycler" #: circular_saw.lua msgid "Set" msgstr "Définir" #: circular_saw.lua msgid "owned by @1" msgstr "propriété de @1" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "Scie circulaire vide" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "Scie circulaire manipulant @1" #: init.lua msgid "[moreblocks] loaded." msgstr "[moreblocks] a été chargé." #: nodes.lua msgid "Deprecated" msgstr "déprécié" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "Tronc d'arbre d'acacia (toutes faces)" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "Tronc d'arbre de peuplier (toutes faces)" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "Tronc d'arbre de jungle (toutes faces)" #: nodes.lua msgid "All-faces Pine Tree" msgstr "Tronc d'arbre de pin (toutes faces)" #: nodes.lua msgid "All-faces Tree" msgstr "Tronc d'arbre (toutes faces)" #: nodes.lua msgid "Cactus Brick" msgstr "Briques de cactus" #: nodes.lua msgid "Cactus Checker" msgstr "Damier en cactus" #: nodes.lua msgid "Centered Wooden Tile" msgstr "Dalle en bois centrée" #: nodes.lua msgid "Checker Stone Tile" msgstr "Damier de dalle en pierre" #: nodes.lua msgid "Circle Stone Bricks" msgstr "Briques en pierre circulaires" #: nodes.lua msgid "Clean Glass" msgstr "Verre propre" #: nodes.lua msgid "Coal Checker" msgstr "Damier en charbon" #: nodes.lua msgid "Coal Glass" msgstr "Verre de charbon" #: nodes.lua msgid "Coal Stone" msgstr "Pierre de charbon" #: nodes.lua msgid "Coal Stone Bricks" msgstr "Briques en pierre de charbon" #: nodes.lua msgid "Compressed Cobblestone" msgstr "Pierre taillée compressée" #: nodes.lua msgid "Compressed Desert Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Dirt" msgstr "Terre compressée" #: nodes.lua msgid "Copper Patina Block" msgstr "Bloc de patine de cuivre" #: nodes.lua msgid "Empty Shelf" msgstr "Étagère vide" #: nodes.lua msgid "Full Wooden Tile" msgstr "Dalle en bois complète" #: nodes.lua msgid "Glow Glass" msgstr "Verre brillant" #: nodes.lua msgid "Iron Checker" msgstr "Damier de fer" #: nodes.lua msgid "Iron Glass" msgstr "Verre de fer" #: nodes.lua msgid "Iron Stone" msgstr "Pierre de fer" #: nodes.lua msgid "Iron Stone Bricks" msgstr "Briques en pierre de fer" #: nodes.lua msgid "Plankstone" msgstr "Pierre-bois" #: nodes.lua msgid "Rope" msgstr "Corde" #: nodes.lua msgid "Split Stone Tile" msgstr "Dalle en pierre découpée" #: nodes.lua msgid "Stone Bricks" msgstr "Briques en pierre" #: nodes.lua msgid "Stone Tile" msgstr "Dalle en pierre" #: nodes.lua msgid "Super Glow Glass" msgstr "Verre très brillant" #: nodes.lua msgid "Sweeper" msgstr "Balai" #: nodes.lua msgid "Tar" msgstr "Bitume" #: nodes.lua msgid "Trap Desert Stone" msgstr "Pierre du désert traversable" #: nodes.lua msgid "Trap Glass" msgstr "Verre traversable" #: nodes.lua msgid "Trap Glow Glass" msgstr "Verre brillant traversable" #: nodes.lua msgid "Trap Obsidian" msgstr "Obsidienne traversable" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "Verre d'obsidienne traversable" #: nodes.lua msgid "Trap Sandstone" msgstr "Grès traversable" #: nodes.lua msgid "Trap Stone" msgstr "Pierre traversable" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "Verre très brillant traversable" #: nodes.lua msgid "Wooden Tile" msgstr "Dalle en bois" #: nodes.lua msgid "Offset Wooden Tile" msgstr "Dalle en bois décalée" #: nodes.lua msgid "Downwards Wooden Tile" msgstr "Dalle en bois vers le bas" #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "Dalle en bois vers la gauche" #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "Dalle en bois vers la droite" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "Désolé, @1 possède cet endroit." #: ownership.lua msgid "someone" msgstr "quelqu'un" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "Microbloc en %s" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "Demi-dalle en %s" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "Pente en %s" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "Barre en %s" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "Escaliers en %s" moreblocks-2.2.0/locale/it.po000066400000000000000000000110301406645002200160600ustar00rootroot00000000000000# Italian translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # Emon, 2016. # CodeXP , 2018. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "Sega circolare" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" "Materiale\n" "iniziale" #: circular_saw.lua msgid "Left-over" msgstr "Scarto" #: circular_saw.lua msgid "Max" msgstr "Max." #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" "Ricicla\n" "finale" #: circular_saw.lua msgid "Set" msgstr "Imp." #: circular_saw.lua msgid "owned by @1" msgstr "" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "Sega circolare, vuota" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "Sega circolare, in funzione su @1" #: init.lua msgid "[moreblocks] loaded." msgstr "[moreblocks] caricato." #: nodes.lua msgid "Deprecated" msgstr "" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "" #: nodes.lua msgid "All-faces Pine Tree" msgstr "" #: nodes.lua msgid "All-faces Tree" msgstr "Albero su ogni lato" #: nodes.lua msgid "Cactus Brick" msgstr "Mattoni di cactus" #: nodes.lua msgid "Cactus Checker" msgstr "Scacchiera in cactus" #: nodes.lua msgid "Centered Wooden Tile" msgstr "Mattonella in legno centrata" #: nodes.lua msgid "Checker Stone Tile" msgstr "" #: nodes.lua msgid "Circle Stone Bricks" msgstr "Mattoni concentrici in pietra" #: nodes.lua msgid "Clean Glass" msgstr "Vetro pulito" #: nodes.lua msgid "Coal Checker" msgstr "Scacchiera in carbone" #: nodes.lua msgid "Coal Glass" msgstr "Vetro e carbone" #: nodes.lua msgid "Coal Stone" msgstr "Pietra in carbone" #: nodes.lua msgid "Coal Stone Bricks" msgstr "Mattoni di pietra in carbone" #: nodes.lua msgid "Compressed Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Desert Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Dirt" msgstr "" #: nodes.lua msgid "Copper Patina Block" msgstr "" #: nodes.lua msgid "Empty Shelf" msgstr "Scaffale Vuoto" #: nodes.lua msgid "Full Wooden Tile" msgstr "Mattonella in legno pieno" #: nodes.lua msgid "Glow Glass" msgstr "Vetro luminoso" #: nodes.lua msgid "Iron Checker" msgstr "Scacchiera in ferro" #: nodes.lua msgid "Iron Glass" msgstr "Vetro e ferro" #: nodes.lua msgid "Iron Stone" msgstr "Pietra in ferro" #: nodes.lua msgid "Iron Stone Bricks" msgstr "Mattoni di pietra in ferro" #: nodes.lua msgid "Plankstone" msgstr "Pietra e legno" #: nodes.lua msgid "Rope" msgstr "Corda" #: nodes.lua msgid "Split Stone Tile" msgstr "Mattonella in pietra divisa" #: nodes.lua msgid "Stone Bricks" msgstr "" #: nodes.lua msgid "Stone Tile" msgstr "Mattonella in pietra" #: nodes.lua msgid "Super Glow Glass" msgstr "Super vetro luminoso" #: nodes.lua msgid "Sweeper" msgstr "Spazzola" #: nodes.lua msgid "Tar" msgstr "" #: nodes.lua msgid "Trap Desert Stone" msgstr "" #: nodes.lua msgid "Trap Glass" msgstr "Vetro trappola" #: nodes.lua msgid "Trap Glow Glass" msgstr "Vetro luminoso trappola" #: nodes.lua msgid "Trap Obsidian" msgstr "" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "" #: nodes.lua msgid "Trap Sandstone" msgstr "" #: nodes.lua msgid "Trap Stone" msgstr "Pietra trappola" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "Super vetro luminoso trappola" #: nodes.lua msgid "Wooden Tile" msgstr "Mattonella in legno" #: nodes.lua msgid "Offset Wooden Tile" msgstr "" #: nodes.lua msgid "Downwards Wooden Tile" msgstr "" #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "" #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "Spiacente, quel punto è di proprietà di @1" #: ownership.lua msgid "someone" msgstr "qualcuno" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "Microblocco %s" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "Lastra - %s" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "Pannello - %s" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "Scale - %s" moreblocks-2.2.0/locale/pl.po000066400000000000000000000117641406645002200160750ustar00rootroot00000000000000# Polish translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # mat9117, 2019 # CodeXP , 2018. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "Piła tarczowa" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" "wejście\n" "materiał" #: circular_saw.lua msgid "Left-over" msgstr "Resztki" #: circular_saw.lua msgid "Max" msgstr "Maks" #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" "Przetwarzanie\n" "Wyjście" #: circular_saw.lua msgid "Set" msgstr "Ustaw" #: circular_saw.lua msgid "owned by @1" msgstr "Należy do @1" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "Piła tarczowa jest pusta" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "Piła tarczowa pracuje na @1" #: init.lua msgid "[moreblocks] loaded." msgstr "[moreblocks] załadowane." #: nodes.lua msgid "Deprecated" msgstr "Przestarzałe" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "Wielostronna tekstura akacji" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "Wielostronna tekstura osiki" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "Wielostronna tekstura drzewa dżunglowego" #: nodes.lua msgid "All-faces Pine Tree" msgstr "Wielostronna tekstura sosny" #: nodes.lua msgid "All-faces Tree" msgstr "Wielostronna tekstura drzewa" #: nodes.lua msgid "Cactus Brick" msgstr "Kaktusowa cegła" #: nodes.lua msgid "Cactus Checker" msgstr "Kaktusowa szachownica" #: nodes.lua msgid "Centered Wooden Tile" msgstr "Wyśrodkowany drewniany kafelek" #: nodes.lua msgid "Checker Stone Tile" msgstr "Kamienna szachownica" #: nodes.lua msgid "Circle Stone Bricks" msgstr "Okrągłe kamienne cegły" #: nodes.lua msgid "Clean Glass" msgstr "Czyste szkło" #: nodes.lua msgid "Coal Checker" msgstr "Węglowa szachownica" #: nodes.lua msgid "Coal Glass" msgstr "Szkło węglowe" #: nodes.lua msgid "Coal Stone" msgstr "Kamień węglowy" #: nodes.lua msgid "Coal Stone Bricks" msgstr "Węglowe kamienne cegły" #: nodes.lua msgid "Compressed Cobblestone" msgstr "Skompresowany bruk" #: nodes.lua msgid "Compressed Desert Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Dirt" msgstr "Skompresowana ziemia" #: nodes.lua msgid "Copper Patina Block" msgstr "Blok patynowanej miedzi" #: nodes.lua msgid "Empty Shelf" msgstr "Pusta półka" #: nodes.lua msgid "Full Wooden Tile" msgstr "Pełny drewniany kafelek" #: nodes.lua msgid "Glow Glass" msgstr "Świecące szkło" #: nodes.lua msgid "Iron Checker" msgstr "Żelazna szachownica" #: nodes.lua msgid "Iron Glass" msgstr "Żelazne szkło" #: nodes.lua msgid "Iron Stone" msgstr "Żelazny kamień" #: nodes.lua msgid "Iron Stone Bricks" msgstr "Żelazne kamienne cegły" #: nodes.lua msgid "Plankstone" msgstr "Deskokamień" #: nodes.lua msgid "Rope" msgstr "Lina" #: nodes.lua msgid "Split Stone Tile" msgstr "Kamienny blok kafelkowy" #: nodes.lua msgid "Stone Bricks" msgstr "Kamienne cegły" #: nodes.lua msgid "Stone Tile" msgstr "Kamienny kafelek" #: nodes.lua msgid "Super Glow Glass" msgstr "Super świecące szkło" #: nodes.lua msgid "Sweeper" msgstr "Miotła" #: nodes.lua msgid "Tar" msgstr "Smoła" #: nodes.lua msgid "Trap Desert Stone" msgstr "Pułapka z pustynnego kamienia" #: nodes.lua msgid "Trap Glass" msgstr "Szklana pułapka" #: nodes.lua msgid "Trap Glow Glass" msgstr "Pułapka ze świecącego szkłą" #: nodes.lua msgid "Trap Obsidian" msgstr "Obsydianowa pułapka" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "Pułapka z obsydianowego szkła" #: nodes.lua msgid "Trap Sandstone" msgstr "Pułapka z piaskowca" #: nodes.lua msgid "Trap Stone" msgstr "Kamienna pułapka" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "Pułapka z super świecącego szkła" #: nodes.lua msgid "Wooden Tile" msgstr "Drewniany kafelek" #: nodes.lua msgid "Offset Wooden Tile" msgstr "" # @deprecated #: nodes.lua msgid "Downwards Wooden Tile" msgstr "Dolny drewniany kafelek" # @deprecated #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "Lewy drewniany kafelek" # @deprecated #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "Prawy drewniany kafelek" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "Przykro mi, to miejsce należy do @1" #: ownership.lua msgid "someone" msgstr "ktoś" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "%s Mikroblok" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "%s Płyta" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "%s Spad" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "%s Panel" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "%s Schody" moreblocks-2.2.0/locale/ru.po000066400000000000000000000137171406645002200161100ustar00rootroot00000000000000# Russian translation for MOREBLOCKS minetest mod. # Copyright (C) 2018 Hugo Locurcio and contributors # This file is distributed under the same license as the MOREBLOCKS package. # CodeXP , 2018. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: MOREBLOCKS MOD\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 23:30+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "циркулярная пила" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" "Входной\n" "материал" #: circular_saw.lua msgid "Left-over" msgstr "Остатки" #: circular_saw.lua msgid "Max" msgstr "Кол." #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" "Пере-\n" "обработка" #: circular_saw.lua msgid "Set" msgstr "ОК" #: circular_saw.lua msgid "owned by @1" msgstr "принадлежит @1" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "циркулярная пила пустая" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "циркулярная пила, @1 в обработке" #: init.lua msgid "[MOD] moreblocks loaded." msgstr "[MOD] moreblocks загружен." #: nodes.lua msgid "Deprecated" msgstr "устаревший" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "всестороннее бревно акации" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "всестороннее бревно осины" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "всестороннее бревно дерева джунглей" #: nodes.lua msgid "All-faces Pine Tree" msgstr "всестороннее бревно сосновое" #: nodes.lua msgid "All-faces Tree" msgstr "всестороннее бревно дерева" #: nodes.lua msgid "Cactus Brick" msgstr "кирпич из кактуса" #: nodes.lua msgid "Cactus Checker" msgstr "мозаика из кактуса" #: nodes.lua msgid "Centered Wooden Tile" msgstr "деревянная мозаика (центр)" #: nodes.lua msgid "Checker Stone Tile" msgstr "каменная мозаика" #: nodes.lua msgid "Circle Stone Bricks" msgstr "кольцевой камень" #: nodes.lua msgid "Clean Glass" msgstr "чистое стекло" #: nodes.lua msgid "Coal Checker" msgstr "угольная мозаика" #: nodes.lua msgid "Coal Glass" msgstr "угольное стекло" #: nodes.lua msgid "Coal Stone" msgstr "угольный камень" #: nodes.lua msgid "Coal Stone Bricks" msgstr "угольно-каменный кирпич" #: nodes.lua msgid "Compressed Cobblestone" msgstr "прессованный булыжник" #: nodes.lua msgid "Compressed Desert Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Dirt" msgstr "прессованная земля" #: nodes.lua msgid "Copper Patina Block" msgstr "медный патинированный блок" #: nodes.lua msgid "Empty Shelf" msgstr "пустые полки" #: nodes.lua msgid "Full Wooden Tile" msgstr "деревянная мозаика" #: nodes.lua msgid "Glow Glass" msgstr "светящееся стекло" #: nodes.lua msgid "Iron Checker" msgstr "стальная мозаика" #: nodes.lua msgid "Iron Glass" msgstr "металлизированное стекло" #: nodes.lua msgid "Iron Stone" msgstr "железный камень" #: nodes.lua msgid "Iron Stone Bricks" msgstr "железно-каменный кирпич" #: nodes.lua msgid "Plankstone" msgstr "дерево-каменная мозаика" #: nodes.lua msgid "Rope" msgstr "верёвка" #: nodes.lua msgid "Split Stone Tile" msgstr "каменная мозаика" #: nodes.lua msgid "Stone Bricks" msgstr "каменный кирпич" #: nodes.lua msgid "Stone Tile" msgstr "каменная плитка" #: nodes.lua msgid "Super Glow Glass" msgstr "супер светящееся стекло" #: nodes.lua msgid "Sweeper" msgstr "метёлка" #: nodes.lua msgid "Tar" msgstr "смола" #: nodes.lua msgid "Trap Desert Stone" msgstr "мнимый пустынный камень" #: nodes.lua msgid "Trap Glass" msgstr "мнимое стекло" #: nodes.lua msgid "Trap Glow Glass" msgstr "мнимое светящееся стекло" #: nodes.lua msgid "Trap Obsidian" msgstr "мнимый обсидиан" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "мнимое обсидиановое стекло" #: nodes.lua msgid "Trap Sandstone" msgstr "мнимый песчаник" #: nodes.lua msgid "Trap Stone" msgstr "мнимый камень" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "мнимое супер светящееся стекло" #: nodes.lua msgid "Wooden Tile" msgstr "деревянная мозаика" #: nodes.lua msgid "Offset Wooden Tile" msgstr "деревянная мозаика (сверху)" # @deprecated #: nodes.lua msgid "Downwards Wooden Tile" msgstr "деревянная мозаика (снизу)" # @deprecated #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "деревянная мозаика (слева)" # @deprecated #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "деревянная мозаика (справа)" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "Извините, это принадлежит @1." #: ownership.lua msgid "someone" msgstr "кому-то" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "%s (микроблок)" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "%s (плита)" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "%s (наклон)" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "%s (панель)" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "%s (лестница)" moreblocks-2.2.0/locale/template.pot000066400000000000000000000074531406645002200174610ustar00rootroot00000000000000# Template translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # CodeXP , 2018. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" #: circular_saw.lua msgid "Left-over" msgstr "" #: circular_saw.lua msgid "Max" msgstr "" #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" #: circular_saw.lua msgid "Set" msgstr "" #: circular_saw.lua msgid "owned by @1" msgstr "" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "" #: init.lua msgid "[moreblocks] loaded." msgstr "" #: nodes.lua msgid "Deprecated" msgstr "" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "" #: nodes.lua msgid "All-faces Pine Tree" msgstr "" #: nodes.lua msgid "All-faces Tree" msgstr "" #: nodes.lua msgid "Cactus Brick" msgstr "" #: nodes.lua msgid "Cactus Checker" msgstr "" #: nodes.lua msgid "Centered Wooden Tile" msgstr "" #: nodes.lua msgid "Checker Stone Tile" msgstr "" #: nodes.lua msgid "Circle Stone Bricks" msgstr "" #: nodes.lua msgid "Clean Glass" msgstr "" #: nodes.lua msgid "Coal Checker" msgstr "" #: nodes.lua msgid "Coal Glass" msgstr "" #: nodes.lua msgid "Coal Stone" msgstr "" #: nodes.lua msgid "Coal Stone Bricks" msgstr "" #: nodes.lua msgid "Compressed Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Desert Cobblestone" msgstr "" #: nodes.lua msgid "Compressed Dirt" msgstr "" #: nodes.lua msgid "Copper Patina Block" msgstr "" #: nodes.lua msgid "Empty Shelf" msgstr "" #: nodes.lua msgid "Full Wooden Tile" msgstr "" #: nodes.lua msgid "Glow Glass" msgstr "" #: nodes.lua msgid "Iron Checker" msgstr "" #: nodes.lua msgid "Iron Glass" msgstr "" #: nodes.lua msgid "Iron Stone" msgstr "" #: nodes.lua msgid "Iron Stone Bricks" msgstr "" #: nodes.lua msgid "Plankstone" msgstr "" #: nodes.lua msgid "Rope" msgstr "" #: nodes.lua msgid "Split Stone Tile" msgstr "" #: nodes.lua msgid "Stone Bricks" msgstr "" #: nodes.lua msgid "Stone Tile" msgstr "" #: nodes.lua msgid "Super Glow Glass" msgstr "" #: nodes.lua msgid "Sweeper" msgstr "" #: nodes.lua msgid "Tar" msgstr "" #: nodes.lua msgid "Trap Desert Stone" msgstr "" #: nodes.lua msgid "Trap Glass" msgstr "" #: nodes.lua msgid "Trap Glow Glass" msgstr "" #: nodes.lua msgid "Trap Obsidian" msgstr "" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "" #: nodes.lua msgid "Trap Sandstone" msgstr "" #: nodes.lua msgid "Trap Stone" msgstr "" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "" #: nodes.lua msgid "Wooden Tile" msgstr "" #: nodes.lua msgid "Offset Wooden Tile" msgstr "" # @deprecated #: nodes.lua msgid "Downwards Wooden Tile" msgstr "" # @deprecated #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "" # @deprecated #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "" #: ownership.lua msgid "someone" msgstr "" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "" moreblocks-2.2.0/locale/zh_CN.po000066400000000000000000000111041406645002200164470ustar00rootroot00000000000000# Template translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # IFRFSX , 2020. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "圆锯" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" "输入\n" "材料" #: circular_saw.lua msgid "Left-over" msgstr "剩余材料" #: circular_saw.lua msgid "Max" msgstr "最大值" #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" "回收\n" "输出物" #: circular_saw.lua msgid "Set" msgstr "设置" #: circular_saw.lua msgid "owned by @1" msgstr "属于@1所有" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "圆锯是空的" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "圆锯正在加工@1" #: init.lua msgid "[moreblocks] loaded." msgstr "[moreblocks] 已加载" #: nodes.lua msgid "Deprecated" msgstr "弃用" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "全切面相思树木方块" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "全切面白杨树木方块" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "全切面丛林树木方块" #: nodes.lua msgid "All-faces Pine Tree" msgstr "全切面松树木方块" #: nodes.lua msgid "All-faces Tree" msgstr "全切面树木方块" #: nodes.lua msgid "Cactus Brick" msgstr "仙人掌砖" #: nodes.lua msgid "Cactus Checker" msgstr "仙人掌棋盘方块" #: nodes.lua msgid "Centered Wooden Tile" msgstr "居中的木瓦" #: nodes.lua msgid "Checker Stone Tile" msgstr "棋盘石瓦" #: nodes.lua msgid "Circle Stone Bricks" msgstr "圆石砖" #: nodes.lua msgid "Clean Glass" msgstr "干净的玻璃" #: nodes.lua msgid "Coal Checker" msgstr "棋盘煤块" #: nodes.lua msgid "Coal Glass" msgstr "煤玻璃" #: nodes.lua msgid "Coal Stone" msgstr "煤炭石" #: nodes.lua msgid "Coal Stone Bricks" msgstr "煤炭石砖" #: nodes.lua msgid "Compressed Cobblestone" msgstr "压缩圆石" #: nodes.lua msgid "Compressed Dirt" msgstr "压缩土" #: nodes.lua msgid "Copper Patina Block" msgstr "铜绿方块" #: nodes.lua msgid "Empty Shelf" msgstr "空书架" #: nodes.lua msgid "Full Wooden Tile" msgstr "全木瓦" #: nodes.lua msgid "Glow Glass" msgstr "发光玻璃" #: nodes.lua msgid "Iron Checker" msgstr "棋盘铁方块" #: nodes.lua msgid "Iron Glass" msgstr "铁玻璃" #: nodes.lua msgid "Iron Stone" msgstr "铁石" #: nodes.lua msgid "Iron Stone Bricks" msgstr "铁石砖" #: nodes.lua msgid "Plankstone" msgstr "板石" #: nodes.lua msgid "Rope" msgstr "绳子" #: nodes.lua msgid "Split Stone Tile" msgstr "裂石砖" #: nodes.lua msgid "Stone Bricks" msgstr "石砖" #: nodes.lua msgid "Stone Tile" msgstr "石瓦" #: nodes.lua msgid "Super Glow Glass" msgstr "超级发光玻璃" #: nodes.lua msgid "Sweeper" msgstr "清扫器" #: nodes.lua msgid "Tar" msgstr "焦油" #: nodes.lua msgid "Trap Desert Stone" msgstr "陷阱沙漠石" #: nodes.lua msgid "Trap Glass" msgstr "陷阱玻璃" #: nodes.lua msgid "Trap Glow Glass" msgstr "陷阱发光玻璃" #: nodes.lua msgid "Trap Obsidian" msgstr "陷阱黑耀石" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "陷阱黑耀石玻璃" #: nodes.lua msgid "Trap Sandstone" msgstr "陷阱沙石" #: nodes.lua msgid "Trap Stone" msgstr "陷阱石" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "陷阱超级发光玻璃" #: nodes.lua msgid "Wooden Tile" msgstr "木瓦" #: nodes.lua msgid "Offset Wooden Tile" msgstr "胶合木瓦" # @deprecated #: nodes.lua msgid "Downwards Wooden Tile" msgstr "向下的木瓦" # @deprecated #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "向左的木瓦" # @deprecated #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "向右的木瓦" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "抱歉,那个位置是@1的。" #: ownership.lua msgid "someone" msgstr "某人" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "%s 小方块" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "%s 台阶" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "%s 斜坡" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "%s 嵌板" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "%s 楼梯" moreblocks-2.2.0/locale/zh_TW.po000066400000000000000000000111041406645002200165010ustar00rootroot00000000000000# Template translation for More Blocks. # Copyright © 2011-2020 Hugo Locurcio and contributors # This file is distributed under the same license as the More Blocks package. # IFRFSX , 2020. msgid "" msgstr "" "Project-Id-Version: More Blocks\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2018-07-13 12:37+0200\n" "PO-Revision-Date: \n" "Last-Translator: CodeXP \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: circular_saw.lua msgid "Circular Saw" msgstr "圓鋸" #: circular_saw.lua msgid "" "Input\n" "material" msgstr "" "輸入\n" "材料" #: circular_saw.lua msgid "Left-over" msgstr "剩餘材料" #: circular_saw.lua msgid "Max" msgstr "最大值" #: circular_saw.lua msgid "" "Recycle\n" "output" msgstr "" "回收\n" "輸出物" #: circular_saw.lua msgid "Set" msgstr "設置" #: circular_saw.lua msgid "owned by @1" msgstr "屬於@1所有" #: circular_saw.lua msgid "Circular Saw is empty" msgstr "圓鋸是空的" #: circular_saw.lua msgid "Circular Saw is working on @1" msgstr "圓鋸正在加工@1" #: init.lua msgid "[moreblocks] loaded." msgstr "[moreblocks] 已加載" #: nodes.lua msgid "Deprecated" msgstr "棄用" #: nodes.lua msgid "All-faces Acacia Tree" msgstr "全切面相思樹木方塊" #: nodes.lua msgid "All-faces Aspen Tree" msgstr "全切面白楊樹木方塊" #: nodes.lua msgid "All-faces Jungle Tree" msgstr "全切面叢林樹木方塊" #: nodes.lua msgid "All-faces Pine Tree" msgstr "全切面松樹木方塊" #: nodes.lua msgid "All-faces Tree" msgstr "全切面樹木方塊" #: nodes.lua msgid "Cactus Brick" msgstr "仙人掌磚" #: nodes.lua msgid "Cactus Checker" msgstr "仙人掌棋盤方塊" #: nodes.lua msgid "Centered Wooden Tile" msgstr "居中的木瓦" #: nodes.lua msgid "Checker Stone Tile" msgstr "棋盤石瓦" #: nodes.lua msgid "Circle Stone Bricks" msgstr "圓石磚" #: nodes.lua msgid "Clean Glass" msgstr "乾淨的玻璃" #: nodes.lua msgid "Coal Checker" msgstr "棋盤煤塊" #: nodes.lua msgid "Coal Glass" msgstr "煤玻璃" #: nodes.lua msgid "Coal Stone" msgstr "煤炭石" #: nodes.lua msgid "Coal Stone Bricks" msgstr "煤炭石磚" #: nodes.lua msgid "Compressed Cobblestone" msgstr "壓縮圓石" #: nodes.lua msgid "Compressed Dirt" msgstr "壓縮土" #: nodes.lua msgid "Copper Patina Block" msgstr "銅綠方塊" #: nodes.lua msgid "Empty Shelf" msgstr "空書架" #: nodes.lua msgid "Full Wooden Tile" msgstr "全木瓦" #: nodes.lua msgid "Glow Glass" msgstr "發光玻璃" #: nodes.lua msgid "Iron Checker" msgstr "棋盤鐵方塊" #: nodes.lua msgid "Iron Glass" msgstr "鐵玻璃" #: nodes.lua msgid "Iron Stone" msgstr "鐵石" #: nodes.lua msgid "Iron Stone Bricks" msgstr "鐵石磚" #: nodes.lua msgid "Plankstone" msgstr "板石" #: nodes.lua msgid "Rope" msgstr "繩子" #: nodes.lua msgid "Split Stone Tile" msgstr "裂石磚" #: nodes.lua msgid "Stone Bricks" msgstr "石磚" #: nodes.lua msgid "Stone Tile" msgstr "石瓦" #: nodes.lua msgid "Super Glow Glass" msgstr "超級發光玻璃" #: nodes.lua msgid "Sweeper" msgstr "清掃器" #: nodes.lua msgid "Tar" msgstr "焦油" #: nodes.lua msgid "Trap Desert Stone" msgstr "陷阱沙漠石" #: nodes.lua msgid "Trap Glass" msgstr "陷阱玻璃" #: nodes.lua msgid "Trap Glow Glass" msgstr "陷阱發光玻璃" #: nodes.lua msgid "Trap Obsidian" msgstr "陷阱黑耀石" #: nodes.lua msgid "Trap Obsidian Glass" msgstr "陷阱黑耀石玻璃" #: nodes.lua msgid "Trap Sandstone" msgstr "陷阱沙石" #: nodes.lua msgid "Trap Stone" msgstr "陷阱石" #: nodes.lua msgid "Trap Super Glow Glass" msgstr "陷阱超級發光玻璃" #: nodes.lua msgid "Wooden Tile" msgstr "木瓦" #: nodes.lua msgid "Offset Wooden Tile" msgstr "膠合木瓦" # @deprecated #: nodes.lua msgid "Downwards Wooden Tile" msgstr "向下的木瓦" # @deprecated #: nodes.lua msgid "Leftwards Wooden Tile" msgstr "向左的木瓦" # @deprecated #: nodes.lua msgid "Rightwards Wooden Tile" msgstr "向右的木瓦" #: ownership.lua msgid "Sorry, @1 owns that spot." msgstr "抱歉,那個位置是@1的。" #: ownership.lua msgid "someone" msgstr "某人" #: stairsplus/common.lua #, lua-format msgid "%s Microblock" msgstr "%s 小方塊" #: stairsplus/common.lua stairsplus/slabs.lua #, lua-format msgid "%s Slab" msgstr "%s 臺階" #: stairsplus/common.lua #, lua-format msgid "%s Slope" msgstr "%s 斜坡" #: stairsplus/common.lua #, lua-format msgid "%s Panel" msgstr "%s 嵌板" #: stairsplus/common.lua #, lua-format msgid "%s Stairs" msgstr "%s 樓梯" moreblocks-2.2.0/mod.conf000066400000000000000000000002751406645002200153040ustar00rootroot00000000000000name = moreblocks description = Adds various miscellaneous blocks to the game. depends = default optional_depends = intllib,stairs,farming,wool,basic_materials min_minetest_version = 5.0.0 moreblocks-2.2.0/models/000077500000000000000000000000001406645002200151355ustar00rootroot00000000000000moreblocks-2.2.0/models/moreblocks_slope.obj000066400000000000000000000022371406645002200211770ustar00rootroot00000000000000g top v 0.500000 0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 0.7071 -0.7071 s off f 2/1/1 1/2/1 4/3/1 3/4/1 g bottom v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s off f 6/5/2 5/6/2 7/7/2 8/8/2 g right v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -1.0000 0.0000 0.0000 s off f 9/9/3 11/10/3 10/11/3 g left v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 12/12/4 13/13/4 14/14/4 g back v 0.500000 0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -0.0000 1.0000 s off f 15/15/5 16/16/5 17/17/5 18/18/5 moreblocks-2.2.0/models/moreblocks_slope_cut.obj000066400000000000000000000026371406645002200220560ustar00rootroot00000000000000g top v 0.500000 0.500000 0.500000 v -0.500000 -0.000000 0.500000 v 0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.5000 0.0000 vt 1.0000 1.0000 vt 0.5000 2.0000 vt 0.0000 1.0000 vn -0.4082 0.8165 -0.4082 s 1 f 4/1/1 2/2/1 1/3/1 3/4/1 g bottom v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -1.0000 -0.0000 s 1 f 6/5/2 5/6/2 8/7/2 7/8/2 g right v -0.500000 -0.500000 0.500000 v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vn -1.0000 0.0000 0.0000 s 1 f 11/9/3 9/10/3 10/11/3 g left v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vt 0.0000 1.0000 vn 1.0000 0.0000 0.0000 s 1 f 12/12/4 14/13/4 15/14/4 13/15/4 g back v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 v -0.500000 -0.000000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 0.5000 vn -0.0000 -0.0000 1.0000 s 1 f 16/16/5 17/17/5 18/18/5 19/19/5 g front v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 0.0000 0.5000 vn 0.0000 0.0000 -1.0000 s 1 f 20/20/6 22/21/6 21/22/6 moreblocks-2.2.0/models/moreblocks_slope_half.obj000066400000000000000000000022451406645002200221700ustar00rootroot00000000000000g top v 0.500000 -0.000000 0.500000 v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 0.8944 -0.4472 s off f 2/1/1 1/2/1 4/3/1 3/4/1 g bottom v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s off f 6/5/2 5/6/2 7/7/2 8/8/2 g right v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -1.0000 0.0000 0.0000 s off f 9/9/3 11/10/3 10/11/3 g left v 0.500000 -0.000000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 12/12/4 13/13/4 14/14/4 g back v 0.500000 -0.000000 0.500000 v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 0.5000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -0.0000 1.0000 s off f 15/15/5 16/16/5 17/17/5 18/18/5 moreblocks-2.2.0/models/moreblocks_slope_half_raised.obj000066400000000000000000000030251406645002200235140ustar00rootroot00000000000000g top v -0.500000 0.500000 0.500000 v -0.500000 0.000000 -0.500000 v 0.500000 0.000000 -0.500000 v 0.500000 0.500000 0.500000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vn 0.0000 0.8944 -0.4472 s off f 2/1/1 1/2/1 4/3/1 3/4/1 g bottom v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vn 0.0000 -1.0000 -0.0000 s off f 6/5/2 5/6/2 7/7/2 8/8/2 g right v -0.500000 0.500000 0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -1.0000 0.0000 0.0000 s off f 9/9/3 10/10/3 11/11/3 12/12/3 g left v 0.500000 0.000000 -0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 0.5000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 13/13/4 15/14/4 16/15/4 14/16/4 g back v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -0.0000 1.0000 s off f 19/17/5 17/18/5 18/19/5 20/20/5 g front v -0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 0.5000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 0.0000 -1.0000 s off f 21/21/6 23/22/6 24/23/6 22/24/6 moreblocks-2.2.0/models/moreblocks_slope_inner.obj000066400000000000000000000032371406645002200223730ustar00rootroot00000000000000g top v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vn 0.0000 0.7071 -0.7071 vn -0.7071 0.7071 0.0000 s 1 f 3/1/1 2/2/1 4/3/1 f 2/4/2 1/5/2 5/6/2 g bottom v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -1.0000 -0.0000 s 1 f 9/7/3 7/8/3 6/9/3 8/10/3 l 8 10 g right v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -1.0000 0.0000 0.0000 s 1 f 11/11/4 12/12/4 13/13/4 g left v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s 1 f 14/14/5 15/15/5 16/16/5 17/17/5 l 15 18 g back v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -0.0000 1.0000 s 1 f 22/18/6 20/19/6 19/20/6 21/21/6 l 22 23 l 19 23 g front v 0.500000 0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 0.0000 -1.0000 s 1 f 24/22/7 25/23/7 27/24/7 moreblocks-2.2.0/models/moreblocks_slope_inner_cut.obj000066400000000000000000000027451406645002200232510ustar00rootroot00000000000000g top v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.5000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn -0.5774 0.5774 -0.5774 s 1 f 3/1/1 2/2/1 1/3/1 f 4/4/2 3/5/2 1/6/2 g bottom v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s 1 f 6/7/3 5/8/3 7/9/3 8/10/3 g right v -0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vn -1.0000 0.0000 0.0000 s 1 f 11/11/4 9/12/4 10/13/4 g left v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 1.0000 0.0000 0.0000 s 1 f 12/14/5 13/15/5 14/16/5 15/17/5 g back v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -0.0000 1.0000 s 1 f 18/18/6 16/19/6 17/20/6 19/21/6 g front v 0.500000 -0.500000 -0.500000 v 0.500000 0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 0.0000 1.0000 vn 0.0000 0.0000 -1.0000 s 1 f 20/22/7 22/23/7 21/24/7 moreblocks-2.2.0/models/moreblocks_slope_inner_cut_half.obj000066400000000000000000000027531406645002200242420ustar00rootroot00000000000000g top v 0.500000 0.000000 -0.500000 v 0.500000 -0.000000 0.500000 v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.5000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn -0.4082 0.8165 -0.4082 s 1 f 3/1/1 2/2/1 1/3/1 f 4/4/2 3/5/2 1/6/2 g bottom v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s 1 f 6/7/3 5/8/3 7/9/3 8/10/3 g right v -0.500000 -0.500000 0.500000 v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vn -1.0000 0.0000 0.0000 s 1 f 11/11/4 9/12/4 10/13/4 g left v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 v 0.500000 -0.000000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vt 0.0000 0.5000 vn 1.0000 0.0000 0.0000 s 1 f 12/14/5 13/15/5 14/16/5 15/17/5 g back v 0.500000 -0.500000 0.500000 v 0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.000000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vt 0.0000 0.5000 vn 0.0000 -0.0000 1.0000 s 1 f 18/18/6 16/19/6 17/20/6 19/21/6 g front v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 0.0000 0.5000 vn 0.0000 0.0000 -1.0000 s 1 f 20/22/7 22/23/7 21/24/7 moreblocks-2.2.0/models/moreblocks_slope_inner_cut_half_raised.obj000066400000000000000000000031251406645002200255630ustar00rootroot00000000000000g top v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 0.000000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.5000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn -0.4082 0.8165 -0.4082 s 1 f 3/1/1 2/2/1 1/3/1 f 4/4/2 3/5/2 1/6/2 g bottom v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s 1 f 6/7/3 5/8/3 7/9/3 8/10/3 g right v -0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 0.000000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 0.5000 vn -1.0000 0.0000 0.0000 s 1 f 11/11/4 9/12/4 10/13/4 12/14/4 g left v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 1.0000 0.0000 0.0000 s 1 f 13/15/5 14/16/5 15/17/5 16/18/5 g back v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -0.0000 1.0000 s 1 f 19/19/6 17/20/6 18/21/6 20/22/6 g front v 0.500000 -0.500000 -0.500000 v 0.500000 0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 0.000000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vt 0.0000 1.0000 vn -0.0000 0.0000 -1.0000 s 1 f 21/23/7 23/24/7 24/25/7 22/26/7 moreblocks-2.2.0/models/moreblocks_slope_inner_half.obj000066400000000000000000000034001406645002200233550ustar00rootroot00000000000000g top v 0.500000 0.000000 -0.500000 v 0.500000 -0.000000 0.500000 v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vn 0.0000 0.8944 -0.4472 vn -0.4472 0.8944 0.0000 s off f 3/1/1 2/2/1 4/3/1 f 2/4/2 1/5/2 5/6/2 g bottom v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -1.0000 -0.0000 s off f 10/7/3 7/8/3 6/9/3 9/10/3 l 9 8 l 11 9 g right v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -1.0000 0.0000 0.0000 s off f 12/11/4 13/12/4 14/13/4 l 15 14 g left v 0.500000 0.000000 -0.500000 v 0.500000 -0.000000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 16/14/5 17/15/5 18/16/5 19/17/5 l 20 17 g back v 0.500000 -0.000000 0.500000 v 0.500000 -0.500000 0.500000 v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -0.0000 1.0000 s off f 24/18/6 22/19/6 21/20/6 23/21/6 l 25 24 l 25 21 g front v 0.500000 0.000000 -0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 0.0000 -1.0000 s off f 26/22/7 27/23/7 29/24/7 moreblocks-2.2.0/models/moreblocks_slope_inner_half_raised.obj000066400000000000000000000034561406645002200247170ustar00rootroot00000000000000g top v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 0.000000 -0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 1.0000 0.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 0.8944 -0.4472 vn -0.4472 0.8944 0.0000 s off f 3/1/1 2/2/1 4/3/1 f 2/2/2 1/4/2 5/5/2 g bottom v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -1.0000 -0.0000 s off f 8/6/3 9/7/3 7/8/3 6/9/3 l 10 8 g right v -0.500000 0.500000 0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 0.5000 vt 0.0000 0.0000 vn -1.0000 0.0000 0.0000 s off f 13/10/4 11/11/4 12/12/4 15/13/4 g left v 0.500000 0.500000 -0.500000 v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 16/14/5 17/15/5 18/16/5 19/17/5 l 20 17 g back v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 v -0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 1.0000 vn 0.0000 -0.0000 1.0000 s off f 24/18/6 22/19/6 21/20/6 23/21/6 l 25 21 l 25 24 g front v 0.500000 0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 0.5000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -0.0000 0.0000 -1.0000 s off f 28/22/7 26/23/7 27/24/7 30/25/7 l 29 26 moreblocks-2.2.0/models/moreblocks_slope_outer.obj000066400000000000000000000017441406645002200224170ustar00rootroot00000000000000g top v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -0.7071 0.7071 0.0000 vn 0.0000 0.7071 -0.7071 s off f 4/1/1 2/2/1 1/3/1 f 4/4/2 3/5/2 2/6/2 g bottom v 0.500000 -0.500000 0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -1.0000 -0.0000 s off f 5/7/3 6/8/3 7/9/3 8/10/3 g right v 0.500000 -0.500000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vn 0.0000 -0.0000 1.0000 s off f 10/11/4 9/12/4 11/13/4 g left v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.500000 0.500000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 14/14/5 12/15/5 13/16/5 moreblocks-2.2.0/models/moreblocks_slope_outer_cut.obj000066400000000000000000000014501406645002200232640ustar00rootroot00000000000000g top v 0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 0.0000 vt 0.5000 1.0000 vt 0.0000 0.0000 vn -0.5774 0.5774 -0.5774 s off f 2/1/1 1/2/1 3/3/1 g bottom v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s off f 5/4/2 4/5/2 6/6/2 g right v 0.500000 0.500000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -0.0000 1.0000 s off f 7/7/3 8/8/3 9/9/3 g left v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 0.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 12/10/4 10/11/4 11/12/4 moreblocks-2.2.0/models/moreblocks_slope_outer_cut_half.obj000066400000000000000000000014531406645002200242610ustar00rootroot00000000000000g top v 0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 0.0000 vt 0.5000 1.0000 vt 0.0000 0.0000 vn -0.4082 0.8165 -0.4082 s off f 2/1/1 1/2/1 3/3/1 g bottom v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s off f 5/4/2 4/5/2 6/6/2 g right v 0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -0.0000 1.0000 s off f 7/7/3 8/8/3 9/9/3 g left v 0.500000 -0.000000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 1.0000 0.0000 vt 0.0000 0.5000 vt 0.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 12/10/4 10/11/4 11/12/4 moreblocks-2.2.0/models/moreblocks_slope_outer_cut_half_raised.obj000066400000000000000000000022371406645002200256110ustar00rootroot00000000000000g top v -0.500000 -0.000000 0.500000 v 0.500000 0.500000 0.500000 v 0.500000 0.000000 -0.500000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vn -0.4082 0.8165 -0.4082 s off f 1/1/1 2/2/1 3/3/1 g bottom v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 vt 0.0000 1.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s off f 4/4/2 6/5/2 5/6/2 g right v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 vt 1.0000 0.0000 vt 1.0000 0.5000 vt 0.0000 0.5000 vt 0.0000 0.0000 vn -0.7071 0.0000 -0.7071 s off f 8/7/3 7/8/3 10/9/3 9/10/3 g left v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vn 1.0000 0.0000 0.0000 s off f 12/11/4 11/12/4 13/13/4 14/14/4 g back v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vn -0.0000 -0.0000 1.0000 s off f 15/15/5 16/16/5 17/17/5 18/18/5 moreblocks-2.2.0/models/moreblocks_slope_outer_half.obj000066400000000000000000000017471406645002200234140ustar00rootroot00000000000000g top v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 -0.000000 0.500000 vt 1.0000 0.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vt 0.0000 0.0000 vn 0.0000 0.8944 -0.4472 vn -0.4472 0.8944 0.0000 s off f 2/1/1 4/2/1 3/3/1 f 1/4/2 4/5/2 2/6/2 g bottom v -0.500000 -0.500000 0.500000 v -0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 vt 1.0000 1.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -1.0000 -0.0000 s off f 5/7/3 6/8/3 7/9/3 8/10/3 g right v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.000000 0.500000 vt 1.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn 0.0000 -0.0000 1.0000 s off f 11/11/4 9/12/4 10/13/4 g left v 0.500000 -0.500000 -0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.000000 0.500000 vt 1.0000 0.0000 vt 0.0000 0.5000 vt 0.0000 0.0000 vn 1.0000 0.0000 0.0000 s off f 12/14/5 14/15/5 13/16/5 moreblocks-2.2.0/models/moreblocks_slope_outer_half_raised.obj000066400000000000000000000031001406645002200247240ustar00rootroot00000000000000g top v -0.500000 -0.000000 0.500000 v 0.500000 0.500000 0.500000 v 0.500000 0.000000 -0.500000 v -0.500000 0.000000 -0.500000 vt 1.0000 0.0000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 1.0000 vn 0.0000 0.8944 -0.4472 vn -0.4472 0.8944 0.0000 s off f 4/1/1 2/2/1 3/3/1 f 4/1/2 1/4/2 2/2/2 g bottom v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vn 0.0000 -1.0000 -0.0000 s off f 7/5/3 6/6/3 5/7/3 8/8/3 g right v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 1.0000 0.5000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vn -1.0000 0.0000 0.0000 s off f 9/9/4 11/10/4 12/11/4 10/12/4 g left v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 vt 0.0000 1.0000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vn 1.0000 0.0000 0.0000 s off f 14/13/5 13/14/5 15/15/5 16/16/5 g back v -0.500000 -0.000000 0.500000 v -0.500000 -0.500000 0.500000 v 0.500000 -0.500000 0.500000 v 0.500000 0.500000 0.500000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 1.0000 vn -0.0000 -0.0000 1.0000 s off f 17/17/6 18/18/6 19/19/6 20/20/6 g front v 0.500000 -0.500000 -0.500000 v 0.500000 0.000000 -0.500000 v -0.500000 0.000000 -0.500000 v -0.500000 -0.500000 -0.500000 vt 0.0000 0.5000 vt 0.0000 0.0000 vt 1.0000 0.0000 vt 1.0000 0.5000 vn 0.0000 0.0000 -1.0000 s off f 22/21/7 21/22/7 24/23/7 23/24/7 moreblocks-2.2.0/nodes.lua000066400000000000000000000445041406645002200154740ustar00rootroot00000000000000--[[ More Blocks: node definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] local S = moreblocks.S local sound_dirt = default.node_sound_dirt_defaults() local sound_wood = default.node_sound_wood_defaults() local sound_stone = default.node_sound_stone_defaults() local sound_glass = default.node_sound_glass_defaults() local sound_leaves = default.node_sound_leaves_defaults() -- Don't break on 0.4.14 and earlier. local sound_metal = (default.node_sound_metal_defaults and default.node_sound_metal_defaults() or sound_stone) local function tile_tiles(name) local tex = "moreblocks_" ..name.. ".png" return {tex, tex, tex, tex, tex.. "^[transformR90", tex.. "^[transformR90"} end local function wood_tile_replace(itemstack, placer, pointed_thing) local substack if itemstack:get_name() == "moreblocks:wood_tile_flipped" then substack = ItemStack("moreblocks:wood_tile") else -- right, left, and down variants substack = ItemStack("moreblocks:wood_tile_offset") end local _, success = minetest.item_place(substack, placer, pointed_thing) if success then itemstack:take_item() end return itemstack end local deprecated = (" (%s)"):format(S('Deprecated')) local nodes = { ["wood_tile"] = { description = S("Wooden Tile"), groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, is_ground_content = false, paramtype2 = "facedir", place_param2 = 0, tiles = {"default_wood.png^moreblocks_wood_tile.png", "default_wood.png^moreblocks_wood_tile.png", "default_wood.png^moreblocks_wood_tile.png", "default_wood.png^moreblocks_wood_tile.png", "default_wood.png^moreblocks_wood_tile.png^[transformR90", "default_wood.png^moreblocks_wood_tile.png^[transformR90"}, sounds = sound_wood, }, ["wood_tile_flipped"] = { description = S("Wooden Tile") .. deprecated, tiles = {"default_wood.png^moreblocks_wood_tile.png^[transformR90", "default_wood.png^moreblocks_wood_tile.png^[transformR90", "default_wood.png^moreblocks_wood_tile.png^[transformR90", "default_wood.png^moreblocks_wood_tile.png^[transformR90", "default_wood.png^moreblocks_wood_tile.png^[transformR180", "default_wood.png^moreblocks_wood_tile.png^[transformR180"}, no_stairs = true, on_place = wood_tile_replace }, ["wood_tile_center"] = { description = S("Centered Wooden Tile"), groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, is_ground_content = false, tiles = {"default_wood.png^moreblocks_wood_tile_center.png"}, sounds = sound_wood, }, ["wood_tile_full"] = { description = S("Full Wooden Tile"), groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, is_ground_content = false, tiles = tile_tiles("wood_tile_full"), sounds = sound_wood, }, ["wood_tile_offset"] = { description = S("Offset Wooden Tile"), paramtype2 = "facedir", place_param2 = 0, groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, is_ground_content = false, tiles = {"default_wood.png^moreblocks_wood_tile_offset.png"}, sounds = sound_wood, no_stairs = true, }, ["wood_tile_down"] = { description = S("Downwards Wooden Tile") .. deprecated, tiles = {"default_wood.png^[transformR180^moreblocks_wood_tile_offset.png^[transformR180"}, no_stairs = true, on_place = wood_tile_replace }, ["wood_tile_left"] = { description = S("Leftwards Wooden Tile") .. deprecated, tiles = {"default_wood.png^[transformR270^moreblocks_wood_tile_offset.png^[transformR270"}, no_stairs = true, on_place = wood_tile_replace }, ["wood_tile_right"] = { description = S("Rightwards Wooden Tile") .. deprecated, tiles = {"default_wood.png^[transformR90^moreblocks_wood_tile_offset.png^[transformR90"}, no_stairs = true, on_place = wood_tile_replace }, ["circle_stone_bricks"] = { description = S("Circle Stone Bricks"), groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["grey_bricks"] = { description = S("Stone Bricks"), paramtype2 = "facedir", place_param2 = 0, groups = {cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["coal_stone_bricks"] = { description = S("Coal Stone Bricks"), paramtype2 = "facedir", place_param2 = 0, groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["iron_stone_bricks"] = { description = S("Iron Stone Bricks"), paramtype2 = "facedir", place_param2 = 0, groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["stone_tile"] = { description = S("Stone Tile"), groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["split_stone_tile"] = { description = S("Split Stone Tile"), paramtype2 = "facedir", place_param2 = 0, tiles = {"moreblocks_split_stone_tile_top.png", "moreblocks_split_stone_tile.png"}, groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["checker_stone_tile"] = { description = S("Checker Stone Tile"), groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["tar"] = { description = S("Tar"), groups = {cracky=2, tar_block=1}, is_ground_content = false, sounds = sound_stone, }, ["dirt_compressed"] = { description = S("Compressed Dirt"), groups = {crumbly=2}, is_ground_content = false, sounds = sound_dirt, }, ["cobble_compressed"] = { description = S("Compressed Cobblestone"), groups = {cracky = 1}, is_ground_content = false, sounds = sound_stone, }, ["desert_cobble_compressed"] = { description = S("Compressed Desert Cobblestone"), groups = {cracky = 1}, is_ground_content = false, sounds = sound_stone, }, ["plankstone"] = { description = S("Plankstone"), paramtype2 = "facedir", place_param2 = 0, groups = {cracky = 3}, is_ground_content = false, tiles = tile_tiles("plankstone"), sounds = sound_stone, }, ["iron_glass"] = { description = S("Iron Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#DEDEDE", "default_glass_detail.png^[colorize:#DEDEDE"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, ["coal_glass"] = { description = S("Coal Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#828282", "default_glass_detail.png^[colorize:#828282"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, ["clean_glass"] = { description = S("Clean Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png", "moreblocks_clean_glass_detail.png"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, ["cactus_brick"] = { description = S("Cactus Brick"), paramtype2 = "facedir", place_param2 = 0, groups = {cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["cactus_checker"] = { description = S("Cactus Checker"), groups = {stone = 1, cracky = 3}, is_ground_content = false, tiles = {"default_stone.png^moreblocks_cactus_checker.png", "default_stone.png^moreblocks_cactus_checker.png", "default_stone.png^moreblocks_cactus_checker.png", "default_stone.png^moreblocks_cactus_checker.png", "default_stone.png^moreblocks_cactus_checker.png^[transformR90", "default_stone.png^moreblocks_cactus_checker.png^[transformR90"}, sounds = sound_stone, }, ["empty_shelf"] = { description = S("Empty Shelf"), paramtype2 = "facedir", tiles = {"default_wood.png", "default_wood.png", "default_wood.png", "default_wood.png", "moreblocks_empty_shelf.png", "moreblocks_empty_shelf.png"}, groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, is_ground_content = false, sounds = sound_wood, furnace_burntime = 15, no_stairs = true, }, ["coal_stone"] = { description = S("Coal Stone"), groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["iron_stone"] = { description = S("Iron Stone"), groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["coal_checker"] = { description = S("Coal Checker"), tiles = {"default_stone.png^moreblocks_coal_checker.png", "default_stone.png^moreblocks_coal_checker.png", "default_stone.png^moreblocks_coal_checker.png", "default_stone.png^moreblocks_coal_checker.png", "default_stone.png^moreblocks_coal_checker.png^[transformR90", "default_stone.png^moreblocks_coal_checker.png^[transformR90"}, groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["iron_checker"] = { description = S("Iron Checker"), tiles = {"default_stone.png^moreblocks_iron_checker.png", "default_stone.png^moreblocks_iron_checker.png", "default_stone.png^moreblocks_iron_checker.png", "default_stone.png^moreblocks_iron_checker.png", "default_stone.png^moreblocks_iron_checker.png^[transformR90", "default_stone.png^moreblocks_iron_checker.png^[transformR90"}, groups = {stone = 1, cracky = 3}, is_ground_content = false, sounds = sound_stone, }, ["trap_stone"] = { description = S("Trap Stone"), drawtype = "glasslike_framed", tiles = {"default_stone.png^moreblocks_trap_box.png"}, walkable = false, groups = {cracky = 3}, paramtype = "light", is_ground_content = false, sounds = sound_stone, no_stairs = true, }, ["trap_desert_stone"] = { description = S("Trap Desert Stone"), drawtype = "glasslike_framed", tiles = {"default_desert_stone.png^moreblocks_trap_box.png"}, walkable = false, groups = {cracky = 3}, paramtype = "light", is_ground_content = false, sounds = sound_stone, no_stairs = true, }, ["trap_glass"] = { description = S("Trap Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^moreblocks_trap_box_glass.png", "default_glass_detail.png"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, walkable = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, no_stairs = true, }, ["trap_obsidian_glass"] = { description = S("Trap Obsidian Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_obsidian_glass.png^moreblocks_trap_box_glass.png", "default_obsidian_glass_detail.png"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, walkable = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, no_stairs = true, }, ["trap_obsidian"] = { description = S("Trap Obsidian"), drawtype = "glasslike_framed", tiles = {"default_obsidian.png^moreblocks_trap_box.png"}, walkable = false, groups = {cracky = 1, level = 2}, paramtype = "light", is_ground_content = false, sounds = sound_stone, no_stairs = true, }, ["trap_clean_glass"] = { description = S("Trap Clean Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, walkable = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, no_stairs = true, }, ["trap_sandstone"] = { description = S("Trap Sandstone"), drawtype = "glasslike_framed", tiles = {"default_sandstone.png^moreblocks_trap_box.png"}, walkable = false, groups = {crumbly = 1, cracky = 3}, paramtype = "light", is_ground_content = false, sounds = sound_stone, no_stairs = true, }, ["all_faces_tree"] = { description = S("All-faces Tree"), tiles = {"default_tree_top.png"}, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, sounds = sound_wood, furnace_burntime = 30, }, ["all_faces_jungle_tree"] = { description = S("All-faces Jungle Tree"), tiles = {"default_jungletree_top.png"}, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, sounds = sound_wood, furnace_burntime = 38, }, ["all_faces_pine_tree"] = { description = S("All-faces Pine Tree"), tiles = {"default_pine_tree_top.png"}, groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, sounds = sound_wood, furnace_burntime = 26, }, ["all_faces_acacia_tree"] = { description = S("All-faces Acacia Tree"), tiles = {"default_acacia_tree_top.png"}, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, sounds = sound_wood, furnace_burntime = 34, }, ["all_faces_aspen_tree"] = { description = S("All-faces Aspen Tree"), tiles = {"default_aspen_tree_top.png"}, groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, sounds = sound_wood, furnace_burntime = 22, }, ["glow_glass"] = { description = S("Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#E9CD61", "default_glass_detail.png^[colorize:#E9CD61"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = 11, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, ["clean_glow_glass"] = { description = S("Clean Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = 11, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, ["trap_glow_glass"] = { description = S("Trap Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#E9CD61"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = 11, walkable = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, no_stairs = true, }, ["trap_clean_glow_glass"] = { description = S("Trap Clean Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = 11, walkable = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, no_stairs = true, }, ["super_glow_glass"] = { description = S("Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#FFFF78", "default_glass_detail.png^[colorize:#FFFF78"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = default.LIGHT_MAX, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, ["clean_super_glow_glass"] = { description = S("Clean Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = default.LIGHT_MAX, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, }, ["trap_super_glow_glass"] = { description = S("Trap Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"default_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#FFFF78"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = default.LIGHT_MAX, walkable = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, no_stairs = true, }, ["trap_clean_super_glow_glass"] = { description = S("Trap Clean Super Glow Glass"), drawtype = "glasslike_framed_optional", tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, is_ground_content = false, light_source = default.LIGHT_MAX, walkable = false, groups = {cracky = 3, oddly_breakable_by_hand = 3}, sounds = sound_glass, no_stairs = true, }, ["rope"] = { description = S("Rope"), drawtype = "signlike", inventory_image = "moreblocks_rope.png", wield_image = "moreblocks_rope.png", paramtype = "light", sunlight_propagates = true, is_ground_content = false, paramtype2 = "wallmounted", walkable = false, climbable = true, selection_box = {type = "wallmounted",}, groups = {snappy = 3, flammable = 2}, sounds = sound_leaves, no_stairs = true, }, ["copperpatina"] = { description = S("Copper Patina Block"), groups = {cracky = 1, level = 2}, is_ground_content = false, sounds = sound_metal, }, } for name, def in pairs(nodes) do def.tiles = def.tiles or {"moreblocks_" ..name.. ".png"} minetest.register_node("moreblocks:" ..name, def) minetest.register_alias(name, "moreblocks:" ..name) def_copy = table.copy(def) -- Use the primary tile for all sides of cut glasslike nodes. -- This makes them easier to see if #def_copy.tiles > 1 and def_copy.drawtype and def_copy.drawtype == "glasslike_framed" or def_copy.drawtype == "glasslike_framed_optional" then def.tiles = {def_copy.tiles[1]} end if not def.no_stairs then local groups = {} for k, v in pairs(def.groups) do groups[k] = v end stairsplus:register_all("moreblocks", name, "moreblocks:" ..name, { description = def.description, groups = groups, tiles = def.tiles, sunlight_propagates = def.sunlight_propagates, light_source = def.light_source, sounds = def.sounds, }) end end -- Items minetest.register_craftitem("moreblocks:sweeper", { description = S("Sweeper"), inventory_image = "moreblocks_sweeper.png", }) moreblocks-2.2.0/ownership.lua000066400000000000000000000023711406645002200163760ustar00rootroot00000000000000--[[ More Blocks: ownership handling Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] local S = moreblocks.S function moreblocks.node_is_owned(pos, placer) local ownername = false if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod if HasOwner(pos, placer) then -- returns true if the node is owned if not IsPlayerNodeOwner(pos, placer:get_player_name()) then if type(getLastOwner) == "function" then -- ...is an old version ownername = getLastOwner(pos) elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version ownername = GetNodeOwnerName(pos) else ownername = S("someone") end end end elseif type(isprotect)=="function" then -- glomie's protection mod if not isprotect(5, pos, placer) then ownername = S("someone") end elseif type(protector)=="table" and type(protector.can_dig)=="function" then -- Zeg9's protection mod if not protector.can_dig(5, pos, placer) then ownername = S("someone") end end if ownername ~= false then minetest.chat_send_player( placer:get_player_name(), S("Sorry, @1 owns that spot.", ownername) ) return true else return false end end moreblocks-2.2.0/redefinitions.lua000066400000000000000000000056771406645002200172360ustar00rootroot00000000000000--[[ More Blocks: redefinitions of default stuff Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] local modname = minetest.get_current_modname() -- Redefine some of the default crafting recipes to be more productive -- Auxiliary function: take a recipe as returned by get_all_craft_recipes -- and turn it into a table that can be used to clear a craft or declare a new one local reconstruct_internal_craft = function(recipe) local recp = { { "", "", "" }, { "", "", "" }, { "", "", "" }, } local width = recipe.width for idx, item in pairs(recipe.items) do local row = math.ceil(idx / width) local col = idx - (row-1)*width recp[row][col] = item end return recp end -- Change the amount produced by recipe by apply func to the old amount local change_recipe_amount = function(product, recipe, func) -- if width == 0, this is a shapeless recipe, for which the -- internal and Lua API recipe table is the same. -- Otherwise we need to reconstruct the table for the shaped recipe. local shapeless = (recipe.width == 0) local recp = shapeless and recipe.items or reconstruct_internal_craft(recipe) local oldamount = tonumber(recipe.output:match(" [0-9]+$") or "1") local newamount = func(oldamount) -- remove old crafting recipe local redo = { recipe = recp } -- preserve shapelessness if shapeless then redo.type = "shapeless" end minetest.clear_craft(redo) -- new output redo.output = ("%s %d"):format(product, newamount) minetest.register_craft(redo) minetest.log("action", ("[MOD]%s: recipe for %s production: %d => %d"):format(modname, product, oldamount, newamount)) end local increase_craft_production = function(product, func) local recipes = minetest.get_all_craft_recipes(product) for _, r in pairs(recipes) do if r.type == "normal" or r.method == "normal" then change_recipe_amount(product, r, func) end end end -- Increase the crafting production according to the rules from the table, which is in the form: -- { -- { detector, amount changing function } -- { detector, amount changing function } -- } -- TODO: consider exporting this function to other mods local increase_craft_production_table = function(map_table) for product, _ in pairs(minetest.registered_items) do for _, tab in pairs(map_table) do local detector = tab[1] local func = tab[2] if detector(product) then increase_craft_production(product, func) -- only apply one boost break end end end end increase_craft_production_table({ { function(n) return n:match('^default:sign_wall') end, function(old) return old + 1 end }, { function(n) return n == 'default:paper' end, function(old) return old*4 end }, { function(n) return n:match('^carts:.*rail$') or n:match('^default:.*rail$') end, function(old) return old + old/2 end }, }) minetest.register_craft({ type = "toolrepair", additional_wear = -0.10, -- Tool repair buff (10% bonus instead of 2%). }) moreblocks-2.2.0/settingtypes.txt000066400000000000000000000004721406645002200171600ustar00rootroot00000000000000# If enabled, Stairs+ nodes will be displayed in the inventory when playing in creative mode. # Disabling this can speed up loading times for clients as fewer nodes need to be registered in the creative inventory. moreblocks.stairsplus_in_creative_inventory (Display Stairs+ nodes in creative inventory) bool true moreblocks-2.2.0/stairsplus/000077500000000000000000000000001406645002200160635ustar00rootroot00000000000000moreblocks-2.2.0/stairsplus/API.md000066400000000000000000000051251406645002200170210ustar00rootroot00000000000000# API documentation for Stairs+ * `stairsplus:register_all(modname, subname, recipeitem, fields)` Registers a stair, slab, panel, microblock, and any other types of nodes to be added in the future. This also registers the node with the circular saw. Example: ```lua stairsplus:register_all("moreblocks", "wood", "default:wood", { description = "Wooden", tiles = {"default_wood.png"}, groups = {oddly_breakabe_by_hand=1}, sounds = default.node_sound_wood_defaults(), }) ``` The following register only a particular type of microblock. You will probably never want to use them directly: * `stairsplus:register_stair(modname, subname, recipeitem, fields)` * `stairsplus:register_slab(modname, subname, recipeitem, fields)` * `stairsplus:register_panel(modname, subname, recipeitem, fields)` * `stairsplus:register_micro(modname, subname, recipeitem, fields)` * `stairsplus:register_slope(modname, subname, recipeitem, fields)` If you only want to register a subset of stairsplus nodes, you can use the `stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields)` function. The subset table should have the following format: ```lua local subset = { { "micro", "" }, { "micro", "_1" }, { "micro", "_2" }, { "micro", "_4" }, { "micro", "_12" }, { "micro", "_14" }, { "micro", "_15" }, { "panel", "" }, { "panel", "_1" }, { "panel", "_2" }, { "panel", "_4" }, { "panel", "_12" }, { "panel", "_14" }, { "panel", "_15" }, { "slab", "" }, { "slab", "_quarter" }, { "slab", "_three_quarter" }, { "slab", "_1" }, { "slab", "_2" }, { "slab", "_14" }, { "slab", "_15" }, { "slab", "_two_sides" }, { "slab", "_three_sides" }, { "slab", "_three_sides_u" }, { "slope", "" }, { "slope", "_half" }, { "slope", "_half_raised" }, { "slope", "_inner" }, { "slope", "_inner_half" }, { "slope", "_inner_half_raised" }, { "slope", "_inner_cut" }, { "slope", "_inner_cut_half" }, { "slope", "_inner_cut_half_raised" }, { "slope", "_outer" }, { "slope", "_outer_half" }, { "slope", "_outer_half_raised" }, { "slope", "_outer_cut" }, { "slope", "_outer_cut_half" }, { "slope", "_outer_cut_half_raised" }, { "slope", "_cut" }, { "stair", "" }, { "stair", "_half" }, { "stair", "_right_half" }, { "stair", "_inner" }, { "stair", "_outer" }, { "stair", "_alt" }, { "stair", "_alt_1" }, { "stair", "_alt_2" }, { "stair", "_alt_4" }, } ``` You can remove entries as needed. moreblocks-2.2.0/stairsplus/common.lua000066400000000000000000000133771406645002200200710ustar00rootroot00000000000000--[[ More Blocks: registrations Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] local S = moreblocks.S local descriptions = { ["micro"] = S("%s Microblock"), ["slab"] = S("%s Slab"), ["slope"] = S("%s Slope"), ["panel"] = S("%s Panel"), ["stair"] = S("%s Stairs"), } -- Extends the standad rotate_node placement so that it takes into account -- the side (top/bottom or left/right) of the face being pointed at. -- As with the standard rotate_node, sneak can be used to force the perpendicular -- placement (wall placement on floor/ceiling, floor/ceiling placement on walls). -- Additionally, the aux / sprint / special key can be used to place the node -- as if from the opposite side. -- -- When placing a node next to one of the same category (e.g. slab to slab or -- stair to stair), the default placement (regardless of sneak) is to copy the -- under node's param2, flipping if placed above or below it. The aux key disable -- this behavior. local wall_right_dirmap = {9, 18, 7, 12} local wall_left_dirmap = {11, 16, 5, 14} local ceil_dirmap = {20, 23, 22, 21} -- extract the stairsplus category from a node name -- assumes the name is in the form mod_name:category_original_ndoe_name local function name_to_category(name) local colon = name:find(":") or 0 colon = colon + 1 local under = name:find("_", colon) return name:sub(colon, under) end stairsplus.rotate_node_aux = function(itemstack, placer, pointed_thing) local sneak = placer and placer:get_player_control().sneak local aux = placer and placer:get_player_control().aux1 -- category for what we are placing local item_prefix = name_to_category(itemstack:get_name()) -- category for what we are placing against local under = pointed_thing.under local under_node = minetest.get_node(under) local under_prefix = under_node and name_to_category(under_node.name) local same_cat = item_prefix == under_prefix -- standard (floor) facedir, also used for sneak placement against the lower half of the wall local p2 = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0 -- check which face and which quadrant we are interested in -- this is used both to check if we're handling parallel placement in the same-category case, -- and in general for sneak placement local face_pos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) local face_off = vector.subtract(face_pos, under) -- we cannot trust face_off to tell us the correct directionif the -- under node has a non-standard shape, so use the distance between under and above local wallmounted = minetest.dir_to_wallmounted(vector.subtract(pointed_thing.above, under)) if same_cat and not aux then p2 = under_node.param2 -- flip if placing above or below an upright or upside-down node -- TODO should we also flip when placing next to a side-mounted node? if wallmounted < 2 then if p2 < 4 then p2 = (p2 + 2) % 4 p2 = ceil_dirmap[p2 + 1] elseif p2 > 19 then p2 = ceil_dirmap[p2 - 19] - 20 p2 = (p2 + 2) % 4 end end else -- for same-cat placement, aux is used to disable param2 copying if same_cat then aux = not aux end local remap = nil -- standard placement against the wall local use_wallmap = (wallmounted > 1 and not sneak) or (wallmounted < 2 and sneak) -- standard placement against the ceiling, or sneak placement against the upper half of the wall local use_ceilmap = wallmounted == 1 and not sneak use_ceilmap = use_ceilmap or (wallmounted > 1 and sneak and face_off.y > 0) if use_wallmap then local left = (p2 == 0 and face_off.x < 0) or (p2 == 1 and face_off.z > 0) or (p2 == 2 and face_off.x > 0) or (p2 == 3 and face_off.z < 0) if aux then left = not left end remap = left and wall_left_dirmap or wall_right_dirmap elseif use_ceilmap then remap = ceil_dirmap end if aux then p2 = (p2 + 2) % 4 end if remap then p2 = remap[p2 + 1] end end return minetest.item_place(itemstack, placer, pointed_thing, p2) end stairsplus.register_single = function(category, alternate, info, modname, subname, recipeitem, fields) local src_def = minetest.registered_nodes[recipeitem] or {} local desc_base = descriptions[category]:format(fields.description) local def = {} if category ~= "slab" then def = table.copy(info) end -- copy fields to def for k, v in pairs(fields) do def[k] = v end def.drawtype = "nodebox" def.paramtype = "light" def.paramtype2 = def.paramtype2 or "facedir" if def.use_texture_alpha == nil then def.use_texture_alpha = src_def.use_texture_alpha end -- This makes node rotation work on placement def.place_param2 = nil -- Darken light sources slightly to make up for their smaller visual size def.light_source = math.max(0, (def.light_source or 0) - 1) def.on_place = stairsplus.rotate_node_aux def.groups = stairsplus:prepare_groups(fields.groups) if category == "slab" then if type(info) ~= "table" then def.node_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, (info/16)-0.5, 0.5}, } def.description = ("%s (%d/16)"):format(desc_base, info) else def.node_box = { type = "fixed", fixed = info, } def.description = desc_base .. alternate:gsub("_", " "):gsub("(%a)(%S*)", function(a, b) return a:upper() .. b end) end else def.description = desc_base if category == "slope" then def.drawtype = "mesh" elseif category == "stair" and alternate == "" then def.groups.stair = 1 end end if fields.drop and not (type(fields.drop) == "table") then def.drop = modname.. ":" .. category .. "_" .. fields.drop .. alternate end minetest.register_node(":" ..modname.. ":" .. category .. "_" .. subname .. alternate, def) stairsplus.register_recipes(category, alternate, modname, subname, recipeitem) end moreblocks-2.2.0/stairsplus/custom.lua000066400000000000000000000055311406645002200201040ustar00rootroot00000000000000--[[ More Blocks: microblock definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] --[[ Subset table should have the following format: (You can remove entries as needed.) local subset = { { "micro", "" }, { "micro", "_1" }, { "micro", "_2" }, { "micro", "_4" }, { "micro", "_12" }, { "micro", "_14" }, { "micro", "_15" }, { "panel", "" }, { "panel", "_1" }, { "panel", "_2" }, { "panel", "_4" }, { "panel", "_12" }, { "panel", "_14" }, { "panel", "_15" }, { "slab", "" }, { "slab", "_quarter" }, { "slab", "_three_quarter" }, { "slab", "_1" }, { "slab", "_2" }, { "slab", "_14" }, { "slab", "_15" }, { "slab", "_two_sides" }, { "slab", "_three_sides" }, { "slab", "_three_sides_u" }, { "slope", "" }, { "slope", "_half" }, { "slope", "_half_raised" }, { "slope", "_inner" }, { "slope", "_inner_half" }, { "slope", "_inner_half_raised" }, { "slope", "_inner_cut" }, { "slope", "_inner_cut_half" }, { "slope", "_inner_cut_half_raised" }, { "slope", "_outer" }, { "slope", "_outer_half" }, { "slope", "_outer_half_raised" }, { "slope", "_outer_cut" }, { "slope", "_outer_cut_half" }, { "slope", "_outer_cut_half_raised" }, { "slope", "_cut" }, { "stair", "" }, { "stair", "_half" }, { "stair", "_right_half" }, { "stair", "_inner" }, { "stair", "_outer" }, { "stair", "_alt" }, { "stair", "_alt_1" }, { "stair", "_alt_2" }, { "stair", "_alt_4" }, } --]] -- luacheck: no unused local function register_custom_subset(subset, modname, subname, recipeitem, groups, images, description, drop, light) stairsplus:register_custom_subset(subset, modname, subname, recipeitem, { groups = groups, tiles = images, description = description, drop = drop, light_source = light, sounds = default.node_sound_stone_defaults(), }) end function stairsplus:register_custom_subset_alias(subset, modname_old, subname_old, modname_new, subname_new) local subset_copy = table.copy(subset) for k, v in pairs(subset_copy) do minetest.register_alias(modname_old .. ":" .. v[1] .. "_" .. subname_old .. v[2], modname_new .. ":" .. v[1] .. "_" .. subname_new .. v[2]) end end function stairsplus:register_custom_subset_alias_force(subset, modname_old, subname_old, modname_new, subname_new) local subset_copy = table.copy(subset) for k, v in pairs(subset_copy) do minetest.register_alias_force(modname_old .. ":" .. v[1] .. "_" .. subname_old .. v[2], modname_new .. ":" .. v[1] .. "_" .. subname_new .. v[2]) end end function stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields) local subset_copy = table.copy(subset) for k, v in pairs(subset_copy) do stairsplus.register_single(v[1], v[2], stairsplus.defs[v[1]][v[2]], modname, subname, recipeitem, fields) end circular_saw.known_nodes[recipeitem] = {modname, subname} end moreblocks-2.2.0/stairsplus/defs.lua000066400000000000000000000216541406645002200175170ustar00rootroot00000000000000--[[ More Blocks: registrations Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] local box_slope = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, {-0.5, 0, 0, 0.5, 0.25, 0.5}, {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} } } local box_slope_half = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, {-0.5, -0.375, -0.25, 0.5, -0.25, 0.5}, {-0.5, -0.25, 0, 0.5, -0.125, 0.5}, {-0.5, -0.125, 0.25, 0.5, 0, 0.5}, } } local box_slope_half_raised = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5}, {-0.5, 0.125, -0.25, 0.5, 0.25, 0.5}, {-0.5, 0.25, 0, 0.5, 0.375, 0.5}, {-0.5, 0.375, 0.25, 0.5, 0.5, 0.5}, } } --============================================================== local box_slope_inner = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, {-0.5, -0.5, -0.25, 0.5, 0, 0.5}, {-0.5, -0.5, -0.5, 0.25, 0, 0.5}, {-0.5, 0, -0.5, 0, 0.25, 0.5}, {-0.5, 0, 0, 0.5, 0.25, 0.5}, {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}, {-0.5, 0.25, -0.5, -0.25, 0.5, 0.5}, } } local box_slope_inner_half = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, {-0.5, -0.375, -0.25, 0.5, -0.25, 0.5}, {-0.5, -0.375, -0.5, 0.25, -0.25, 0.5}, {-0.5, -0.25, -0.5, 0, -0.125, 0.5}, {-0.5, -0.25, 0, 0.5, -0.125, 0.5}, {-0.5, -0.125, 0.25, 0.5, 0, 0.5}, {-0.5, -0.125, -0.5, -0.25, 0, 0.5}, } } local box_slope_inner_half_raised = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5}, {-0.5, 0.125, -0.25, 0.5, 0.25, 0.5}, {-0.5, 0.125, -0.5, 0.25, 0.25, 0.5}, {-0.5, 0.25, -0.5, 0, 0.375, 0.5}, {-0.5, 0.25, 0, 0.5, 0.375, 0.5}, {-0.5, 0.375, 0.25, 0.5, 0.5, 0.5}, {-0.5, 0.375, -0.5, -0.25, 0.5, 0.5}, } } --============================================================== local box_slope_outer = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, {-0.5, -0.25, -0.25, 0.25, 0, 0.5}, {-0.5, 0, 0, 0, 0.25, 0.5}, {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5} } } local box_slope_outer_half = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, {-0.5, -0.375, -0.25, 0.25, -0.25, 0.5}, {-0.5, -0.25, 0, 0, -0.125, 0.5}, {-0.5, -0.125, 0.25, -0.25, 0, 0.5} } } local box_slope_outer_half_raised = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5}, {-0.5, 0.125, -0.25, 0.25, 0.25, 0.5}, {-0.5, 0.25, 0, 0, 0.375, 0.5}, {-0.5, 0.375, 0.25, -0.25, 0.5, 0.5} } } stairsplus.defs = { ["micro"] = { [""] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0, 0, 0.5}, }, }, ["_1"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0, -0.4375, 0.5}, }, }, ["_2"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0, -0.375, 0.5}, }, }, ["_4"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0, -0.25, 0.5}, }, }, ["_12"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0, 0.25, 0.5}, }, }, ["_14"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0, 0.375, 0.5}, }, }, ["_15"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0, 0.4375, 0.5}, }, } }, ["panel"] = { [""] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0.5, 0, 0.5}, }, }, ["_1"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0.5, -0.4375, 0.5}, }, }, ["_2"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0.5, -0.375, 0.5}, }, }, ["_4"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0.5, -0.25, 0.5}, }, }, ["_12"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0.5, 0.25, 0.5}, }, }, ["_14"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0.5, 0.375, 0.5}, }, }, ["_15"] = { node_box = { type = "fixed", fixed = {-0.5, -0.5, 0, 0.5, 0.4375, 0.5}, }, } }, ["slab"] = { [""] = 8, ["_quarter"] = 4, ["_three_quarter"] = 12, ["_1"] = 1, ["_2"] = 2, ["_14"] = 14, ["_15"] = 15, ["_two_sides"] = { { -0.5, -0.5, -0.5, 0.5, -7/16, 7/16 }, { -0.5, -0.5, 7/16, 0.5, 0.5, 0.5 } }, ["_three_sides"] = { { -7/16, -0.5, -0.5, 0.5, -7/16, 7/16 }, { -7/16, -0.5, 7/16, 0.5, 0.5, 0.5 }, { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 } }, ["_three_sides_u"] = { { -0.5, -0.5, -0.5, 0.5, 0.5, -7/16 }, { -0.5, -0.5, -7/16, 0.5, -7/16, 7/16 }, { -0.5, -0.5, 7/16, 0.5, 0.5, 0.5 } } }, ["slope"] = { [""] = { mesh = "moreblocks_slope.obj", collision_box = box_slope, selection_box = box_slope, }, ["_half"] = { mesh = "moreblocks_slope_half.obj", collision_box = box_slope_half, selection_box = box_slope_half, }, ["_half_raised"] = { mesh = "moreblocks_slope_half_raised.obj", collision_box = box_slope_half_raised, selection_box = box_slope_half_raised, }, --============================================================== ["_inner"] = { mesh = "moreblocks_slope_inner.obj", collision_box = box_slope_inner, selection_box = box_slope_inner, }, ["_inner_half"] = { mesh = "moreblocks_slope_inner_half.obj", collision_box = box_slope_inner_half, selection_box = box_slope_inner_half, }, ["_inner_half_raised"] = { mesh = "moreblocks_slope_inner_half_raised.obj", collision_box = box_slope_inner_half_raised, selection_box = box_slope_inner_half_raised, }, --============================================================== ["_inner_cut"] = { mesh = "moreblocks_slope_inner_cut.obj", collision_box = box_slope_inner, selection_box = box_slope_inner, }, ["_inner_cut_half"] = { mesh = "moreblocks_slope_inner_cut_half.obj", collision_box = box_slope_inner_half, selection_box = box_slope_inner_half, }, ["_inner_cut_half_raised"] = { mesh = "moreblocks_slope_inner_cut_half_raised.obj", collision_box = box_slope_inner_half_raised, selection_box = box_slope_inner_half_raised, }, --============================================================== ["_outer"] = { mesh = "moreblocks_slope_outer.obj", collision_box = box_slope_outer, selection_box = box_slope_outer, }, ["_outer_half"] = { mesh = "moreblocks_slope_outer_half.obj", collision_box = box_slope_outer_half, selection_box = box_slope_outer_half, }, ["_outer_half_raised"] = { mesh = "moreblocks_slope_outer_half_raised.obj", collision_box = box_slope_outer_half_raised, selection_box = box_slope_outer_half_raised, }, --============================================================== ["_outer_cut"] = { mesh = "moreblocks_slope_outer_cut.obj", collision_box = box_slope_outer, selection_box = box_slope_outer, }, ["_outer_cut_half"] = { mesh = "moreblocks_slope_outer_cut_half.obj", collision_box = box_slope_outer_half, selection_box = box_slope_outer_half, }, ["_outer_cut_half_raised"] = { mesh = "moreblocks_slope_outer_cut_half_raised.obj", collision_box = box_slope_outer_half_raised, selection_box = box_slope_outer_half_raised, }, ["_cut"] = { mesh = "moreblocks_slope_cut.obj", collision_box = box_slope_outer, selection_box = box_slope_outer, }, }, ["stair"] = { [""] = { node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, {-0.5, 0, 0, 0.5, 0.5, 0.5}, }, }, }, ["_half"] = { node_box = { type = "fixed", fixed = { {-0.5, -0.5, -0.5, 0, 0, 0.5}, {-0.5, 0, 0, 0, 0.5, 0.5}, }, }, }, ["_right_half"] = { node_box = { type = "fixed", fixed = { {0, -0.5, -0.5, 0.5, 0, 0.5}, {0, 0, 0, 0.5, 0.5, 0.5}, }, }, }, ["_inner"] = { 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}, }, }, }, ["_outer"] = { 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}, }, }, }, ["_alt"] = { 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}, }, }, }, ["_alt_1"] = { node_box = { type = "fixed", fixed = { {-0.5, -0.0625, -0.5, 0.5, 0, 0}, {-0.5, 0.4375, 0, 0.5, 0.5, 0.5}, }, }, }, ["_alt_2"] = { node_box = { type = "fixed", fixed = { {-0.5, -0.125, -0.5, 0.5, 0, 0}, {-0.5, 0.375, 0, 0.5, 0.5, 0.5}, }, }, }, ["_alt_4"] = { node_box = { type = "fixed", fixed = { {-0.5, -0.25, -0.5, 0.5, 0, 0}, {-0.5, 0.25, 0, 0.5, 0.5, 0.5}, }, }, }, }, } for type,a in pairs(stairsplus.defs) do for name,b in pairs(stairsplus.defs[type]) do table.insert(stairsplus.shapes_list, { type .. "_", name }) end end moreblocks-2.2.0/stairsplus/init.lua000066400000000000000000000055531406645002200175410ustar00rootroot00000000000000--[[ More Blocks: Stairs+ Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- Nodes will be called :{stair,slab,panel,micro,slope}_ local modpath = minetest.get_modpath("moreblocks").. "/stairsplus" stairsplus = {} stairsplus.expect_infinite_stacks = false stairsplus.shapes_list = {} if not minetest.get_modpath("unified_inventory") and minetest.settings:get_bool("creative_mode") then stairsplus.expect_infinite_stacks = true end function stairsplus:prepare_groups(groups) local result = {} if groups then for k, v in pairs(groups) do if k ~= "wood" and k ~= "stone" and k ~= "wool" and k ~= "tree" then result[k] = v end end end if not moreblocks.config.stairsplus_in_creative_inventory then result.not_in_creative_inventory = 1 end return result end function stairsplus:register_all(modname, subname, recipeitem, fields) self:register_stair(modname, subname, recipeitem, fields) self:register_slab(modname, subname, recipeitem, fields) self:register_slope(modname, subname, recipeitem, fields) self:register_panel(modname, subname, recipeitem, fields) self:register_micro(modname, subname, recipeitem, fields) end function stairsplus:register_alias_all(modname_old, subname_old, modname_new, subname_new) self:register_stair_alias(modname_old, subname_old, modname_new, subname_new) self:register_slab_alias(modname_old, subname_old, modname_new, subname_new) self:register_slope_alias(modname_old, subname_old, modname_new, subname_new) self:register_panel_alias(modname_old, subname_old, modname_new, subname_new) self:register_micro_alias(modname_old, subname_old, modname_new, subname_new) end function stairsplus:register_alias_force_all(modname_old, subname_old, modname_new, subname_new) self:register_stair_alias_force(modname_old, subname_old, modname_new, subname_new) self:register_slab_alias_force(modname_old, subname_old, modname_new, subname_new) self:register_slope_alias_force(modname_old, subname_old, modname_new, subname_new) self:register_panel_alias_force(modname_old, subname_old, modname_new, subname_new) self:register_micro_alias_force(modname_old, subname_old, modname_new, subname_new) end -- luacheck: no unused local function register_stair_slab_panel_micro(modname, subname, recipeitem, groups, images, description, drop, light) stairsplus:register_all(modname, subname, recipeitem, { groups = groups, tiles = images, description = description, drop = drop, light_source = light }) end dofile(modpath .. "/defs.lua") dofile(modpath .. "/recipes.lua") dofile(modpath .. "/common.lua") dofile(modpath .. "/stairs.lua") dofile(modpath .. "/slabs.lua") dofile(modpath .. "/slopes.lua") dofile(modpath .. "/panels.lua") dofile(modpath .. "/microblocks.lua") dofile(modpath .. "/custom.lua") dofile(modpath .. "/registrations.lua") moreblocks-2.2.0/stairsplus/microblocks.lua000066400000000000000000000030241406645002200210740ustar00rootroot00000000000000--[[ More Blocks: microblock definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- Node will be called :micro_ -- luacheck: no unused local function register_micro(modname, subname, recipeitem, groups, images, description, drop, light) stairsplus:register_micro(modname, subname, recipeitem, { groups = groups, tiles = images, description = description, drop = drop, light_source = light, sounds = default.node_sound_stone_defaults(), }) end function stairsplus:register_micro_alias(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["micro"]) for alternate, def in pairs(defs) do minetest.register_alias(modname_old .. ":micro_" .. subname_old .. alternate, modname_new .. ":micro_" .. subname_new .. alternate) end end function stairsplus:register_micro_alias_force(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["micro"]) for alternate, def in pairs(defs) do minetest.register_alias_force(modname_old .. ":micro_" .. subname_old .. alternate, modname_new .. ":micro_" .. subname_new .. alternate) end end function stairsplus:register_micro(modname, subname, recipeitem, fields) local defs = table.copy(stairsplus.defs["micro"]) for alternate, def in pairs(defs) do stairsplus.register_single("micro", alternate, def, modname, subname, recipeitem, fields) end circular_saw.known_nodes[recipeitem] = {modname, subname} end moreblocks-2.2.0/stairsplus/panels.lua000066400000000000000000000030171406645002200200510ustar00rootroot00000000000000--[[ More Blocks: panel definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- Node will be called :panel_ -- luacheck: no unused local function register_panel(modname, subname, recipeitem, groups, images, description, drop, light) stairsplus:register_panel(modname, subname, recipeitem, { groups = groups, tiles = images, description = description, drop = drop, light_source = light, sounds = default.node_sound_stone_defaults(), }) end function stairsplus:register_panel_alias(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["panel"]) for alternate, def in pairs(defs) do minetest.register_alias(modname_old .. ":panel_" .. subname_old .. alternate, modname_new .. ":panel_" .. subname_new .. alternate) end end function stairsplus:register_panel_alias_force(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["panel"]) for alternate, def in pairs(defs) do minetest.register_alias_force(modname_old .. ":panel_" .. subname_old .. alternate, modname_new .. ":panel_" .. subname_new .. alternate) end end function stairsplus:register_panel(modname, subname, recipeitem, fields) local defs = table.copy(stairsplus.defs["panel"]) for alternate, def in pairs(defs) do stairsplus.register_single("panel", alternate, def, modname, subname, recipeitem, fields) end circular_saw.known_nodes[recipeitem] = {modname, subname} end moreblocks-2.2.0/stairsplus/recipes.lua000066400000000000000000000411561406645002200202270ustar00rootroot00000000000000--[[ More Blocks: Stairs+ Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] stairsplus.register_recipes = function(category, alternate, modname, subname, recipeitem) if category == "micro" and alternate == "" then minetest.register_craft({ type = "shapeless", output = modname .. ":micro_" .. subname .. " 7", recipe = {modname .. ":stair_" .. subname .. "_inner"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":micro_" .. subname .. " 6", recipe = {modname .. ":stair_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":micro_" .. subname .. " 5", recipe = {modname .. ":stair_" .. subname .. "_outer"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":micro_" .. subname .. " 4", recipe = {modname .. ":slab_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":micro_" .. subname .. " 4", recipe = {modname .. ":stair_" .. subname .. "_alt"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":micro_" .. subname .. " 3", recipe = {modname .. ":stair_" .. subname .. "_right_half"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":micro_" .. subname .. " 2", recipe = {modname .. ":panel_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, }) minetest.register_alias(modname .. ":micro_" .. subname .. "_bottom", modname .. ":micro_" .. subname) elseif category == "panel" and alternate == "" then minetest.register_craft({ output = modname .. ":panel_" .. subname .. " 12", recipe = { {recipeitem, ""}, {recipeitem, recipeitem}, }, }) minetest.register_craft({ output = modname .. ":panel_" .. subname .. " 12", recipe = { {"", recipeitem}, {recipeitem, recipeitem}, }, }) minetest.register_craft({ type = "shapeless", output = modname .. ":panel_" .. subname, recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, }) minetest.register_alias(modname.. ":panel_" ..subname.. "_bottom", modname.. ":panel_" ..subname) elseif category == "slab" then if alternate == "" then minetest.register_craft({ output = modname .. ":slab_" .. subname .. " 6", recipe = {{recipeitem, recipeitem, recipeitem}}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname, recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, }) -- uncomment this rule when conflict is no longer likely to happen -- https://github.com/minetest/minetest/issues/2881 -- minetest.register_craft({ -- type = "shapeless", -- output = modname .. ":slab_" .. subname, -- recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, -- }) -- then remove these two minetest.register_craft({ output = modname .. ":slab_" .. subname, recipe = {{modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}}, }) minetest.register_craft({ output = modname .. ":slab_" .. subname, recipe = { {modname .. ":panel_" .. subname}, {modname .. ":panel_" .. subname}, }, }) ------------------------------ minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. " 3", recipe = {modname .. ":stair_" .. subname, modname .. ":stair_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname, recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname, recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname, recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname, recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname, recipe = {modname .. ":slope_" .. subname .. "_outer_half", modname .. ":slope_" .. subname .. "_inner_half"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname, recipe = {modname .. ":slope_" .. subname .. "_outer_cut_half", modname .. ":slope_" .. subname .. "_inner_cut_half"}, }) elseif alternate == "_quarter" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"}, }) minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_quarter"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_quarter", recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_quarter", recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"}, }) elseif alternate == "_three_quarter" then minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_three_quarter", recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname .. "_quarter"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_three_quarter", recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_three_quarter", recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"}, }) elseif alternate == "_2" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"}, }) minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_2"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_2", recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"}, }) elseif alternate == "_14" then minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_14", recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_2"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_14", recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"}, }) elseif alternate == "_15" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slab_" .. subname .. "_15", modname .. ":slab_" .. subname .. "_1"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slab_" .. subname .. "_15", recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_1"}, }) end elseif category == "slope" then if alternate == "" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname, modname .. ":slope_" .. subname}, }) elseif alternate == "_half" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half_raised"}, }) minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half"}, }) elseif alternate == "_outer" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_outer", modname .. ":slope_" .. subname .. "_inner"}, }) elseif alternate == "_outer_half" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_outer_half", modname .. ":slope_" .. subname .. "_inner_half_raised"}, }) elseif alternate == "_inner_half" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_outer_half_raised", modname .. ":slope_" .. subname .. "_inner_half"}, }) elseif alternate == "_outer_cut" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_outer_cut", modname .. ":slope_" .. subname .. "_inner_cut"}, }) elseif alternate == "_outer_cut_half" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_outer_cut_half", modname .. ":slope_" .. subname .. "_inner_cut_half_raised"}, }) elseif alternate == "_cut" then minetest.register_craft({ type = "shapeless", output = recipeitem, recipe = {modname .. ":slope_" .. subname .. "_cut", modname .. ":slope_" .. subname .. "_cut"}, }) elseif alternate == "_half_raised" then minetest.register_craft({ type = "shapeless", output = modname .. ":slope_" .. subname .. "_half_raised", recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half"}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":slope_" .. subname .. "_half_raised", recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_half"}, }) elseif alternate == "_inner_half_raised" then minetest.register_craft({ type = "shapeless", output = modname .. ":slope_" .. subname .. "_inner_half_raised", recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_half"}, }) elseif alternate == "_outer_half_raised" then minetest.register_craft({ type = "shapeless", output = modname .. ":slope_" .. subname .. "_outer_half_raised", recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_outer_half"}, }) elseif alternate == "_inner_cut_half_raised" then minetest.register_craft({ type = "shapeless", output = modname .. ":slope_" .. subname .. "_inner_cut_half_raised", recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_cut_half"}, }) end elseif category == "stair" then if alternate == "" then minetest.register_craft({ output = modname .. ":stair_" .. subname .. " 8", recipe = { {recipeitem, "", ""}, {recipeitem, recipeitem, ""}, {recipeitem, recipeitem, recipeitem}, }, }) minetest.register_craft({ output = modname .. ":stair_" .. subname .. " 8", recipe = { {"", "", recipeitem}, {"", recipeitem, recipeitem}, {recipeitem, recipeitem, recipeitem}, }, }) minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname, recipe = {modname .. ":panel_" .. subname, modname .. ":slab_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname, recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname, recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname, recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, }) elseif alternate == "_inner" then minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname .. "_inner", recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, }) elseif alternate == "_outer" then minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname .. "_outer", recipe = {modname .. ":micro_" .. subname, modname .. ":slab_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname .. "_outer", recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, }) elseif alternate == "_half" then minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname .. "_half", recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, }) minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname .. "_half", recipe = {modname .. ":panel_" .. subname, modname .. ":micro_" .. subname}, }) elseif alternate == "_right_half" then minetest.register_craft({ type = "shapeless", output = modname .. ":stair_" .. subname .. "_right_half", recipe = {modname .. ":stair_" .. subname .. "_half"}, }) elseif alternate == "_alt" then minetest.register_craft({ -- See mirrored variation of the recipe below. output = modname .. ":stair_" .. subname .. "_alt", recipe = { {modname .. ":panel_" .. subname, ""}, {"" , modname .. ":panel_" .. subname}, }, }) minetest.register_craft({ -- Mirrored variation of the recipe above. output = modname .. ":stair_" .. subname .. "_alt", recipe = { {"" , modname .. ":panel_" .. subname}, {modname .. ":panel_" .. subname, ""}, }, }) end end end moreblocks-2.2.0/stairsplus/registrations.lua000066400000000000000000000116651406645002200214740ustar00rootroot00000000000000--[[ More Blocks: registrations Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- default registrations local default_nodes = { -- Default stairs/slabs/panels/microblocks: "stone", "stone_block", "cobble", "mossycobble", "brick", "sandstone", "steelblock", "goldblock", "copperblock", "bronzeblock", "diamondblock", "tinblock", "desert_stone", "desert_stone_block", "desert_cobble", "meselamp", "glass", "tree", "wood", "jungletree", "junglewood", "pine_tree", "pine_wood", "acacia_tree", "acacia_wood", "aspen_tree", "aspen_wood", "obsidian", "obsidian_block", "obsidianbrick", "obsidian_glass", "stonebrick", "desert_stonebrick", "sandstonebrick", "silver_sandstone", "silver_sandstone_brick", "silver_sandstone_block", "desert_sandstone", "desert_sandstone_brick", "desert_sandstone_block", "sandstone_block", "coral_skeleton", "ice", } for _, name in pairs(default_nodes) do local mod = "default" local nodename = mod .. ":" .. name local ndef = table.copy(minetest.registered_nodes[nodename]) ndef.sunlight_propagates = true -- Stone and desert_stone drop cobble and desert_cobble respectively. if type(ndef.drop) == "string" then ndef.drop = ndef.drop:gsub(".+:", "") end -- Use the primary tile for all sides of cut glasslike nodes and disregard paramtype2. if #ndef.tiles > 1 and ndef.drawtype and ndef.drawtype:find("glass") then ndef.tiles = {ndef.tiles[1]} ndef.paramtype2 = nil end mod = "moreblocks" stairsplus:register_all(mod, name, nodename, ndef) minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) end -- farming registrations if minetest.get_modpath("farming") then local farming_nodes = {"straw"} for _, name in pairs(farming_nodes) do local mod = "farming" local nodename = mod .. ":" .. name local ndef = table.copy(minetest.registered_nodes[nodename]) ndef.sunlight_propagates = true mod = "moreblocks" stairsplus:register_all(mod, name, nodename, ndef) minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) end end -- wool registrations if minetest.get_modpath("wool") then local dyes = {"white", "grey", "black", "red", "yellow", "green", "cyan", "blue", "magenta", "orange", "violet", "brown", "pink", "dark_grey", "dark_green"} for _, name in pairs(dyes) do local mod = "wool" local nodename = mod .. ":" .. name local ndef = table.copy(minetest.registered_nodes[nodename]) ndef.sunlight_propagates = true stairsplus:register_all(mod, name, nodename, ndef) end end -- basic_materials, keeping the original other-mod-oriented names -- for backwards compatibility if minetest.get_modpath("basic_materials") then stairsplus:register_all("technic","concrete","basic_materials:concrete_block",{ description = "Concrete", tiles = {"basic_materials_concrete_block.png",}, groups = {cracky=1, level=2, concrete=1}, sounds = default.node_sound_stone_defaults(), }) minetest.register_alias("prefab:concrete_stair","technic:stair_concrete") minetest.register_alias("prefab:concrete_slab","technic:slab_concrete") stairsplus:register_all("gloopblocks", "cement", "basic_materials:cement_block", { description = "Cement", tiles = {"basic_materials_cement_block.png"}, groups = {cracky=2, not_in_creative_inventory=1}, sounds = default.node_sound_stone_defaults(), sunlight_propagates = true, }) stairsplus:register_all("technic", "brass_block", "basic_materials:brass_block", { description="Brass Block", groups={cracky=1, not_in_creative_inventory=1}, tiles={"basic_materials_brass_block.png"}, }) end -- Alias cuts of split_stone_tile_alt which was renamed checker_stone_tile. stairsplus:register_alias_all("moreblocks", "split_stone_tile_alt", "moreblocks", "checker_stone_tile") -- The following LBM is necessary because the name stair_split_stone_tile_alt -- conflicts with another node and so the alias for that specific node gets -- ignored. minetest.register_lbm({ name = "moreblocks:fix_split_stone_tile_alt_name_collision", nodenames = {"moreblocks:stair_split_stone_tile_alt"}, action = function(pos, node) minetest.set_node(pos, { name = "moreblocks:stair_checker_stone_tile", param2 = minetest.get_node(pos).param2 }) minetest.log('action', "LBM replaced " .. node.name .. " at " .. minetest.pos_to_string(pos)) end, }) moreblocks-2.2.0/stairsplus/slabs.lua000066400000000000000000000030041406645002200176670ustar00rootroot00000000000000--[[ More Blocks: slab definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- Node will be called :slab_ -- luacheck: no unused local function register_slab(modname, subname, recipeitem, groups, images, description, drop, light) stairsplus:register_slab(modname, subname, recipeitem, { groups = groups, tiles = images, description = description, drop = drop, light_source = light, sounds = default.node_sound_stone_defaults(), }) end function stairsplus:register_slab_alias(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["slab"]) for alternate, def in pairs(defs) do minetest.register_alias(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate) end end function stairsplus:register_slab_alias_force(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["slab"]) for alternate, def in pairs(defs) do minetest.register_alias_force(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate) end end function stairsplus:register_slab(modname, subname, recipeitem, fields) local defs = table.copy(stairsplus.defs["slab"]) for alternate, shape in pairs(defs) do stairsplus.register_single("slab", alternate, shape, modname, subname, recipeitem, fields) end circular_saw.known_nodes[recipeitem] = {modname, subname} end moreblocks-2.2.0/stairsplus/slopes.lua000066400000000000000000000030171406645002200200740ustar00rootroot00000000000000--[[ More Blocks: slope definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- Node will be called :slope_ -- luacheck: no unused local function register_slope(modname, subname, recipeitem, groups, images, description, drop, light) stairsplus:register_slope(modname, subname, recipeitem, { groups = groups, tiles = images, description = description, drop = drop, light_source = light, sounds = default.node_sound_stone_defaults(), }) end function stairsplus:register_slope_alias(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["slope"]) for alternate, def in pairs(defs) do minetest.register_alias(modname_old .. ":slope_" .. subname_old .. alternate, modname_new .. ":slope_" .. subname_new .. alternate) end end function stairsplus:register_slope_alias_force(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["slope"]) for alternate, def in pairs(defs) do minetest.register_alias_force(modname_old .. ":slope_" .. subname_old .. alternate, modname_new .. ":slope_" .. subname_new .. alternate) end end function stairsplus:register_slope(modname, subname, recipeitem, fields) local defs = table.copy(stairsplus.defs["slope"]) for alternate, def in pairs(defs) do stairsplus.register_single("slope", alternate, def, modname, subname, recipeitem, fields) end circular_saw.known_nodes[recipeitem] = {modname, subname} end moreblocks-2.2.0/stairsplus/stairs.lua000066400000000000000000000030171406645002200200740ustar00rootroot00000000000000--[[ More Blocks: stair definitions Copyright © 2011-2020 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] -- Node will be called :stair_ -- luacheck: no unused local function register_stair(modname, subname, recipeitem, groups, images, description, drop, light) stairsplus:register_stair(modname, subname, recipeitem, { groups = groups, tiles = images, description = description, drop = drop, light_source = light, sounds = default.node_sound_stone_defaults(), }) end function stairsplus:register_stair_alias(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["stair"]) for alternate, def in pairs(defs) do minetest.register_alias(modname_old .. ":stair_" .. subname_old .. alternate, modname_new .. ":stair_" .. subname_new .. alternate) end end function stairsplus:register_stair_alias_force(modname_old, subname_old, modname_new, subname_new) local defs = table.copy(stairsplus.defs["stair"]) for alternate, def in pairs(defs) do minetest.register_alias_force(modname_old .. ":stair_" .. subname_old .. alternate, modname_new .. ":stair_" .. subname_new .. alternate) end end function stairsplus:register_stair(modname, subname, recipeitem, fields) local defs = table.copy(stairsplus.defs["stair"]) for alternate, def in pairs(defs) do stairsplus.register_single("stair", alternate, def, modname, subname, recipeitem, fields) end circular_saw.known_nodes[recipeitem] = {modname, subname} end moreblocks-2.2.0/textures/000077500000000000000000000000001406645002200155355ustar00rootroot00000000000000moreblocks-2.2.0/textures/moreblocks_cactus_brick.png000066400000000000000000000012711406645002200231200ustar00rootroot00000000000000PNG  IHDRh6IDATxbL3fuCEq@E8 'y<-k۶o^k|ڶ}mzjwc2I̙#rLp5m@t_L/: [t/4[)xouM8' `+w iJ.뿧#;>2#MyY?VBf* (.K"D?<_ !cDd 5~2ۯ1&d^HˉهYDa4M&'c)T痋0‚ /YaыAEYTFi?j?k@l@mAnBoBrDuFxHyH{IMPmzEtRNSU/IDATxb,AֶmNF/u克p<=au T>K$vb%?DA ȸ_;l'9Â\yoTlѡI Ǩ΢Ϡ73jK Fo0Rqh}ɘw낤YQ کBaěYuCU@vZdK_zL:Y.!_IENDB`moreblocks-2.2.0/textures/moreblocks_checker_stone_tile.png000066400000000000000000000004531406645002200243160ustar00rootroot00000000000000PNG  IHDR:IDATxbWP@#7 œ Ho8g6yB{<^҉w6?O?L>n|HGl711#yP0A)@ 3˼h*u`2YJG2U$/,)9ih8 o t#W'zin@f`aA|iN5rG=IEӐ3 S1ґPY?OzyIENDB`moreblocks-2.2.0/textures/moreblocks_circle_stone_bricks.png000066400000000000000000000006761406645002200245020ustar00rootroot00000000000000PNG  IHDR(-SPLTE'$#,)(-*)1/.10/210311;76;87<87<98<:9=;:HFEIFEIFFJFFJGFNKJOLKPLKPNMTQPTQQUSRUTSVTSWTSWTTWUTXTTXUT_[Z_\[`\[`]\a]\a]]a^]a^^a_^b_^c`_d`_hdcmihmjinjinkjokjolkollomlpmlqmlqnmzwv{xw~5;IDATxB0 ']^]).7?a9rTnӖ!h,HD IƖQv#A 9拳TIkRosqrJ25/M嫧t_~>y58 N3_&D"ZZ?pB{`3ڌ1=frS R@ecX|ftŽYIENDB`moreblocks-2.2.0/textures/moreblocks_circular_saw_bottom.png000066400000000000000000000010761406645002200245310ustar00rootroot00000000000000PNG  IHDR(-SPLTE  !!!###'''(((***---000444555:::<<'K>*K>+K?,M@,MA-OA)OA-QB*QC-QC.SD.SE/TE/TE0XG-XH1YH.ZJ2[[[\J/\\\_N5```aN1aO5aQ6bO1bP6bQ6bbbfffiU9iW:jV9jX:kV5kW:lW6lW9lX:lY;lllr\=ssswa?xb@xcAya:yc@zcAzzz}}}jEc IDATxAAб]B\K a )VrH^=台hԫGyӸ >?BXP1׉2yzJȒZD81,xKVrx=7tA DZEU5d~,..O *d:{ Qc`I*C@/enDJ,q!$e܎t0|ohIENDB`moreblocks-2.2.0/textures/moreblocks_circular_saw_side.png000066400000000000000000000007321406645002200241470ustar00rootroot00000000000000PNG  IHDR(-SPLTE """CCCE:(F:)GGGH=*HHHIIIK>'K>*K>+K?,KKKM@,MA-MMMNNNOA)OA-OOOPPPQB*QQQRRRSD.SE/TE/TE0XG-XH1XI2YH.ZJ2_N5aN1aO5aQ6bO1bP6bQ6iW:jV9jX:kV5kW:lW9lX:lY;xb@xcAyc@zcAjEIDATxbta@,Q du9pw[L5  @qyb[XRr_@ȳh_CгU$?(vEf^O5sou "tCE{Q f︫@0iUi34=0xq,4)/BR`v4Ej:i9$W.)IENDB`moreblocks-2.2.0/textures/moreblocks_circular_saw_top.png000066400000000000000000000006671406645002200240340ustar00rootroot00000000000000PNG  IHDR(-SPLTEE:(F:)H<*H=*K>'K>*K>+K?,M@,MA-OA)OA-OB.QB*QC-QC.SD.SE/TE/TE0XG-XH1XI2YH.ZJ2\J/_N5`N0aN1aO5aQ6bO1bP6bQ6iU9iW:jU5jV9jX:kV5kW:lW6lW9lX:lY;r\=wa?wcAxb@xcAya:yc@zcAjEو 6IDATx q0EJ2aN鿗tfh77>!9_a#1y#54ZHzNtvJM$F13IENDB`moreblocks-2.2.0/textures/moreblocks_coal_glass_stairsplus.png000066400000000000000000000002431406645002200250620ustar00rootroot00000000000000PNG  IHDR(-SPLTE~tRNS@f?IDATxl͡@ WFaFƜҗ Qʆ$\;CH!IENDB`moreblocks-2.2.0/textures/moreblocks_coal_stone.png000066400000000000000000000003451406645002200226130ustar00rootroot00000000000000PNG  IHDR:IDAT%1jA3-3b?'\q mbU@۶%%i9\mzI*s9-Uyj-9,9 ":$RꒉGsL.#fUϪ̴}o6Wݒo))n.6NqIENDB`moreblocks-2.2.0/textures/moreblocks_coal_stone_bricks.png000066400000000000000000000007411406645002200241500ustar00rootroot00000000000000PNG  IHDR(-SPLTE+('.-+/--1--1.-1..421432643743744>;9><;?<;?==B?>MIHMKIMLKOLKOMLTRQURQUSRVTRVTSWTSWTTWUTXUT_[Z_\[`\[`]\a]\a]]a^]b_^d`_fdcfedgedhdcheehfemihmjinjinkjokjolkplkpmlqmlrnmsonsoospotpozwv{wv{xw~}~~~~2@IDATx bQFwc۶*_mcguJXꍸJ/]M&T쾥HKR+^<4vPWfES]!gW3o@FxՀBfe>$5եuZ ʼn8Y* *A3Je:K}0+G8t@`x*D[n(]IENDB`moreblocks-2.2.0/textures/moreblocks_cobble_compressed.png000066400000000000000000000005441406645002200241400ustar00rootroot00000000000000PNG  IHDR(-SfPLTEC?=FC?FCAHDAHDBHECIDCIEBIECKHDKHELJHPNLQNLRPNSPNTQOURPYUS[XU]ZX_\Y_\Zc_]eb^eb_fc`hfdkgernkrnl}{[!IDATB!@S(SϺi{K6Cf\GJ {g>\T[|($. ̉!A=S/nX&Ї.E}w3K|F .eޥ ZRjQLOoT~^#ί~93L]msr!CƲ}WBG#IENDB`moreblocks-2.2.0/textures/moreblocks_copperpatina.png000066400000000000000000000004021406645002200231440ustar00rootroot00000000000000PNG  IHDR(-S0PLTEYmSfWzfnp~VjcoWlWy[o~}xç~ơġUIDATxǁ0 ;B\$c3N=:@Ӣ@&#4HӡhSH' M%`<0K]P?BU Nn)\ ݷʿg vLW;x>d*c&z^c:* IENDB`moreblocks-2.2.0/textures/moreblocks_desert_cobble_compressed.png000066400000000000000000000050121406645002200255010ustar00rootroot00000000000000PNG  IHDR(-SVzTXtRaw profile type exifxڭWY'>Vs9t;b^Ewl)g?!(1ZylO7Y{_`t9Le/կ&{#?7-v;~~{#ڈպ7j{reuK_ґR0䘇#g׷W~ >Q1\Fۻhbw @h}wo\veoaw=?8cMk1ߘBټy6H sE і[<; xkI}o`;r`Fr"ĜcA\Nw85\yv#7JF\Y' !ĐB6AB.b)$WK>SJ9I*eC9%aqȁA$"R C{/\]5XSUjiO-RMZ]G豧2 dGq@k{'?f/X/tYCIlA3cO` Kc5o(WyOM&:? ,&E`niõoMfqWV%?J A`ُ%]ۡzT|u̒vaj9Ջ1ATb5]ݶ߭37i+#" \F;բ@* 6hFTHVM ũHC~IU`|f:,JO6tЎ:5# Kgc$ҵn+Jp_Qcнgb{;=YGH7uVQ*r86M=UHn IjKNsVo q{ƕIt|;u D:z'[Mpv1n"[o~>F(Ӿ[ vÆx~vxVi,F~iɄb2",ȿ{y] 䣫nM`NT8V5&֩"k_s uYr١SEGɲ3:sU +-&SL7^J7L.kwzaNYn*73+d?$]q,"JռK:/&Ի}[Q)/\U^Ek=ۛw5y}Vy)Y5yT܏ꉚUE5ɕs9YEXg !i*-r66N9&@tf߫$z%x~iQ5 }EywݟOɛ sL7, MKOf%I!>'7ď\]~\tXa#'; x8 Y[J_k+iFKH 2j( Q5RL<rIr*cU?YtB1Ŷ?F.Ьm7O3p0IzEm⺭{0KH~ZB7倁[w[@z|cE^xwoִ 4r$uPLTET3%U3%U4%U4&V4&W5&X5&X5'X6'X6)Y7'Y7([8*\8([9(^9*_:*`:*_;*a;*b<+d=,e>,g?0kA2kB2lB3nC3nC4oD4qD4pE1qE5sE5rF5sF6tF6tG6uG6vH7wH7xI8yI8yJ8zJ8~L;~M;OQ>R>R?S?S?S@VBVAVAVBWBWBXCXCXCYDZEZDZDZE[E[E[F\F\G\G]G^H^H_H`IaJaJŏbKGDH pHYs  tIME.d[0IDAT%1E! ZrɢҤIA i6oyZUW+"Dn=ȉǏCTZ3S6ϦՊs= ߃j}.poi/{/}[Cs6ZXJ_gvM9o2`]>tJL}IENDB`moreblocks-2.2.0/textures/moreblocks_dirt_compressed.png000066400000000000000000000004151406645002200236510ustar00rootroot00000000000000PNG  IHDR(-S3PLTEaB*]?&dD,[=$W7gH0T4qQ9mM5kK2Y: F( |\DoP8T7P1L.֟IDAT00R tNd]m#.xUYeWWa%'S#:pwY vVjڝuAg@Zߨb+Ԁ)k (Zn }|XIENDB`moreblocks-2.2.0/textures/moreblocks_empty_shelf.png000066400000000000000000000003171406645002200230030ustar00rootroot00000000000000PNG  IHDR(-S*PLTE;2"R?#sZ40)_H(XC$i;mT/}a6nT+tX-hP**%[l`IDATxeP ΫC1ig+1^2EUO("}0C%bx ZZD]K&xi*/ߎ"B_{rVfYb+IENDB`moreblocks-2.2.0/textures/moreblocks_glass_stairsplus.png000066400000000000000000000002471406645002200240700ustar00rootroot00000000000000PNG  IHDR(-SPLTEoiftRNS@f@IDATxu0m|(҅ k0_*2k=6*fm4vI'C\7IENDB`moreblocks-2.2.0/textures/moreblocks_glow_glass_stairsplus.png000066400000000000000000000002471406645002200251200ustar00rootroot00000000000000PNG  IHDR(-SPLTErt}LӂtRNS@f@IDATxu0m|(҅ k0_*2k=6*fm4vI'C\7IENDB`moreblocks-2.2.0/textures/moreblocks_grey_bricks.png000066400000000000000000000013251406645002200227670ustar00rootroot00000000000000PNG  IHDRh6IDAT(nD?7HA*BI<\H\JڪKhM6ćc=3?z|eGRu8𖋿~Ó'7 j+zdA^YQF80,RI>au!CTqbyLkZ*lYe4=/ɪa F0,MBJJֶI8q>Q}.gqB4X$믾!4i_mWMiUUPVԶ=wݙBȶY]Jj~G4 wmgyxLnww-vlPShR3/O>=>4Qn/ch*JX?/_<<9lnM^_&-C|!lBfYȀ2/,!Ig_bLdBi9 XŶ̊QOIx{1j:̤EE'ǟ!4^':))U &7y[׭eW۷QB^o>9"RA XiTUY1B3I X}Uso>#X@붽bx( [r뺖4jw`$'?xPһaIENDB`moreblocks-2.2.0/textures/moreblocks_iron_checker.png000066400000000000000000000013431406645002200231170ustar00rootroot00000000000000PNG  IHDRaIDATx=SÚ] mm۾mu.HOR,9FFF.TfbQǣ455 beed#AJx e2 F{{;˔#LwFWdH(1\.G|^z=j5=/EQ* ,u333*rX{b2n|"p-a \.*J$,'7o_9x,.v](7n@gg' B2$H|i2n$L柿~I|wxx#y`JyIӱKRRR$`ppzMqF1T(QV#X,ɹVUrFh4wn**5x`0Hl''' TUan߾U4M; e""M #: KQCKRD6M䴵dxJB M9CWWBa4L=~_ dK=vj4Pc9{^z.,x^?OѕJEaVהqT7L7M[IENDB`moreblocks-2.2.0/textures/moreblocks_iron_glass_stairsplus.png000066400000000000000000000002471406645002200251170ustar00rootroot00000000000000PNG  IHDR(-SPLTEtRNS@f@IDATxu0m|(҅ k0_*2k=6*fm4vI'C\7IENDB`moreblocks-2.2.0/textures/moreblocks_iron_stone.png000066400000000000000000000003451406645002200226440ustar00rootroot00000000000000PNG  IHDR:IDATx%1RQD94q?l:Cu$f~ Np_@үo^8$X2*ݦCUmD6}W ǽǘsB~3jBc{PQ]+W`2#2y}êH6}OS^w3Dk8IENDB`moreblocks-2.2.0/textures/moreblocks_iron_stone_bricks.png000066400000000000000000000007431406645002200242030ustar00rootroot00000000000000PNG  IHDR(-SPLTE" # % %! %"!(&%)'&+(',(',((30.310410421621622732743C?>CA?CBADBAFCBNLJOMLupn~{y{y}{~}~}~~~ľƾ (IDATxEBA@_MK|wX#Er$A׏IID/VeOdAaޭ:EДp'0!i~n鋕#`@!bLl%ZTcFlOc<̘-ҿ4Mٗ1_K姳$$e0T%ChK-*kHgƮ8PcEsIENDB`moreblocks-2.2.0/textures/moreblocks_junglestick.png000066400000000000000000000001631406645002200230050ustar00rootroot00000000000000PNG  IHDR(-S PLTE(:)C$|tRNS@fIDATxc 015' ;/4sIENDB`moreblocks-2.2.0/textures/moreblocks_obsidian_glass_stairsplus.png000066400000000000000000000002201406645002200257270ustar00rootroot00000000000000PNG  IHDRb PLTE&156LtRNS@f5IDAT[M1 @ %4 %H`LXJc%P0-TmdE7=IENDB`moreblocks-2.2.0/textures/moreblocks_plankstone.png000066400000000000000000000005171406645002200226440ustar00rootroot00000000000000PNG  IHDR(-SrPLTE7-8,9-:/<0?1A5C6E6G7H8M>!N?!OLKQ?TRQUTSVTSWTTWUT[G)_[Z`K,`\[`]\a^]b_^hdcnkjolkplkpmlqml{wv{xwi7sDRt8IDATN@c %QbL ^QАez<'但7 r,F(Ȍ^E9*ՇogUm,R ]zWf[Nh9;G?KڂS Gj֛sU ؍(0mH|Fu3kIENDB`moreblocks-2.2.0/textures/moreblocks_plankstone_2.png000066400000000000000000000005421406645002200230630ustar00rootroot00000000000000PNG  IHDR(-S{PLTE7-8,9-:/<0?1A5C6E6G7H8M>!N?!OLKQ?USRVTSWTSWTT[G)`K,`]\a]\a]]a^]a^^a_^b_^mjinjinkjokjolkollpmlzwv{xw~i7sDR,PhIDATN@'X@ECQ@-3qD BhD\&_Pmi+f9 l1fȩ=cjy^5%uQ=Rfja 6'@45\h@:\.v0M;J F[pcIENDB`moreblocks-2.2.0/textures/moreblocks_rope.png000066400000000000000000000005401406645002200214270ustar00rootroot00000000000000PNG  IHDR(-SPLTE%L 6+*-3**< A!J6HJ^ EHL* AE n ; J!P!R$6%L 'S '\ (8)`*J*Q ,L ,e,e-<0>3? 4V 4i 5m6L6s=w?V CT C|EwPo Y^:tRNS.?$eIDATxED=[q,;t߻ꬿ® N;a1Mh޷ 41?| UL0Mv ^ӼAHVTy!K˝IENDB`moreblocks-2.2.0/textures/moreblocks_split_stone_tile.png000066400000000000000000000004201406645002200240370ustar00rootroot00000000000000PNG  IHDR:IDATxbL4<1Pj{SM:)P?ąj!K1|E=/O)5 ypY-nhWAZR%16$T*gފҒu~9y; PTRע}?lR{ص\j.VE9U6'tS+aq;  ?}ww[Ϯfw4IENDB`moreblocks-2.2.0/textures/moreblocks_split_stone_tile_top.png000066400000000000000000000004261406645002200247270ustar00rootroot00000000000000PNG  IHDR:IDATx ̷AdA PI#[@)+Ugx BΚA<Jo@edEld<,U/-)- & U*w]k>4+=SYsyK 0hds"cRz^S;׮ٴ*vꔪ˘j 06EOcT8_SWCF"do`oHafA;i1]mX:e.>(l|`̾^/t)IENDB`moreblocks-2.2.0/textures/moreblocks_trap_box.png000066400000000000000000000001301406645002200222730ustar00rootroot00000000000000PNG  IHDRaIDATxc'K>*K>+K?,M@,MA-OA)OA-OB.QB*QC-QC.SD.SE/TE/TE0XG-XH1XI2YH.ZJ2\J/_N5`N0aN1aO5aQ6bO1bP6bQ6iU9iW:jU5jV9jX:kV5kW:lW6lW9lX:lY;r\=wa?wcAxb@xcAya:yc@zcAjE&CtRNS@fIDATxEPgb;_Yݛ9s\Yu3oBPg_Br!뢈!BL__aXI@|iAUU#B] Ban݃!RrbC]^?CQd\sIENDB`moreblocks-2.2.0/textures/moreblocks_wood_tile_center.png000066400000000000000000000004311406645002200240060ustar00rootroot00000000000000PNG  IHDR(-SuPLTE[G)E:(F:)K>'M@,MA-OA)OB.QC-QC.SD.SE/TE/TE0XH1XI2YH.ZJ2\J/_N5`N0aQ6bO1bP6bQ6iU9iW:jU5jV9jX:kV5kW:lW6lX:lY;r\=wa?wcAya:ztRNS@fRIDATxڭȃ1^Ȏee::OR'BmJ BL(~}8 }ߋL~׮1IENDB`moreblocks-2.2.0/textures/moreblocks_wood_tile_full.png000066400000000000000000000006611406645002200234750ustar00rootroot00000000000000PNG  IHDR(-SPLTED8'E:(F:)H<*H=*K>'K>*K>+K?,M@,MA-OA)OA-OB.QB*QC-QC.SD.SE/TE/TE0XG-XH1XI2YH.ZJ2\J/_N5`N0aN1aO5aQ6bO1bP6bQ6iU9iW:jU5jV9jX:kV5kW:lW6lW9lX:lY;r\=wa?wcAxb@xcAya:yc@zcAjE3eIDATxU @147L|AQ26i;{^յ>7rӦT'P9k^nUIdM+"jL_"[%Cnե6]W;{ bEJ4k l!h-k ~~<7 tLx9 Z3;D ޵ 6pz97WcRSIENDB`moreblocks-2.2.0/textures/moreblocks_wood_tile_offset.png000066400000000000000000000004321406645002200240150ustar00rootroot00000000000000PNG  IHDR(-SuPLTE[G)E:(F:)K>'M@,MA-OA)OB.QC-QC.SD.SE/TE/TE0XH1XI2YH.ZJ2\J/_N5`N0aQ6bO1bP6bQ6iU9iW:jU5jV9jX:kV5kW:lW6lX:lY;r\=wa?wcAya:ztRNS@fSIDATxDȃD1og9