├── .editorconfig ├── .github └── workflows │ └── build.yml ├── .luacheckrc ├── .pre-commit-config.yaml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── aliases.lua ├── circular_saw.lua ├── config.lua ├── crafting.lua ├── init.lua ├── locale ├── moreblocks.de.tr ├── moreblocks.es.tr ├── moreblocks.fr.tr ├── moreblocks.it.tr ├── moreblocks.pl.tr ├── moreblocks.pt_BR.tr ├── moreblocks.ru.tr ├── moreblocks.template.tr ├── moreblocks.uk.tr ├── moreblocks.zh_CN.tr └── moreblocks.zh_TW.tr ├── mod.conf ├── models ├── moreblocks_slope.obj ├── moreblocks_slope_cut.obj ├── moreblocks_slope_half.obj ├── moreblocks_slope_half_raised.obj ├── moreblocks_slope_inner.obj ├── moreblocks_slope_inner_cut.obj ├── moreblocks_slope_inner_cut_half.obj ├── moreblocks_slope_inner_cut_half_raised.obj ├── moreblocks_slope_inner_half.obj ├── moreblocks_slope_inner_half_raised.obj ├── moreblocks_slope_outer.obj ├── moreblocks_slope_outer_cut.obj ├── moreblocks_slope_outer_cut_half.obj ├── moreblocks_slope_outer_cut_half_raised.obj ├── moreblocks_slope_outer_half.obj └── moreblocks_slope_outer_half_raised.obj ├── nodes.lua ├── ownership.lua ├── redefinitions.lua ├── settingtypes.txt ├── sounds.lua ├── stairsplus ├── API.md ├── common.lua ├── custom.lua ├── defs.lua ├── init.lua ├── microblocks.lua ├── panels.lua ├── recipes.lua ├── registrations.lua ├── slabs.lua ├── slopes.lua └── stairs.lua └── textures ├── moreblocks_cactus_brick.png ├── moreblocks_cactus_checker.png ├── moreblocks_checker_stone_tile.png ├── moreblocks_circle_stone_bricks.png ├── moreblocks_circular_saw_bottom.png ├── moreblocks_circular_saw_side.png ├── moreblocks_circular_saw_top.png ├── moreblocks_clean_glass.png ├── moreblocks_clean_glass_detail.png ├── moreblocks_coal_checker.png ├── moreblocks_coal_glass_stairsplus.png ├── moreblocks_coal_stone.png ├── moreblocks_coal_stone_bricks.png ├── moreblocks_cobble_compressed.png ├── moreblocks_copperpatina.png ├── moreblocks_desert_cobble_compressed.png ├── moreblocks_dirt_compressed.png ├── moreblocks_empty_shelf.png ├── moreblocks_glass_stairsplus.png ├── moreblocks_glow_glass_stairsplus.png ├── moreblocks_grey_bricks.png ├── moreblocks_iron_checker.png ├── moreblocks_iron_glass_stairsplus.png ├── moreblocks_iron_stone.png ├── moreblocks_iron_stone_bricks.png ├── moreblocks_junglestick.png ├── moreblocks_obsidian_glass_stairsplus.png ├── moreblocks_plankstone.png ├── moreblocks_plankstone_2.png ├── moreblocks_rope.png ├── moreblocks_split_stone_tile.png ├── moreblocks_split_stone_tile_top.png ├── moreblocks_stone_tile.png ├── moreblocks_super_glow_glass_stairsplus.png ├── moreblocks_sweeper.png ├── moreblocks_tar.png ├── moreblocks_trap_box.png ├── moreblocks_trap_box_glass.png ├── moreblocks_tree_stairsplus.png ├── moreblocks_wood_tile.png ├── moreblocks_wood_tile_center.png ├── moreblocks_wood_tile_full.png └── moreblocks_wood_tile_offset.png /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.{lua,luacheckrc}] 12 | indent_style = tab 13 | indent_size = 4 14 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | build: 6 | runs-on: ubuntu-latest 7 | 8 | steps: 9 | - uses: actions/checkout@master 10 | - uses: actions/setup-python@master 11 | 12 | - run: | 13 | sudo apt-get update -qq 14 | sudo apt-get install -qqq luarocks 15 | - name: Install pre-commit 16 | run: pip3 install pre-commit 17 | 18 | - name: Install LuaCheck 19 | run: luarocks install --local luacheck 20 | 21 | - name: Run LuaCheck using pre-commit 22 | run: | 23 | pre-commit run --all-files 24 | $HOME/.luarocks/bin/luacheck . 25 | -------------------------------------------------------------------------------- /.luacheckrc: -------------------------------------------------------------------------------- 1 | std = "lua51+minetest" 2 | unused_args = false 3 | allow_defined_top = true 4 | max_line_length = 999 5 | 6 | stds.minetest = { 7 | read_globals = { 8 | "DIR_DELIM", 9 | "minetest", 10 | "core", 11 | "dump", 12 | "vector", 13 | "nodeupdate", 14 | "VoxelManip", 15 | "VoxelArea", 16 | "PseudoRandom", 17 | "ItemStack", 18 | "default", 19 | table = { 20 | fields = { 21 | "copy", 22 | }, 23 | }, 24 | } 25 | } 26 | 27 | read_globals = { 28 | "protector", 29 | "isprotect", 30 | "IsPlayerNodeOwner", 31 | "HasOwner", 32 | "getLastOwner", 33 | "GetNodeOwnerName", 34 | "place_rotated", 35 | } 36 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://github.com/pre-commit/pre-commit-hooks 3 | rev: v3.3.0 4 | hooks: 5 | - id: fix-byte-order-marker 6 | - id: end-of-file-fixer 7 | - id: trailing-whitespace 8 | 9 | - id: mixed-line-ending 10 | args: [--fix=lf] 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 6 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 7 | 8 | ## [Unreleased] 9 | 10 | ## [2.2.0] - 2021-06-28 11 | 12 | ### Changed 13 | 14 | - Refactored recipe override mechanism to avoid re-coding recipes 15 | when we only want to change the amount produced. 16 | - [Realigned rail recipe to the changes made in Minetest Game.](https://github.com/minetest-mods/moreblocks/pull/169) 17 | - All rail recipes (standard, power, break) were boosted by 50%. 18 | 19 | ### Fixed 20 | 21 | - [Shapeless crafting recipes are now handled in redefinitions.](https://github.com/minetest-mods/moreblocks/pull/171) 22 | - [Aliases are now resolved in Stairs+ circular saw cost calculation.](https://github.com/minetest-mods/moreblocks/pull/175) 23 | - [Fixed strange placement behavior for non-default Stairs+ nodes.](https://github.com/minetest-mods/moreblocks/pull/168) 24 | - [Fixed stairs placement over oddly-shaped nodes.](https://github.com/minetest-mods/moreblocks/pull/166) 25 | 26 | ## [2.1.0] - 2020-12-14 27 | 28 | ### Added 29 | 30 | - Clean Glass versions of Trap and (Super) Glowing Glass. 31 | - Compressed desert cobblestone. 32 | 33 | ### Changed 34 | 35 | - Revised placing strategy that takes into account which side of the face 36 | (top/bottom for horizontal, left/right for vertical placement) is being clicked. 37 | Aux (sprint/special, default E) key can be used to place the node with the orientation 38 | it would have if placed from the other side. 39 | When placing nodes next to nodes of the same gategory (e.g.slab to slab) the other 40 | node's orientation is copied, flipping it placing on top or below an upright or 41 | upside-down node. In this case the aux key will disable the special processing of 42 | same-category nodes. 43 | 44 | ### Fixed 45 | 46 | - Revised minetest_game crafting recipe overrides to match Minetest 5.0.0 and later. 47 | 48 | ### Removed 49 | 50 | - Legacy Stairs+ conversion code. 51 | - It was only required to import worlds last edited before Q3 2013. 52 | 53 | ## [2.0.0] - 2019-11-25 54 | 55 | ### Added 56 | 57 | - Stairs+ nodes for ice. 58 | - `settingtypes.txt` file to allow configuring settings in the main menu. 59 | - Polish translation. 60 | 61 | ### Changed 62 | 63 | - The minimum supported Minetest version is now 5.0.0. 64 | - Stairs+ nodes now emit one light level less compared to full nodes to make up 65 | for their smaller visual size. 66 | 67 | ### Fixed 68 | 69 | - Fixed a recipe conflict that made Centered Wooden Tiles impossible to craft. 70 | 71 | ## [1.3.0] - 2019-03-23 72 | 73 | ### Changed 74 | 75 | - Stairs+ are now displayed in the creative inventory by default. 76 | - Localization files now use the gettext `.po` format. 77 | - Updated intllib support to avoid using deprecated functions. 78 | 79 | ### Fixed 80 | 81 | - Node rotation now works correctly when placing Stairs+ nodes. 82 | - Stairs+ glasslike nodes' textures are now easier to see. 83 | 84 | ## [1.2.0] - 2018-11-24 85 | 86 | ### Added 87 | 88 | - Stairs+ nodes for `basic_materials`'s concrete, cement and brass blocks. 89 | - Listring add for circular saw. 90 | - **Stairs+:** New API function 91 | `stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields)`. 92 | 93 | ### Fixed 94 | 95 | - The papyrus crafting recipe override is now properly applied over the 96 | `default` mod's recipe. 97 | - Centered wooden tiles are now craftable. 98 | - Wool Stairs+ nodes can no longer be used in crafting. 99 | - The circular saw can no longer replace items from the player's inventory 100 | when it is full. 101 | 102 | ### Changed 103 | 104 | - New crafting recipes for: 105 | - Stone Tile 106 | - Circle Stone Bricks 107 | - Stairs+: 108 | - Moved definitions to `stairsplus.defs` table into a separate file. 109 | - Moved recipe definitions to `stairsplus.register_recipes` function 110 | into a separate file. 111 | 112 | ## [1.1.0] - 2017-10-04 113 | 114 | ### Added 115 | 116 | - 3 new node shapes in the circular saw (thin slabs, available in 117 | "L-shaped", "corner-shaped" and "U-shaped" variations), all with 1/16 118 | thickness. 119 | - New Stairs+ nodes: 120 | - Coral Skeleton 121 | - Desert Sandstone, Silver Sandstone 122 | - Desert Sandstone Brick, Silver Sandstone Brick 123 | - Desert Sandstone Block, Silver Sandstone Block 124 | - Obsidian Block 125 | - Sandstone Block 126 | - Stone Block, Desert Stone Block 127 | - Straw 128 | - Tin Block 129 | - Wool (all colors) 130 | - Other mods can now get a list of all the defined Stairs+ shapes. 131 | 132 | ## 1.0.0 - 2017-02-19 133 | 134 | - Initial versioned release. 135 | 136 | [Unreleased]: https://github.com/minetest-mods/moreblocks/compare/v2.2.0...HEAD 137 | [2.2.0]: https://github.com/minetest-mods/moreblocks/compare/v2.1.0...v2.2.0 138 | [2.1.0]: https://github.com/minetest-mods/moreblocks/compare/v2.0.0...v2.1.0 139 | [2.0.0]: https://github.com/minetest-mods/moreblocks/compare/v1.3.0...v2.0.0 140 | [1.3.0]: https://github.com/minetest-mods/moreblocks/compare/v1.2.0...v1.3.0 141 | [1.2.0]: https://github.com/minetest-mods/moreblocks/compare/v1.1.0...v1.2.0 142 | [1.1.0]: https://github.com/minetest-mods/moreblocks/compare/v1.0.0...v1.1.0 143 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to More Blocks 2 | 3 | Thank you for your interest in More Blocks! Before contributing, 4 | be sure to know about these few guidelines: 5 | 6 | - Contributions have to be licensed under the zlib license (or compatible) 7 | for code, and CC BY-SA 3.0 (or compatible) for assets. 8 | - Make sure to update the changelog, keeping the 9 | [changelog format](http://keepachangelog.com/en/1.0.0/) we use. 10 | - Don't bump the version yourself. Maintainers will do this when necessary. 11 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # zlib license 2 | 3 | Copyright © 2011-2020 Hugo Locurcio and contributors 4 | 5 | **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.** 6 | 7 | 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: 8 | 9 | 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. 10 | 11 | 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 12 | 13 | 3. This notice may not be removed or altered from any source distribution. 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # More Blocks [![Build status](https://github.com/minetest-mods/moreblocks/workflows/build/badge.svg)](https://github.com/minetest-mods/moreblocks/actions) 2 | 3 | More Blocks for [Minetest](https://www.minetest.net/), a free and open source infinite 4 | world block sandbox game. 5 | 6 | [**Forum topic**](https://forum.minetest.net/viewtopic.php?f=11&t=509) 7 | 8 | ## Installation 9 | 10 | ### Download the mod 11 | 12 | To install More Blocks, clone this Git repository into your Minetest's `mods/` 13 | directory: 14 | 15 | ```bash 16 | git clone https://github.com/minetest-mods/moreblocks.git 17 | ``` 18 | 19 | You can also 20 | [download a ZIP archive](https://github.com/minetest-mods/moreblocks/archive/master.zip) 21 | of More Blocks. 22 | 23 | ### Enable the mod 24 | 25 | Once you have installed More Blocks, you need to enable it in Minetest. 26 | The procedure is as follows: 27 | 28 | #### Using the client's main menu 29 | 30 | This is the easiest way to enable More Blocks when playing in singleplayer 31 | (or on a server hosted from a client). 32 | 33 | 1. Start Minetest and switch to the **Local Game** tab. 34 | 2. Select the world you want to enable More Blocks in. 35 | 3. Click **Configure**, then enable `moreblocks` by double-clicking it 36 | (or ticking the **Enabled** checkbox). 37 | 4. Save the changes, then start a game on the world you enabled More Blocks on. 38 | 5. More Blocks should now be running on your world. 39 | 40 | #### Using a text editor 41 | 42 | This is the recommended way to enable the mod on a server without using a GUI. 43 | 44 | 1. Make sure Minetest is not currently running (otherwise, it will overwrite 45 | the changes when exiting). 46 | 2. Open the world's `world.mt` file using a text editor. 47 | 3. Add the following line at the end of the file: 48 | 49 | ```text 50 | load_mod_moreblocks = true 51 | ``` 52 | 53 | If the line is already present in the file, then replace `false` with `true` 54 | on that line. 55 | 56 | 4. Save the file, then start a game on the world you enabled More Blocks on. 57 | 5. More Blocks should now be running on your world. 58 | 59 | ## Version compatibility 60 | 61 | More Blocks is currently primarily tested with Minetest 5.3.0. 62 | It may or may not work with newer or older versions. Issues arising in older 63 | versions than 5.0.0 will generally not be fixed. 64 | 65 | ## License 66 | 67 | Copyright © 2011-2020 Hugo Locurcio and contributors 68 | 69 | - More Blocks code is licensed under the zlib license, see 70 | [`LICENSE.md`](LICENSE.md) for details. 71 | - Unless otherwise specified, More Blocks textures are licensed under 72 | [CC BY-SA 3.0 Unported](https://creativecommons.org/licenses/by-sa/3.0/). 73 | 74 | `moreblocks_copperpatina.png` was created by pithydon, and is licensed under 75 | [CC0 1.0 Universal](https://creativecommons.org/publicdomain/zero/1.0/). 76 | -------------------------------------------------------------------------------- /aliases.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: alias definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | -- More Blocks aliases: 9 | minetest.register_alias("sweeper", "moreblocks:sweeper") 10 | minetest.register_alias("circular_saw", "moreblocks:circular_saw") 11 | minetest.register_alias("jungle_stick", "moreblocks:jungle_stick") 12 | 13 | -- Old block/item replacement: 14 | minetest.register_alias("moreblocks:oerkkiblock", "default:mossycobble") 15 | minetest.register_alias("moreblocks:screwdriver", "screwdriver:screwdriver") 16 | 17 | -- Node and item renaming: 18 | minetest.register_alias("moreblocks:stone_bricks", "default:stonebrick") 19 | minetest.register_alias("moreblocks:stonebrick", "default:stonebrick") 20 | minetest.register_alias("moreblocks:junglewood", "default:junglewood") 21 | minetest.register_alias("moreblocks:jungle_wood", "default:junglewood") 22 | minetest.register_alias("moreblocks:fence_junglewood", "default:fence_junglewood") 23 | minetest.register_alias("moreblocks:fence_jungle_wood", "default:fence_junglewood") 24 | minetest.register_alias("moreblocks:jungle_stick", "default:stick") 25 | 26 | for _, t in pairs(circular_saw.names) do 27 | minetest.register_alias("moreblocks:" .. t[1] .. "_jungle_wood" .. t[2], 28 | "moreblocks:" .. t[1] .. "_junglewood" .. t[2]) 29 | end 30 | minetest.register_alias("moreblocks:horizontaltree", "moreblocks:horizontal_tree") 31 | minetest.register_alias("moreblocks:horizontaljungletree", "moreblocks:horizontal_jungle_tree") 32 | minetest.register_alias("moreblocks:stonesquare", "moreblocks:stone_tile") 33 | minetest.register_alias("moreblocks:circlestonebrick", "moreblocks:circle_stone_bricks") 34 | minetest.register_alias("moreblocks:ironstonebrick", "moreblocks:iron_stone_bricks") 35 | minetest.register_alias("moreblocks:coalstone", "moreblocks:coal_stone") 36 | minetest.register_alias("moreblocks:ironstone", "moreblocks:iron_stone") 37 | minetest.register_alias("moreblocks:woodtile", "moreblocks:wood_tile") 38 | minetest.register_alias("moreblocks:woodtile_full", "moreblocks:wood_tile_full") 39 | minetest.register_alias("moreblocks:woodtile_centered", "moreblocks:wood_tile_centered") 40 | minetest.register_alias("moreblocks:woodtile_up", "moreblocks:wood_tile_offset") 41 | minetest.register_alias("moreblocks:wood_tile_up", "moreblocks:wood_tile_offset") 42 | minetest.register_alias("moreblocks:woodtile_down", "moreblocks:wood_tile_down") 43 | minetest.register_alias("moreblocks:woodtile_left", "moreblocks:wood_tile_left") 44 | minetest.register_alias("moreblocks:woodtile_right", "moreblocks:wood_tile_right") 45 | minetest.register_alias("moreblocks:coalglass", "moreblocks:coal_glass") 46 | minetest.register_alias("moreblocks:ironglass", "moreblocks:iron_glass") 47 | minetest.register_alias("moreblocks:glowglass", "moreblocks:glow_glass") 48 | minetest.register_alias("moreblocks:superglowglass", "moreblocks:super_glow_glass") 49 | minetest.register_alias("moreblocks:trapglass", "moreblocks:trap_glass") 50 | minetest.register_alias("moreblocks:trapstone", "moreblocks:trap_stone") 51 | minetest.register_alias("moreblocks:cactuschecker", "moreblocks:cactus_checker") 52 | minetest.register_alias("moreblocks:coalchecker", "moreblocks:coal_checker") 53 | minetest.register_alias("moreblocks:ironchecker", "moreblocks:iron_checker") 54 | minetest.register_alias("moreblocks:cactusbrick", "moreblocks:cactus_brick") 55 | minetest.register_alias("moreblocks:cleanglass", "moreblocks:clean_glass") 56 | minetest.register_alias("moreblocks:emptybookshelf", "moreblocks:empty_bookshelf") 57 | minetest.register_alias("moreblocks:junglestick", "moreblocks:jungle_stick") 58 | minetest.register_alias("moreblocks:splitstonesquare","moreblocks:split_stone_tile") 59 | minetest.register_alias("moreblocks:allfacestree","moreblocks:all_faces_tree") 60 | minetest.register_alias("moreblocks:empty_bookshelf","moreblocks:empty_shelf") 61 | minetest.register_alias("moreblocks:split_stone_tile_alt","moreblocks:checker_stone_tile") 62 | 63 | -- ABM for horizontal trees (fix facedir): 64 | local horizontal_tree_convert_facedir = {7, 12, 9, 18} 65 | 66 | minetest.register_abm({ 67 | nodenames = {"moreblocks:horizontal_tree","moreblocks:horizontal_jungle_tree"}, 68 | interval = 1, 69 | chance = 1, 70 | action = function(pos, node) 71 | if node.name == "moreblocks:horizontal_tree" then 72 | node.name = "default:tree" 73 | else 74 | node.name = "default:jungletree" 75 | end 76 | node.param2 = node.param2 < 3 and node.param2 or 0 77 | minetest.set_node(pos, { 78 | name = node.name, 79 | param2 = horizontal_tree_convert_facedir[node.param2 + 1] 80 | }) 81 | end, 82 | }) 83 | 84 | minetest.register_lbm({ 85 | name = "moreblocks:reduce_wood_tile_redundancy", 86 | nodenames = { 87 | "moreblocks:wood_tile_left", 88 | "moreblocks:wood_tile_down", 89 | "moreblocks:wood_tile_right", 90 | "moreblocks:wood_tile_flipped", 91 | }, 92 | action = function(pos, node) 93 | if node.name:find("left") then 94 | minetest.set_node(pos, {name = "moreblocks:wood_tile_offset", param2=1}) 95 | elseif node.name:find("down") then 96 | minetest.set_node(pos, {name = "moreblocks:wood_tile_offset", param2=2}) 97 | elseif node.name:find("right") then 98 | minetest.set_node(pos, {name = "moreblocks:wood_tile_offset", param2=3}) 99 | else -- wood_tile_flipped 100 | minetest.set_node(pos, {name = "moreblocks:wood_tile", param2=1}) 101 | end 102 | minetest.log('action', "LBM replaced " .. node.name .. 103 | " at " .. minetest.pos_to_string(pos)) 104 | end, 105 | }) 106 | -------------------------------------------------------------------------------- /circular_saw.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: circular saw 3 | 4 | Copyright © 2011-2020 Hugo Locurcio, Sokomine and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | local S = moreblocks.S 9 | local F = minetest.formspec_escape 10 | 11 | circular_saw = {} 12 | 13 | circular_saw.known_stairs = setmetatable({}, { 14 | __newindex = function(k, v) 15 | local modname = minetest.get_current_modname() 16 | print(("WARNING: mod %s tried to add node %s to the circular saw manually."):format(modname, v)) 17 | end, 18 | }) 19 | 20 | -- This is populated by stairsplus:register_all: 21 | circular_saw.known_nodes = {} 22 | 23 | -- This is populated by stairsplus:register_micro: 24 | circular_saw.microblocks = {} 25 | 26 | -- How many microblocks does this shape at the output inventory cost: 27 | -- It may cause slight loss, but no gain. 28 | circular_saw.cost_in_microblocks = { 29 | 1, 1, 1, 1, 1, 1, 1, 2, 30 | 2, 3, 2, 4, 2, 4, 5, 6, 31 | 7, 1, 1, 2, 4, 6, 7, 8, 32 | 1, 2, 2, 3, 1, 1, 2, 4, 33 | 4, 2, 6, 7, 3, 7, 7, 4, 34 | 8, 3, 2, 6, 2, 1, 3, 4 35 | } 36 | 37 | circular_saw.names = { 38 | {"micro", "_1"}, 39 | {"panel", "_1"}, 40 | {"micro", "_2"}, 41 | {"panel", "_2"}, 42 | {"micro", "_4"}, 43 | {"panel", "_4"}, 44 | {"micro", ""}, 45 | {"panel", ""}, 46 | 47 | {"micro", "_12"}, 48 | {"panel", "_12"}, 49 | {"micro", "_14"}, 50 | {"panel", "_14"}, 51 | {"micro", "_15"}, 52 | {"panel", "_15"}, 53 | {"stair", "_outer"}, 54 | {"stair", ""}, 55 | 56 | {"stair", "_inner"}, 57 | {"slab", "_1"}, 58 | {"slab", "_2"}, 59 | {"slab", "_quarter"}, 60 | {"slab", ""}, 61 | {"slab", "_three_quarter"}, 62 | {"slab", "_14"}, 63 | {"slab", "_15"}, 64 | 65 | {"slab", "_two_sides"}, 66 | {"slab", "_three_sides"}, 67 | {"slab", "_three_sides_u"}, 68 | {"stair", "_half"}, 69 | {"stair", "_alt_1"}, 70 | {"stair", "_alt_2"}, 71 | {"stair", "_alt_4"}, 72 | {"stair", "_alt"}, 73 | 74 | {"slope", ""}, 75 | {"slope", "_half"}, 76 | {"slope", "_half_raised"}, 77 | {"slope", "_inner"}, 78 | {"slope", "_inner_half"}, 79 | {"slope", "_inner_half_raised"}, 80 | {"slope", "_inner_cut"}, 81 | {"slope", "_inner_cut_half"}, 82 | 83 | {"slope", "_inner_cut_half_raised"}, 84 | {"slope", "_outer"}, 85 | {"slope", "_outer_half"}, 86 | {"slope", "_outer_half_raised"}, 87 | {"slope", "_outer_cut"}, 88 | {"slope", "_outer_cut_half"}, 89 | {"slope", "_outer_cut_half_raised"}, 90 | {"slope", "_cut"}, 91 | } 92 | 93 | function circular_saw:get_cost(inv, stackname) 94 | local name = minetest.registered_aliases[stackname] or stackname 95 | for i, item in pairs(inv:get_list("output")) do 96 | if item:get_name() == name then 97 | return circular_saw.cost_in_microblocks[i] 98 | end 99 | end 100 | end 101 | 102 | function circular_saw:get_output_inv(modname, material, amount, max) 103 | if (not max or max < 1 or max > 99) then max = 99 end 104 | 105 | local list = {} 106 | local pos = #list 107 | 108 | -- If there is nothing inside, display empty inventory: 109 | if amount < 1 then 110 | return list 111 | end 112 | 113 | for i = 1, #circular_saw.names do 114 | local t = circular_saw.names[i] 115 | local cost = circular_saw.cost_in_microblocks[i] 116 | local balance = math.min(math.floor(amount/cost), max) 117 | local nodename = modname .. ":" .. t[1] .. "_" .. material .. t[2] 118 | if minetest.registered_nodes[nodename] then 119 | pos = pos + 1 120 | list[pos] = nodename .. " " .. balance 121 | end 122 | end 123 | return list 124 | end 125 | 126 | 127 | -- Reset empty circular_saw after last full block has been taken out 128 | -- (or the circular_saw has been placed the first time) 129 | -- Note: max_offered is not reset: 130 | function circular_saw:reset(pos) 131 | local meta = minetest.get_meta(pos) 132 | local inv = meta:get_inventory() 133 | local owned_by = meta:get_string("owner") 134 | 135 | if owned_by and owned_by ~= "" then 136 | owned_by = (" ("..S("owned by @1", meta:get_string("owner"))..")") 137 | else 138 | owned_by = "" 139 | end 140 | 141 | inv:set_list("input", {}) 142 | inv:set_list("micro", {}) 143 | 144 | local microblockcount = inv:get_stack("micro",1):get_count() 145 | meta:set_int("anz", microblockcount) 146 | if microblockcount == 0 then 147 | meta:set_string("infotext", S("Circular Saw is empty") .. owned_by) 148 | inv:set_list("output", {}) 149 | end 150 | end 151 | 152 | 153 | -- Player has taken something out of the box or placed something inside 154 | -- that amounts to count microblocks: 155 | function circular_saw:update_inventory(pos, amount) 156 | local meta = minetest.get_meta(pos) 157 | local inv = meta:get_inventory() 158 | 159 | amount = meta:get_int("anz") + amount 160 | 161 | -- The material is recycled automatically. 162 | inv:set_list("recycle", {}) 163 | 164 | if amount < 1 then -- If the last block is taken out. 165 | self:reset(pos) 166 | return 167 | end 168 | 169 | local stack = inv:get_stack("input", 1) 170 | local microstack = inv:get_stack("micro",1) 171 | 172 | -- At least one (micro)block is necessary to see what kind of stairs are requested. 173 | if stack:is_empty() and microstack:is_empty() then 174 | 175 | self:reset(pos) 176 | return 177 | 178 | end 179 | 180 | local node_name = circular_saw.microblocks[microstack:get_name()] or stack:get_name() or "" 181 | local node_def = stack:get_definition() 182 | local name_parts = circular_saw.known_nodes[node_name] or "" 183 | local modname = name_parts[1] 184 | local material = name_parts[2] 185 | local owned_by = meta:get_string("owner") 186 | 187 | if owned_by and owned_by ~= "" then 188 | owned_by = (" ("..S("owned by @1", meta:get_string("owner"))..")") 189 | else 190 | owned_by = "" 191 | end 192 | 193 | inv:set_list("input", { -- Display as many full blocks as possible: 194 | node_name.. " " .. math.floor(amount / 8) 195 | }) 196 | 197 | -- The stairnodes made of default nodes use moreblocks namespace, other mods keep own: 198 | if modname == "default" then 199 | modname = "moreblocks" 200 | end 201 | -- print("circular_saw set to " .. modname .. " : " 202 | -- .. material .. " with " .. (amount) .. " microblocks.") 203 | 204 | -- 0-7 microblocks may remain left-over: 205 | inv:set_list("micro", { 206 | modname .. ":micro_" .. material .. " " .. (amount % 8) 207 | }) 208 | 209 | -- Display: 210 | inv:set_list("output", 211 | self:get_output_inv(modname, material, amount, 212 | meta:get_int("max_offered"))) 213 | -- Store how many microblocks are available: 214 | meta:set_int("anz", amount) 215 | 216 | meta:set_string("infotext", 217 | S("Circular Saw is working on @1", 218 | node_def and node_def.description or material 219 | ) .. owned_by 220 | ) 221 | end 222 | 223 | 224 | -- The amount of items offered per shape can be configured: 225 | function circular_saw.on_receive_fields(pos, formname, fields, sender) 226 | local meta = minetest.get_meta(pos) 227 | local max = tonumber(fields.max_offered) 228 | if max and max > 0 then 229 | meta:set_string("max_offered", max) 230 | -- Update to show the correct number of items: 231 | circular_saw:update_inventory(pos, 0) 232 | end 233 | end 234 | 235 | 236 | -- Moving the inventory of the circular_saw around is not allowed because it 237 | -- is a fictional inventory. Moving inventory around would be rather 238 | -- impractical and make things more difficult to calculate: 239 | function circular_saw.allow_metadata_inventory_move( 240 | pos, from_list, from_index, to_list, to_index, count, player) 241 | return 0 242 | end 243 | 244 | 245 | -- Only input- and recycle-slot (and microblock slot when empty) are intended as input slots: 246 | function circular_saw.allow_metadata_inventory_put( 247 | pos, listname, index, stack, player) 248 | -- The player is not allowed to put something in there: 249 | if listname == "output" then 250 | return 0 251 | end 252 | 253 | local meta = minetest.get_meta(pos) 254 | local inv = meta:get_inventory() 255 | local stackname = stack:get_name() 256 | local count = stack:get_count() 257 | 258 | -- Only allow those items that are offered in the output inventory to be recycled: 259 | if listname == "recycle" then 260 | if not inv:contains_item("output", stackname) then 261 | return 0 262 | end 263 | local stackmax = stack:get_stack_max() 264 | local instack = inv:get_stack("input", 1) 265 | local microstack = inv:get_stack("micro", 1) 266 | local incount = instack:get_count() 267 | local incost = (incount * 8) + microstack:get_count() 268 | local maxcost = (stackmax * 8) + 7 269 | local cost = circular_saw:get_cost(inv, stackname) 270 | if (incost + cost) > maxcost then 271 | return math.max((maxcost - incost) / cost, 0) 272 | end 273 | return count 274 | end 275 | 276 | -- Only accept certain blocks as input which are known to be craftable into stairs: 277 | if listname == "input" then 278 | if not inv:is_empty("input") then 279 | if inv:get_stack("input", index):get_name() ~= stackname then 280 | return 0 281 | end 282 | end 283 | if not inv:is_empty("micro") then 284 | local microstackname = inv:get_stack("micro", 1):get_name():gsub("^.+:micro_", "", 1) 285 | local cutstackname = stackname:gsub("^.+:", "", 1) 286 | if microstackname ~= cutstackname then 287 | return 0 288 | end 289 | end 290 | for name, t in pairs(circular_saw.known_nodes) do 291 | if name == stackname and inv:room_for_item("input", stack) then 292 | return count 293 | end 294 | end 295 | return 0 296 | end 297 | 298 | if listname == "micro" then 299 | if not (inv:is_empty("input") and inv:is_empty("micro")) then return 0 end 300 | for name, t in pairs(circular_saw.microblocks) do 301 | if name == stackname and inv:room_for_item("input", stack) then 302 | return count 303 | end 304 | end 305 | return 0 306 | end 307 | end 308 | 309 | -- Taking is allowed from all slots (even the internal microblock slot). 310 | -- Putting something in is slightly more complicated than taking anything 311 | -- because we have to make sure it is of a suitable material: 312 | function circular_saw.on_metadata_inventory_put( 313 | pos, listname, index, stack, player) 314 | -- We need to find out if the circular_saw is already set to a 315 | -- specific material or not: 316 | local meta = minetest.get_meta(pos) 317 | local inv = meta:get_inventory() 318 | local stackname = stack:get_name() 319 | local count = stack:get_count() 320 | 321 | -- Putting something into the input slot is only possible if that had 322 | -- been empty before or did contain something of the same material: 323 | if listname == "input" then 324 | -- Each new block is worth 8 microblocks: 325 | circular_saw:update_inventory(pos, 8 * count) 326 | elseif listname == "micro" then 327 | circular_saw:update_inventory(pos, count) 328 | elseif listname == "recycle" then 329 | -- Lets look which shape this represents: 330 | local cost = circular_saw:get_cost(inv, stackname) 331 | local input_stack = inv:get_stack("input", 1) 332 | -- check if this would not exceed input itemstack max_stacks 333 | if input_stack:get_count() + ((cost * count) / 8) <= input_stack:get_stack_max() then 334 | circular_saw:update_inventory(pos, cost * count) 335 | end 336 | end 337 | end 338 | 339 | function circular_saw.allow_metadata_inventory_take(pos, listname, index, stack, player) 340 | local meta = minetest.get_meta(pos) 341 | local inv = meta:get_inventory() 342 | local input_stack = inv:get_stack(listname, index) 343 | local player_inv = player:get_inventory() 344 | if not player_inv:room_for_item("main", input_stack) then 345 | return 0 346 | else return stack:get_count() 347 | end 348 | end 349 | 350 | function circular_saw.on_metadata_inventory_take( 351 | pos, listname, index, stack, player) 352 | 353 | -- Prevent (inbuilt) swapping between inventories with different blocks 354 | -- corrupting player inventory or Saw with 'unknown' items. 355 | local meta = minetest.get_meta(pos) 356 | local inv = meta:get_inventory() 357 | local input_stack = inv:get_stack(listname, index) 358 | if not input_stack:is_empty() and input_stack:get_name()~=stack:get_name() then 359 | local player_inv = player:get_inventory() 360 | 361 | -- Prevent arbitrary item duplication. 362 | inv:remove_item(listname, input_stack) 363 | 364 | if player_inv:room_for_item("main", input_stack) then 365 | player_inv:add_item("main", input_stack) 366 | end 367 | 368 | circular_saw:reset(pos) 369 | return 370 | end 371 | 372 | -- If it is one of the offered stairs: find out how many 373 | -- microblocks have to be subtracted: 374 | if listname == "output" then 375 | -- We do know how much each block at each position costs: 376 | local cost = circular_saw.cost_in_microblocks[index] 377 | * stack:get_count() 378 | circular_saw:update_inventory(pos, -cost) 379 | elseif listname == "micro" then 380 | -- Each microblock costs 1 microblock: 381 | circular_saw:update_inventory(pos, -stack:get_count()) 382 | elseif listname == "input" then 383 | -- Each normal (= full) block taken costs 8 microblocks: 384 | circular_saw:update_inventory(pos, 8 * -stack:get_count()) 385 | end 386 | -- The recycle field plays no role here since it is processed immediately. 387 | end 388 | 389 | local has_default_mod = minetest.get_modpath("default") 390 | 391 | function circular_saw.on_construct(pos) 392 | local meta = minetest.get_meta(pos) 393 | local fancy_inv = "" 394 | if has_default_mod then 395 | -- prepend background and slot styles from default if available 396 | fancy_inv = default.gui_bg..default.gui_bg_img..default.gui_slots 397 | end 398 | meta:set_string( 399 | --FIXME Not work with @n in this part bug in minetest/minetest#7450. 400 | "formspec", "size[11,10]"..fancy_inv.. 401 | "label[0,0;" ..S("Input material").. "]" .. 402 | "list[current_name;input;1.7,0;1,1;]" .. 403 | "label[0,1;" ..F(S("Left-over")).. "]" .. 404 | "list[current_name;micro;1.7,1;1,1;]" .. 405 | "label[0,2;" ..F(S("Recycle output")).. "]" .. 406 | "list[current_name;recycle;1.7,2;1,1;]" .. 407 | "field[0.3,3.5;1,1;max_offered;" ..F(S("Max")).. ":;${max_offered}]" .. 408 | "button[1,3.2;1.7,1;Set;" ..F(S("Set")).. "]" .. 409 | "list[current_name;output;2.8,0;8,6;]" .. 410 | "list[current_player;main;1.5,6.25;8,4;]" .. 411 | "listring[current_name;output]" .. 412 | "listring[current_player;main]" .. 413 | "listring[current_name;input]" .. 414 | "listring[current_player;main]" .. 415 | "listring[current_name;micro]" .. 416 | "listring[current_player;main]" .. 417 | "listring[current_name;recycle]" .. 418 | "listring[current_player;main]" 419 | ) 420 | 421 | meta:set_int("anz", 0) -- No microblocks inside yet. 422 | meta:set_string("max_offered", 99) -- How many items of this kind are offered by default? 423 | meta:set_string("infotext", S("Circular Saw is empty")) 424 | 425 | local inv = meta:get_inventory() 426 | inv:set_size("input", 1) -- Input slot for full blocks of material x. 427 | inv:set_size("micro", 1) -- Storage for 1-7 surplus microblocks. 428 | inv:set_size("recycle", 1) -- Surplus partial blocks can be placed here. 429 | inv:set_size("output", 6*8) -- 6x8 versions of stair-parts of material x. 430 | 431 | circular_saw:reset(pos) 432 | end 433 | 434 | 435 | function circular_saw.can_dig(pos,player) 436 | local meta = minetest.get_meta(pos) 437 | local inv = meta:get_inventory() 438 | if not inv:is_empty("input") or 439 | not inv:is_empty("micro") or 440 | not inv:is_empty("recycle") then 441 | return false 442 | end 443 | -- Can be dug by anyone when empty, not only by the owner: 444 | return true 445 | end 446 | 447 | minetest.register_node("moreblocks:circular_saw", { 448 | description = S("Circular Saw"), 449 | drawtype = "nodebox", 450 | node_box = { 451 | type = "fixed", 452 | fixed = { 453 | {-0.4, -0.5, -0.4, -0.25, 0.25, -0.25}, -- Leg 454 | {0.25, -0.5, 0.25, 0.4, 0.25, 0.4}, -- Leg 455 | {-0.4, -0.5, 0.25, -0.25, 0.25, 0.4}, -- Leg 456 | {0.25, -0.5, -0.4, 0.4, 0.25, -0.25}, -- Leg 457 | {-0.5, 0.25, -0.5, 0.5, 0.375, 0.5}, -- Tabletop 458 | {-0.01, 0.4375, -0.125, 0.01, 0.5, 0.125}, -- Saw blade (top) 459 | {-0.01, 0.375, -0.1875, 0.01, 0.4375, 0.1875}, -- Saw blade (bottom) 460 | {-0.25, -0.0625, -0.25, 0.25, 0.25, 0.25}, -- Motor case 461 | }, 462 | }, 463 | tiles = {"moreblocks_circular_saw_top.png", 464 | "moreblocks_circular_saw_bottom.png", 465 | "moreblocks_circular_saw_side.png"}, 466 | paramtype = "light", 467 | sunlight_propagates = true, 468 | paramtype2 = "facedir", 469 | groups = {choppy = 2,oddly_breakable_by_hand = 2}, 470 | is_ground_content = false, 471 | sounds = moreblocks.node_sound_wood_defaults(), 472 | on_construct = circular_saw.on_construct, 473 | can_dig = circular_saw.can_dig, 474 | -- Set the owner of this circular saw. 475 | after_place_node = function(pos, placer) 476 | local meta = minetest.get_meta(pos) 477 | local owner = placer and placer:get_player_name() or "" 478 | local owned_by = owner 479 | 480 | if owner ~= "" then 481 | owned_by = (" (%s)"):format(S("owned by @1", owner)) 482 | end 483 | 484 | meta:set_string("owner", owner) 485 | meta:set_string("infotext", S("Circular Saw is empty") .. owned_by) 486 | end, 487 | 488 | -- The amount of items offered per shape can be configured: 489 | on_receive_fields = circular_saw.on_receive_fields, 490 | allow_metadata_inventory_move = circular_saw.allow_metadata_inventory_move, 491 | -- Only input- and recycle-slot are intended as input slots: 492 | allow_metadata_inventory_put = circular_saw.allow_metadata_inventory_put, 493 | allow_metadata_inventory_take = circular_saw.allow_metadata_inventory_take, 494 | -- Taking is allowed from all slots (even the internal microblock slot). Moving is forbidden. 495 | -- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material: 496 | on_metadata_inventory_put = circular_saw.on_metadata_inventory_put, 497 | on_metadata_inventory_take = circular_saw.on_metadata_inventory_take, 498 | }) 499 | -------------------------------------------------------------------------------- /config.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: configuration handling 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | moreblocks.config = {} 9 | 10 | local function getbool_default(setting, default) 11 | local value = minetest.settings:get_bool(setting) 12 | if value == nil then 13 | value = default 14 | end 15 | return value 16 | end 17 | 18 | local function setting(settingtype, name, default) 19 | if settingtype == "bool" then 20 | moreblocks.config[name] = 21 | getbool_default("moreblocks." .. name, default) 22 | else 23 | moreblocks.config[name] = 24 | minetest.settings:get("moreblocks." .. name) or default 25 | end 26 | end 27 | 28 | -- Show stairs/slabs/panels/microblocks in creative inventory (true or false): 29 | setting("bool", "stairsplus_in_creative_inventory", true) 30 | -------------------------------------------------------------------------------- /crafting.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: crafting recipes 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | minetest.register_craft({ 9 | output = "default:stick", 10 | recipe = {{"default:dry_shrub"},} 11 | }) 12 | 13 | minetest.register_craft({ 14 | output = "default:stick", 15 | recipe = {{"group:sapling"},} 16 | }) 17 | 18 | minetest.register_craft({ 19 | output = "default:wood", 20 | recipe = { 21 | {"default:stick", "default:stick"}, 22 | {"default:stick", "default:stick"}, 23 | } 24 | }) 25 | 26 | minetest.register_craft({ 27 | output = "default:dirt_with_grass", 28 | type = "shapeless", 29 | recipe = {"default:junglegrass", "default:dirt"}, 30 | }) 31 | 32 | minetest.register_craft({ 33 | output = "default:mossycobble", 34 | type = "shapeless", 35 | recipe = {"default:junglegrass", "default:cobble"}, 36 | }) 37 | 38 | minetest.register_craft({ 39 | output = "moreblocks:wood_tile 9", 40 | recipe = { 41 | {"group:wood", "group:wood", "group:wood"}, 42 | {"group:wood", "group:wood", "group:wood"}, 43 | {"group:wood", "group:wood", "group:wood"}, 44 | } 45 | }) 46 | 47 | -- This must be registered after `moreblocks:wood_tile` to avoid recipe conflicts, 48 | -- since `moreblocks:wood_tile` is part of `group:wood` 49 | minetest.register_craft({ 50 | output = "moreblocks:wood_tile_center 9", 51 | recipe = { 52 | {"group:wood", "group:wood", "group:wood"}, 53 | {"group:wood", "moreblocks:wood_tile", "group:wood"}, 54 | {"group:wood", "group:wood", "group:wood"}, 55 | } 56 | }) 57 | 58 | minetest.register_craft({ 59 | type = "shapeless", 60 | output = "moreblocks:wood_tile", 61 | recipe = {"moreblocks:wood_tile_flipped"} 62 | }) 63 | 64 | minetest.register_craft({ 65 | output = "moreblocks:wood_tile_full 4", 66 | recipe = { 67 | {"moreblocks:wood_tile", "moreblocks:wood_tile"}, 68 | {"moreblocks:wood_tile", "moreblocks:wood_tile"}, 69 | } 70 | }) 71 | 72 | minetest.register_craft({ 73 | output = "moreblocks:wood_tile_offset", 74 | recipe = { 75 | {"default:stick"}, 76 | {"moreblocks:wood_tile_center"}, 77 | } 78 | }) 79 | 80 | minetest.register_craft({ 81 | type = "shapeless", 82 | output = "moreblocks:wood_tile_offset", 83 | recipe = {"moreblocks:wood_tile_down"} 84 | }) 85 | 86 | minetest.register_craft({ 87 | type = "shapeless", 88 | output = "moreblocks:wood_tile_offset", 89 | recipe = {"moreblocks:wood_tile_left"} 90 | }) 91 | 92 | minetest.register_craft({ 93 | type = "shapeless", 94 | output = "moreblocks:wood_tile_offset", 95 | recipe = {"moreblocks:wood_tile_right"} 96 | }) 97 | 98 | minetest.register_craft({ 99 | output = "moreblocks:circle_stone_bricks 5", 100 | recipe = { 101 | {"", "default:stone", ""}, 102 | {"default:stone", "default:coal_lump", "default:stone"}, 103 | {"", "default:stone", ""}, 104 | } 105 | }) 106 | 107 | minetest.register_craft({ 108 | output = "moreblocks:all_faces_tree 8", 109 | recipe = { 110 | {"default:tree", "default:tree", "default:tree"}, 111 | {"default:tree", "", "default:tree"}, 112 | {"default:tree", "default:tree", "default:tree"}, 113 | } 114 | }) 115 | 116 | minetest.register_craft({ 117 | output = "moreblocks:all_faces_jungle_tree 8", 118 | recipe = { 119 | {"default:jungletree", "default:jungletree", "default:jungletree"}, 120 | {"default:jungletree", "", "default:jungletree"}, 121 | {"default:jungletree", "default:jungletree", "default:jungletree"}, 122 | } 123 | }) 124 | 125 | minetest.register_craft({ 126 | output = "moreblocks:all_faces_pine_tree 8", 127 | recipe = { 128 | {"default:pine_tree", "default:pine_tree", "default:pine_tree"}, 129 | {"default:pine_tree", "", "default:pine_tree"}, 130 | {"default:pine_tree", "default:pine_tree", "default:pine_tree"}, 131 | } 132 | }) 133 | 134 | minetest.register_craft({ 135 | output = "moreblocks:all_faces_acacia_tree 8", 136 | recipe = { 137 | {"default:acacia_tree", "default:acacia_tree", "default:acacia_tree"}, 138 | {"default:acacia_tree", "", "default:acacia_tree"}, 139 | {"default:acacia_tree", "default:acacia_tree", "default:acacia_tree"}, 140 | } 141 | }) 142 | 143 | minetest.register_craft({ 144 | output = "moreblocks:all_faces_aspen_tree 8", 145 | recipe = { 146 | {"default:aspen_tree", "default:aspen_tree", "default:aspen_tree"}, 147 | {"default:aspen_tree", "", "default:aspen_tree"}, 148 | {"default:aspen_tree", "default:aspen_tree", "default:aspen_tree"}, 149 | } 150 | }) 151 | 152 | minetest.register_craft({ 153 | output = "moreblocks:sweeper 4", 154 | recipe = { 155 | {"default:junglegrass"}, 156 | {"default:stick"}, 157 | } 158 | }) 159 | 160 | minetest.register_craft({ 161 | output = "moreblocks:stone_tile 9", 162 | recipe = { 163 | {"default:cobble", "default:cobble", "default:cobble"}, 164 | {"default:cobble", "default:stone", "default:cobble"}, 165 | {"default:cobble", "default:cobble", "default:cobble"}, 166 | } 167 | }) 168 | 169 | minetest.register_craft({ 170 | output = "moreblocks:split_stone_tile", 171 | recipe = { 172 | {"moreblocks:stone_tile"}, 173 | } 174 | }) 175 | 176 | minetest.register_craft({ 177 | output = "moreblocks:checker_stone_tile", 178 | recipe = { 179 | {"moreblocks:split_stone_tile"}, 180 | } 181 | }) 182 | 183 | -- When approaching the below craft, loop back to cobblestone, which can then be used to craft stone tiles again 184 | minetest.register_craft({ 185 | output = "default:cobble", 186 | recipe = { 187 | {"moreblocks:checker_stone_tile"}, 188 | } 189 | }) 190 | 191 | minetest.register_craft({ 192 | output = "moreblocks:grey_bricks 2", 193 | type = "shapeless", 194 | recipe = {"default:stone", "default:brick"}, 195 | }) 196 | 197 | minetest.register_craft({ 198 | output = "moreblocks:grey_bricks 2", 199 | type = "shapeless", 200 | recipe = {"default:stonebrick", "default:brick"}, 201 | }) 202 | 203 | minetest.register_craft({ 204 | output = "moreblocks:empty_shelf", 205 | type = "shapeless", 206 | recipe = {"moreblocks:sweeper", "default:bookshelf"}, 207 | replacements = {{"default:bookshelf", "default:book 3"}}, 208 | -- When obtaining an empty shelf, return the books used in it as well 209 | }) 210 | 211 | minetest.register_craft({ 212 | output = "moreblocks:empty_shelf", 213 | type = "shapeless", 214 | recipe = {"moreblocks:sweeper", "vessels:shelf"}, 215 | replacements = {{"vessels:shelf", "vessels:glass_bottle 3"}}, 216 | }) 217 | 218 | minetest.register_craft({ 219 | type = "shapeless", 220 | output = "default:bookshelf", 221 | recipe = {"moreblocks:empty_shelf", "default:book", "default:book", "default:book"}, 222 | }) 223 | 224 | minetest.register_craft({ 225 | output = "moreblocks:empty_shelf", 226 | recipe = { 227 | {"group:wood", "group:wood", "group:wood"}, 228 | {"", "", ""}, 229 | {"group:wood", "group:wood", "group:wood"}, 230 | } 231 | }) 232 | 233 | minetest.register_craft({ 234 | output = "moreblocks:coal_stone_bricks 4", 235 | recipe = { 236 | {"moreblocks:coal_stone", "moreblocks:coal_stone"}, 237 | {"moreblocks:coal_stone", "moreblocks:coal_stone"}, 238 | } 239 | }) 240 | 241 | minetest.register_craft({ 242 | output = "moreblocks:iron_stone_bricks 4", 243 | recipe = { 244 | {"moreblocks:iron_stone", "moreblocks:iron_stone"}, 245 | {"moreblocks:iron_stone", "moreblocks:iron_stone"}, 246 | } 247 | }) 248 | 249 | minetest.register_craft({ 250 | output = "moreblocks:plankstone 4", 251 | recipe = { 252 | {"group:stone", "group:wood"}, 253 | {"group:wood", "group:stone"}, 254 | } 255 | }) 256 | 257 | minetest.register_craft({ 258 | output = "moreblocks:plankstone 4", 259 | recipe = { 260 | {"group:wood", "group:stone"}, 261 | {"group:stone", "group:wood"}, 262 | } 263 | }) 264 | 265 | minetest.register_craft({ 266 | output = "moreblocks:coal_checker 4", 267 | recipe = { 268 | {"default:stone", "default:coal_lump"}, 269 | {"default:coal_lump", "default:stone"}, 270 | } 271 | }) 272 | 273 | minetest.register_craft({ 274 | output = "moreblocks:coal_checker 4", 275 | recipe = { 276 | {"default:coal_lump", "default:stone"}, 277 | {"default:stone", "default:coal_lump"}, 278 | } 279 | }) 280 | 281 | minetest.register_craft({ 282 | output = "moreblocks:iron_checker 4", 283 | recipe = { 284 | {"default:steel_ingot", "default:stone"}, 285 | {"default:stone", "default:steel_ingot"}, 286 | } 287 | }) 288 | 289 | minetest.register_craft({ 290 | output = "moreblocks:iron_checker 4", 291 | recipe = { 292 | {"default:stone", "default:steel_ingot"}, 293 | {"default:steel_ingot", "default:stone"}, 294 | } 295 | }) 296 | 297 | minetest.register_craft({ 298 | output = "default:chest_locked", 299 | type = "shapeless", 300 | recipe = {"default:steel_ingot", "default:chest"}, 301 | }) 302 | minetest.register_craft({ 303 | output = "default:chest_locked", 304 | type = "shapeless", 305 | recipe = {"default:copper_ingot", "default:chest"}, 306 | }) 307 | 308 | minetest.register_craft({ 309 | output = "default:chest_locked", 310 | type = "shapeless", 311 | recipe = {"default:bronze_ingot", "default:chest"}, 312 | }) 313 | 314 | minetest.register_craft({ 315 | output = "default:chest_locked", 316 | type = "shapeless", 317 | recipe = {"default:gold_ingot", "default:chest"}, 318 | }) 319 | 320 | minetest.register_craft({ 321 | output = "moreblocks:iron_glass", 322 | type = "shapeless", 323 | recipe = {"default:steel_ingot", "default:glass"}, 324 | }) 325 | 326 | minetest.register_craft({ 327 | output = "default:glass", 328 | type = "shapeless", 329 | recipe = {"default:coal_lump", "moreblocks:iron_glass"}, 330 | }) 331 | 332 | 333 | minetest.register_craft({ 334 | output = "moreblocks:coal_glass", 335 | type = "shapeless", 336 | recipe = {"default:coal_lump", "default:glass"}, 337 | }) 338 | 339 | minetest.register_craft({ 340 | output = "default:glass", 341 | type = "shapeless", 342 | recipe = {"default:steel_ingot", "moreblocks:coal_glass"}, 343 | }) 344 | 345 | minetest.register_craft({ 346 | output = "moreblocks:clean_glass", 347 | type = "shapeless", 348 | recipe = {"moreblocks:sweeper", "default:glass"}, 349 | }) 350 | 351 | minetest.register_craft({ 352 | output = "moreblocks:trap_clean_glass", 353 | type = "shapeless", 354 | recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass"}, 355 | }) 356 | 357 | minetest.register_craft({ 358 | output = "moreblocks:trap_clean_glass", 359 | type = "shapeless", 360 | recipe = {"moreblocks:sweeper", "moreblocks:trap_glass"}, 361 | }) 362 | 363 | minetest.register_craft({ 364 | output = "moreblocks:glow_glass", 365 | type = "shapeless", 366 | recipe = {"default:torch", "default:glass"}, 367 | }) 368 | 369 | minetest.register_craft({ 370 | output = "moreblocks:clean_glow_glass", 371 | type = "shapeless", 372 | recipe = {"default:torch", "moreblocks:clean_glass"}, 373 | }) 374 | 375 | minetest.register_craft({ 376 | output = "moreblocks:clean_glow_glass", 377 | type = "shapeless", 378 | recipe = {"moreblocks:sweeper", "moreblocks:glow_glass"}, 379 | }) 380 | 381 | minetest.register_craft({ 382 | output = "moreblocks:trap_glow_glass", 383 | type = "shapeless", 384 | recipe = {"default:mese_crystal_fragment", "default:glass", "default:torch"}, 385 | }) 386 | 387 | minetest.register_craft({ 388 | output = "moreblocks:trap_glow_glass", 389 | type = "shapeless", 390 | recipe = {"default:mese_crystal_fragment", "moreblocks:glow_glass"}, 391 | }) 392 | 393 | -- several recipes are possible for the trap+clean+glow, we only present 3 of them 394 | minetest.register_craft({ 395 | output = "moreblocks:trap_clean_glow_glass", 396 | type = "shapeless", 397 | recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glow_glass"}, 398 | }) 399 | 400 | minetest.register_craft({ 401 | output = "moreblocks:trap_clean_glow_glass", 402 | type = "shapeless", 403 | recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass", "default:torch"}, 404 | }) 405 | 406 | minetest.register_craft({ 407 | output = "moreblocks:trap_clean_glow_glass", 408 | type = "shapeless", 409 | recipe = {"moreblocks:sweeper", "moreblocks:trap_glow_glass" }, 410 | }) 411 | 412 | 413 | minetest.register_craft({ 414 | output = "moreblocks:super_glow_glass", 415 | type = "shapeless", 416 | recipe = {"default:torch", "default:torch", "default:glass"}, 417 | }) 418 | 419 | minetest.register_craft({ 420 | output = "moreblocks:super_glow_glass", 421 | type = "shapeless", 422 | recipe = {"default:torch", "moreblocks:glow_glass"}, 423 | }) 424 | 425 | minetest.register_craft({ 426 | output = "moreblocks:clean_super_glow_glass", 427 | type = "shapeless", 428 | recipe = {"default:torch", "default:torch", "moreblocks:clean_glass"}, 429 | }) 430 | 431 | minetest.register_craft({ 432 | output = "moreblocks:clean_super_glow_glass", 433 | type = "shapeless", 434 | recipe = {"default:torch", "moreblocks:clean_glow_glass"}, 435 | }) 436 | 437 | minetest.register_craft({ 438 | output = "moreblocks:clean_super_glow_glass", 439 | type = "shapeless", 440 | recipe = {"moreblocks:sweeper", "moreblocks:super_glow_glass"}, 441 | }) 442 | 443 | 444 | minetest.register_craft({ 445 | output = "moreblocks:trap_super_glow_glass", 446 | type = "shapeless", 447 | recipe = {"default:mese_crystal_fragment", "default:glass", "default:torch", "default:torch"}, 448 | }) 449 | 450 | minetest.register_craft({ 451 | output = "moreblocks:trap_super_glow_glass", 452 | type = "shapeless", 453 | recipe = {"default:mese_crystal_fragment", "moreblocks:super_glow_glass"}, 454 | }) 455 | 456 | -- several recipes are possible for the trap+clean+glow, we only present 4 of them 457 | minetest.register_craft({ 458 | output = "moreblocks:trap_clean_super_glow_glass", 459 | type = "shapeless", 460 | recipe = {"default:mese_crystal_fragment", "moreblocks:clean_super_glow_glass"}, 461 | }) 462 | 463 | minetest.register_craft({ 464 | output = "moreblocks:trap_clean_super_glow_glass", 465 | type = "shapeless", 466 | recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glow_glass", "default:torch"}, 467 | }) 468 | 469 | minetest.register_craft({ 470 | output = "moreblocks:trap_clean_super_glow_glass", 471 | type = "shapeless", 472 | recipe = {"default:mese_crystal_fragment", "moreblocks:clean_glass", "default:torch", "default:torch"}, 473 | }) 474 | 475 | minetest.register_craft({ 476 | output = "moreblocks:trap_clean_super_glow_glass", 477 | type = "shapeless", 478 | recipe = {"moreblocks:sweeper", "moreblocks:trap_super_glow_glass" }, 479 | }) 480 | 481 | 482 | minetest.register_craft({ 483 | output = "moreblocks:coal_stone", 484 | type = "shapeless", 485 | recipe = {"default:coal_lump", "default:stone"}, 486 | }) 487 | 488 | minetest.register_craft({ 489 | output = "default:stone", 490 | type = "shapeless", 491 | recipe = {"default:steel_ingot", "moreblocks:coal_stone"}, 492 | }) 493 | 494 | minetest.register_craft({ 495 | output = "moreblocks:iron_stone", 496 | type = "shapeless", 497 | recipe = {"default:steel_ingot", "default:stone"}, 498 | }) 499 | 500 | minetest.register_craft({ 501 | output = "default:stone", 502 | type = "shapeless", 503 | recipe = {"default:coal_lump", "moreblocks:iron_stone"}, 504 | }) 505 | 506 | minetest.register_craft({ 507 | output = "moreblocks:trap_stone", 508 | type = "shapeless", 509 | recipe = {"default:mese_crystal_fragment", "default:stone"}, 510 | }) 511 | 512 | minetest.register_craft({ 513 | output = "moreblocks:trap_desert_stone", 514 | type = "shapeless", 515 | recipe = {"default:mese_crystal_fragment", "default:desert_stone"}, 516 | }) 517 | 518 | minetest.register_craft({ 519 | output = "moreblocks:trap_glass", 520 | type = "shapeless", 521 | recipe = {"default:mese_crystal_fragment", "default:glass"}, 522 | }) 523 | 524 | minetest.register_craft({ 525 | output = "moreblocks:trap_obsidian_glass", 526 | type = "shapeless", 527 | recipe = {"default:mese_crystal_fragment", "default:obsidian_glass"}, 528 | }) 529 | 530 | minetest.register_craft({ 531 | output = "moreblocks:trap_obsidian", 532 | type = "shapeless", 533 | recipe = {"default:mese_crystal_fragment", "default:obsidian"}, 534 | }) 535 | 536 | minetest.register_craft({ 537 | output = "moreblocks:trap_sandstone", 538 | type = "shapeless", 539 | recipe = {"default:mese_crystal_fragment", "default:sandstone"}, 540 | }) 541 | 542 | minetest.register_craft({ 543 | output = "moreblocks:cactus_brick", 544 | type = "shapeless", 545 | recipe = {"default:cactus", "default:brick"}, 546 | }) 547 | 548 | minetest.register_craft({ 549 | output = "moreblocks:cactus_checker 4", 550 | recipe = { 551 | {"default:cactus", "default:stone"}, 552 | {"default:stone", "default:cactus"}, 553 | } 554 | }) 555 | 556 | minetest.register_craft({ 557 | output = "moreblocks:cactus_checker 4", 558 | recipe = { 559 | {"default:stone", "default:cactus"}, 560 | {"default:cactus", "default:stone"}, 561 | } 562 | }) 563 | 564 | minetest.register_craft({ 565 | output = "moreblocks:rope 3", 566 | recipe = { 567 | {"default:junglegrass"}, 568 | {"default:junglegrass"}, 569 | {"default:junglegrass"}, 570 | } 571 | }) 572 | 573 | minetest.register_craft({ 574 | output = "moreblocks:dirt_compressed", 575 | recipe = { 576 | {'default:dirt', 'default:dirt', 'default:dirt'}, 577 | {'default:dirt', 'default:dirt', 'default:dirt'}, 578 | {'default:dirt', 'default:dirt', 'default:dirt'}, 579 | } 580 | }) 581 | 582 | minetest.register_craft({ 583 | output = "default:dirt 9", 584 | recipe = {{"moreblocks:dirt_compressed"}}, 585 | }) 586 | 587 | minetest.register_craft({ 588 | output = "moreblocks:cobble_compressed", 589 | recipe = { 590 | {"default:cobble", "default:cobble", "default:cobble"}, 591 | {"default:cobble", "default:cobble", "default:cobble"}, 592 | {"default:cobble", "default:cobble", "default:cobble"}, 593 | } 594 | }) 595 | 596 | minetest.register_craft({ 597 | output = "default:cobble 9", 598 | recipe = { 599 | {"moreblocks:cobble_compressed"}, 600 | } 601 | }) 602 | 603 | minetest.register_craft({ 604 | output = "moreblocks:desert_cobble_compressed", 605 | recipe = { 606 | {"default:desert_cobble", "default:desert_cobble", "default:desert_cobble"}, 607 | {"default:desert_cobble", "default:desert_cobble", "default:desert_cobble"}, 608 | {"default:desert_cobble", "default:desert_cobble", "default:desert_cobble"}, 609 | } 610 | }) 611 | 612 | minetest.register_craft({ 613 | output = "default:desert_cobble 9", 614 | recipe = { 615 | {"moreblocks:desert_cobble_compressed"}, 616 | } 617 | }) 618 | 619 | minetest.register_craft({ 620 | type = "cooking", output = "moreblocks:tar", recipe = "default:pine_tree", 621 | }) 622 | 623 | minetest.register_craft({ 624 | type = "shapeless", 625 | output = "moreblocks:copperpatina", 626 | recipe = {"group:water_bucket", "default:copperblock"}, 627 | replacements = { 628 | {"group:water_bucket", "bucket:bucket_empty"} 629 | } 630 | }) 631 | 632 | minetest.register_craft({ 633 | output = "default:copper_ingot 9", 634 | recipe = { 635 | {"moreblocks:copperpatina"}, 636 | } 637 | }) 638 | 639 | if minetest.settings:get_bool("moreblocks.circular_saw_crafting") ~= false then -- “If nil or true then” 640 | minetest.register_craft({ 641 | output = "moreblocks:circular_saw", 642 | recipe = { 643 | { "", "default:steel_ingot", "" }, 644 | { "group:wood", "group:wood", "group:wood"}, 645 | { "group:wood", "", "group:wood"}, 646 | } 647 | }) 648 | end 649 | -------------------------------------------------------------------------------- /init.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | ===================================================================== 3 | ** More Blocks ** 4 | By Calinou, with the help of ShadowNinja and VanessaE. 5 | 6 | Copyright © 2011-2020 Hugo Locurcio and contributors. 7 | Licensed under the zlib license. See LICENSE.md for more information. 8 | ===================================================================== 9 | --]] 10 | 11 | moreblocks = {} 12 | 13 | local modpath = minetest.get_modpath("moreblocks") 14 | 15 | moreblocks.S = minetest.get_translator("moreblocks") 16 | 17 | dofile(modpath .. "/config.lua") 18 | dofile(modpath .. "/sounds.lua") 19 | dofile(modpath .. "/circular_saw.lua") 20 | dofile(modpath .. "/stairsplus/init.lua") 21 | 22 | if minetest.get_modpath("default") then 23 | dofile(modpath .. "/nodes.lua") 24 | dofile(modpath .. "/redefinitions.lua") 25 | dofile(modpath .. "/crafting.lua") 26 | dofile(modpath .. "/aliases.lua") 27 | end 28 | -------------------------------------------------------------------------------- /locale/moreblocks.de.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # German translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # Xanthin, 2014. 7 | # CodeXP , 2018. 8 | 9 | #: circular_saw.lua 10 | 11 | Circular Saw=Kreissäge 12 | Input material=Ausgangs-@nmaterial 13 | Left-over=Rest 14 | Max=Anzahl 15 | Recycle output=Wiederver-@nwerten 16 | Set=Ok 17 | owned by @1=gehört @1 18 | Circular Saw is empty=Kreissäge ist leer 19 | Circular Saw is working on @1=Kreissäge arbeitet mit @1 20 | 21 | #: init.lua 22 | 23 | [moreblocks] loaded.=[moreblocks] geladen. 24 | 25 | #: nodes.lua 26 | 27 | Deprecated=veraltet 28 | All-faces Acacia Tree=allseitiger Akazienbaumstamm 29 | All-faces Aspen Tree=allseitiger Espenbaumstamm 30 | All-faces Jungle Tree=allseitiger Tropenbaumstamm 31 | All-faces Pine Tree=allseitiger Kieferbaumstamm 32 | All-faces Tree=allseitiger Baumstamm 33 | Cactus Brick=Kaktusziegel 34 | Cactus Checker=Kaktus-Mosaik 35 | Centered Wooden Tile=Holzfliese mittig 36 | Checker Stone Tile=Stein-Mosaik 37 | Circle Stone Bricks=Kreissteinziegel 38 | Clean Glass=Klares Glas 39 | Coal Checker=Kohlen-Mosaik 40 | Coal Glass=Kohleglas 41 | Clean Super Glow Glass= 42 | Trap Clean Super Glow Glass= 43 | Trap Clean Glass= 44 | Clean Glow Glass= 45 | Trap Clean Glow Glass= 46 | Coal Stone=Kohlestein 47 | Coal Stone Bricks=Kohlesteinziegel 48 | Compressed Cobblestone=Gepresster Kopfsteinpflaster 49 | Compressed Desert Cobblestone= 50 | Compressed Dirt=Gepresste Erde 51 | Copper Patina Block=Kupfer Edelrostblock 52 | Empty Shelf=Leeres Regal 53 | Full Wooden Tile=Vollholzfliese 54 | Glow Glass=Leuchtglas 55 | Iron Checker=Metall-Mosaik 56 | Iron Glass=metallisiertes Glas 57 | Iron Stone=Eisenstein 58 | Iron Stone Bricks=Eisensteinziegel 59 | Plankstone=Brettstein 60 | Rope=Seil 61 | Split Stone Tile=Geteilte Steinfliese 62 | Stone Bricks=Steinziegel 63 | Stone Tile=Steinfliese 64 | Super Glow Glass=Superleuchtglas 65 | Sweeper=Besen 66 | Tar=Teer 67 | Trap Desert Stone=Wüstensteinfalle 68 | Trap Glass=Glasfalle 69 | Trap Glow Glass=Leuchtglasfalle 70 | Trap Obsidian=Obsidianfalle 71 | Trap Obsidian Glass=Obsidianglasfalle 72 | Trap Sandstone=Sandsteinfalle 73 | Trap Stone=Steinfalle 74 | Trap Super Glow Glass=Superleuchtglasfalle 75 | Wooden Tile=Holzfliese 76 | Offset Wooden Tile=Holzfliese versetzt 77 | Downwards Wooden Tile=Holzfliese unten 78 | Leftwards Wooden Tile=Holzfliese links 79 | Rightwards Wooden Tile=Holzfliese rechts 80 | 81 | #: ownership.lua 82 | 83 | Sorry, @1 owns that spot.=Tut mir leid, dieser Bereich gehört @1. 84 | someone=jemand 85 | 86 | #: stairsplus/common.lua 87 | 88 | @1 Microblock=@1mikroblock 89 | @1 Slab=@1platte 90 | @1 Slope=@1neigung 91 | @1 Panel=@1paneel 92 | @1 Stairs=@1treppe 93 | -------------------------------------------------------------------------------- /locale/moreblocks.es.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # Spanish translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # kaeza, 2013. 7 | # CodeXP , 2018. 8 | # Carlos Barraza 2020. 9 | 10 | #: circular_saw.lua 11 | 12 | Circular Saw=Sierra circular 13 | Input material=Material de@nentrada 14 | Left-over=Sobrante 15 | Max=Maximo 16 | Recycle output=Reciclar@nsalida 17 | Set=Establecer 18 | owned by @1=protegido por @1 19 | Circular Saw is empty=La sierra circular está vacia 20 | Circular Saw is working on @1=Sierra circular trabajando en @1 21 | 22 | #: nodes.lua 23 | 24 | Deprecated=Obsoleto 25 | All-faces Acacia Tree=Árbol de Acacia, todas las caras 26 | All-faces Aspen Tree=Álamo temblón, todas las caras 27 | All-faces Jungle Tree=Árbol de Selva, todas las caras 28 | All-faces Pine Tree=Pino, todas las caras 29 | All-faces Tree=Tronco de Árbol 30 | Cactus Brick=Ladrillos de Cactus 31 | Cactus Checker=Cuadros de Cactus 32 | Centered Wooden Tile=Parqué​ Centrado 33 | Checker Stone Tile=Cuadros de Baldosa de Piedra 34 | Circle Stone Bricks=Bloques de Piedra Circulares 35 | Clean Glass=Cristal Limpio 36 | Coal Checker=Cuadros de Carbón 37 | Coal Glass=Cristal con Carbón 38 | Clean Super Glow Glass=Cristal Súper Brillante Limpio 39 | Trap Clean Super Glow Glass=Cristal Súper Brillante Limpio Falso 40 | Trap Clean Glass=Cristal Limpio Falso 41 | Clean Glow Glass=Cristal Brillante Limpio 42 | Trap Clean Glow Glass=Cristal Brillante Limpio Falso 43 | Coal Stone=Carbón y Piedra 44 | Coal Stone Bricks=Ladrillos de Piedra de Carbon 45 | Compressed Cobblestone=Adoquín Comprimido 46 | Compressed Desert Cobblestone=Adoquín del Desierto Comprimido 47 | Compressed Dirt=Tierra Comprimida 48 | Copper Patina Block=Bloque de Pátina de Cobre 49 | Empty Shelf=Estante vacio 50 | Full Wooden Tile=Parqué​ Completo 51 | Glow Glass=Cristal Brillante 52 | Iron Checker=Cuadros de Hierro 53 | Iron Glass=Cristal con Hierro 54 | Iron Stone=Hierro y Piedra 55 | Iron Stone Bricks=Ladrillo de Piedra de Hierro 56 | Plankstone=Tablones de piedra 57 | Rope=Soga 58 | Split Stone Tile=Baldosas de Piedra Partida 59 | Stone Bricks=Ladrillos de Piedra 60 | Stone Tile=Baldosa de Piedra 61 | Super Glow Glass=Cristal Súper Brillante 62 | Sweeper=Limpiador 63 | Tar=Alquitrán 64 | Trap Desert Stone=Piedra del Desierto Falsa 65 | Trap Glass=Cristal Falso 66 | Trap Glow Glass=Cristal Brillante Falso 67 | Trap Obsidian=Obsidiana Falsa 68 | Trap Obsidian Glass=Vidrio de Obsidiana Falso 69 | Trap Sandstone=Arenisca Falsa 70 | Trap Stone=Piedra Falsa 71 | Trap Super Glow Glass=Cristal Súper Brillante Falso 72 | Wooden Tile=Parqué​ 73 | Offset Wooden Tile=Parqué​ Ajustado 74 | Downwards Wooden Tile=Parqué​ hacia Abajo 75 | Leftwards Wooden Tile=Parqué​ hacia la Izquierda 76 | Rightwards Wooden Tile=Parqué​ hacia la Derecha 77 | 78 | 79 | #: ownership.lua 80 | 81 | Sorry, @1 owns that spot.=Lo siento, @1 es dueño de ese lugar. 82 | someone=alguien 83 | 84 | #: stairsplus/common.lua 85 | 86 | @1 Microblock=Microbloque de @1 87 | @1 Slab=Losa de @1 88 | @1 Slope=Pendiente de @1 89 | @1 Panel=Panel de @1 90 | @1 Stairs=Escalera de @1 91 | 92 | #: stairsplus/registrations.lua 93 | 94 | Concrete=Concreto 95 | Cement=Cemento 96 | Brass Block=Bloque de latón 97 | -------------------------------------------------------------------------------- /locale/moreblocks.fr.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # French translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # Hugo Locurcio , 2013-2019. 7 | # Jat15, 2013. 8 | # CodeXP , 2018. 9 | 10 | #: circular_saw.lua 11 | 12 | Circular Saw=Scie circulaire 13 | Input material=Matériau@nd'entrée 14 | Left-over=Reste 15 | Max=Max 16 | Recycle output=Sortie à@nrecycler 17 | Set=Définir 18 | owned by @1=propriété de @1 19 | Circular Saw is empty=Scie circulaire vide 20 | Circular Saw is working on @1=Scie circulaire manipulant @1 21 | 22 | #: init.lua 23 | 24 | [moreblocks] loaded.=[moreblocks] a été chargé. 25 | 26 | #: nodes.lua 27 | 28 | Deprecated=déprécié 29 | All-faces Acacia Tree=Tronc d'arbre d'acacia (toutes faces) 30 | All-faces Aspen Tree=Tronc d'arbre de peuplier (toutes faces) 31 | All-faces Jungle Tree=Tronc d'arbre de jungle (toutes faces) 32 | All-faces Pine Tree=Tronc d'arbre de pin (toutes faces) 33 | All-faces Tree=Tronc d'arbre (toutes faces) 34 | Cactus Brick=Briques de cactus 35 | Cactus Checker=Damier en cactus 36 | Centered Wooden Tile=Dalle en bois centrée 37 | Checker Stone Tile=Damier de dalle en pierre 38 | Circle Stone Bricks=Briques en pierre circulaires 39 | Clean Glass=Verre propre 40 | Coal Checker=Damier en charbon 41 | Coal Glass=Verre de charbon 42 | Clean Super Glow Glass= 43 | Trap Clean Super Glow Glass= 44 | Trap Clean Glass= 45 | Clean Glow Glass= 46 | Trap Clean Glow Glass= 47 | Coal Stone=Pierre de charbon 48 | Coal Stone Bricks=Briques en pierre de charbon 49 | Compressed Cobblestone=Pierre taillée compressée 50 | Compressed Desert Cobblestone= 51 | Compressed Dirt=Terre compressée 52 | Copper Patina Block=Bloc de patine de cuivre 53 | Empty Shelf=Étagère vide 54 | Full Wooden Tile=Dalle en bois complète 55 | Glow Glass=Verre brillant 56 | Iron Checker=Damier de fer 57 | Iron Glass=Verre de fer 58 | Iron Stone=Pierre de fer 59 | Iron Stone Bricks=Briques en pierre de fer 60 | Plankstone=Pierre-bois 61 | Rope=Corde 62 | Split Stone Tile=Dalle en pierre découpée 63 | Stone Bricks=Briques en pierre 64 | Stone Tile=Dalle en pierre 65 | Super Glow Glass=Verre très brillant 66 | Sweeper=Balai 67 | Tar=Bitume 68 | Trap Desert Stone=Pierre du désert traversable 69 | Trap Glass=Verre traversable 70 | Trap Glow Glass=Verre brillant traversable 71 | Trap Obsidian=Obsidienne traversable 72 | Trap Obsidian Glass=Verre d'obsidienne traversable 73 | Trap Sandstone=Grès traversable 74 | Trap Stone=Pierre traversable 75 | Trap Super Glow Glass=Verre très brillant traversable 76 | Wooden Tile=Dalle en bois 77 | Offset Wooden Tile=Dalle en bois décalée 78 | Downwards Wooden Tile=Dalle en bois vers le bas 79 | Leftwards Wooden Tile=Dalle en bois vers la gauche 80 | Rightwards Wooden Tile=Dalle en bois vers la droite 81 | 82 | #: ownership.lua 83 | 84 | Sorry, @1 owns that spot.=Désolé, @1 possède cet endroit. 85 | someone=quelqu'un 86 | 87 | #: stairsplus/common.lua 88 | 89 | @1 Microblock=Microbloc en @1 90 | @1 Slab=Demi-dalle en @1 91 | @1 Slope=Pente en @1 92 | @1 Panel=Barre en @1 93 | @1 Stairs=Escaliers en @1 94 | -------------------------------------------------------------------------------- /locale/moreblocks.it.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # Italian translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # Emon, 2016. 7 | # CodeXP , 2018. 8 | 9 | #: circular_saw.lua 10 | 11 | Circular Saw=Sega circolare 12 | Input material=Materiale@niniziale 13 | Left-over=Scarto 14 | Max=Max. 15 | Recycle output=Ricicla@nfinale 16 | Set=Imp. 17 | owned by @1= 18 | Circular Saw is empty=Sega circolare, vuota 19 | Circular Saw is working on @1=Sega circolare, in funzione su @1 20 | 21 | #: init.lua 22 | 23 | [moreblocks] loaded.=[moreblocks] caricato. 24 | 25 | #: nodes.lua 26 | 27 | Deprecated= 28 | All-faces Acacia Tree= 29 | All-faces Aspen Tree= 30 | All-faces Jungle Tree= 31 | All-faces Pine Tree= 32 | All-faces Tree=Albero su ogni lato 33 | Cactus Brick=Mattoni di cactus 34 | Cactus Checker=Scacchiera in cactus 35 | Centered Wooden Tile=Mattonella in legno centrata 36 | Checker Stone Tile= 37 | Circle Stone Bricks=Mattoni concentrici in pietra 38 | Clean Glass=Vetro pulito 39 | Coal Checker=Scacchiera in carbone 40 | Coal Glass=Vetro e carbone 41 | Clean Super Glow Glass= 42 | Trap Clean Super Glow Glass= 43 | Trap Clean Glass= 44 | Clean Glow Glass= 45 | Trap Clean Glow Glass= 46 | Coal Stone=Pietra in carbone 47 | Coal Stone Bricks=Mattoni di pietra in carbone 48 | Compressed Cobblestone= 49 | Compressed Desert Cobblestone= 50 | Compressed Dirt= 51 | Copper Patina Block= 52 | Empty Shelf=Scaffale Vuoto 53 | Full Wooden Tile=Mattonella in legno pieno 54 | Glow Glass=Vetro luminoso 55 | Iron Checker=Scacchiera in ferro 56 | Iron Glass=Vetro e ferro 57 | Iron Stone=Pietra in ferro 58 | Iron Stone Bricks=Mattoni di pietra in ferro 59 | Plankstone=Pietra e legno 60 | Rope=Corda 61 | Split Stone Tile=Mattonella in pietra divisa 62 | Stone Bricks= 63 | Stone Tile=Mattonella in pietra 64 | Super Glow Glass=Super vetro luminoso 65 | Sweeper=Spazzola 66 | Tar= 67 | Trap Desert Stone= 68 | Trap Glass=Vetro trappola 69 | Trap Glow Glass=Vetro luminoso trappola 70 | Trap Obsidian= 71 | Trap Obsidian Glass= 72 | Trap Sandstone= 73 | Trap Stone=Pietra trappola 74 | Trap Super Glow Glass=Super vetro luminoso trappola 75 | Wooden Tile=Mattonella in legno 76 | Offset Wooden Tile= 77 | Downwards Wooden Tile= 78 | Leftwards Wooden Tile= 79 | Rightwards Wooden Tile= 80 | 81 | #: ownership.lua 82 | 83 | Sorry, @1 owns that spot.=Spiacente, quel punto è di proprietà di @1 84 | someone=qualcuno 85 | 86 | #: stairsplus/common.lua 87 | 88 | @1 Microblock=Microblocco @1 89 | @1 Slab=Lastra - @1 90 | @1 Slope= 91 | @1 Panel=Pannello - @1 92 | @1 Stairs=Scale - @1 93 | -------------------------------------------------------------------------------- /locale/moreblocks.pl.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # Polish translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # mat9117, 2019 7 | # CodeXP , 2018. 8 | 9 | #: circular_saw.lua 10 | 11 | Circular Saw=Piła tarczowa 12 | Input material=wejście@nmateriał 13 | Left-over=Resztki 14 | Max=Maks 15 | Recycle output=Przetwarzanie@nWyjście 16 | Set=Ustaw 17 | owned by @1=Należy do @1 18 | Circular Saw is empty=Piła tarczowa jest pusta 19 | Circular Saw is working on @1=Piła tarczowa pracuje na @1 20 | 21 | #: init.lua 22 | 23 | [moreblocks] loaded.=[moreblocks] załadowane. 24 | 25 | #: nodes.lua 26 | 27 | Deprecated=Przestarzałe 28 | All-faces Acacia Tree=Wielostronna tekstura akacji 29 | All-faces Aspen Tree=Wielostronna tekstura osiki 30 | All-faces Jungle Tree=Wielostronna tekstura drzewa dżunglowego 31 | All-faces Pine Tree=Wielostronna tekstura sosny 32 | All-faces Tree=Wielostronna tekstura drzewa 33 | Cactus Brick=Kaktusowa cegła 34 | Cactus Checker=Kaktusowa szachownica 35 | Centered Wooden Tile=Wyśrodkowany drewniany kafelek 36 | Checker Stone Tile=Kamienna szachownica 37 | Circle Stone Bricks=Okrągłe kamienne cegły 38 | Clean Glass=Czyste szkło 39 | Coal Checker=Węglowa szachownica 40 | Coal Glass=Szkło węglowe 41 | Clean Super Glow Glass= 42 | Trap Clean Super Glow Glass= 43 | Trap Clean Glass= 44 | Clean Glow Glass= 45 | Trap Clean Glow Glass= 46 | Coal Stone=Kamień węglowy 47 | Coal Stone Bricks=Węglowe kamienne cegły 48 | Compressed Cobblestone=Skompresowany bruk 49 | Compressed Desert Cobblestone= 50 | Compressed Dirt=Skompresowana ziemia 51 | Copper Patina Block=Blok patynowanej miedzi 52 | Empty Shelf=Pusta półka 53 | Full Wooden Tile=Pełny drewniany kafelek 54 | Glow Glass=Świecące szkło 55 | Iron Checker=Żelazna szachownica 56 | Iron Glass=Żelazne szkło 57 | Iron Stone=Żelazny kamień 58 | Iron Stone Bricks=Żelazne kamienne cegły 59 | Plankstone=Deskokamień 60 | Rope=Lina 61 | Split Stone Tile=Kamienny blok kafelkowy 62 | Stone Bricks=Kamienne cegły 63 | Stone Tile=Kamienny kafelek 64 | Super Glow Glass=Super świecące szkło 65 | Sweeper=Miotła 66 | Tar=Smoła 67 | Trap Desert Stone=Pułapka z pustynnego kamienia 68 | Trap Glass=Szklana pułapka 69 | Trap Glow Glass=Pułapka ze świecącego szkłą 70 | Trap Obsidian=Obsydianowa pułapka 71 | Trap Obsidian Glass=Pułapka z obsydianowego szkła 72 | Trap Sandstone=Pułapka z piaskowca 73 | Trap Stone=Kamienna pułapka 74 | Trap Super Glow Glass=Pułapka z super świecącego szkła 75 | Wooden Tile=Drewniany kafelek 76 | Offset Wooden Tile= 77 | Downwards Wooden Tile=Dolny drewniany kafelek 78 | # @deprecated 79 | Leftwards Wooden Tile=Lewy drewniany kafelek 80 | # @deprecated 81 | Rightwards Wooden Tile=Prawy drewniany kafelek 82 | 83 | #: ownership.lua 84 | Sorry, @1 owns that spot.=Przykro mi, to miejsce należy do @1 85 | someone=ktoś 86 | 87 | #: stairsplus/common.lua 88 | 89 | @1 Microblock=@1 Mikroblok 90 | @1 Slab=@1 Płyta 91 | @1 Slope=@1 Spad 92 | @1 Panel=@1 Panel 93 | @1 Stairs=@1 Schody 94 | -------------------------------------------------------------------------------- /locale/moreblocks.pt_BR.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # Portuguese_Brazil translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # Jose Anastacio 2020. 7 | 8 | #: circular_saw.lua 9 | 10 | Circular Saw=Serra Circular 11 | Input material=Material de entrada 12 | Left-over=Sobra 13 | Max=Máximo 14 | Recycle output=Saida reciclagem 15 | Set=Defina 16 | owned by @1=propriedade de @1 17 | Circular Saw is empty=Serra Circular está vazia 18 | Circular Saw is working on @1=Serra Circular está trabalhando em @1 19 | 20 | #: nodes.lua 21 | 22 | Deprecated=Descontinuado 23 | All-faces Acacia Tree=Árvore de Acácia multifacetada 24 | All-faces Aspen Tree=Árvore Aspen multifacetada 25 | All-faces Jungle Tree=Árvore da Selva multifacetada 26 | All-faces Pine Tree=Pinheiro multifacetado 27 | All-faces Tree=Tronco de árvore 28 | Cactus Brick=Tijolos de Cacto 29 | Cactus Checker=Xadrez de Cacto 30 | Centered Wooden Tile=Tijolos Centrado de Madeira 31 | Checker Stone Tile=Xadrez Centrado de Pedra 32 | Circle Stone Bricks=Tijolos de Pedra Cricular 33 | Clean Glass=Vidro Limpo 34 | Coal Checker=Xadrez de Carvão 35 | Coal Glass=Vidro com Carvao 36 | Clean Super Glow Glass=Cristal Limpo Super brilhante 37 | Trap Clean Super Glow Glass=Vidro Limpo Super brilhante 38 | Trap Clean Glass=Cristal Falso Limpo 39 | Clean Glow Glass=Cristal Brillante Limpo 40 | Trap Clean Glow Glass=Cristal Brillante Limpo Falso 41 | Coal Stone=Pedra de carvão 42 | Coal Stone Bricks=Tijolos de Carvão 43 | Compressed Cobblestone=Pedregulho Comprimido 44 | Compressed Desert Cobblestone=Pedregulho do Deserto Comprimido 45 | Compressed Dirt=Terra Comprimida 46 | Copper Patina Block=Bloco pátina de cobre 47 | Empty Shelf=Prateleira Vazia 48 | Full Wooden Tile=Xadrez de Madeira completo 49 | Glow Glass=Vidro brilhante 50 | Iron Checker=Xadrez de Ferro 51 | Iron Glass=Cristal com ferro 52 | Iron Stone=Ferro e Pedra 53 | Iron Stone Bricks=Tijolos de Ferro 54 | Plankstone=Prancha de Pedra 55 | Rope=Corda 56 | Split Stone Tile=Xadrez de Pedra Dividido 57 | Stone Bricks=Tijolos de Pedra 58 | Stone Tile=Xadrez de Pedra 59 | Super Glow Glass=Cristal Súper Brillante 60 | Sweeper=Limpiador 61 | Tar=Alquitrán 62 | Trap Desert Stone=Pedra del Desierto Falsa 63 | Trap Glass=Cristal Falso 64 | Trap Glow Glass=Cristal Brillante Falso 65 | Trap Obsidian=Obsidiana Falsa 66 | Trap Obsidian Glass=Vidrio de Obsidiana Falso 67 | Trap Sandstone=Arenisca Falsa 68 | Trap Stone=Piedra Falsa 69 | Trap Super Glow Glass=Cristal Súper Brillante Falso 70 | Wooden Tile=Xadrez de Madeira 71 | Offset Wooden Tile=Xadrez de Madeira compensada 72 | Downwards Wooden Tile=Xadrez de Madeira para baixo 73 | Leftwards Wooden Tile=Xadrez de Madeira para a esquerda 74 | Rightwards Wooden Tile=Xadrez de Madeira para a direita 75 | 76 | 77 | #: ownership.lua 78 | 79 | Sorry, @1 owns that spot.=Desculpe, @1 é o dono desse lugar. 80 | someone=alguem 81 | 82 | #: stairsplus/common.lua 83 | 84 | @1 Microblock=Microbloco de @1 85 | @1 Slab=Laje de @1 86 | @1 Slope=Declive de @1 87 | @1 Painel=Panel de @1 88 | @1 Stairs=Escadas de @1 89 | 90 | #: stairsplus/registrations.lua 91 | 92 | Concrete=Concreto 93 | Cement=Cimento 94 | Brass Block=Bloco de latão 95 | -------------------------------------------------------------------------------- /locale/moreblocks.ru.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # Russian translation for MOREBLOCKS minetest mod. 4 | # Copyright (C) 2018 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the MOREBLOCKS package. 6 | # CodeXP , 2018. 7 | # 8 | #, fuzzy 9 | 10 | #: circular_saw.lua 11 | 12 | Circular Saw=циркулярная пила 13 | Input material=Входной@nматериал 14 | Left-over=Остатки 15 | Max=Кол. 16 | Recycle output=Пере-@nобработка 17 | Set=ОК 18 | owned by @1=принадлежит @1 19 | Circular Saw is empty=циркулярная пила пустая 20 | Circular Saw is working on @1=циркулярная пила, @1 в обработке 21 | 22 | #: init.lua 23 | 24 | [MOD] moreblocks loaded.=[MOD] moreblocks загружен. 25 | 26 | #: nodes.lua 27 | 28 | Deprecated=устаревший 29 | All-faces Acacia Tree=всестороннее бревно акации 30 | All-faces Aspen Tree=всестороннее бревно осины 31 | All-faces Jungle Tree=всестороннее бревно дерева джунглей 32 | All-faces Pine Tree=всестороннее бревно сосновое 33 | All-faces Tree=всестороннее бревно дерева 34 | Cactus Brick=кирпич из кактуса 35 | Cactus Checker=мозаика из кактуса 36 | Centered Wooden Tile=деревянная мозаика (центр) 37 | Checker Stone Tile=каменная мозаика 38 | Circle Stone Bricks=кольцевой камень 39 | Clean Glass=чистое стекло 40 | Coal Checker=угольная мозаика 41 | Coal Glass=угольное стекло 42 | Clean Super Glow Glass= 43 | Trap Clean Super Glow Glass= 44 | Trap Clean Glass= 45 | Clean Glow Glass= 46 | Trap Clean Glow Glass= 47 | Coal Stone=угольный камень 48 | Coal Stone Bricks=угольно-каменный кирпич 49 | Compressed Cobblestone=прессованный булыжник 50 | Compressed Desert Cobblestone= 51 | Compressed Dirt=прессованная земля 52 | Copper Patina Block=медный патинированный блок 53 | Empty Shelf=пустые полки 54 | Full Wooden Tile=деревянная мозаика 55 | Glow Glass=светящееся стекло 56 | Iron Checker=стальная мозаика 57 | Iron Glass=металлизированное стекло 58 | Iron Stone=железный камень 59 | Iron Stone Bricks=железно-каменный кирпич 60 | Plankstone=дерево-каменная мозаика 61 | Rope=верёвка 62 | Split Stone Tile=каменная мозаика 63 | Stone Bricks=каменный кирпич 64 | Stone Tile=каменная плитка 65 | Super Glow Glass=супер светящееся стекло 66 | Sweeper=метёлка 67 | Tar=смола 68 | Trap Desert Stone=мнимый пустынный камень 69 | Trap Glass=мнимое стекло 70 | Trap Glow Glass=мнимое светящееся стекло 71 | Trap Obsidian=мнимый обсидиан 72 | Trap Obsidian Glass=мнимое обсидиановое стекло 73 | Trap Sandstone=мнимый песчаник 74 | Trap Stone=мнимый камень 75 | Trap Super Glow Glass=мнимое супер светящееся стекло 76 | Wooden Tile=деревянная мозаика 77 | Offset Wooden Tile=деревянная мозаика (сверху) 78 | # @deprecated 79 | Downwards Wooden Tile=деревянная мозаика (снизу) 80 | # @deprecated 81 | Leftwards Wooden Tile=деревянная мозаика (слева) 82 | # @deprecated 83 | Rightwards Wooden Tile=деревянная мозаика (справа) 84 | 85 | #: ownership.lua 86 | Sorry, @1 owns that spot.=Извините, это принадлежит @1. 87 | someone=кому-то 88 | 89 | #: stairsplus/common.lua 90 | 91 | @1 Microblock=@1 (микроблок) 92 | @1 Slab=@1 (плита) 93 | @1 Slope=@1 (наклон) 94 | @1 Panel=@1 (панель) 95 | @1 Stairs=@1 (лестница) 96 | -------------------------------------------------------------------------------- /locale/moreblocks.template.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | #: circular_saw.lua 4 | 5 | Circular Saw= 6 | Input material= 7 | Left-over= 8 | Max= 9 | Recycle output= 10 | Set= 11 | owned by @1= 12 | Circular Saw is empty= 13 | Circular Saw is working on @1= 14 | 15 | #: nodes.lua 16 | 17 | Deprecated= 18 | All-faces Acacia Tree= 19 | All-faces Aspen Tree= 20 | All-faces Jungle Tree= 21 | All-faces Pine Tree= 22 | All-faces Tree= 23 | Cactus Brick= 24 | Cactus Checker= 25 | Centered Wooden Tile= 26 | Checker Stone Tile= 27 | Circle Stone Bricks= 28 | Clean Glass= 29 | Coal Checker= 30 | Coal Glass= 31 | Clean Super Glow Glass= 32 | Trap Clean Super Glow Glass= 33 | Trap Clean Glass= 34 | Clean Glow Glass= 35 | Trap Clean Glow Glass= 36 | Coal Stone= 37 | Coal Stone Bricks= 38 | Compressed Cobblestone= 39 | Compressed Desert Cobblestone= 40 | Compressed Dirt= 41 | Copper Patina Block= 42 | Empty Shelf= 43 | Full Wooden Tile= 44 | Glow Glass= 45 | Iron Checker= 46 | Iron Glass= 47 | Iron Stone= 48 | Iron Stone Bricks= 49 | Plankstone= 50 | Rope= 51 | Split Stone Tile= 52 | Stone Bricks= 53 | Stone Tile= 54 | Super Glow Glass= 55 | Sweeper= 56 | Tar= 57 | Trap Desert Stone= 58 | Trap Glass= 59 | Trap Glow Glass= 60 | Trap Obsidian= 61 | Trap Obsidian Glass= 62 | Trap Sandstone= 63 | Trap Stone= 64 | Trap Super Glow Glass= 65 | Wooden Tile= 66 | Offset Wooden Tile= 67 | Downwards Wooden Tile= 68 | Leftwards Wooden Tile= 69 | Rightwards Wooden Tile= 70 | 71 | 72 | #: ownership.lua 73 | 74 | Sorry, @1 owns that spot.= 75 | someone= 76 | 77 | #: stairsplus/common.lua 78 | 79 | @1 Microblock= 80 | @1 Slab= 81 | @1 Slope= 82 | @1 Panel= 83 | @1 Stairs= 84 | 85 | #: stairsplus/registrations.lua 86 | 87 | Concrete= 88 | Cement= 89 | Brass Block= 90 | -------------------------------------------------------------------------------- /locale/moreblocks.uk.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | More Blocks=Більше Блоків 4 | Adds various miscellaneous blocks to the game.=Додає різноманітні нові блоки до гри. 5 | Adds various miscellaneous blocks.=Додає різноманітні нові блоки до гри. 6 | 7 | #: circular_saw.lua 8 | 9 | Circular Saw=Циркулярна пила 10 | Input material=Вхідний@nматеріал 11 | Left-over=Залишки 12 | Max=Кільк. 13 | Recycle output=Пере-@nобробка 14 | Set=Гаразд 15 | owned by @1=належить @1 16 | Circular Saw is empty=Циркулярна пила пуста 17 | Circular Saw is working on @1=Циркулярна пила працює над @1 18 | 19 | #: init.lua 20 | 21 | [MOD] moreblocks loaded.=[MOD] moreblocks завантажено. 22 | 23 | #: nodes.lua 24 | 25 | Deprecated=застарілий 26 | All-faces Acacia Tree=Всебічна колода акації 27 | All-faces Aspen Tree=Всебічна колода осики 28 | All-faces Jungle Tree=Всебічна джунглева колода 29 | All-faces Pine Tree=Всебічна колода сосни 30 | All-faces Tree=Всебічна колода яблуні 31 | Cactus Brick=Кактусова цегла 32 | Cactus Checker=Кактусова мозаїка 33 | Centered Wooden Tile=Дерев'яна мозаїка (центр) 34 | Checker Stone Tile=Кам'яна мозаїка 35 | Circle Stone Bricks=Кільцевий камінь 36 | Clean Glass=Чисте скло 37 | Coal Checker=Вугілляна мозаїка 38 | Coal Glass=Вугілляне скло 39 | Clean Super Glow Glass=Чисте супер-сяюче скло 40 | Trap Clean Super Glow Glass=Trap чисте супер-сяюче скло 41 | Trap Clean Glass=Trap чисте скло 42 | Clean Glow Glass=Чисте сяюче скло 43 | Trap Clean Glow Glass=Trap чисте сяюче скло 44 | Coal Stone=Вугілляний камінь 45 | Coal Stone Bricks=Вуглекам'яна цегла 46 | Compressed Cobblestone=Пресований кругляк 47 | Compressed Desert Cobblestone=Пресований пустельний кругляк 48 | Compressed Dirt=Пресований ґрунт 49 | Copper Patina Block=Блок мідного патину 50 | Empty Shelf=Пусті полиці 51 | Full Wooden Tile=Дерев'яна мозаїка 52 | Glow Glass=Сяюче скло 53 | Iron Checker=Сталева мозаїка 54 | Iron Glass=Металізоване скло 55 | Iron Stone=Залізний камінь 56 | Iron Stone Bricks=Залізокам'яна цегла 57 | Plankstone=Деревокам'яна мозаїка 58 | Rope=Мотузка 59 | Split Stone Tile=Кам'яна мозаїка 60 | Stone Bricks=Кам'яна цегла 61 | Stone Tile=Кам'яна плитка 62 | Super Glow Glass=Супер-сяюче скло 63 | Sweeper=Підмітальник 64 | Tar=Смола 65 | Trap Desert Stone=Уявний пустельний камінь 66 | Trap Glass=Уявне скло 67 | Trap Glow Glass=Уявне сяюче скло 68 | Trap Obsidian=Уявний обсидіан 69 | Trap Obsidian Glass=Уявне обсидіанове скло 70 | Trap Sandstone=Уявний пісковик 71 | Trap Stone=Уявний камінь 72 | Trap Super Glow Glass=Уявне супер-сяюче скло 73 | Wooden Tile=Дерев'яна мозаїка 74 | Offset Wooden Tile=Дерев'яна мозаїка (зверзу) 75 | # @deprecated 76 | Downwards Wooden Tile=Дерев'яна мозаїка (знизу) 77 | # @deprecated 78 | Leftwards Wooden Tile=Дерев'яна мозаїка (ліворуч) 79 | # @deprecated 80 | Rightwards Wooden Tile=Дерев'яна мозаїка (праворуч) 81 | 82 | #: ownership.lua 83 | Sorry, @1 owns that spot.=Вибачте, це належить @1. 84 | someone=комусь 85 | 86 | #: stairsplus/common.lua 87 | 88 | @1 Microblock=@1 (мікроблок) 89 | @1 Slab=@1 (плита) 90 | @1 Slope=@1 (схил) 91 | @1 Panel=@1 (панель) 92 | @1 Stairs=@1 (сходи) 93 | -------------------------------------------------------------------------------- /locale/moreblocks.zh_CN.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # zh_CN translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # IFRFSX , 2020. 7 | 8 | #: circular_saw.lua 9 | 10 | Circular Saw=圆锯 11 | Input material=输入@n材料 12 | Left-over=剩余材料 13 | Max=最大值 14 | Recycle output=回收@n输出物 15 | Set=设置 16 | owned by @1=属于@1所有 17 | Circular Saw is empty=圆锯是空的 18 | Circular Saw is working on @1=圆锯正在加工@1 19 | 20 | #: nodes.lua 21 | 22 | Deprecated=弃用 23 | All-faces Acacia Tree=全切面相思树木方块 24 | All-faces Aspen Tree=全切面白杨树木方块 25 | All-faces Jungle Tree=全切面丛林树木方块 26 | All-faces Pine Tree=全切面松树木方块 27 | All-faces Tree=全切面树木方块 28 | Cactus Brick=仙人掌砖 29 | Cactus Checker=仙人掌棋盘方块 30 | Centered Wooden Tile=居中的木瓦 31 | Checker Stone Tile=棋盘石瓦 32 | Circle Stone Bricks=圆石砖 33 | Clean Glass=干净的玻璃 34 | Coal Checker=棋盘煤块 35 | Coal Glass=煤玻璃 36 | Clean Super Glow Glass= 37 | Trap Clean Super Glow Glass= 38 | Trap Clean Glass= 39 | Clean Glow Glass= 40 | Trap Clean Glow Glass= 41 | Coal Stone=煤炭石 42 | Coal Stone Bricks=煤炭石砖 43 | Compressed Cobblestone=压缩圆石 44 | Compressed Desert Cobblestone= 45 | Compressed Dirt=压缩土 46 | Copper Patina Block=铜绿方块 47 | Empty Shelf=空书架 48 | Full Wooden Tile=全木瓦 49 | Glow Glass=发光玻璃 50 | Iron Checker=棋盘铁方块 51 | Iron Glass=铁玻璃 52 | Iron Stone=铁石 53 | Iron Stone Bricks=铁石砖 54 | Plankstone=板石 55 | Rope=绳子 56 | Split Stone Tile=裂石砖 57 | Stone Bricks=石砖 58 | Stone Tile=石瓦 59 | Super Glow Glass=超级发光玻璃 60 | Sweeper=清扫器 61 | Tar=焦油 62 | Trap Desert Stone=陷阱沙漠石 63 | Trap Glass=陷阱玻璃 64 | Trap Glow Glass=陷阱发光玻璃 65 | Trap Obsidian=陷阱黑耀石 66 | Trap Obsidian Glass=陷阱黑耀石玻璃 67 | Trap Sandstone=陷阱沙石 68 | Trap Stone=陷阱石 69 | Trap Super Glow Glass=陷阱超级发光玻璃 70 | Wooden Tile=木瓦 71 | Offset Wooden Tile=胶合木瓦 72 | Downwards Wooden Tile=向下的木瓦 73 | Leftwards Wooden Tile=向左的木瓦 74 | Rightwards Wooden Tile=向右的木瓦 75 | 76 | 77 | #: ownership.lua 78 | 79 | Sorry, @1 owns that spot.=抱歉,那个位置是@1的。 80 | someone=某人 81 | 82 | #: stairsplus/common.lua 83 | 84 | @1 Microblock=@1小方块 85 | @1 Slab=@1台阶 86 | @1 Slope=@1斜坡 87 | @1 Panel=@1嵌板 88 | @1 Stairs=@1楼梯 89 | 90 | #: stairsplus/registrations.lua 91 | 92 | Concrete= 93 | Cement= 94 | Brass Block= 95 | -------------------------------------------------------------------------------- /locale/moreblocks.zh_TW.tr: -------------------------------------------------------------------------------- 1 | # textdomain: moreblocks 2 | 3 | # zh_TW translation for More Blocks. 4 | # Copyright © 2011-2020 Hugo Locurcio and contributors 5 | # This file is distributed under the same license as the More Blocks package. 6 | # IFRFSX , 2020. 7 | 8 | #: circular_saw.lua 9 | 10 | Circular Saw=圓鋸 11 | Input material=輸入@n材料 12 | Left-over=剩餘材料 13 | Max=最大值 14 | Recycle output=回收@n輸出物 15 | Set=設置 16 | owned by @1=屬於@1所有 17 | Circular Saw is empty=圓鋸是空的 18 | Circular Saw is working on @1=圓鋸正在加工@1 19 | 20 | #: nodes.lua 21 | 22 | Deprecated=棄用 23 | All-faces Acacia Tree=全切面相思樹木方塊 24 | All-faces Aspen Tree=全切面白楊樹木方塊 25 | All-faces Jungle Tree=全切面叢林樹木方塊 26 | All-faces Pine Tree=全切面松樹木方塊 27 | All-faces Tree=全切面樹木方塊 28 | Cactus Brick=仙人掌磚 29 | Cactus Checker=仙人掌棋盤方塊 30 | Centered Wooden Tile=居中的木瓦 31 | Checker Stone Tile=棋盤石瓦 32 | Circle Stone Bricks=圓石磚 33 | Clean Glass=乾淨的玻璃 34 | Coal Checker=棋盤煤塊 35 | Coal Glass=煤玻璃 36 | Clean Super Glow Glass= 37 | Trap Clean Super Glow Glass= 38 | Trap Clean Glass= 39 | Clean Glow Glass= 40 | Trap Clean Glow Glass= 41 | Coal Stone=煤炭石 42 | Coal Stone Bricks=煤炭石磚 43 | Compressed Cobblestone=壓縮圓石 44 | Compressed Desert Cobblestone= 45 | Compressed Dirt=壓縮土 46 | Copper Patina Block=銅綠方塊 47 | Empty Shelf=空書架 48 | Full Wooden Tile=全木瓦 49 | Glow Glass=發光玻璃 50 | Iron Checker=棋盤鐵方塊 51 | Iron Glass=鐵玻璃 52 | Iron Stone=鐵石 53 | Iron Stone Bricks=鐵石磚 54 | Plankstone=板石 55 | Rope=繩子 56 | Split Stone Tile=裂石磚 57 | Stone Bricks=石磚 58 | Stone Tile=石瓦 59 | Super Glow Glass=超級發光玻璃 60 | Sweeper=清掃器 61 | Tar=焦油 62 | Trap Desert Stone=陷阱沙漠石 63 | Trap Glass=陷阱玻璃 64 | Trap Glow Glass=陷阱發光玻璃 65 | Trap Obsidian=陷阱黑耀石 66 | Trap Obsidian Glass=陷阱黑耀石玻璃 67 | Trap Sandstone=陷阱沙石 68 | Trap Stone=陷阱石 69 | Trap Super Glow Glass=陷阱超級發光玻璃 70 | Wooden Tile=木瓦 71 | Offset Wooden Tile=膠合木瓦 72 | Downwards Wooden Tile=向下的木瓦 73 | Leftwards Wooden Tile=向左的木瓦 74 | Rightwards Wooden Tile=向右的木瓦 75 | 76 | 77 | #: ownership.lua 78 | 79 | Sorry, @1 owns that spot.=抱歉,那個位置是@1的。 80 | someone=某人 81 | 82 | #: stairsplus/common.lua 83 | 84 | @1 Microblock=@1小方塊 85 | @1 Slab=@1臺階 86 | @1 Slope=@1斜坡 87 | @1 Panel=@1嵌板 88 | @1 Stairs=@1樓梯 89 | 90 | #: stairsplus/registrations.lua 91 | 92 | Concrete= 93 | Cement= 94 | Brass Block= 95 | -------------------------------------------------------------------------------- /mod.conf: -------------------------------------------------------------------------------- 1 | name = moreblocks 2 | description = Adds various miscellaneous blocks to the game. 3 | optional_depends = default,stairs,farming,wool,basic_materials,place_rotated 4 | min_minetest_version = 5.0.0 5 | -------------------------------------------------------------------------------- /models/moreblocks_slope.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.500000 0.500000 3 | v -0.500000 0.500000 0.500000 4 | v -0.500000 -0.500000 -0.500000 5 | v 0.500000 -0.500000 -0.500000 6 | vt 1.0000 1.0000 7 | vt 0.0000 1.0000 8 | vt 0.0000 0.0000 9 | vt 1.0000 0.0000 10 | vn 0.0000 0.7071 -0.7071 11 | s off 12 | f 2/1/1 1/2/1 4/3/1 3/4/1 13 | g bottom 14 | v -0.500000 -0.500000 0.500000 15 | v 0.500000 -0.500000 0.500000 16 | v -0.500000 -0.500000 -0.500000 17 | v 0.500000 -0.500000 -0.500000 18 | vt 0.0000 0.0000 19 | vt 1.0000 0.0000 20 | vt 1.0000 1.0000 21 | vt 0.0000 1.0000 22 | vn 0.0000 -1.0000 -0.0000 23 | s off 24 | f 6/5/2 5/6/2 7/7/2 8/8/2 25 | g right 26 | v -0.500000 0.500000 0.500000 27 | v -0.500000 -0.500000 0.500000 28 | v -0.500000 -0.500000 -0.500000 29 | vt 1.0000 1.0000 30 | vt 0.0000 0.0000 31 | vt 1.0000 0.0000 32 | vn -1.0000 0.0000 0.0000 33 | s off 34 | f 9/9/3 11/10/3 10/11/3 35 | g left 36 | v 0.500000 0.500000 0.500000 37 | v 0.500000 -0.500000 0.500000 38 | v 0.500000 -0.500000 -0.500000 39 | vt 0.0000 1.0000 40 | vt 0.0000 0.0000 41 | vt 1.0000 0.0000 42 | vn 1.0000 0.0000 0.0000 43 | s off 44 | f 12/12/4 13/13/4 14/14/4 45 | g back 46 | v 0.500000 0.500000 0.500000 47 | v -0.500000 0.500000 0.500000 48 | v -0.500000 -0.500000 0.500000 49 | v 0.500000 -0.500000 0.500000 50 | vt 1.0000 1.0000 51 | vt 0.0000 1.0000 52 | vt 0.0000 0.0000 53 | vt 1.0000 0.0000 54 | vn 0.0000 -0.0000 1.0000 55 | s off 56 | f 15/15/5 16/16/5 17/17/5 18/18/5 57 | -------------------------------------------------------------------------------- /models/moreblocks_slope_cut.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.500000 0.500000 3 | v -0.500000 -0.000000 0.500000 4 | v 0.500000 0.000000 -0.500000 5 | v -0.500000 -0.500000 -0.500000 6 | vt 0.5000 0.0000 7 | vt 1.0000 1.0000 8 | vt 0.5000 2.0000 9 | vt 0.0000 1.0000 10 | vn -0.4082 0.8165 -0.4082 11 | s 1 12 | f 4/1/1 2/2/1 1/3/1 3/4/1 13 | g bottom 14 | v -0.500000 -0.500000 0.500000 15 | v 0.500000 -0.500000 0.500000 16 | v 0.500000 -0.500000 -0.500000 17 | v -0.500000 -0.500000 -0.500000 18 | vt 1.0000 1.0000 19 | vt 0.0000 1.0000 20 | vt 0.0000 0.0000 21 | vt 1.0000 0.0000 22 | vn 0.0000 -1.0000 -0.0000 23 | s 1 24 | f 6/5/2 5/6/2 8/7/2 7/8/2 25 | g right 26 | v -0.500000 -0.500000 0.500000 27 | v -0.500000 -0.000000 0.500000 28 | v -0.500000 -0.500000 -0.500000 29 | vt 0.0000 0.0000 30 | vt 1.0000 0.0000 31 | vt 1.0000 0.5000 32 | vn -1.0000 0.0000 0.0000 33 | s 1 34 | f 11/9/3 9/10/3 10/11/3 35 | g left 36 | v 0.500000 -0.500000 0.500000 37 | v 0.500000 0.500000 0.500000 38 | v 0.500000 -0.500000 -0.500000 39 | v 0.500000 0.000000 -0.500000 40 | vt 0.0000 0.0000 41 | vt 1.0000 0.0000 42 | vt 1.0000 0.5000 43 | vt 0.0000 1.0000 44 | vn 1.0000 0.0000 0.0000 45 | s 1 46 | f 12/12/4 14/13/4 15/14/4 13/15/4 47 | g back 48 | v -0.500000 -0.500000 0.500000 49 | v 0.500000 -0.500000 0.500000 50 | v 0.500000 0.500000 0.500000 51 | v -0.500000 -0.000000 0.500000 52 | vt 0.0000 0.0000 53 | vt 1.0000 0.0000 54 | vt 1.0000 1.0000 55 | vt 0.0000 0.5000 56 | vn -0.0000 -0.0000 1.0000 57 | s 1 58 | f 16/16/5 17/17/5 18/18/5 19/19/5 59 | g front 60 | v 0.500000 -0.500000 -0.500000 61 | v 0.500000 0.000000 -0.500000 62 | v -0.500000 -0.500000 -0.500000 63 | vt 0.0000 0.0000 64 | vt 1.0000 0.0000 65 | vt 0.0000 0.5000 66 | vn 0.0000 0.0000 -1.0000 67 | s 1 68 | f 20/20/6 22/21/6 21/22/6 69 | -------------------------------------------------------------------------------- /models/moreblocks_slope_half.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 -0.000000 0.500000 3 | v -0.500000 -0.000000 0.500000 4 | v -0.500000 -0.500000 -0.500000 5 | v 0.500000 -0.500000 -0.500000 6 | vt 1.0000 1.0000 7 | vt 0.0000 1.0000 8 | vt 0.0000 0.0000 9 | vt 1.0000 0.0000 10 | vn 0.0000 0.8944 -0.4472 11 | s off 12 | f 2/1/1 1/2/1 4/3/1 3/4/1 13 | g bottom 14 | v -0.500000 -0.500000 0.500000 15 | v 0.500000 -0.500000 0.500000 16 | v -0.500000 -0.500000 -0.500000 17 | v 0.500000 -0.500000 -0.500000 18 | vt 0.0000 0.0000 19 | vt 1.0000 0.0000 20 | vt 1.0000 1.0000 21 | vt 0.0000 1.0000 22 | vn 0.0000 -1.0000 -0.0000 23 | s off 24 | f 6/5/2 5/6/2 7/7/2 8/8/2 25 | g right 26 | v -0.500000 -0.000000 0.500000 27 | v -0.500000 -0.500000 0.500000 28 | v -0.500000 -0.500000 -0.500000 29 | vt 1.0000 0.5000 30 | vt 0.0000 0.0000 31 | vt 1.0000 0.0000 32 | vn -1.0000 0.0000 0.0000 33 | s off 34 | f 9/9/3 11/10/3 10/11/3 35 | g left 36 | v 0.500000 -0.000000 0.500000 37 | v 0.500000 -0.500000 0.500000 38 | v 0.500000 -0.500000 -0.500000 39 | vt 0.0000 0.5000 40 | vt 0.0000 0.0000 41 | vt 1.0000 0.0000 42 | vn 1.0000 0.0000 0.0000 43 | s off 44 | f 12/12/4 13/13/4 14/14/4 45 | g back 46 | v 0.500000 -0.000000 0.500000 47 | v -0.500000 -0.000000 0.500000 48 | v -0.500000 -0.500000 0.500000 49 | v 0.500000 -0.500000 0.500000 50 | vt 1.0000 0.5000 51 | vt 0.0000 0.5000 52 | vt 0.0000 0.0000 53 | vt 1.0000 0.0000 54 | vn 0.0000 -0.0000 1.0000 55 | s off 56 | f 15/15/5 16/16/5 17/17/5 18/18/5 57 | -------------------------------------------------------------------------------- /models/moreblocks_slope_half_raised.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v -0.500000 0.500000 0.500000 3 | v -0.500000 0.000000 -0.500000 4 | v 0.500000 0.000000 -0.500000 5 | v 0.500000 0.500000 0.500000 6 | vt 1.0000 0.0000 7 | vt 1.0000 1.0000 8 | vt 0.0000 1.0000 9 | vt 0.0000 0.0000 10 | vn 0.0000 0.8944 -0.4472 11 | s off 12 | f 2/1/1 1/2/1 4/3/1 3/4/1 13 | g bottom 14 | v -0.500000 -0.500000 -0.500000 15 | v -0.500000 -0.500000 0.500000 16 | v 0.500000 -0.500000 -0.500000 17 | v 0.500000 -0.500000 0.500000 18 | vt 1.0000 0.0000 19 | vt 1.0000 1.0000 20 | vt 0.0000 1.0000 21 | vt 0.0000 0.0000 22 | vn 0.0000 -1.0000 -0.0000 23 | s off 24 | f 6/5/2 5/6/2 7/7/2 8/8/2 25 | g right 26 | v -0.500000 0.500000 0.500000 27 | v -0.500000 0.000000 -0.500000 28 | v -0.500000 -0.500000 -0.500000 29 | v -0.500000 -0.500000 0.500000 30 | vt 1.0000 1.0000 31 | vt 0.0000 0.5000 32 | vt 0.0000 0.0000 33 | vt 1.0000 0.0000 34 | vn -1.0000 0.0000 0.0000 35 | s off 36 | f 9/9/3 10/10/3 11/11/3 12/12/3 37 | g left 38 | v 0.500000 0.000000 -0.500000 39 | v 0.500000 -0.500000 -0.500000 40 | v 0.500000 0.500000 0.500000 41 | v 0.500000 -0.500000 0.500000 42 | vt 1.0000 0.5000 43 | vt 0.0000 1.0000 44 | vt 0.0000 0.0000 45 | vt 1.0000 0.0000 46 | vn 1.0000 0.0000 0.0000 47 | s off 48 | f 13/13/4 15/14/4 16/15/4 14/16/4 49 | g back 50 | v -0.500000 0.500000 0.500000 51 | v -0.500000 -0.500000 0.500000 52 | v 0.500000 0.500000 0.500000 53 | v 0.500000 -0.500000 0.500000 54 | vt 1.0000 1.0000 55 | vt 0.0000 1.0000 56 | vt 0.0000 0.0000 57 | vt 1.0000 0.0000 58 | vn 0.0000 -0.0000 1.0000 59 | s off 60 | f 19/17/5 17/18/5 18/19/5 20/20/5 61 | g front 62 | v -0.500000 0.000000 -0.500000 63 | v -0.500000 -0.500000 -0.500000 64 | v 0.500000 0.000000 -0.500000 65 | v 0.500000 -0.500000 -0.500000 66 | vt 1.0000 0.5000 67 | vt 0.0000 0.5000 68 | vt 0.0000 0.0000 69 | vt 1.0000 0.0000 70 | vn 0.0000 0.0000 -1.0000 71 | s off 72 | f 21/21/6 23/22/6 24/23/6 22/24/6 73 | -------------------------------------------------------------------------------- /models/moreblocks_slope_inner.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.500000 -0.500000 3 | v 0.500000 0.500000 0.500000 4 | v -0.500000 0.500000 0.500000 5 | v -0.500000 -0.500000 -0.500000 6 | v -0.500000 -0.500000 -0.500000 7 | vt 1.0000 1.0000 8 | vt 0.0000 1.0000 9 | vt 1.0000 0.0000 10 | vt 1.0000 1.0000 11 | vt 0.0000 1.0000 12 | vt 0.0000 0.0000 13 | vn 0.0000 0.7071 -0.7071 14 | vn -0.7071 0.7071 0.0000 15 | s 1 16 | f 3/1/1 2/2/1 4/3/1 17 | f 2/4/2 1/5/2 5/6/2 18 | g bottom 19 | v 0.500000 -0.500000 0.500000 20 | v 0.500000 -0.500000 -0.500000 21 | v -0.500000 -0.500000 0.500000 22 | v -0.500000 -0.500000 -0.500000 23 | v 0.500000 -0.500000 0.500000 24 | vt 1.0000 1.0000 25 | vt 0.0000 1.0000 26 | vt 0.0000 0.0000 27 | vt 1.0000 0.0000 28 | vn 0.0000 -1.0000 -0.0000 29 | s 1 30 | f 9/7/3 7/8/3 6/9/3 8/10/3 31 | l 8 10 32 | g right 33 | v -0.500000 0.500000 0.500000 34 | v -0.500000 -0.500000 -0.500000 35 | v -0.500000 -0.500000 0.500000 36 | vt 1.0000 1.0000 37 | vt 0.0000 0.0000 38 | vt 1.0000 0.0000 39 | vn -1.0000 0.0000 0.0000 40 | s 1 41 | f 11/11/4 12/12/4 13/13/4 42 | g left 43 | v 0.500000 0.500000 -0.500000 44 | v 0.500000 0.500000 0.500000 45 | v 0.500000 -0.500000 0.500000 46 | v 0.500000 -0.500000 -0.500000 47 | v 0.500000 -0.500000 0.500000 48 | vt 1.0000 1.0000 49 | vt 0.0000 1.0000 50 | vt 0.0000 0.0000 51 | vt 1.0000 0.0000 52 | vn 1.0000 0.0000 0.0000 53 | s 1 54 | f 14/14/5 15/15/5 16/16/5 17/17/5 55 | l 15 18 56 | g back 57 | v 0.500000 0.500000 0.500000 58 | v 0.500000 -0.500000 0.500000 59 | v -0.500000 0.500000 0.500000 60 | v -0.500000 -0.500000 0.500000 61 | v 0.500000 -0.500000 0.500000 62 | vt 0.0000 0.0000 63 | vt 1.0000 0.0000 64 | vt 1.0000 1.0000 65 | vt 0.0000 1.0000 66 | vn 0.0000 -0.0000 1.0000 67 | s 1 68 | f 22/18/6 20/19/6 19/20/6 21/21/6 69 | l 22 23 70 | l 19 23 71 | g front 72 | v 0.500000 0.500000 -0.500000 73 | v 0.500000 -0.500000 -0.500000 74 | v -0.500000 -0.500000 -0.500000 75 | v -0.500000 -0.500000 -0.500000 76 | vt 0.0000 1.0000 77 | vt 0.0000 0.0000 78 | vt 1.0000 0.0000 79 | vn 0.0000 0.0000 -1.0000 80 | s 1 81 | f 24/22/7 25/23/7 27/24/7 82 | -------------------------------------------------------------------------------- /models/moreblocks_slope_inner_cut.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.500000 -0.500000 3 | v 0.500000 0.500000 0.500000 4 | v -0.500000 0.500000 0.500000 5 | v -0.500000 -0.500000 -0.500000 6 | vt 0.0000 0.0000 7 | vt 1.0000 0.0000 8 | vt 1.0000 1.0000 9 | vt 0.5000 0.0000 10 | vt 1.0000 1.0000 11 | vt 0.0000 1.0000 12 | vn 0.0000 1.0000 0.0000 13 | vn -0.5774 0.5774 -0.5774 14 | s 1 15 | f 3/1/1 2/2/1 1/3/1 16 | f 4/4/2 3/5/2 1/6/2 17 | g bottom 18 | v 0.500000 -0.500000 0.500000 19 | v 0.500000 -0.500000 -0.500000 20 | v -0.500000 -0.500000 0.500000 21 | v -0.500000 -0.500000 -0.500000 22 | vt 0.0000 0.0000 23 | vt 1.0000 0.0000 24 | vt 1.0000 1.0000 25 | vt 0.0000 1.0000 26 | vn 0.0000 -1.0000 -0.0000 27 | s 1 28 | f 6/7/3 5/8/3 7/9/3 8/10/3 29 | g right 30 | v -0.500000 -0.500000 0.500000 31 | v -0.500000 0.500000 0.500000 32 | v -0.500000 -0.500000 -0.500000 33 | vt 0.0000 0.0000 34 | vt 1.0000 0.0000 35 | vt 1.0000 1.0000 36 | vn -1.0000 0.0000 0.0000 37 | s 1 38 | f 11/11/4 9/12/4 10/13/4 39 | g left 40 | v 0.500000 -0.500000 0.500000 41 | v 0.500000 -0.500000 -0.500000 42 | v 0.500000 0.500000 -0.500000 43 | v 0.500000 0.500000 0.500000 44 | vt 0.0000 0.0000 45 | vt 1.0000 0.0000 46 | vt 1.0000 1.0000 47 | vt 0.0000 1.0000 48 | vn 1.0000 0.0000 0.0000 49 | s 1 50 | f 12/14/5 13/15/5 14/16/5 15/17/5 51 | g back 52 | v 0.500000 -0.500000 0.500000 53 | v 0.500000 0.500000 0.500000 54 | v -0.500000 -0.500000 0.500000 55 | v -0.500000 0.500000 0.500000 56 | vt 0.0000 0.0000 57 | vt 1.0000 0.0000 58 | vt 1.0000 1.0000 59 | vt 0.0000 1.0000 60 | vn 0.0000 -0.0000 1.0000 61 | s 1 62 | f 18/18/6 16/19/6 17/20/6 19/21/6 63 | g front 64 | v 0.500000 -0.500000 -0.500000 65 | v 0.500000 0.500000 -0.500000 66 | v -0.500000 -0.500000 -0.500000 67 | vt 0.0000 0.0000 68 | vt 1.0000 0.0000 69 | vt 0.0000 1.0000 70 | vn 0.0000 0.0000 -1.0000 71 | s 1 72 | f 20/22/7 22/23/7 21/24/7 73 | -------------------------------------------------------------------------------- /models/moreblocks_slope_inner_cut_half.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.000000 -0.500000 3 | v 0.500000 -0.000000 0.500000 4 | v -0.500000 -0.000000 0.500000 5 | v -0.500000 -0.500000 -0.500000 6 | vt 0.0000 0.0000 7 | vt 1.0000 0.0000 8 | vt 1.0000 1.0000 9 | vt 0.5000 0.0000 10 | vt 1.0000 1.0000 11 | vt 0.0000 1.0000 12 | vn 0.0000 1.0000 0.0000 13 | vn -0.4082 0.8165 -0.4082 14 | s 1 15 | f 3/1/1 2/2/1 1/3/1 16 | f 4/4/2 3/5/2 1/6/2 17 | g bottom 18 | v 0.500000 -0.500000 0.500000 19 | v 0.500000 -0.500000 -0.500000 20 | v -0.500000 -0.500000 0.500000 21 | v -0.500000 -0.500000 -0.500000 22 | vt 0.0000 0.0000 23 | vt 1.0000 0.0000 24 | vt 1.0000 1.0000 25 | vt 0.0000 1.0000 26 | vn 0.0000 -1.0000 -0.0000 27 | s 1 28 | f 6/7/3 5/8/3 7/9/3 8/10/3 29 | g right 30 | v -0.500000 -0.500000 0.500000 31 | v -0.500000 -0.000000 0.500000 32 | v -0.500000 -0.500000 -0.500000 33 | vt 0.0000 0.0000 34 | vt 1.0000 0.0000 35 | vt 1.0000 0.5000 36 | vn -1.0000 0.0000 0.0000 37 | s 1 38 | f 11/11/4 9/12/4 10/13/4 39 | g left 40 | v 0.500000 -0.500000 0.500000 41 | v 0.500000 -0.500000 -0.500000 42 | v 0.500000 0.000000 -0.500000 43 | v 0.500000 -0.000000 0.500000 44 | vt 0.0000 0.0000 45 | vt 1.0000 0.0000 46 | vt 1.0000 0.5000 47 | vt 0.0000 0.5000 48 | vn 1.0000 0.0000 0.0000 49 | s 1 50 | f 12/14/5 13/15/5 14/16/5 15/17/5 51 | g back 52 | v 0.500000 -0.500000 0.500000 53 | v 0.500000 -0.000000 0.500000 54 | v -0.500000 -0.500000 0.500000 55 | v -0.500000 -0.000000 0.500000 56 | vt 0.0000 0.0000 57 | vt 1.0000 0.0000 58 | vt 1.0000 0.5000 59 | vt 0.0000 0.5000 60 | vn 0.0000 -0.0000 1.0000 61 | s 1 62 | f 18/18/6 16/19/6 17/20/6 19/21/6 63 | g front 64 | v 0.500000 -0.500000 -0.500000 65 | v 0.500000 0.000000 -0.500000 66 | v -0.500000 -0.500000 -0.500000 67 | vt 0.0000 0.0000 68 | vt 1.0000 0.0000 69 | vt 0.0000 0.5000 70 | vn 0.0000 0.0000 -1.0000 71 | s 1 72 | f 20/22/7 22/23/7 21/24/7 73 | -------------------------------------------------------------------------------- /models/moreblocks_slope_inner_cut_half_raised.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.500000 -0.500000 3 | v 0.500000 0.500000 0.500000 4 | v -0.500000 0.500000 0.500000 5 | v -0.500000 0.000000 -0.500000 6 | vt 0.0000 0.0000 7 | vt 1.0000 0.0000 8 | vt 1.0000 1.0000 9 | vt 0.5000 0.0000 10 | vt 1.0000 1.0000 11 | vt 0.0000 1.0000 12 | vn 0.0000 1.0000 0.0000 13 | vn -0.4082 0.8165 -0.4082 14 | s 1 15 | f 3/1/1 2/2/1 1/3/1 16 | f 4/4/2 3/5/2 1/6/2 17 | g bottom 18 | v 0.500000 -0.500000 0.500000 19 | v 0.500000 -0.500000 -0.500000 20 | v -0.500000 -0.500000 0.500000 21 | v -0.500000 -0.500000 -0.500000 22 | vt 0.0000 0.0000 23 | vt 1.0000 0.0000 24 | vt 1.0000 1.0000 25 | vt 0.0000 1.0000 26 | vn 0.0000 -1.0000 -0.0000 27 | s 1 28 | f 6/7/3 5/8/3 7/9/3 8/10/3 29 | g right 30 | v -0.500000 -0.500000 0.500000 31 | v -0.500000 0.500000 0.500000 32 | v -0.500000 -0.500000 -0.500000 33 | v -0.500000 0.000000 -0.500000 34 | vt 0.0000 0.0000 35 | vt 1.0000 0.0000 36 | vt 1.0000 1.0000 37 | vt 0.0000 0.5000 38 | vn -1.0000 0.0000 0.0000 39 | s 1 40 | f 11/11/4 9/12/4 10/13/4 12/14/4 41 | g left 42 | v 0.500000 -0.500000 0.500000 43 | v 0.500000 -0.500000 -0.500000 44 | v 0.500000 0.500000 -0.500000 45 | v 0.500000 0.500000 0.500000 46 | vt 0.0000 0.0000 47 | vt 1.0000 0.0000 48 | vt 1.0000 1.0000 49 | vt 0.0000 1.0000 50 | vn 1.0000 0.0000 0.0000 51 | s 1 52 | f 13/15/5 14/16/5 15/17/5 16/18/5 53 | g back 54 | v 0.500000 -0.500000 0.500000 55 | v 0.500000 0.500000 0.500000 56 | v -0.500000 -0.500000 0.500000 57 | v -0.500000 0.500000 0.500000 58 | vt 0.0000 0.0000 59 | vt 1.0000 0.0000 60 | vt 1.0000 1.0000 61 | vt 0.0000 1.0000 62 | vn 0.0000 -0.0000 1.0000 63 | s 1 64 | f 19/19/6 17/20/6 18/21/6 20/22/6 65 | g front 66 | v 0.500000 -0.500000 -0.500000 67 | v 0.500000 0.500000 -0.500000 68 | v -0.500000 -0.500000 -0.500000 69 | v -0.500000 0.000000 -0.500000 70 | vt 0.0000 0.0000 71 | vt 1.0000 0.0000 72 | vt 1.0000 0.5000 73 | vt 0.0000 1.0000 74 | vn -0.0000 0.0000 -1.0000 75 | s 1 76 | f 21/23/7 23/24/7 24/25/7 22/26/7 77 | -------------------------------------------------------------------------------- /models/moreblocks_slope_inner_half.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.000000 -0.500000 3 | v 0.500000 -0.000000 0.500000 4 | v -0.500000 -0.000000 0.500000 5 | v -0.500000 -0.500000 -0.500000 6 | v -0.500000 -0.500000 -0.500000 7 | vt 1.0000 1.0000 8 | vt 0.0000 1.0000 9 | vt 1.0000 0.0000 10 | vt 1.0000 1.0000 11 | vt 0.0000 1.0000 12 | vt 0.0000 0.0000 13 | vn 0.0000 0.8944 -0.4472 14 | vn -0.4472 0.8944 0.0000 15 | s off 16 | f 3/1/1 2/2/1 4/3/1 17 | f 2/4/2 1/5/2 5/6/2 18 | g bottom 19 | v 0.500000 -0.500000 0.500000 20 | v 0.500000 -0.500000 -0.500000 21 | v -0.500000 -0.500000 -0.500000 22 | v -0.500000 -0.500000 0.500000 23 | v -0.500000 -0.500000 -0.500000 24 | v 0.500000 -0.500000 0.500000 25 | vt 1.0000 1.0000 26 | vt 0.0000 1.0000 27 | vt 0.0000 0.0000 28 | vt 1.0000 0.0000 29 | vn 0.0000 -1.0000 -0.0000 30 | s off 31 | f 10/7/3 7/8/3 6/9/3 9/10/3 32 | l 9 8 33 | l 11 9 34 | g right 35 | v -0.500000 -0.000000 0.500000 36 | v -0.500000 -0.500000 -0.500000 37 | v -0.500000 -0.500000 0.500000 38 | v -0.500000 -0.500000 -0.500000 39 | vt 1.0000 1.0000 40 | vt 0.0000 0.0000 41 | vt 1.0000 0.0000 42 | vn -1.0000 0.0000 0.0000 43 | s off 44 | f 12/11/4 13/12/4 14/13/4 45 | l 15 14 46 | g left 47 | v 0.500000 0.000000 -0.500000 48 | v 0.500000 -0.000000 0.500000 49 | v 0.500000 -0.500000 0.500000 50 | v 0.500000 -0.500000 -0.500000 51 | v 0.500000 -0.500000 0.500000 52 | vt 1.0000 1.0000 53 | vt 0.0000 1.0000 54 | vt 0.0000 0.0000 55 | vt 1.0000 0.0000 56 | vn 1.0000 0.0000 0.0000 57 | s off 58 | f 16/14/5 17/15/5 18/16/5 19/17/5 59 | l 20 17 60 | g back 61 | v 0.500000 -0.000000 0.500000 62 | v 0.500000 -0.500000 0.500000 63 | v -0.500000 -0.000000 0.500000 64 | v -0.500000 -0.500000 0.500000 65 | v 0.500000 -0.500000 0.500000 66 | vt 0.0000 0.0000 67 | vt 1.0000 0.0000 68 | vt 1.0000 1.0000 69 | vt 0.0000 1.0000 70 | vn 0.0000 -0.0000 1.0000 71 | s off 72 | f 24/18/6 22/19/6 21/20/6 23/21/6 73 | l 25 24 74 | l 25 21 75 | g front 76 | v 0.500000 0.000000 -0.500000 77 | v 0.500000 -0.500000 -0.500000 78 | v -0.500000 -0.500000 -0.500000 79 | v -0.500000 -0.500000 -0.500000 80 | vt 0.0000 1.0000 81 | vt 0.0000 0.0000 82 | vt 1.0000 0.0000 83 | vn 0.0000 0.0000 -1.0000 84 | s off 85 | f 26/22/7 27/23/7 29/24/7 86 | -------------------------------------------------------------------------------- /models/moreblocks_slope_inner_half_raised.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.500000 -0.500000 3 | v 0.500000 0.500000 0.500000 4 | v -0.500000 0.500000 0.500000 5 | v -0.500000 0.000000 -0.500000 6 | v -0.500000 0.000000 -0.500000 7 | vt 1.0000 1.0000 8 | vt 0.0000 1.0000 9 | vt 1.0000 0.0000 10 | vt 0.0000 0.0000 11 | vt 1.0000 0.0000 12 | vn 0.0000 0.8944 -0.4472 13 | vn -0.4472 0.8944 0.0000 14 | s off 15 | f 3/1/1 2/2/1 4/3/1 16 | f 2/2/2 1/4/2 5/5/2 17 | g bottom 18 | v 0.500000 -0.500000 0.500000 19 | v 0.500000 -0.500000 -0.500000 20 | v -0.500000 -0.500000 0.500000 21 | v -0.500000 -0.500000 -0.500000 22 | v 0.500000 -0.500000 0.500000 23 | vt 1.0000 1.0000 24 | vt 0.0000 1.0000 25 | vt 0.0000 0.0000 26 | vt 1.0000 0.0000 27 | vn 0.0000 -1.0000 -0.0000 28 | s off 29 | f 8/6/3 9/7/3 7/8/3 6/9/3 30 | l 10 8 31 | g right 32 | v -0.500000 0.500000 0.500000 33 | v -0.500000 0.000000 -0.500000 34 | v -0.500000 -0.500000 0.500000 35 | v -0.500000 0.000000 -0.500000 36 | v -0.500000 -0.500000 -0.500000 37 | vt 1.0000 0.0000 38 | vt 1.0000 1.0000 39 | vt 0.0000 0.5000 40 | vt 0.0000 0.0000 41 | vn -1.0000 0.0000 0.0000 42 | s off 43 | f 13/10/4 11/11/4 12/12/4 15/13/4 44 | g left 45 | v 0.500000 0.500000 -0.500000 46 | v 0.500000 0.500000 0.500000 47 | v 0.500000 -0.500000 0.500000 48 | v 0.500000 -0.500000 -0.500000 49 | v 0.500000 -0.500000 0.500000 50 | vt 1.0000 1.0000 51 | vt 0.0000 1.0000 52 | vt 0.0000 0.0000 53 | vt 1.0000 0.0000 54 | vn 1.0000 0.0000 0.0000 55 | s off 56 | f 16/14/5 17/15/5 18/16/5 19/17/5 57 | l 20 17 58 | g back 59 | v 0.500000 0.500000 0.500000 60 | v 0.500000 -0.500000 0.500000 61 | v -0.500000 0.500000 0.500000 62 | v -0.500000 -0.500000 0.500000 63 | v 0.500000 -0.500000 0.500000 64 | vt 0.0000 0.0000 65 | vt 1.0000 0.0000 66 | vt 1.0000 1.0000 67 | vt 0.0000 1.0000 68 | vn 0.0000 -0.0000 1.0000 69 | s off 70 | f 24/18/6 22/19/6 21/20/6 23/21/6 71 | l 25 21 72 | l 25 24 73 | g front 74 | v 0.500000 0.500000 -0.500000 75 | v 0.500000 -0.500000 -0.500000 76 | v -0.500000 0.000000 -0.500000 77 | v -0.500000 0.000000 -0.500000 78 | v -0.500000 -0.500000 -0.500000 79 | vt 1.0000 0.5000 80 | vt 0.0000 1.0000 81 | vt 0.0000 0.0000 82 | vt 1.0000 0.0000 83 | vn -0.0000 0.0000 -1.0000 84 | s off 85 | f 28/22/7 26/23/7 27/24/7 30/25/7 86 | l 29 26 87 | -------------------------------------------------------------------------------- /models/moreblocks_slope_outer.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v -0.500000 -0.500000 0.500000 3 | v -0.500000 -0.500000 -0.500000 4 | v 0.500000 -0.500000 -0.500000 5 | v 0.500000 0.500000 0.500000 6 | vt 1.0000 1.0000 7 | vt 0.0000 0.0000 8 | vt 1.0000 0.0000 9 | vt 0.0000 1.0000 10 | vt 0.0000 0.0000 11 | vt 1.0000 0.0000 12 | vn -0.7071 0.7071 0.0000 13 | vn 0.0000 0.7071 -0.7071 14 | s off 15 | f 4/1/1 2/2/1 1/3/1 16 | f 4/4/2 3/5/2 2/6/2 17 | g bottom 18 | v 0.500000 -0.500000 0.500000 19 | v -0.500000 -0.500000 0.500000 20 | v -0.500000 -0.500000 -0.500000 21 | v 0.500000 -0.500000 -0.500000 22 | vt 1.0000 1.0000 23 | vt 0.0000 1.0000 24 | vt 0.0000 0.0000 25 | vt 1.0000 0.0000 26 | vn 0.0000 -1.0000 -0.0000 27 | s off 28 | f 5/7/3 6/8/3 7/9/3 8/10/3 29 | g right 30 | v 0.500000 -0.500000 0.500000 31 | v -0.500000 -0.500000 0.500000 32 | v 0.500000 0.500000 0.500000 33 | vt 0.0000 0.0000 34 | vt 1.0000 0.0000 35 | vt 1.0000 1.0000 36 | vn 0.0000 -0.0000 1.0000 37 | s off 38 | f 10/11/4 9/12/4 11/13/4 39 | g left 40 | v 0.500000 -0.500000 0.500000 41 | v 0.500000 -0.500000 -0.500000 42 | v 0.500000 0.500000 0.500000 43 | vt 0.0000 1.0000 44 | vt 0.0000 0.0000 45 | vt 1.0000 0.0000 46 | vn 1.0000 0.0000 0.0000 47 | s off 48 | f 14/14/5 12/15/5 13/16/5 49 | -------------------------------------------------------------------------------- /models/moreblocks_slope_outer_cut.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 0.500000 0.500000 3 | v -0.500000 -0.500000 0.500000 4 | v 0.500000 -0.500000 -0.500000 5 | vt 1.0000 0.0000 6 | vt 0.5000 1.0000 7 | vt 0.0000 0.0000 8 | vn -0.5774 0.5774 -0.5774 9 | s off 10 | f 2/1/1 1/2/1 3/3/1 11 | g bottom 12 | v -0.500000 -0.500000 0.500000 13 | v 0.500000 -0.500000 0.500000 14 | v 0.500000 -0.500000 -0.500000 15 | vt 0.0000 0.0000 16 | vt 1.0000 0.0000 17 | vt 0.0000 1.0000 18 | vn 0.0000 -1.0000 -0.0000 19 | s off 20 | f 5/4/2 4/5/2 6/6/2 21 | g right 22 | v 0.500000 0.500000 0.500000 23 | v -0.500000 -0.500000 0.500000 24 | v 0.500000 -0.500000 0.500000 25 | vt 1.0000 1.0000 26 | vt 0.0000 0.0000 27 | vt 1.0000 0.0000 28 | vn 0.0000 -0.0000 1.0000 29 | s off 30 | f 7/7/3 8/8/3 9/9/3 31 | g left 32 | v 0.500000 0.500000 0.500000 33 | v 0.500000 -0.500000 0.500000 34 | v 0.500000 -0.500000 -0.500000 35 | vt 1.0000 0.0000 36 | vt 0.0000 1.0000 37 | vt 0.0000 0.0000 38 | vn 1.0000 0.0000 0.0000 39 | s off 40 | f 12/10/4 10/11/4 11/12/4 41 | -------------------------------------------------------------------------------- /models/moreblocks_slope_outer_cut_half.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v 0.500000 -0.000000 0.500000 3 | v -0.500000 -0.500000 0.500000 4 | v 0.500000 -0.500000 -0.500000 5 | vt 1.0000 0.0000 6 | vt 0.5000 1.0000 7 | vt 0.0000 0.0000 8 | vn -0.4082 0.8165 -0.4082 9 | s off 10 | f 2/1/1 1/2/1 3/3/1 11 | g bottom 12 | v -0.500000 -0.500000 0.500000 13 | v 0.500000 -0.500000 0.500000 14 | v 0.500000 -0.500000 -0.500000 15 | vt 0.0000 0.0000 16 | vt 1.0000 0.0000 17 | vt 0.0000 1.0000 18 | vn 0.0000 -1.0000 -0.0000 19 | s off 20 | f 5/4/2 4/5/2 6/6/2 21 | g right 22 | v 0.500000 -0.000000 0.500000 23 | v -0.500000 -0.500000 0.500000 24 | v 0.500000 -0.500000 0.500000 25 | vt 1.0000 0.5000 26 | vt 0.0000 0.0000 27 | vt 1.0000 0.0000 28 | vn 0.0000 -0.0000 1.0000 29 | s off 30 | f 7/7/3 8/8/3 9/9/3 31 | g left 32 | v 0.500000 -0.000000 0.500000 33 | v 0.500000 -0.500000 0.500000 34 | v 0.500000 -0.500000 -0.500000 35 | vt 1.0000 0.0000 36 | vt 0.0000 0.5000 37 | vt 0.0000 0.0000 38 | vn 1.0000 0.0000 0.0000 39 | s off 40 | f 12/10/4 10/11/4 11/12/4 41 | -------------------------------------------------------------------------------- /models/moreblocks_slope_outer_cut_half_raised.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v -0.500000 -0.000000 0.500000 3 | v 0.500000 0.500000 0.500000 4 | v 0.500000 0.000000 -0.500000 5 | vt 0.0000 0.0000 6 | vt 1.0000 0.0000 7 | vt 1.0000 1.0000 8 | vn -0.4082 0.8165 -0.4082 9 | s off 10 | f 1/1/1 2/2/1 3/3/1 11 | g bottom 12 | v -0.500000 -0.500000 0.500000 13 | v 0.500000 -0.500000 0.500000 14 | v 0.500000 -0.500000 -0.500000 15 | vt 0.0000 1.0000 16 | vt 1.0000 0.0000 17 | vt 1.0000 1.0000 18 | vn 0.0000 -1.0000 -0.0000 19 | s off 20 | f 4/4/2 6/5/2 5/6/2 21 | g right 22 | v -0.500000 -0.000000 0.500000 23 | v -0.500000 -0.500000 0.500000 24 | v 0.500000 -0.500000 -0.500000 25 | v 0.500000 0.000000 -0.500000 26 | vt 1.0000 0.0000 27 | vt 1.0000 0.5000 28 | vt 0.0000 0.5000 29 | vt 0.0000 0.0000 30 | vn -0.7071 0.0000 -0.7071 31 | s off 32 | f 8/7/3 7/8/3 10/9/3 9/10/3 33 | g left 34 | v 0.500000 -0.500000 0.500000 35 | v 0.500000 0.500000 0.500000 36 | v 0.500000 -0.500000 -0.500000 37 | v 0.500000 0.000000 -0.500000 38 | vt 0.0000 1.0000 39 | vt 0.0000 0.0000 40 | vt 1.0000 0.0000 41 | vt 1.0000 0.5000 42 | vn 1.0000 0.0000 0.0000 43 | s off 44 | f 12/11/4 11/12/4 13/13/4 14/14/4 45 | g back 46 | v -0.500000 -0.000000 0.500000 47 | v -0.500000 -0.500000 0.500000 48 | v 0.500000 -0.500000 0.500000 49 | v 0.500000 0.500000 0.500000 50 | vt 0.0000 0.5000 51 | vt 0.0000 0.0000 52 | vt 1.0000 0.0000 53 | vt 1.0000 1.0000 54 | vn -0.0000 -0.0000 1.0000 55 | s off 56 | f 15/15/5 16/16/5 17/17/5 18/18/5 57 | -------------------------------------------------------------------------------- /models/moreblocks_slope_outer_half.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v -0.500000 -0.500000 0.500000 3 | v -0.500000 -0.500000 -0.500000 4 | v 0.500000 -0.500000 -0.500000 5 | v 0.500000 -0.000000 0.500000 6 | vt 1.0000 0.0000 7 | vt 0.0000 1.0000 8 | vt 0.0000 0.0000 9 | vt 1.0000 0.0000 10 | vt 1.0000 1.0000 11 | vt 0.0000 0.0000 12 | vn 0.0000 0.8944 -0.4472 13 | vn -0.4472 0.8944 0.0000 14 | s off 15 | f 2/1/1 4/2/1 3/3/1 16 | f 1/4/2 4/5/2 2/6/2 17 | g bottom 18 | v -0.500000 -0.500000 0.500000 19 | v -0.500000 -0.500000 -0.500000 20 | v 0.500000 -0.500000 -0.500000 21 | v 0.500000 -0.500000 0.500000 22 | vt 1.0000 1.0000 23 | vt 0.0000 1.0000 24 | vt 0.0000 0.0000 25 | vt 1.0000 0.0000 26 | vn 0.0000 -1.0000 -0.0000 27 | s off 28 | f 5/7/3 6/8/3 7/9/3 8/10/3 29 | g right 30 | v -0.500000 -0.500000 0.500000 31 | v 0.500000 -0.500000 0.500000 32 | v 0.500000 -0.000000 0.500000 33 | vt 1.0000 0.5000 34 | vt 0.0000 0.0000 35 | vt 1.0000 0.0000 36 | vn 0.0000 -0.0000 1.0000 37 | s off 38 | f 11/11/4 9/12/4 10/13/4 39 | g left 40 | v 0.500000 -0.500000 -0.500000 41 | v 0.500000 -0.500000 0.500000 42 | v 0.500000 -0.000000 0.500000 43 | vt 1.0000 0.0000 44 | vt 0.0000 0.5000 45 | vt 0.0000 0.0000 46 | vn 1.0000 0.0000 0.0000 47 | s off 48 | f 12/14/5 14/15/5 13/16/5 49 | -------------------------------------------------------------------------------- /models/moreblocks_slope_outer_half_raised.obj: -------------------------------------------------------------------------------- 1 | g top 2 | v -0.500000 -0.000000 0.500000 3 | v 0.500000 0.500000 0.500000 4 | v 0.500000 0.000000 -0.500000 5 | v -0.500000 0.000000 -0.500000 6 | vt 1.0000 0.0000 7 | vt 0.0000 1.0000 8 | vt 0.0000 0.0000 9 | vt 1.0000 1.0000 10 | vn 0.0000 0.8944 -0.4472 11 | vn -0.4472 0.8944 0.0000 12 | s off 13 | f 4/1/1 2/2/1 3/3/1 14 | f 4/1/2 1/4/2 2/2/2 15 | g bottom 16 | v -0.500000 -0.500000 0.500000 17 | v 0.500000 -0.500000 0.500000 18 | v 0.500000 -0.500000 -0.500000 19 | v -0.500000 -0.500000 -0.500000 20 | vt 0.0000 1.0000 21 | vt 0.0000 0.0000 22 | vt 1.0000 0.0000 23 | vt 1.0000 1.0000 24 | vn 0.0000 -1.0000 -0.0000 25 | s off 26 | f 7/5/3 6/6/3 5/7/3 8/8/3 27 | g right 28 | v -0.500000 -0.000000 0.500000 29 | v -0.500000 -0.500000 0.500000 30 | v -0.500000 0.000000 -0.500000 31 | v -0.500000 -0.500000 -0.500000 32 | vt 1.0000 0.5000 33 | vt 0.0000 0.5000 34 | vt 0.0000 0.0000 35 | vt 1.0000 0.0000 36 | vn -1.0000 0.0000 0.0000 37 | s off 38 | f 9/9/4 11/10/4 12/11/4 10/12/4 39 | g left 40 | v 0.500000 -0.500000 0.500000 41 | v 0.500000 0.500000 0.500000 42 | v 0.500000 -0.500000 -0.500000 43 | v 0.500000 0.000000 -0.500000 44 | vt 0.0000 1.0000 45 | vt 0.0000 0.0000 46 | vt 1.0000 0.0000 47 | vt 1.0000 0.5000 48 | vn 1.0000 0.0000 0.0000 49 | s off 50 | f 14/13/5 13/14/5 15/15/5 16/16/5 51 | g back 52 | v -0.500000 -0.000000 0.500000 53 | v -0.500000 -0.500000 0.500000 54 | v 0.500000 -0.500000 0.500000 55 | v 0.500000 0.500000 0.500000 56 | vt 0.0000 0.5000 57 | vt 0.0000 0.0000 58 | vt 1.0000 0.0000 59 | vt 1.0000 1.0000 60 | vn -0.0000 -0.0000 1.0000 61 | s off 62 | f 17/17/6 18/18/6 19/19/6 20/20/6 63 | g front 64 | v 0.500000 -0.500000 -0.500000 65 | v 0.500000 0.000000 -0.500000 66 | v -0.500000 0.000000 -0.500000 67 | v -0.500000 -0.500000 -0.500000 68 | vt 0.0000 0.5000 69 | vt 0.0000 0.0000 70 | vt 1.0000 0.0000 71 | vt 1.0000 0.5000 72 | vn 0.0000 0.0000 -1.0000 73 | s off 74 | f 22/21/7 21/22/7 24/23/7 23/24/7 75 | -------------------------------------------------------------------------------- /nodes.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: node definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | local S = moreblocks.S 9 | 10 | local sound_dirt = moreblocks.node_sound_dirt_defaults() 11 | local sound_wood = moreblocks.node_sound_wood_defaults() 12 | local sound_stone = moreblocks.node_sound_stone_defaults() 13 | local sound_glass = moreblocks.node_sound_glass_defaults() 14 | local sound_leaves = moreblocks.node_sound_leaves_defaults() 15 | 16 | -- Don't break on 0.4.14 and earlier. 17 | local sound_metal = (moreblocks.node_sound_metal_defaults 18 | and moreblocks.node_sound_metal_defaults() or sound_stone) 19 | 20 | local function tile_tiles(name) 21 | local tex = "moreblocks_" ..name.. ".png" 22 | return {tex, tex, tex, tex, tex.. "^[transformR90", tex.. "^[transformR90"} 23 | end 24 | 25 | local function wood_tile_replace(itemstack, placer, pointed_thing) 26 | local substack 27 | if itemstack:get_name() == "moreblocks:wood_tile_flipped" then 28 | substack = ItemStack("moreblocks:wood_tile") 29 | else -- right, left, and down variants 30 | substack = ItemStack("moreblocks:wood_tile_offset") 31 | end 32 | local _, success = minetest.item_place(substack, placer, pointed_thing) 33 | if success then 34 | itemstack:take_item() 35 | end 36 | return itemstack 37 | end 38 | 39 | local deprecated = (" ("..S('Deprecated')..")") 40 | local nodes = { 41 | ["wood_tile"] = { 42 | description = S("Wooden Tile"), 43 | groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, 44 | paramtype2 = "facedir", 45 | place_param2 = 0, 46 | tiles = {"default_wood.png^moreblocks_wood_tile.png", 47 | "default_wood.png^moreblocks_wood_tile.png", 48 | "default_wood.png^moreblocks_wood_tile.png", 49 | "default_wood.png^moreblocks_wood_tile.png", 50 | "default_wood.png^moreblocks_wood_tile.png^[transformR90", 51 | "default_wood.png^moreblocks_wood_tile.png^[transformR90"}, 52 | sounds = sound_wood, 53 | }, 54 | ["wood_tile_flipped"] = { 55 | description = S("Wooden Tile") .. deprecated, 56 | tiles = {"default_wood.png^moreblocks_wood_tile.png^[transformR90", 57 | "default_wood.png^moreblocks_wood_tile.png^[transformR90", 58 | "default_wood.png^moreblocks_wood_tile.png^[transformR90", 59 | "default_wood.png^moreblocks_wood_tile.png^[transformR90", 60 | "default_wood.png^moreblocks_wood_tile.png^[transformR180", 61 | "default_wood.png^moreblocks_wood_tile.png^[transformR180"}, 62 | no_stairs = true, 63 | on_place = wood_tile_replace 64 | }, 65 | ["wood_tile_center"] = { 66 | description = S("Centered Wooden Tile"), 67 | groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, 68 | tiles = {"default_wood.png^moreblocks_wood_tile_center.png"}, 69 | sounds = sound_wood, 70 | }, 71 | ["wood_tile_full"] = { 72 | description = S("Full Wooden Tile"), 73 | groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, 74 | tiles = tile_tiles("wood_tile_full"), 75 | sounds = sound_wood, 76 | }, 77 | ["wood_tile_offset"] = { 78 | description = S("Offset Wooden Tile"), 79 | paramtype2 = "facedir", 80 | place_param2 = 0, 81 | groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3}, 82 | tiles = {"default_wood.png^moreblocks_wood_tile_offset.png"}, 83 | sounds = sound_wood, 84 | no_stairs = true, 85 | }, 86 | ["wood_tile_down"] = { 87 | description = S("Downwards Wooden Tile") .. deprecated, 88 | tiles = {"default_wood.png^[transformR180^moreblocks_wood_tile_offset.png^[transformR180"}, 89 | no_stairs = true, 90 | on_place = wood_tile_replace 91 | }, 92 | ["wood_tile_left"] = { 93 | description = S("Leftwards Wooden Tile") .. deprecated, 94 | tiles = {"default_wood.png^[transformR270^moreblocks_wood_tile_offset.png^[transformR270"}, 95 | no_stairs = true, 96 | on_place = wood_tile_replace 97 | }, 98 | ["wood_tile_right"] = { 99 | description = S("Rightwards Wooden Tile") .. deprecated, 100 | tiles = {"default_wood.png^[transformR90^moreblocks_wood_tile_offset.png^[transformR90"}, 101 | no_stairs = true, 102 | on_place = wood_tile_replace 103 | }, 104 | ["circle_stone_bricks"] = { 105 | description = S("Circle Stone Bricks"), 106 | groups = {stone = 1, cracky = 3}, 107 | sounds = sound_stone, 108 | }, 109 | ["grey_bricks"] = { 110 | description = S("Stone Bricks"), 111 | paramtype2 = "facedir", 112 | place_param2 = 0, 113 | groups = {cracky = 3}, 114 | sounds = sound_stone, 115 | }, 116 | ["coal_stone_bricks"] = { 117 | description = S("Coal Stone Bricks"), 118 | paramtype2 = "facedir", 119 | place_param2 = 0, 120 | groups = {stone = 1, cracky = 3}, 121 | sounds = sound_stone, 122 | }, 123 | ["iron_stone_bricks"] = { 124 | description = S("Iron Stone Bricks"), 125 | paramtype2 = "facedir", 126 | place_param2 = 0, 127 | groups = {stone = 1, cracky = 3}, 128 | sounds = sound_stone, 129 | }, 130 | ["stone_tile"] = { 131 | description = S("Stone Tile"), 132 | groups = {stone = 1, cracky = 3}, 133 | sounds = sound_stone, 134 | }, 135 | ["split_stone_tile"] = { 136 | description = S("Split Stone Tile"), 137 | paramtype2 = "facedir", 138 | place_param2 = 0, 139 | tiles = {"moreblocks_split_stone_tile_top.png", 140 | "moreblocks_split_stone_tile.png"}, 141 | groups = {stone = 1, cracky = 3}, 142 | sounds = sound_stone, 143 | }, 144 | ["checker_stone_tile"] = { 145 | description = S("Checker Stone Tile"), 146 | groups = {stone = 1, cracky = 3}, 147 | sounds = sound_stone, 148 | }, 149 | ["tar"] = { 150 | description = S("Tar"), 151 | groups = {cracky=2, tar_block=1}, 152 | sounds = sound_stone, 153 | }, 154 | ["dirt_compressed"] = { 155 | description = S("Compressed Dirt"), 156 | groups = {crumbly=2, compressed = 1}, 157 | sounds = sound_dirt, 158 | }, 159 | ["cobble_compressed"] = { 160 | description = S("Compressed Cobblestone"), 161 | groups = {cracky = 1, compressed = 1}, 162 | sounds = sound_stone, 163 | }, 164 | ["desert_cobble_compressed"] = { 165 | description = S("Compressed Desert Cobblestone"), 166 | groups = {cracky = 1, compressed = 1}, 167 | sounds = sound_stone, 168 | }, 169 | ["plankstone"] = { 170 | description = S("Plankstone"), 171 | paramtype2 = "facedir", 172 | place_param2 = 0, 173 | groups = {cracky = 3}, 174 | tiles = tile_tiles("plankstone"), 175 | sounds = sound_stone, 176 | }, 177 | ["iron_glass"] = { 178 | description = S("Iron Glass"), 179 | drawtype = "glasslike_framed_optional", 180 | tiles = {"default_glass.png^[colorize:#DEDEDE", "default_glass_detail.png^[colorize:#DEDEDE"}, 181 | use_texture_alpha = "clip", 182 | paramtype = "light", 183 | sunlight_propagates = true, 184 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 185 | sounds = sound_glass, 186 | }, 187 | ["coal_glass"] = { 188 | description = S("Coal Glass"), 189 | drawtype = "glasslike_framed_optional", 190 | tiles = {"default_glass.png^[colorize:#828282", "default_glass_detail.png^[colorize:#828282"}, 191 | use_texture_alpha = "clip", 192 | paramtype = "light", 193 | sunlight_propagates = true, 194 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 195 | sounds = sound_glass, 196 | }, 197 | ["clean_glass"] = { 198 | description = S("Clean Glass"), 199 | drawtype = "glasslike_framed_optional", 200 | tiles = {"moreblocks_clean_glass.png", "moreblocks_clean_glass_detail.png"}, 201 | use_texture_alpha = "clip", 202 | paramtype = "light", 203 | sunlight_propagates = true, 204 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 205 | sounds = sound_glass, 206 | }, 207 | ["cactus_brick"] = { 208 | description = S("Cactus Brick"), 209 | paramtype2 = "facedir", 210 | place_param2 = 0, 211 | groups = {cracky = 3}, 212 | sounds = sound_stone, 213 | }, 214 | ["cactus_checker"] = { 215 | description = S("Cactus Checker"), 216 | groups = {stone = 1, cracky = 3}, 217 | tiles = {"default_stone.png^moreblocks_cactus_checker.png", 218 | "default_stone.png^moreblocks_cactus_checker.png", 219 | "default_stone.png^moreblocks_cactus_checker.png", 220 | "default_stone.png^moreblocks_cactus_checker.png", 221 | "default_stone.png^moreblocks_cactus_checker.png^[transformR90", 222 | "default_stone.png^moreblocks_cactus_checker.png^[transformR90"}, 223 | sounds = sound_stone, 224 | }, 225 | ["empty_shelf"] = { 226 | description = S("Empty Shelf"), 227 | paramtype2 = "facedir", 228 | tiles = {"default_wood.png", "default_wood.png", "default_wood.png", 229 | "default_wood.png", "moreblocks_empty_shelf.png", "moreblocks_empty_shelf.png"}, 230 | groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3}, 231 | sounds = sound_wood, 232 | furnace_burntime = 15, 233 | no_stairs = true, 234 | }, 235 | ["coal_stone"] = { 236 | description = S("Coal Stone"), 237 | groups = {stone = 1, cracky = 3}, 238 | sounds = sound_stone, 239 | }, 240 | ["iron_stone"] = { 241 | description = S("Iron Stone"), 242 | groups = {stone = 1, cracky = 3}, 243 | sounds = sound_stone, 244 | }, 245 | ["coal_checker"] = { 246 | description = S("Coal Checker"), 247 | tiles = {"default_stone.png^moreblocks_coal_checker.png", 248 | "default_stone.png^moreblocks_coal_checker.png", 249 | "default_stone.png^moreblocks_coal_checker.png", 250 | "default_stone.png^moreblocks_coal_checker.png", 251 | "default_stone.png^moreblocks_coal_checker.png^[transformR90", 252 | "default_stone.png^moreblocks_coal_checker.png^[transformR90"}, 253 | groups = {stone = 1, cracky = 3}, 254 | sounds = sound_stone, 255 | }, 256 | ["iron_checker"] = { 257 | description = S("Iron Checker"), 258 | tiles = {"default_stone.png^moreblocks_iron_checker.png", 259 | "default_stone.png^moreblocks_iron_checker.png", 260 | "default_stone.png^moreblocks_iron_checker.png", 261 | "default_stone.png^moreblocks_iron_checker.png", 262 | "default_stone.png^moreblocks_iron_checker.png^[transformR90", 263 | "default_stone.png^moreblocks_iron_checker.png^[transformR90"}, 264 | groups = {stone = 1, cracky = 3}, 265 | sounds = sound_stone, 266 | }, 267 | ["trap_stone"] = { 268 | description = S("Trap Stone"), 269 | drawtype = "glasslike_framed", 270 | tiles = {"default_stone.png^moreblocks_trap_box.png"}, 271 | walkable = false, 272 | groups = {cracky = 3}, 273 | paramtype = "light", 274 | sounds = sound_stone, 275 | no_stairs = true, 276 | }, 277 | ["trap_desert_stone"] = { 278 | description = S("Trap Desert Stone"), 279 | drawtype = "glasslike_framed", 280 | tiles = {"default_desert_stone.png^moreblocks_trap_box.png"}, 281 | walkable = false, 282 | groups = {cracky = 3}, 283 | paramtype = "light", 284 | sounds = sound_stone, 285 | no_stairs = true, 286 | }, 287 | ["trap_glass"] = { 288 | description = S("Trap Glass"), 289 | drawtype = "glasslike_framed_optional", 290 | tiles = {"default_glass.png^moreblocks_trap_box_glass.png", "default_glass_detail.png"}, 291 | use_texture_alpha = "clip", 292 | paramtype = "light", 293 | sunlight_propagates = true, 294 | walkable = false, 295 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 296 | sounds = sound_glass, 297 | no_stairs = true, 298 | }, 299 | ["trap_obsidian_glass"] = { 300 | description = S("Trap Obsidian Glass"), 301 | drawtype = "glasslike_framed_optional", 302 | tiles = {"default_obsidian_glass.png^moreblocks_trap_box_glass.png", "default_obsidian_glass_detail.png"}, 303 | use_texture_alpha = "clip", 304 | paramtype = "light", 305 | sunlight_propagates = true, 306 | walkable = false, 307 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 308 | sounds = sound_glass, 309 | no_stairs = true, 310 | }, 311 | ["trap_obsidian"] = { 312 | description = S("Trap Obsidian"), 313 | drawtype = "glasslike_framed", 314 | tiles = {"default_obsidian.png^moreblocks_trap_box.png"}, 315 | walkable = false, 316 | groups = {cracky = 1, level = 2}, 317 | paramtype = "light", 318 | sounds = sound_stone, 319 | no_stairs = true, 320 | }, 321 | ["trap_clean_glass"] = { 322 | description = S("Trap Clean Glass"), 323 | drawtype = "glasslike_framed_optional", 324 | tiles = {"moreblocks_clean_glass.png^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png"}, 325 | use_texture_alpha = "clip", 326 | paramtype = "light", 327 | sunlight_propagates = true, 328 | walkable = false, 329 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 330 | sounds = sound_glass, 331 | no_stairs = true, 332 | }, 333 | ["trap_sandstone"] = { 334 | description = S("Trap Sandstone"), 335 | drawtype = "glasslike_framed", 336 | tiles = {"default_sandstone.png^moreblocks_trap_box.png"}, 337 | walkable = false, 338 | groups = {crumbly = 1, cracky = 3}, 339 | paramtype = "light", 340 | sounds = sound_stone, 341 | no_stairs = true, 342 | }, 343 | ["all_faces_tree"] = { 344 | description = S("All-faces Tree"), 345 | tiles = {"default_tree_top.png"}, 346 | groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, 347 | sounds = sound_wood, 348 | furnace_burntime = 30, 349 | }, 350 | ["all_faces_jungle_tree"] = { 351 | description = S("All-faces Jungle Tree"), 352 | tiles = {"default_jungletree_top.png"}, 353 | groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, 354 | sounds = sound_wood, 355 | furnace_burntime = 38, 356 | }, 357 | ["all_faces_pine_tree"] = { 358 | description = S("All-faces Pine Tree"), 359 | tiles = {"default_pine_tree_top.png"}, 360 | groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, 361 | sounds = sound_wood, 362 | furnace_burntime = 26, 363 | }, 364 | ["all_faces_acacia_tree"] = { 365 | description = S("All-faces Acacia Tree"), 366 | tiles = {"default_acacia_tree_top.png"}, 367 | groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, 368 | sounds = sound_wood, 369 | furnace_burntime = 34, 370 | }, 371 | ["all_faces_aspen_tree"] = { 372 | description = S("All-faces Aspen Tree"), 373 | tiles = {"default_aspen_tree_top.png"}, 374 | groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3}, 375 | sounds = sound_wood, 376 | furnace_burntime = 22, 377 | }, 378 | ["glow_glass"] = { 379 | description = S("Glow Glass"), 380 | drawtype = "glasslike_framed_optional", 381 | tiles = {"default_glass.png^[colorize:#E9CD61", "default_glass_detail.png^[colorize:#E9CD61"}, 382 | use_texture_alpha = "clip", 383 | paramtype = "light", 384 | sunlight_propagates = true, 385 | light_source = 11, 386 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 387 | sounds = sound_glass, 388 | }, 389 | ["clean_glow_glass"] = { 390 | description = S("Clean Glow Glass"), 391 | drawtype = "glasslike_framed_optional", 392 | tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, 393 | use_texture_alpha = "clip", 394 | paramtype = "light", 395 | sunlight_propagates = true, 396 | light_source = 11, 397 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 398 | sounds = sound_glass, 399 | }, 400 | ["trap_glow_glass"] = { 401 | description = S("Trap Glow Glass"), 402 | drawtype = "glasslike_framed_optional", 403 | tiles = {"default_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#E9CD61"}, 404 | use_texture_alpha = "clip", 405 | paramtype = "light", 406 | sunlight_propagates = true, 407 | light_source = 11, 408 | walkable = false, 409 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 410 | sounds = sound_glass, 411 | no_stairs = true, 412 | }, 413 | ["trap_clean_glow_glass"] = { 414 | description = S("Trap Clean Glow Glass"), 415 | drawtype = "glasslike_framed_optional", 416 | tiles = {"moreblocks_clean_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#E9CD61"}, 417 | use_texture_alpha = "clip", 418 | paramtype = "light", 419 | sunlight_propagates = true, 420 | light_source = 11, 421 | walkable = false, 422 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 423 | sounds = sound_glass, 424 | no_stairs = true, 425 | }, 426 | ["super_glow_glass"] = { 427 | description = S("Super Glow Glass"), 428 | drawtype = "glasslike_framed_optional", 429 | tiles = {"default_glass.png^[colorize:#FFFF78", "default_glass_detail.png^[colorize:#FFFF78"}, 430 | use_texture_alpha = "clip", 431 | paramtype = "light", 432 | sunlight_propagates = true, 433 | light_source = default.LIGHT_MAX, 434 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 435 | sounds = sound_glass, 436 | }, 437 | ["clean_super_glow_glass"] = { 438 | description = S("Clean Super Glow Glass"), 439 | drawtype = "glasslike_framed_optional", 440 | tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, 441 | use_texture_alpha = "clip", 442 | paramtype = "light", 443 | sunlight_propagates = true, 444 | light_source = default.LIGHT_MAX, 445 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 446 | sounds = sound_glass, 447 | }, 448 | ["trap_super_glow_glass"] = { 449 | description = S("Trap Super Glow Glass"), 450 | drawtype = "glasslike_framed_optional", 451 | tiles = {"default_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#FFFF78"}, 452 | use_texture_alpha = "clip", 453 | paramtype = "light", 454 | sunlight_propagates = true, 455 | light_source = default.LIGHT_MAX, 456 | walkable = false, 457 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 458 | sounds = sound_glass, 459 | no_stairs = true, 460 | }, 461 | ["trap_clean_super_glow_glass"] = { 462 | description = S("Trap Clean Super Glow Glass"), 463 | drawtype = "glasslike_framed_optional", 464 | tiles = {"moreblocks_clean_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "moreblocks_clean_glass_detail.png^[colorize:#FFFF78"}, 465 | use_texture_alpha = "clip", 466 | paramtype = "light", 467 | sunlight_propagates = true, 468 | light_source = default.LIGHT_MAX, 469 | walkable = false, 470 | groups = {cracky = 3, oddly_breakable_by_hand = 3}, 471 | sounds = sound_glass, 472 | no_stairs = true, 473 | }, 474 | ["rope"] = { 475 | description = S("Rope"), 476 | drawtype = "signlike", 477 | inventory_image = "moreblocks_rope.png", 478 | wield_image = "moreblocks_rope.png", 479 | paramtype = "light", 480 | sunlight_propagates = true, 481 | paramtype2 = "wallmounted", 482 | walkable = false, 483 | climbable = true, 484 | selection_box = {type = "wallmounted",}, 485 | groups = {snappy = 3, flammable = 2}, 486 | sounds = sound_leaves, 487 | no_stairs = true, 488 | }, 489 | ["copperpatina"] = { 490 | description = S("Copper Patina Block"), 491 | groups = {cracky = 1, level = 2}, 492 | sounds = sound_metal, 493 | }, 494 | } 495 | 496 | for name, def in pairs(nodes) do 497 | def.is_ground_content = def.is_ground_content == true 498 | def.tiles = def.tiles or {"moreblocks_" ..name.. ".png"} 499 | minetest.register_node("moreblocks:" ..name, def) 500 | minetest.register_alias(name, "moreblocks:" ..name) 501 | 502 | local tiles = def.tiles 503 | 504 | -- Use the primary tile for all sides of cut glasslike nodes. 505 | -- This makes them easier to see 506 | if 507 | #tiles > 1 and 508 | def.drawtype and 509 | def.drawtype == "glasslike_framed" or 510 | def.drawtype == "glasslike_framed_optional" 511 | then 512 | tiles = {def.tiles[1]} 513 | end 514 | 515 | 516 | if not def.no_stairs then 517 | local groups = {} 518 | for k, v in pairs(def.groups) do groups[k] = v end 519 | stairsplus:register_all("moreblocks", name, "moreblocks:" ..name, { 520 | description = def.description, 521 | groups = groups, 522 | tiles = tiles, 523 | sunlight_propagates = def.sunlight_propagates, 524 | light_source = def.light_source, 525 | sounds = def.sounds, 526 | }) 527 | end 528 | end 529 | 530 | -- Items 531 | 532 | minetest.register_craftitem("moreblocks:sweeper", { 533 | description = S("Sweeper"), 534 | inventory_image = "moreblocks_sweeper.png", 535 | }) 536 | -------------------------------------------------------------------------------- /ownership.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: ownership handling 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | local S = moreblocks.S 9 | 10 | function moreblocks.node_is_owned(pos, placer) 11 | local ownername = false 12 | if type(IsPlayerNodeOwner) == "function" then -- node_ownership mod 13 | if HasOwner(pos, placer) then -- returns true if the node is owned 14 | if not IsPlayerNodeOwner(pos, placer:get_player_name()) then 15 | if type(getLastOwner) == "function" then -- ...is an old version 16 | ownername = getLastOwner(pos) 17 | elseif type(GetNodeOwnerName) == "function" then -- ...is a recent version 18 | ownername = GetNodeOwnerName(pos) 19 | else 20 | ownername = S("someone") 21 | end 22 | end 23 | end 24 | 25 | elseif type(isprotect)=="function" then -- glomie's protection mod 26 | if not isprotect(5, pos, placer) then 27 | ownername = S("someone") 28 | end 29 | elseif type(protector)=="table" and type(protector.can_dig)=="function" then -- Zeg9's protection mod 30 | if not protector.can_dig(5, pos, placer) then 31 | ownername = S("someone") 32 | end 33 | end 34 | 35 | if ownername ~= false then 36 | minetest.chat_send_player( placer:get_player_name(), S("Sorry, @1 owns that spot.", ownername) ) 37 | return true 38 | else 39 | return false 40 | end 41 | end 42 | -------------------------------------------------------------------------------- /redefinitions.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: redefinitions of default stuff 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | local modname = minetest.get_current_modname() 9 | 10 | -- Redefine some of the default crafting recipes to be more productive 11 | 12 | -- Auxiliary function: take a recipe as returned by get_all_craft_recipes 13 | -- and turn it into a table that can be used to clear a craft or declare a new one 14 | local reconstruct_internal_craft = function(recipe) 15 | local recp = { 16 | { "", "", "" }, 17 | { "", "", "" }, 18 | { "", "", "" }, 19 | } 20 | local width = recipe.width 21 | for idx, item in pairs(recipe.items) do 22 | local row = math.ceil(idx / width) 23 | local col = idx - (row-1)*width 24 | recp[row][col] = item 25 | end 26 | return recp 27 | end 28 | 29 | -- Change the amount produced by recipe by apply func to the old amount 30 | local change_recipe_amount = function(product, recipe, func) 31 | -- if width == 0, this is a shapeless recipe, for which the 32 | -- internal and Lua API recipe table is the same. 33 | -- Otherwise we need to reconstruct the table for the shaped recipe. 34 | local shapeless = (recipe.width == 0) 35 | local recp = shapeless and recipe.items or reconstruct_internal_craft(recipe) 36 | 37 | local oldamount = tonumber(recipe.output:match(" [0-9]+$") or "1") 38 | 39 | local newamount = func(oldamount) 40 | 41 | -- remove old crafting recipe 42 | local redo = { recipe = recp } 43 | -- preserve shapelessness 44 | if shapeless then 45 | redo.type = "shapeless" 46 | end 47 | minetest.clear_craft(redo) 48 | 49 | -- new output 50 | redo.output = ("%s %d"):format(product, newamount) 51 | minetest.register_craft(redo) 52 | 53 | minetest.log("action", ("[MOD]%s: recipe for %s production: %d => %d"):format(modname, product, oldamount, newamount)) 54 | end 55 | 56 | local increase_craft_production = function(product, func) 57 | local recipes = minetest.get_all_craft_recipes(product) 58 | for _, r in pairs(recipes) do 59 | if r.type == "normal" or r.method == "normal" then 60 | change_recipe_amount(product, r, func) 61 | end 62 | end 63 | end 64 | 65 | -- Increase the crafting production according to the rules from the table, which is in the form: 66 | -- { 67 | -- { detector, amount changing function } 68 | -- { detector, amount changing function } 69 | -- } 70 | -- TODO: consider exporting this function to other mods 71 | local increase_craft_production_table = function(map_table) 72 | for product, _ in pairs(minetest.registered_items) do 73 | for _, tab in pairs(map_table) do 74 | local detector = tab[1] 75 | local func = tab[2] 76 | if detector(product) then 77 | increase_craft_production(product, func) 78 | -- only apply one boost 79 | break 80 | end 81 | end 82 | end 83 | end 84 | 85 | increase_craft_production_table({ 86 | { function(n) return n:match('^default:sign_wall') end, function(old) return old + 1 end }, 87 | { function(n) return n == 'default:paper' end, function(old) return old*4 end }, 88 | { function(n) return n:match('^carts:.*rail$') or n:match('^default:.*rail$') end, function(old) return old + old/2 end }, 89 | }) 90 | 91 | minetest.register_craft({ 92 | type = "toolrepair", 93 | additional_wear = -0.10, -- Tool repair buff (10% bonus instead of 2%). 94 | }) 95 | -------------------------------------------------------------------------------- /settingtypes.txt: -------------------------------------------------------------------------------- 1 | # If enabled, Stairs+ nodes will be displayed in the inventory when playing in creative mode. 2 | # Disabling this can speed up loading times for clients as fewer nodes need to be registered in the creative inventory. 3 | moreblocks.stairsplus_in_creative_inventory (Display Stairs+ nodes in creative inventory) bool true 4 | -------------------------------------------------------------------------------- /sounds.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: sound definitions 3 | 4 | Copyright © 2011-2021 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | local has_default_mod = minetest.get_modpath("default") 9 | for _, sound in ipairs({"dirt", "wood", "stone", "metal", "glass", "leaves"}) do 10 | -- use sound-function from default if available 11 | -- otherwise fall back to a no-op function (no sounds) 12 | local sound_function_name = "node_sound_" .. sound .. "_defaults" 13 | if has_default_mod then 14 | -- use default sounds 15 | moreblocks[sound_function_name] = default[sound_function_name] 16 | else 17 | -- no-op 18 | moreblocks[sound_function_name] = function() end 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /stairsplus/API.md: -------------------------------------------------------------------------------- 1 | # API documentation for Stairs+ 2 | 3 | * `stairsplus:register_all(modname, subname, recipeitem, fields)` 4 | Registers a stair, slab, panel, microblock, and any other types of 5 | nodes to be added in the future. 6 | This also registers the node with the circular saw. 7 | Example: 8 | ```lua 9 | stairsplus:register_all("moreblocks", "wood", "default:wood", { 10 | description = "Wooden", 11 | tiles = {"default_wood.png"}, 12 | groups = {oddly_breakabe_by_hand=1}, 13 | sounds = moreblocks.node_sound_wood_defaults(), 14 | }) 15 | ``` 16 | The following register only a particular type of microblock. 17 | You will probably never want to use them directly: 18 | 19 | * `stairsplus:register_stair(modname, subname, recipeitem, fields)` 20 | * `stairsplus:register_slab(modname, subname, recipeitem, fields)` 21 | * `stairsplus:register_panel(modname, subname, recipeitem, fields)` 22 | * `stairsplus:register_micro(modname, subname, recipeitem, fields)` 23 | * `stairsplus:register_slope(modname, subname, recipeitem, fields)` 24 | 25 | If you only want to register a subset of stairsplus nodes, 26 | you can use the `stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields)` function. 27 | The subset table should have the following format: 28 | 29 | ```lua 30 | local subset = { 31 | { "micro", "" }, 32 | { "micro", "_1" }, 33 | { "micro", "_2" }, 34 | { "micro", "_4" }, 35 | { "micro", "_12" }, 36 | { "micro", "_14" }, 37 | { "micro", "_15" }, 38 | { "panel", "" }, 39 | { "panel", "_1" }, 40 | { "panel", "_2" }, 41 | { "panel", "_4" }, 42 | { "panel", "_12" }, 43 | { "panel", "_14" }, 44 | { "panel", "_15" }, 45 | { "slab", "" }, 46 | { "slab", "_quarter" }, 47 | { "slab", "_three_quarter" }, 48 | { "slab", "_1" }, 49 | { "slab", "_2" }, 50 | { "slab", "_14" }, 51 | { "slab", "_15" }, 52 | { "slab", "_two_sides" }, 53 | { "slab", "_three_sides" }, 54 | { "slab", "_three_sides_u" }, 55 | { "slope", "" }, 56 | { "slope", "_half" }, 57 | { "slope", "_half_raised" }, 58 | { "slope", "_inner" }, 59 | { "slope", "_inner_half" }, 60 | { "slope", "_inner_half_raised" }, 61 | { "slope", "_inner_cut" }, 62 | { "slope", "_inner_cut_half" }, 63 | { "slope", "_inner_cut_half_raised" }, 64 | { "slope", "_outer" }, 65 | { "slope", "_outer_half" }, 66 | { "slope", "_outer_half_raised" }, 67 | { "slope", "_outer_cut" }, 68 | { "slope", "_outer_cut_half" }, 69 | { "slope", "_outer_cut_half_raised" }, 70 | { "slope", "_cut" }, 71 | { "stair", "" }, 72 | { "stair", "_half" }, 73 | { "stair", "_right_half" }, 74 | { "stair", "_inner" }, 75 | { "stair", "_outer" }, 76 | { "stair", "_alt" }, 77 | { "stair", "_alt_1" }, 78 | { "stair", "_alt_2" }, 79 | { "stair", "_alt_4" }, 80 | } 81 | ``` 82 | You can remove entries as needed. 83 | -------------------------------------------------------------------------------- /stairsplus/common.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: registrations 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | local S = moreblocks.S 9 | 10 | local descriptions = { 11 | ["micro"] = "Microblock", 12 | ["slab"] = "Slab", 13 | ["slope"] = "Slope", 14 | ["panel"] = "Panel", 15 | ["stair"] = "Stairs", 16 | } 17 | 18 | -- Extends the standad rotate_node placement so that it takes into account 19 | -- the side (top/bottom or left/right) of the face being pointed at. 20 | -- As with the standard rotate_node, sneak can be used to force the perpendicular 21 | -- placement (wall placement on floor/ceiling, floor/ceiling placement on walls). 22 | -- Additionally, the aux / sprint / special key can be used to place the node 23 | -- as if from the opposite side. 24 | -- 25 | -- When placing a node next to one of the same category (e.g. slab to slab or 26 | -- stair to stair), the default placement (regardless of sneak) is to copy the 27 | -- under node's param2, flipping if placed above or below it. The aux key disable 28 | -- this behavior. 29 | local wall_right_dirmap = {9, 18, 7, 12} 30 | local wall_left_dirmap = {11, 16, 5, 14} 31 | local ceil_dirmap = {20, 23, 22, 21} 32 | 33 | -- extract the stairsplus category from a node name 34 | -- assumes the name is in the form mod_name:category_original_ndoe_name 35 | local function name_to_category(name) 36 | local colon = name:find(":") or 0 37 | colon = colon + 1 38 | local under = name:find("_", colon) 39 | return name:sub(colon, under) 40 | end 41 | 42 | stairsplus.rotate_node_aux = function(itemstack, placer, pointed_thing) 43 | local sneak = placer and placer:get_player_control().sneak 44 | local aux = placer and placer:get_player_control().aux1 45 | 46 | -- category for what we are placing 47 | local item_prefix = name_to_category(itemstack:get_name()) 48 | -- category for what we are placing against 49 | local under = pointed_thing.under 50 | local under_node = minetest.get_node(under) 51 | local under_prefix = under_node and name_to_category(under_node.name) 52 | 53 | local same_cat = item_prefix == under_prefix 54 | 55 | -- standard (floor) facedir, also used for sneak placement against the lower half of the wall 56 | local p2 = placer and minetest.dir_to_facedir(placer:get_look_dir()) or 0 57 | 58 | -- check which face and which quadrant we are interested in 59 | -- this is used both to check if we're handling parallel placement in the same-category case, 60 | -- and in general for sneak placement 61 | local face_pos = minetest.pointed_thing_to_face_pos(placer, pointed_thing) 62 | local face_off = vector.subtract(face_pos, under) 63 | 64 | -- we cannot trust face_off to tell us the correct directionif the 65 | -- under node has a non-standard shape, so use the distance between under and above 66 | local wallmounted = minetest.dir_to_wallmounted(vector.subtract(pointed_thing.above, under)) 67 | 68 | if same_cat and not aux then 69 | p2 = under_node.param2 70 | -- flip if placing above or below an upright or upside-down node 71 | -- TODO should we also flip when placing next to a side-mounted node? 72 | if wallmounted < 2 then 73 | if p2 < 4 then 74 | p2 = (p2 + 2) % 4 75 | p2 = ceil_dirmap[p2 + 1] 76 | elseif p2 > 19 then 77 | p2 = ceil_dirmap[p2 - 19] - 20 78 | p2 = (p2 + 2) % 4 79 | end 80 | end 81 | else 82 | -- for same-cat placement, aux is used to disable param2 copying 83 | if same_cat then 84 | aux = not aux 85 | end 86 | 87 | local remap = nil 88 | 89 | -- standard placement against the wall 90 | local use_wallmap = (wallmounted > 1 and not sneak) or (wallmounted < 2 and sneak) 91 | 92 | -- standard placement against the ceiling, or sneak placement against the upper half of the wall 93 | local use_ceilmap = wallmounted == 1 and not sneak 94 | use_ceilmap = use_ceilmap or (wallmounted > 1 and sneak and face_off.y > 0) 95 | 96 | if use_wallmap then 97 | local left = (p2 == 0 and face_off.x < 0) or 98 | (p2 == 1 and face_off.z > 0) or 99 | (p2 == 2 and face_off.x > 0) or 100 | (p2 == 3 and face_off.z < 0) 101 | if aux then 102 | left = not left 103 | end 104 | remap = left and wall_left_dirmap or wall_right_dirmap 105 | elseif use_ceilmap then 106 | remap = ceil_dirmap 107 | end 108 | 109 | if aux then 110 | p2 = (p2 + 2) % 4 111 | end 112 | 113 | if remap then 114 | p2 = remap[p2 + 1] 115 | end 116 | end 117 | 118 | return minetest.item_place(itemstack, placer, pointed_thing, p2) 119 | end 120 | 121 | stairsplus.register_single = function(category, alternate, info, modname, subname, recipeitem, fields) 122 | 123 | local src_def = minetest.registered_nodes[recipeitem] or {} 124 | local desc_base = S("@1 "..descriptions[category], fields.description) 125 | local def = {} 126 | 127 | if category ~= "slab" then 128 | def = table.copy(info) 129 | end 130 | 131 | -- copy fields to def 132 | for k, v in pairs(fields) do 133 | def[k] = v 134 | end 135 | 136 | def.is_ground_content = def.is_ground_content == true 137 | def.drawtype = "nodebox" 138 | def.paramtype = "light" 139 | def.paramtype2 = def.paramtype2 or "facedir" 140 | if def.use_texture_alpha == nil then 141 | def.use_texture_alpha = src_def.use_texture_alpha 142 | end 143 | 144 | -- This makes node rotation work on placement 145 | def.place_param2 = nil 146 | 147 | -- Darken light sources slightly to make up for their smaller visual size 148 | def.light_source = math.max(0, (def.light_source or 0) - 1) 149 | def.groups = stairsplus:prepare_groups(fields.groups) 150 | 151 | if category == "slab" then 152 | if minetest.global_exists("place_rotated") then 153 | def.on_place = place_rotated.slab 154 | else 155 | def.on_place = stairsplus.rotate_node_aux 156 | end 157 | if type(info) ~= "table" then 158 | def.node_box = { 159 | type = "fixed", 160 | fixed = {-0.5, -0.5, -0.5, 0.5, (info/16)-0.5, 0.5}, 161 | } 162 | def.description = ("%s (%d/16)"):format(desc_base, info) 163 | else 164 | def.node_box = { 165 | type = "fixed", 166 | fixed = info, 167 | } 168 | def.description = desc_base .. alternate:gsub("_", " "):gsub("(%a)(%S*)", function(a, b) return a:upper() .. b end) 169 | end 170 | else 171 | def.on_place = stairsplus.rotate_node_aux 172 | def.description = desc_base 173 | if category == "slope" then 174 | def.drawtype = "mesh" 175 | elseif category == "stair" and alternate == "" then 176 | def.groups.stair = 1 177 | end 178 | end 179 | 180 | if fields.drop and (type(fields.drop) ~= "table") then 181 | def.drop = modname.. ":" .. category .. "_" .. fields.drop .. alternate 182 | end 183 | 184 | minetest.register_node(":" ..modname.. ":" .. category .. "_" .. subname .. alternate, def) 185 | stairsplus.register_recipes(category, alternate, modname, subname, recipeitem) 186 | end 187 | -------------------------------------------------------------------------------- /stairsplus/custom.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: microblock definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | --[[ 9 | Subset table should have the following format: (You can remove entries as needed.) 10 | 11 | local subset = { 12 | { "micro", "" }, 13 | { "micro", "_1" }, 14 | { "micro", "_2" }, 15 | { "micro", "_4" }, 16 | { "micro", "_12" }, 17 | { "micro", "_14" }, 18 | { "micro", "_15" }, 19 | { "panel", "" }, 20 | { "panel", "_1" }, 21 | { "panel", "_2" }, 22 | { "panel", "_4" }, 23 | { "panel", "_12" }, 24 | { "panel", "_14" }, 25 | { "panel", "_15" }, 26 | { "slab", "" }, 27 | { "slab", "_quarter" }, 28 | { "slab", "_three_quarter" }, 29 | { "slab", "_1" }, 30 | { "slab", "_2" }, 31 | { "slab", "_14" }, 32 | { "slab", "_15" }, 33 | { "slab", "_two_sides" }, 34 | { "slab", "_three_sides" }, 35 | { "slab", "_three_sides_u" }, 36 | { "slope", "" }, 37 | { "slope", "_half" }, 38 | { "slope", "_half_raised" }, 39 | { "slope", "_inner" }, 40 | { "slope", "_inner_half" }, 41 | { "slope", "_inner_half_raised" }, 42 | { "slope", "_inner_cut" }, 43 | { "slope", "_inner_cut_half" }, 44 | { "slope", "_inner_cut_half_raised" }, 45 | { "slope", "_outer" }, 46 | { "slope", "_outer_half" }, 47 | { "slope", "_outer_half_raised" }, 48 | { "slope", "_outer_cut" }, 49 | { "slope", "_outer_cut_half" }, 50 | { "slope", "_outer_cut_half_raised" }, 51 | { "slope", "_cut" }, 52 | { "stair", "" }, 53 | { "stair", "_half" }, 54 | { "stair", "_right_half" }, 55 | { "stair", "_inner" }, 56 | { "stair", "_outer" }, 57 | { "stair", "_alt" }, 58 | { "stair", "_alt_1" }, 59 | { "stair", "_alt_2" }, 60 | { "stair", "_alt_4" }, 61 | } 62 | --]] 63 | 64 | -- luacheck: no unused 65 | local function register_custom_subset(subset, modname, subname, recipeitem, groups, images, description, drop, light) 66 | stairsplus:register_custom_subset(subset, modname, subname, recipeitem, { 67 | groups = groups, 68 | tiles = images, 69 | description = description, 70 | drop = drop, 71 | light_source = light, 72 | sounds = moreblocks.node_sound_stone_defaults(), 73 | }) 74 | end 75 | 76 | function stairsplus:register_custom_subset_alias(subset, modname_old, subname_old, modname_new, subname_new) 77 | local subset_copy = table.copy(subset) 78 | for k, v in pairs(subset_copy) do 79 | minetest.register_alias(modname_old .. ":" .. v[1] .. "_" .. subname_old .. v[2], modname_new .. ":" .. v[1] .. "_" .. subname_new .. v[2]) 80 | end 81 | end 82 | 83 | function stairsplus:register_custom_subset_alias_force(subset, modname_old, subname_old, modname_new, subname_new) 84 | local subset_copy = table.copy(subset) 85 | for k, v in pairs(subset_copy) do 86 | minetest.register_alias_force(modname_old .. ":" .. v[1] .. "_" .. subname_old .. v[2], modname_new .. ":" .. v[1] .. "_" .. subname_new .. v[2]) 87 | end 88 | end 89 | 90 | function stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields) 91 | local subset_copy = table.copy(subset) 92 | for k, v in pairs(subset_copy) do 93 | stairsplus.register_single(v[1], v[2], stairsplus.defs[v[1]][v[2]], modname, subname, recipeitem, fields) 94 | end 95 | 96 | circular_saw.known_nodes[recipeitem] = {modname, subname} 97 | circular_saw.microblocks[modname.. ":micro_" .. subname] = recipeitem 98 | end 99 | -------------------------------------------------------------------------------- /stairsplus/defs.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: registrations 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | 9 | local box_slope = { 10 | type = "fixed", 11 | fixed = { 12 | {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, 13 | {-0.5, -0.25, -0.25, 0.5, 0, 0.5}, 14 | {-0.5, 0, 0, 0.5, 0.25, 0.5}, 15 | {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5} 16 | } 17 | } 18 | 19 | local box_slope_half = { 20 | type = "fixed", 21 | fixed = { 22 | {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, 23 | {-0.5, -0.375, -0.25, 0.5, -0.25, 0.5}, 24 | {-0.5, -0.25, 0, 0.5, -0.125, 0.5}, 25 | {-0.5, -0.125, 0.25, 0.5, 0, 0.5}, 26 | } 27 | } 28 | 29 | local box_slope_half_raised = { 30 | type = "fixed", 31 | fixed = { 32 | {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5}, 33 | {-0.5, 0.125, -0.25, 0.5, 0.25, 0.5}, 34 | {-0.5, 0.25, 0, 0.5, 0.375, 0.5}, 35 | {-0.5, 0.375, 0.25, 0.5, 0.5, 0.5}, 36 | } 37 | } 38 | 39 | --============================================================== 40 | 41 | local box_slope_inner = { 42 | type = "fixed", 43 | fixed = { 44 | {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, 45 | {-0.5, -0.5, -0.25, 0.5, 0, 0.5}, 46 | {-0.5, -0.5, -0.5, 0.25, 0, 0.5}, 47 | {-0.5, 0, -0.5, 0, 0.25, 0.5}, 48 | {-0.5, 0, 0, 0.5, 0.25, 0.5}, 49 | {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}, 50 | {-0.5, 0.25, -0.5, -0.25, 0.5, 0.5}, 51 | } 52 | } 53 | 54 | local box_slope_inner_half = { 55 | type = "fixed", 56 | fixed = { 57 | {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, 58 | {-0.5, -0.375, -0.25, 0.5, -0.25, 0.5}, 59 | {-0.5, -0.375, -0.5, 0.25, -0.25, 0.5}, 60 | {-0.5, -0.25, -0.5, 0, -0.125, 0.5}, 61 | {-0.5, -0.25, 0, 0.5, -0.125, 0.5}, 62 | {-0.5, -0.125, 0.25, 0.5, 0, 0.5}, 63 | {-0.5, -0.125, -0.5, -0.25, 0, 0.5}, 64 | } 65 | } 66 | 67 | local box_slope_inner_half_raised = { 68 | type = "fixed", 69 | fixed = { 70 | {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5}, 71 | {-0.5, 0.125, -0.25, 0.5, 0.25, 0.5}, 72 | {-0.5, 0.125, -0.5, 0.25, 0.25, 0.5}, 73 | {-0.5, 0.25, -0.5, 0, 0.375, 0.5}, 74 | {-0.5, 0.25, 0, 0.5, 0.375, 0.5}, 75 | {-0.5, 0.375, 0.25, 0.5, 0.5, 0.5}, 76 | {-0.5, 0.375, -0.5, -0.25, 0.5, 0.5}, 77 | } 78 | } 79 | 80 | --============================================================== 81 | 82 | local box_slope_outer = { 83 | type = "fixed", 84 | fixed = { 85 | {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5}, 86 | {-0.5, -0.25, -0.25, 0.25, 0, 0.5}, 87 | {-0.5, 0, 0, 0, 0.25, 0.5}, 88 | {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5} 89 | } 90 | } 91 | 92 | local box_slope_outer_half = { 93 | type = "fixed", 94 | fixed = { 95 | {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5}, 96 | {-0.5, -0.375, -0.25, 0.25, -0.25, 0.5}, 97 | {-0.5, -0.25, 0, 0, -0.125, 0.5}, 98 | {-0.5, -0.125, 0.25, -0.25, 0, 0.5} 99 | } 100 | } 101 | 102 | local box_slope_outer_half_raised = { 103 | type = "fixed", 104 | fixed = { 105 | {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5}, 106 | {-0.5, 0.125, -0.25, 0.25, 0.25, 0.5}, 107 | {-0.5, 0.25, 0, 0, 0.375, 0.5}, 108 | {-0.5, 0.375, 0.25, -0.25, 0.5, 0.5} 109 | } 110 | } 111 | 112 | stairsplus.defs = { 113 | ["micro"] = { 114 | [""] = { 115 | node_box = { 116 | type = "fixed", 117 | fixed = {-0.5, -0.5, 0, 0, 0, 0.5}, 118 | }, 119 | }, 120 | ["_1"] = { 121 | node_box = { 122 | type = "fixed", 123 | fixed = {-0.5, -0.5, 0, 0, -0.4375, 0.5}, 124 | }, 125 | }, 126 | ["_2"] = { 127 | node_box = { 128 | type = "fixed", 129 | fixed = {-0.5, -0.5, 0, 0, -0.375, 0.5}, 130 | }, 131 | }, 132 | ["_4"] = { 133 | node_box = { 134 | type = "fixed", 135 | fixed = {-0.5, -0.5, 0, 0, -0.25, 0.5}, 136 | }, 137 | }, 138 | ["_12"] = { 139 | node_box = { 140 | type = "fixed", 141 | fixed = {-0.5, -0.5, 0, 0, 0.25, 0.5}, 142 | }, 143 | }, 144 | ["_14"] = { 145 | node_box = { 146 | type = "fixed", 147 | fixed = {-0.5, -0.5, 0, 0, 0.375, 0.5}, 148 | }, 149 | }, 150 | ["_15"] = { 151 | node_box = { 152 | type = "fixed", 153 | fixed = {-0.5, -0.5, 0, 0, 0.4375, 0.5}, 154 | }, 155 | } 156 | }, 157 | ["panel"] = { 158 | [""] = { 159 | node_box = { 160 | type = "fixed", 161 | fixed = {-0.5, -0.5, 0, 0.5, 0, 0.5}, 162 | }, 163 | }, 164 | ["_1"] = { 165 | node_box = { 166 | type = "fixed", 167 | fixed = {-0.5, -0.5, 0, 0.5, -0.4375, 0.5}, 168 | }, 169 | }, 170 | ["_2"] = { 171 | node_box = { 172 | type = "fixed", 173 | fixed = {-0.5, -0.5, 0, 0.5, -0.375, 0.5}, 174 | }, 175 | }, 176 | ["_4"] = { 177 | node_box = { 178 | type = "fixed", 179 | fixed = {-0.5, -0.5, 0, 0.5, -0.25, 0.5}, 180 | }, 181 | }, 182 | ["_12"] = { 183 | node_box = { 184 | type = "fixed", 185 | fixed = {-0.5, -0.5, 0, 0.5, 0.25, 0.5}, 186 | }, 187 | }, 188 | ["_14"] = { 189 | node_box = { 190 | type = "fixed", 191 | fixed = {-0.5, -0.5, 0, 0.5, 0.375, 0.5}, 192 | }, 193 | }, 194 | ["_15"] = { 195 | node_box = { 196 | type = "fixed", 197 | fixed = {-0.5, -0.5, 0, 0.5, 0.4375, 0.5}, 198 | }, 199 | } 200 | }, 201 | ["slab"] = { 202 | [""] = 8, 203 | ["_quarter"] = 4, 204 | ["_three_quarter"] = 12, 205 | ["_1"] = 1, 206 | ["_2"] = 2, 207 | ["_14"] = 14, 208 | ["_15"] = 15, 209 | ["_two_sides"] = { 210 | { -0.5, -0.5, -0.5, 0.5, -7/16, 7/16 }, 211 | { -0.5, -0.5, 7/16, 0.5, 0.5, 0.5 } 212 | }, 213 | ["_three_sides"] = { 214 | { -7/16, -0.5, -0.5, 0.5, -7/16, 7/16 }, 215 | { -7/16, -0.5, 7/16, 0.5, 0.5, 0.5 }, 216 | { -0.5, -0.5, -0.5, -7/16, 0.5, 0.5 } 217 | }, 218 | ["_three_sides_u"] = { 219 | { -0.5, -0.5, -0.5, 0.5, 0.5, -7/16 }, 220 | { -0.5, -0.5, -7/16, 0.5, -7/16, 7/16 }, 221 | { -0.5, -0.5, 7/16, 0.5, 0.5, 0.5 } 222 | } 223 | }, 224 | ["slope"] = { 225 | [""] = { 226 | mesh = "moreblocks_slope.obj", 227 | collision_box = box_slope, 228 | selection_box = box_slope, 229 | 230 | }, 231 | ["_half"] = { 232 | mesh = "moreblocks_slope_half.obj", 233 | collision_box = box_slope_half, 234 | selection_box = box_slope_half, 235 | }, 236 | ["_half_raised"] = { 237 | mesh = "moreblocks_slope_half_raised.obj", 238 | collision_box = box_slope_half_raised, 239 | selection_box = box_slope_half_raised, 240 | }, 241 | 242 | --============================================================== 243 | 244 | ["_inner"] = { 245 | mesh = "moreblocks_slope_inner.obj", 246 | collision_box = box_slope_inner, 247 | selection_box = box_slope_inner, 248 | }, 249 | ["_inner_half"] = { 250 | mesh = "moreblocks_slope_inner_half.obj", 251 | collision_box = box_slope_inner_half, 252 | selection_box = box_slope_inner_half, 253 | }, 254 | ["_inner_half_raised"] = { 255 | mesh = "moreblocks_slope_inner_half_raised.obj", 256 | collision_box = box_slope_inner_half_raised, 257 | selection_box = box_slope_inner_half_raised, 258 | }, 259 | 260 | --============================================================== 261 | 262 | ["_inner_cut"] = { 263 | mesh = "moreblocks_slope_inner_cut.obj", 264 | collision_box = box_slope_inner, 265 | selection_box = box_slope_inner, 266 | }, 267 | ["_inner_cut_half"] = { 268 | mesh = "moreblocks_slope_inner_cut_half.obj", 269 | collision_box = box_slope_inner_half, 270 | selection_box = box_slope_inner_half, 271 | }, 272 | ["_inner_cut_half_raised"] = { 273 | mesh = "moreblocks_slope_inner_cut_half_raised.obj", 274 | collision_box = box_slope_inner_half_raised, 275 | selection_box = box_slope_inner_half_raised, 276 | }, 277 | 278 | --============================================================== 279 | 280 | ["_outer"] = { 281 | mesh = "moreblocks_slope_outer.obj", 282 | collision_box = box_slope_outer, 283 | selection_box = box_slope_outer, 284 | }, 285 | ["_outer_half"] = { 286 | mesh = "moreblocks_slope_outer_half.obj", 287 | collision_box = box_slope_outer_half, 288 | selection_box = box_slope_outer_half, 289 | }, 290 | ["_outer_half_raised"] = { 291 | mesh = "moreblocks_slope_outer_half_raised.obj", 292 | collision_box = box_slope_outer_half_raised, 293 | selection_box = box_slope_outer_half_raised, 294 | }, 295 | 296 | --============================================================== 297 | 298 | ["_outer_cut"] = { 299 | mesh = "moreblocks_slope_outer_cut.obj", 300 | collision_box = box_slope_outer, 301 | selection_box = box_slope_outer, 302 | }, 303 | ["_outer_cut_half"] = { 304 | mesh = "moreblocks_slope_outer_cut_half.obj", 305 | collision_box = box_slope_outer_half, 306 | selection_box = box_slope_outer_half, 307 | }, 308 | ["_outer_cut_half_raised"] = { 309 | mesh = "moreblocks_slope_outer_cut_half_raised.obj", 310 | collision_box = box_slope_outer_half_raised, 311 | selection_box = box_slope_outer_half_raised, 312 | }, 313 | ["_cut"] = { 314 | mesh = "moreblocks_slope_cut.obj", 315 | collision_box = box_slope_outer, 316 | selection_box = box_slope_outer, 317 | }, 318 | }, 319 | ["stair"] = { 320 | [""] = { 321 | node_box = { 322 | type = "fixed", 323 | fixed = { 324 | {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, 325 | {-0.5, 0, 0, 0.5, 0.5, 0.5}, 326 | }, 327 | }, 328 | }, 329 | ["_half"] = { 330 | node_box = { 331 | type = "fixed", 332 | fixed = { 333 | {-0.5, -0.5, -0.5, 0, 0, 0.5}, 334 | {-0.5, 0, 0, 0, 0.5, 0.5}, 335 | }, 336 | }, 337 | }, 338 | ["_right_half"] = { 339 | node_box = { 340 | type = "fixed", 341 | fixed = { 342 | {0, -0.5, -0.5, 0.5, 0, 0.5}, 343 | {0, 0, 0, 0.5, 0.5, 0.5}, 344 | }, 345 | }, 346 | }, 347 | ["_inner"] = { 348 | node_box = { 349 | type = "fixed", 350 | fixed = { 351 | {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, 352 | {-0.5, 0, 0, 0.5, 0.5, 0.5}, 353 | {-0.5, 0, -0.5, 0, 0.5, 0}, 354 | }, 355 | }, 356 | }, 357 | ["_outer"] = { 358 | node_box = { 359 | type = "fixed", 360 | fixed = { 361 | {-0.5, -0.5, -0.5, 0.5, 0, 0.5}, 362 | {-0.5, 0, 0, 0, 0.5, 0.5}, 363 | }, 364 | }, 365 | }, 366 | ["_alt"] = { 367 | node_box = { 368 | type = "fixed", 369 | fixed = { 370 | {-0.5, -0.5, -0.5, 0.5, 0, 0}, 371 | {-0.5, 0, 0, 0.5, 0.5, 0.5}, 372 | }, 373 | }, 374 | }, 375 | ["_alt_1"] = { 376 | node_box = { 377 | type = "fixed", 378 | fixed = { 379 | {-0.5, -0.0625, -0.5, 0.5, 0, 0}, 380 | {-0.5, 0.4375, 0, 0.5, 0.5, 0.5}, 381 | }, 382 | }, 383 | }, 384 | ["_alt_2"] = { 385 | node_box = { 386 | type = "fixed", 387 | fixed = { 388 | {-0.5, -0.125, -0.5, 0.5, 0, 0}, 389 | {-0.5, 0.375, 0, 0.5, 0.5, 0.5}, 390 | }, 391 | }, 392 | }, 393 | ["_alt_4"] = { 394 | node_box = { 395 | type = "fixed", 396 | fixed = { 397 | {-0.5, -0.25, -0.5, 0.5, 0, 0}, 398 | {-0.5, 0.25, 0, 0.5, 0.5, 0.5}, 399 | }, 400 | }, 401 | }, 402 | }, 403 | } 404 | 405 | for type,a in pairs(stairsplus.defs) do 406 | for name,b in pairs(stairsplus.defs[type]) do 407 | table.insert(stairsplus.shapes_list, { type .. "_", name }) 408 | end 409 | end 410 | -------------------------------------------------------------------------------- /stairsplus/init.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: Stairs+ 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | -- Nodes will be called :{stair,slab,panel,micro,slope}_ 9 | 10 | local modpath = minetest.get_modpath("moreblocks").. "/stairsplus" 11 | 12 | stairsplus = {} 13 | stairsplus.expect_infinite_stacks = false 14 | 15 | stairsplus.shapes_list = {} 16 | 17 | if 18 | not minetest.get_modpath("unified_inventory") 19 | and minetest.settings:get_bool("creative_mode") 20 | then 21 | stairsplus.expect_infinite_stacks = true 22 | end 23 | 24 | function stairsplus:prepare_groups(groups) 25 | local result = {} 26 | if groups then 27 | for k, v in pairs(groups) do 28 | if k ~= "wood" and k ~= "stone" and k ~= "wool" and k ~= "tree" then 29 | result[k] = v 30 | end 31 | end 32 | end 33 | if not moreblocks.config.stairsplus_in_creative_inventory then 34 | result.not_in_creative_inventory = 1 35 | end 36 | return result 37 | end 38 | 39 | function stairsplus:register_all(modname, subname, recipeitem, fields) 40 | self:register_stair(modname, subname, recipeitem, fields) 41 | self:register_slab(modname, subname, recipeitem, fields) 42 | self:register_slope(modname, subname, recipeitem, fields) 43 | self:register_panel(modname, subname, recipeitem, fields) 44 | self:register_micro(modname, subname, recipeitem, fields) 45 | end 46 | 47 | function stairsplus:register_alias_all(modname_old, subname_old, modname_new, subname_new) 48 | self:register_stair_alias(modname_old, subname_old, modname_new, subname_new) 49 | self:register_slab_alias(modname_old, subname_old, modname_new, subname_new) 50 | self:register_slope_alias(modname_old, subname_old, modname_new, subname_new) 51 | self:register_panel_alias(modname_old, subname_old, modname_new, subname_new) 52 | self:register_micro_alias(modname_old, subname_old, modname_new, subname_new) 53 | end 54 | function stairsplus:register_alias_force_all(modname_old, subname_old, modname_new, subname_new) 55 | self:register_stair_alias_force(modname_old, subname_old, modname_new, subname_new) 56 | self:register_slab_alias_force(modname_old, subname_old, modname_new, subname_new) 57 | self:register_slope_alias_force(modname_old, subname_old, modname_new, subname_new) 58 | self:register_panel_alias_force(modname_old, subname_old, modname_new, subname_new) 59 | self:register_micro_alias_force(modname_old, subname_old, modname_new, subname_new) 60 | end 61 | 62 | -- luacheck: no unused 63 | local function register_stair_slab_panel_micro(modname, subname, recipeitem, groups, images, description, drop, light) 64 | stairsplus:register_all(modname, subname, recipeitem, { 65 | groups = groups, 66 | tiles = images, 67 | description = description, 68 | drop = drop, 69 | light_source = light 70 | }) 71 | end 72 | 73 | dofile(modpath .. "/defs.lua") 74 | dofile(modpath .. "/recipes.lua") 75 | dofile(modpath .. "/common.lua") 76 | dofile(modpath .. "/stairs.lua") 77 | dofile(modpath .. "/slabs.lua") 78 | dofile(modpath .. "/slopes.lua") 79 | dofile(modpath .. "/panels.lua") 80 | dofile(modpath .. "/microblocks.lua") 81 | dofile(modpath .. "/custom.lua") 82 | dofile(modpath .. "/registrations.lua") 83 | -------------------------------------------------------------------------------- /stairsplus/microblocks.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: microblock definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | -- Node will be called :micro_ 9 | 10 | -- luacheck: no unused 11 | local function register_micro(modname, subname, recipeitem, groups, images, description, drop, light) 12 | stairsplus:register_micro(modname, subname, recipeitem, { 13 | groups = groups, 14 | tiles = images, 15 | description = description, 16 | drop = drop, 17 | light_source = light, 18 | sounds = moreblocks.node_sound_stone_defaults(), 19 | }) 20 | end 21 | 22 | function stairsplus:register_micro_alias(modname_old, subname_old, modname_new, subname_new) 23 | local defs = table.copy(stairsplus.defs["micro"]) 24 | for alternate, def in pairs(defs) do 25 | minetest.register_alias(modname_old .. ":micro_" .. subname_old .. alternate, modname_new .. ":micro_" .. subname_new .. alternate) 26 | end 27 | end 28 | 29 | function stairsplus:register_micro_alias_force(modname_old, subname_old, modname_new, subname_new) 30 | local defs = table.copy(stairsplus.defs["micro"]) 31 | for alternate, def in pairs(defs) do 32 | minetest.register_alias_force(modname_old .. ":micro_" .. subname_old .. alternate, modname_new .. ":micro_" .. subname_new .. alternate) 33 | end 34 | end 35 | 36 | function stairsplus:register_micro(modname, subname, recipeitem, fields) 37 | local defs = table.copy(stairsplus.defs["micro"]) 38 | for alternate, def in pairs(defs) do 39 | stairsplus.register_single("micro", alternate, def, modname, subname, recipeitem, fields) 40 | end 41 | 42 | circular_saw.known_nodes[recipeitem] = {modname, subname} 43 | circular_saw.microblocks[modname.. ":micro_" .. subname] = recipeitem 44 | end 45 | -------------------------------------------------------------------------------- /stairsplus/panels.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: panel definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | -- Node will be called :panel_ 9 | 10 | -- luacheck: no unused 11 | local function register_panel(modname, subname, recipeitem, groups, images, description, drop, light) 12 | stairsplus:register_panel(modname, subname, recipeitem, { 13 | groups = groups, 14 | tiles = images, 15 | description = description, 16 | drop = drop, 17 | light_source = light, 18 | sounds = moreblocks.node_sound_stone_defaults(), 19 | }) 20 | end 21 | 22 | function stairsplus:register_panel_alias(modname_old, subname_old, modname_new, subname_new) 23 | local defs = table.copy(stairsplus.defs["panel"]) 24 | for alternate, def in pairs(defs) do 25 | minetest.register_alias(modname_old .. ":panel_" .. subname_old .. alternate, modname_new .. ":panel_" .. subname_new .. alternate) 26 | end 27 | end 28 | 29 | function stairsplus:register_panel_alias_force(modname_old, subname_old, modname_new, subname_new) 30 | local defs = table.copy(stairsplus.defs["panel"]) 31 | for alternate, def in pairs(defs) do 32 | minetest.register_alias_force(modname_old .. ":panel_" .. subname_old .. alternate, modname_new .. ":panel_" .. subname_new .. alternate) 33 | end 34 | end 35 | 36 | function stairsplus:register_panel(modname, subname, recipeitem, fields) 37 | local defs = table.copy(stairsplus.defs["panel"]) 38 | for alternate, def in pairs(defs) do 39 | stairsplus.register_single("panel", alternate, def, modname, subname, recipeitem, fields) 40 | end 41 | 42 | circular_saw.known_nodes[recipeitem] = {modname, subname} 43 | end 44 | -------------------------------------------------------------------------------- /stairsplus/recipes.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: Stairs+ 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | 9 | stairsplus.register_recipes = function(category, alternate, modname, subname, recipeitem) 10 | if category == "micro" and alternate == "" then 11 | minetest.register_craft({ 12 | type = "shapeless", 13 | output = modname .. ":micro_" .. subname .. " 7", 14 | recipe = {modname .. ":stair_" .. subname .. "_inner"}, 15 | }) 16 | 17 | minetest.register_craft({ 18 | type = "shapeless", 19 | output = modname .. ":micro_" .. subname .. " 6", 20 | recipe = {modname .. ":stair_" .. subname}, 21 | }) 22 | 23 | minetest.register_craft({ 24 | type = "shapeless", 25 | output = modname .. ":micro_" .. subname .. " 5", 26 | recipe = {modname .. ":stair_" .. subname .. "_outer"}, 27 | }) 28 | 29 | minetest.register_craft({ 30 | type = "shapeless", 31 | output = modname .. ":micro_" .. subname .. " 4", 32 | recipe = {modname .. ":slab_" .. subname}, 33 | }) 34 | 35 | minetest.register_craft({ 36 | type = "shapeless", 37 | output = modname .. ":micro_" .. subname .. " 4", 38 | recipe = {modname .. ":stair_" .. subname .. "_alt"}, 39 | }) 40 | 41 | minetest.register_craft({ 42 | type = "shapeless", 43 | output = modname .. ":micro_" .. subname .. " 3", 44 | recipe = {modname .. ":stair_" .. subname .. "_right_half"}, 45 | }) 46 | 47 | minetest.register_craft({ 48 | type = "shapeless", 49 | output = modname .. ":micro_" .. subname .. " 2", 50 | recipe = {modname .. ":panel_" .. subname}, 51 | }) 52 | 53 | minetest.register_craft({ 54 | type = "shapeless", 55 | output = recipeitem, 56 | 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}, 57 | }) 58 | 59 | minetest.register_alias(modname .. ":micro_" .. subname .. "_bottom", modname .. ":micro_" .. subname) 60 | elseif category == "panel" and alternate == "" then 61 | minetest.register_craft({ 62 | output = modname .. ":panel_" .. subname .. " 12", 63 | recipe = { 64 | {recipeitem, ""}, 65 | {recipeitem, recipeitem}, 66 | }, 67 | }) 68 | 69 | minetest.register_craft({ 70 | output = modname .. ":panel_" .. subname .. " 12", 71 | recipe = { 72 | {"", recipeitem}, 73 | {recipeitem, recipeitem}, 74 | }, 75 | }) 76 | 77 | minetest.register_craft({ 78 | type = "shapeless", 79 | output = modname .. ":panel_" .. subname, 80 | recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, 81 | }) 82 | 83 | minetest.register_craft({ 84 | type = "shapeless", 85 | output = recipeitem, 86 | recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, 87 | }) 88 | 89 | minetest.register_alias(modname.. ":panel_" ..subname.. "_bottom", modname.. ":panel_" ..subname) 90 | elseif category == "slab" then 91 | if alternate == "" then 92 | minetest.register_craft({ 93 | output = modname .. ":slab_" .. subname .. " 6", 94 | recipe = {{recipeitem, recipeitem, recipeitem}}, 95 | }) 96 | 97 | minetest.register_craft({ 98 | type = "shapeless", 99 | output = modname .. ":slab_" .. subname, 100 | recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, 101 | }) 102 | 103 | -- uncomment this rule when conflict is no longer likely to happen 104 | -- https://github.com/minetest/minetest/issues/2881 105 | -- minetest.register_craft({ 106 | -- type = "shapeless", 107 | -- output = modname .. ":slab_" .. subname, 108 | -- recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, 109 | -- }) 110 | 111 | -- then remove these two 112 | minetest.register_craft({ 113 | output = modname .. ":slab_" .. subname, 114 | recipe = {{modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}}, 115 | }) 116 | 117 | minetest.register_craft({ 118 | output = modname .. ":slab_" .. subname, 119 | recipe = { 120 | {modname .. ":panel_" .. subname}, 121 | {modname .. ":panel_" .. subname}, 122 | }, 123 | }) 124 | ------------------------------ 125 | 126 | minetest.register_craft({ 127 | type = "shapeless", 128 | output = recipeitem, 129 | recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname}, 130 | }) 131 | 132 | minetest.register_craft({ 133 | type = "shapeless", 134 | output = modname .. ":slab_" .. subname .. " 3", 135 | recipe = {modname .. ":stair_" .. subname, modname .. ":stair_" .. subname}, 136 | }) 137 | 138 | minetest.register_craft({ 139 | type = "shapeless", 140 | output = modname .. ":slab_" .. subname, 141 | recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"}, 142 | }) 143 | 144 | minetest.register_craft({ 145 | type = "shapeless", 146 | output = modname .. ":slab_" .. subname, 147 | recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"}, 148 | }) 149 | 150 | minetest.register_craft({ 151 | type = "shapeless", 152 | output = modname .. ":slab_" .. subname, 153 | 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"}, 154 | }) 155 | 156 | minetest.register_craft({ 157 | type = "shapeless", 158 | output = modname .. ":slab_" .. subname, 159 | recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half"}, 160 | }) 161 | 162 | minetest.register_craft({ 163 | type = "shapeless", 164 | output = modname .. ":slab_" .. subname, 165 | recipe = {modname .. ":slope_" .. subname .. "_outer_half", modname .. ":slope_" .. subname .. "_inner_half"}, 166 | }) 167 | 168 | minetest.register_craft({ 169 | type = "shapeless", 170 | output = modname .. ":slab_" .. subname, 171 | recipe = {modname .. ":slope_" .. subname .. "_outer_cut_half", modname .. ":slope_" .. subname .. "_inner_cut_half"}, 172 | }) 173 | elseif alternate == "_quarter" then 174 | minetest.register_craft({ 175 | type = "shapeless", 176 | output = recipeitem, 177 | recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"}, 178 | }) 179 | 180 | minetest.register_craft({ 181 | type = "shapeless", 182 | output = recipeitem, 183 | recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_quarter"}, 184 | }) 185 | 186 | minetest.register_craft({ 187 | type = "shapeless", 188 | output = modname .. ":slab_" .. subname .. "_quarter", 189 | recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"}, 190 | }) 191 | 192 | minetest.register_craft({ 193 | type = "shapeless", 194 | output = modname .. ":slab_" .. subname .. "_quarter", 195 | recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"}, 196 | }) 197 | elseif alternate == "_three_quarter" then 198 | minetest.register_craft({ 199 | type = "shapeless", 200 | output = modname .. ":slab_" .. subname .. "_three_quarter", 201 | recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname .. "_quarter"}, 202 | }) 203 | 204 | minetest.register_craft({ 205 | type = "shapeless", 206 | output = modname .. ":slab_" .. subname .. "_three_quarter", 207 | recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"}, 208 | }) 209 | 210 | minetest.register_craft({ 211 | type = "shapeless", 212 | output = modname .. ":slab_" .. subname .. "_three_quarter", 213 | 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"}, 214 | }) 215 | elseif alternate == "_2" then 216 | minetest.register_craft({ 217 | type = "shapeless", 218 | output = recipeitem, 219 | 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"}, 220 | }) 221 | 222 | minetest.register_craft({ 223 | type = "shapeless", 224 | output = recipeitem, 225 | recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_2"}, 226 | }) 227 | 228 | minetest.register_craft({ 229 | type = "shapeless", 230 | output = modname .. ":slab_" .. subname .. "_2", 231 | recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"}, 232 | }) 233 | elseif alternate == "_14" then 234 | minetest.register_craft({ 235 | type = "shapeless", 236 | output = modname .. ":slab_" .. subname .. "_14", 237 | recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_2"}, 238 | }) 239 | 240 | minetest.register_craft({ 241 | type = "shapeless", 242 | output = modname .. ":slab_" .. subname .. "_14", 243 | 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"}, 244 | }) 245 | elseif alternate == "_15" then 246 | minetest.register_craft({ 247 | type = "shapeless", 248 | output = recipeitem, 249 | recipe = {modname .. ":slab_" .. subname .. "_15", modname .. ":slab_" .. subname .. "_1"}, 250 | }) 251 | 252 | minetest.register_craft({ 253 | type = "shapeless", 254 | output = modname .. ":slab_" .. subname .. "_15", 255 | recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_1"}, 256 | }) 257 | end 258 | elseif category == "slope" then 259 | if alternate == "" then 260 | minetest.register_craft({ 261 | type = "shapeless", 262 | output = recipeitem, 263 | recipe = {modname .. ":slope_" .. subname, modname .. ":slope_" .. subname}, 264 | }) 265 | elseif alternate == "_half" then 266 | minetest.register_craft({ 267 | type = "shapeless", 268 | output = recipeitem, 269 | recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half_raised"}, 270 | }) 271 | 272 | minetest.register_craft({ 273 | type = "shapeless", 274 | output = recipeitem, 275 | recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half", 276 | modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half"}, 277 | }) 278 | elseif alternate == "_outer" then 279 | minetest.register_craft({ 280 | type = "shapeless", 281 | output = recipeitem, 282 | recipe = {modname .. ":slope_" .. subname .. "_outer", modname .. ":slope_" .. subname .. "_inner"}, 283 | }) 284 | elseif alternate == "_outer_half" then 285 | minetest.register_craft({ 286 | type = "shapeless", 287 | output = recipeitem, 288 | recipe = {modname .. ":slope_" .. subname .. "_outer_half", modname .. ":slope_" .. subname .. "_inner_half_raised"}, 289 | }) 290 | elseif alternate == "_inner_half" then 291 | minetest.register_craft({ 292 | type = "shapeless", 293 | output = recipeitem, 294 | recipe = {modname .. ":slope_" .. subname .. "_outer_half_raised", modname .. ":slope_" .. subname .. "_inner_half"}, 295 | }) 296 | elseif alternate == "_outer_cut" then 297 | minetest.register_craft({ 298 | type = "shapeless", 299 | output = recipeitem, 300 | recipe = {modname .. ":slope_" .. subname .. "_outer_cut", modname .. ":slope_" .. subname .. "_inner_cut"}, 301 | }) 302 | elseif alternate == "_outer_cut_half" then 303 | minetest.register_craft({ 304 | type = "shapeless", 305 | output = recipeitem, 306 | recipe = {modname .. ":slope_" .. subname .. "_outer_cut_half", modname .. ":slope_" .. subname .. "_inner_cut_half_raised"}, 307 | }) 308 | elseif alternate == "_cut" then 309 | minetest.register_craft({ 310 | type = "shapeless", 311 | output = recipeitem, 312 | recipe = {modname .. ":slope_" .. subname .. "_cut", modname .. ":slope_" .. subname .. "_cut"}, 313 | }) 314 | elseif alternate == "_half_raised" then 315 | minetest.register_craft({ 316 | type = "shapeless", 317 | output = modname .. ":slope_" .. subname .. "_half_raised", 318 | recipe = {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half", 319 | modname .. ":slope_" .. subname .. "_half"}, 320 | }) 321 | 322 | minetest.register_craft({ 323 | type = "shapeless", 324 | output = modname .. ":slope_" .. subname .. "_half_raised", 325 | recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_half"}, 326 | }) 327 | elseif alternate == "_inner_half_raised" then 328 | minetest.register_craft({ 329 | type = "shapeless", 330 | output = modname .. ":slope_" .. subname .. "_inner_half_raised", 331 | recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_half"}, 332 | }) 333 | elseif alternate == "_outer_half_raised" then 334 | minetest.register_craft({ 335 | type = "shapeless", 336 | output = modname .. ":slope_" .. subname .. "_outer_half_raised", 337 | recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_outer_half"}, 338 | }) 339 | elseif alternate == "_inner_cut_half_raised" then 340 | minetest.register_craft({ 341 | type = "shapeless", 342 | output = modname .. ":slope_" .. subname .. "_inner_cut_half_raised", 343 | recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_cut_half"}, 344 | }) 345 | end 346 | elseif category == "stair" then 347 | if alternate == "" then 348 | minetest.register_craft({ 349 | output = modname .. ":stair_" .. subname .. " 8", 350 | recipe = { 351 | {recipeitem, "", ""}, 352 | {recipeitem, recipeitem, ""}, 353 | {recipeitem, recipeitem, recipeitem}, 354 | }, 355 | }) 356 | 357 | minetest.register_craft({ 358 | output = modname .. ":stair_" .. subname .. " 8", 359 | recipe = { 360 | {"", "", recipeitem}, 361 | {"", recipeitem, recipeitem}, 362 | {recipeitem, recipeitem, recipeitem}, 363 | }, 364 | }) 365 | 366 | minetest.register_craft({ 367 | type = "shapeless", 368 | output = modname .. ":stair_" .. subname, 369 | recipe = {modname .. ":panel_" .. subname, modname .. ":slab_" .. subname}, 370 | }) 371 | 372 | minetest.register_craft({ 373 | type = "shapeless", 374 | output = modname .. ":stair_" .. subname, 375 | recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, 376 | }) 377 | 378 | minetest.register_craft({ 379 | type = "shapeless", 380 | output = modname .. ":stair_" .. subname, 381 | recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, 382 | }) 383 | 384 | minetest.register_craft({ 385 | type = "shapeless", 386 | output = modname .. ":stair_" .. subname, 387 | recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}, 388 | }) 389 | elseif alternate == "_inner" then 390 | minetest.register_craft({ 391 | type = "shapeless", 392 | output = modname .. ":stair_" .. subname .. "_inner", 393 | recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, 394 | }) 395 | elseif alternate == "_outer" then 396 | minetest.register_craft({ 397 | type = "shapeless", 398 | output = modname .. ":stair_" .. subname .. "_outer", 399 | recipe = {modname .. ":micro_" .. subname, modname .. ":slab_" .. subname}, 400 | }) 401 | 402 | minetest.register_craft({ 403 | type = "shapeless", 404 | output = modname .. ":stair_" .. subname .. "_outer", 405 | recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, 406 | }) 407 | elseif alternate == "_half" then 408 | minetest.register_craft({ 409 | type = "shapeless", 410 | output = modname .. ":stair_" .. subname .. "_half", 411 | recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname}, 412 | }) 413 | 414 | minetest.register_craft({ 415 | type = "shapeless", 416 | output = modname .. ":stair_" .. subname .. "_half", 417 | recipe = {modname .. ":panel_" .. subname, modname .. ":micro_" .. subname}, 418 | }) 419 | elseif alternate == "_right_half" then 420 | minetest.register_craft({ 421 | type = "shapeless", 422 | output = modname .. ":stair_" .. subname .. "_right_half", 423 | recipe = {modname .. ":stair_" .. subname .. "_half"}, 424 | }) 425 | elseif alternate == "_alt" then 426 | minetest.register_craft({ -- See mirrored variation of the recipe below. 427 | output = modname .. ":stair_" .. subname .. "_alt", 428 | recipe = { 429 | {modname .. ":panel_" .. subname, ""}, 430 | {"" , modname .. ":panel_" .. subname}, 431 | }, 432 | }) 433 | 434 | minetest.register_craft({ -- Mirrored variation of the recipe above. 435 | output = modname .. ":stair_" .. subname .. "_alt", 436 | recipe = { 437 | {"" , modname .. ":panel_" .. subname}, 438 | {modname .. ":panel_" .. subname, ""}, 439 | }, 440 | }) 441 | end 442 | end 443 | end 444 | -------------------------------------------------------------------------------- /stairsplus/registrations.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: registrations 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | local S = moreblocks.S 8 | -- default registrations 9 | if minetest.get_modpath("default") then 10 | local default_nodes = { -- Default stairs/slabs/panels/microblocks: 11 | "stone", 12 | "stone_block", 13 | "cobble", 14 | "mossycobble", 15 | "brick", 16 | "sandstone", 17 | "steelblock", 18 | "goldblock", 19 | "copperblock", 20 | "bronzeblock", 21 | "diamondblock", 22 | "tinblock", 23 | "desert_stone", 24 | "desert_stone_block", 25 | "desert_cobble", 26 | "meselamp", 27 | "glass", 28 | "tree", 29 | "wood", 30 | "jungletree", 31 | "junglewood", 32 | "pine_tree", 33 | "pine_wood", 34 | "acacia_tree", 35 | "acacia_wood", 36 | "aspen_tree", 37 | "aspen_wood", 38 | "obsidian", 39 | "obsidian_block", 40 | "obsidianbrick", 41 | "obsidian_glass", 42 | "stonebrick", 43 | "desert_stonebrick", 44 | "sandstonebrick", 45 | "silver_sandstone", 46 | "silver_sandstone_brick", 47 | "silver_sandstone_block", 48 | "desert_sandstone", 49 | "desert_sandstone_brick", 50 | "desert_sandstone_block", 51 | "sandstone_block", 52 | "coral_skeleton", 53 | "ice", 54 | } 55 | 56 | for _, name in pairs(default_nodes) do 57 | local mod = "default" 58 | local nodename = mod .. ":" .. name 59 | local ndef = table.copy(minetest.registered_nodes[nodename]) 60 | ndef.sunlight_propagates = true 61 | 62 | -- Stone and desert_stone drop cobble and desert_cobble respectively. 63 | if type(ndef.drop) == "string" then 64 | ndef.drop = ndef.drop:gsub(".+:", "") 65 | end 66 | 67 | -- Use the primary tile for all sides of cut glasslike nodes and disregard paramtype2. 68 | if #ndef.tiles > 1 and ndef.drawtype and ndef.drawtype:find("glass") then 69 | ndef.tiles = {ndef.tiles[1]} 70 | ndef.paramtype2 = nil 71 | end 72 | 73 | mod = "moreblocks" 74 | stairsplus:register_all(mod, name, nodename, ndef) 75 | minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) 76 | minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") 77 | minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") 78 | minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) 79 | end 80 | end 81 | 82 | -- farming registrations 83 | if minetest.get_modpath("farming") then 84 | local farming_nodes = {"straw"} 85 | for _, name in pairs(farming_nodes) do 86 | local mod = "farming" 87 | local nodename = mod .. ":" .. name 88 | local ndef = table.copy(minetest.registered_nodes[nodename]) 89 | ndef.sunlight_propagates = true 90 | 91 | mod = "moreblocks" 92 | stairsplus:register_all(mod, name, nodename, ndef) 93 | minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name) 94 | minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer") 95 | minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner") 96 | minetest.register_alias_force("stairs:slab_" .. name, mod .. ":slab_" .. name) 97 | end 98 | end 99 | 100 | -- wool registrations 101 | if minetest.get_modpath("wool") then 102 | local dyes = {"white", "grey", "black", "red", "yellow", "green", "cyan", 103 | "blue", "magenta", "orange", "violet", "brown", "pink", 104 | "dark_grey", "dark_green"} 105 | for _, name in pairs(dyes) do 106 | local mod = "wool" 107 | local nodename = mod .. ":" .. name 108 | local ndef = table.copy(minetest.registered_nodes[nodename]) 109 | ndef.sunlight_propagates = true 110 | 111 | stairsplus:register_all(mod, name, nodename, ndef) 112 | end 113 | end 114 | 115 | -- basic_materials, keeping the original other-mod-oriented names 116 | -- for backwards compatibility 117 | 118 | if minetest.get_modpath("basic_materials") then 119 | stairsplus:register_all("technic","concrete","basic_materials:concrete_block",{ 120 | description = S("Concrete"), 121 | tiles = {"basic_materials_concrete_block.png",}, 122 | groups = {cracky=1, level=2, concrete=1}, 123 | sounds = moreblocks.node_sound_stone_defaults(), 124 | }) 125 | 126 | minetest.register_alias("prefab:concrete_stair","technic:stair_concrete") 127 | minetest.register_alias("prefab:concrete_slab","technic:slab_concrete") 128 | 129 | stairsplus:register_all("gloopblocks", "cement", "basic_materials:cement_block", { 130 | description = S("Cement"), 131 | tiles = {"basic_materials_cement_block.png"}, 132 | groups = {cracky=2, not_in_creative_inventory=1}, 133 | sounds = moreblocks.node_sound_stone_defaults(), 134 | sunlight_propagates = true, 135 | }) 136 | 137 | stairsplus:register_all("technic", "brass_block", "basic_materials:brass_block", { 138 | description= S("Brass Block"), 139 | groups={cracky=1, not_in_creative_inventory=1}, 140 | tiles={"basic_materials_brass_block.png"}, 141 | }) 142 | 143 | end 144 | 145 | -- Alias cuts of split_stone_tile_alt which was renamed checker_stone_tile. 146 | stairsplus:register_alias_all("moreblocks", "split_stone_tile_alt", "moreblocks", "checker_stone_tile") 147 | 148 | -- The following LBM is necessary because the name stair_split_stone_tile_alt 149 | -- conflicts with another node and so the alias for that specific node gets 150 | -- ignored. 151 | minetest.register_lbm({ 152 | name = "moreblocks:fix_split_stone_tile_alt_name_collision", 153 | nodenames = {"moreblocks:stair_split_stone_tile_alt"}, 154 | action = function(pos, node) 155 | minetest.set_node(pos, { 156 | name = "moreblocks:stair_checker_stone_tile", 157 | param2 = minetest.get_node(pos).param2 158 | 159 | }) 160 | minetest.log('action', "LBM replaced " .. node.name .. 161 | " at " .. minetest.pos_to_string(pos)) 162 | end, 163 | }) 164 | -------------------------------------------------------------------------------- /stairsplus/slabs.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: slab definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | -- Node will be called :slab_ 9 | 10 | -- luacheck: no unused 11 | local function register_slab(modname, subname, recipeitem, groups, images, description, drop, light) 12 | stairsplus:register_slab(modname, subname, recipeitem, { 13 | groups = groups, 14 | tiles = images, 15 | description = description, 16 | drop = drop, 17 | light_source = light, 18 | sounds = moreblocks.node_sound_stone_defaults(), 19 | }) 20 | end 21 | 22 | function stairsplus:register_slab_alias(modname_old, subname_old, modname_new, subname_new) 23 | local defs = table.copy(stairsplus.defs["slab"]) 24 | for alternate, def in pairs(defs) do 25 | minetest.register_alias(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate) 26 | end 27 | end 28 | 29 | function stairsplus:register_slab_alias_force(modname_old, subname_old, modname_new, subname_new) 30 | local defs = table.copy(stairsplus.defs["slab"]) 31 | for alternate, def in pairs(defs) do 32 | minetest.register_alias_force(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate) 33 | end 34 | end 35 | 36 | function stairsplus:register_slab(modname, subname, recipeitem, fields) 37 | local defs = table.copy(stairsplus.defs["slab"]) 38 | for alternate, shape in pairs(defs) do 39 | stairsplus.register_single("slab", alternate, shape, modname, subname, recipeitem, fields) 40 | end 41 | 42 | circular_saw.known_nodes[recipeitem] = {modname, subname} 43 | end 44 | -------------------------------------------------------------------------------- /stairsplus/slopes.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: slope definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | -- Node will be called :slope_ 9 | 10 | -- luacheck: no unused 11 | local function register_slope(modname, subname, recipeitem, groups, images, description, drop, light) 12 | stairsplus:register_slope(modname, subname, recipeitem, { 13 | groups = groups, 14 | tiles = images, 15 | description = description, 16 | drop = drop, 17 | light_source = light, 18 | sounds = moreblocks.node_sound_stone_defaults(), 19 | }) 20 | end 21 | 22 | function stairsplus:register_slope_alias(modname_old, subname_old, modname_new, subname_new) 23 | local defs = table.copy(stairsplus.defs["slope"]) 24 | for alternate, def in pairs(defs) do 25 | minetest.register_alias(modname_old .. ":slope_" .. subname_old .. alternate, modname_new .. ":slope_" .. subname_new .. alternate) 26 | end 27 | end 28 | 29 | function stairsplus:register_slope_alias_force(modname_old, subname_old, modname_new, subname_new) 30 | local defs = table.copy(stairsplus.defs["slope"]) 31 | for alternate, def in pairs(defs) do 32 | minetest.register_alias_force(modname_old .. ":slope_" .. subname_old .. alternate, modname_new .. ":slope_" .. subname_new .. alternate) 33 | end 34 | end 35 | 36 | function stairsplus:register_slope(modname, subname, recipeitem, fields) 37 | local defs = table.copy(stairsplus.defs["slope"]) 38 | for alternate, def in pairs(defs) do 39 | stairsplus.register_single("slope", alternate, def, modname, subname, recipeitem, fields) 40 | end 41 | 42 | circular_saw.known_nodes[recipeitem] = {modname, subname} 43 | end 44 | -------------------------------------------------------------------------------- /stairsplus/stairs.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | More Blocks: stair definitions 3 | 4 | Copyright © 2011-2020 Hugo Locurcio and contributors. 5 | Licensed under the zlib license. See LICENSE.md for more information. 6 | --]] 7 | 8 | -- Node will be called :stair_ 9 | 10 | -- luacheck: no unused 11 | local function register_stair(modname, subname, recipeitem, groups, images, description, drop, light) 12 | stairsplus:register_stair(modname, subname, recipeitem, { 13 | groups = groups, 14 | tiles = images, 15 | description = description, 16 | drop = drop, 17 | light_source = light, 18 | sounds = moreblocks.node_sound_stone_defaults(), 19 | }) 20 | end 21 | 22 | function stairsplus:register_stair_alias(modname_old, subname_old, modname_new, subname_new) 23 | local defs = table.copy(stairsplus.defs["stair"]) 24 | for alternate, def in pairs(defs) do 25 | minetest.register_alias(modname_old .. ":stair_" .. subname_old .. alternate, modname_new .. ":stair_" .. subname_new .. alternate) 26 | end 27 | end 28 | 29 | function stairsplus:register_stair_alias_force(modname_old, subname_old, modname_new, subname_new) 30 | local defs = table.copy(stairsplus.defs["stair"]) 31 | for alternate, def in pairs(defs) do 32 | minetest.register_alias_force(modname_old .. ":stair_" .. subname_old .. alternate, modname_new .. ":stair_" .. subname_new .. alternate) 33 | end 34 | end 35 | 36 | function stairsplus:register_stair(modname, subname, recipeitem, fields) 37 | local defs = table.copy(stairsplus.defs["stair"]) 38 | for alternate, def in pairs(defs) do 39 | stairsplus.register_single("stair", alternate, def, modname, subname, recipeitem, fields) 40 | end 41 | 42 | circular_saw.known_nodes[recipeitem] = {modname, subname} 43 | end 44 | -------------------------------------------------------------------------------- /textures/moreblocks_cactus_brick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_cactus_brick.png -------------------------------------------------------------------------------- /textures/moreblocks_cactus_checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_cactus_checker.png -------------------------------------------------------------------------------- /textures/moreblocks_checker_stone_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_checker_stone_tile.png -------------------------------------------------------------------------------- /textures/moreblocks_circle_stone_bricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_circle_stone_bricks.png -------------------------------------------------------------------------------- /textures/moreblocks_circular_saw_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_circular_saw_bottom.png -------------------------------------------------------------------------------- /textures/moreblocks_circular_saw_side.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_circular_saw_side.png -------------------------------------------------------------------------------- /textures/moreblocks_circular_saw_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_circular_saw_top.png -------------------------------------------------------------------------------- /textures/moreblocks_clean_glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_clean_glass.png -------------------------------------------------------------------------------- /textures/moreblocks_clean_glass_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_clean_glass_detail.png -------------------------------------------------------------------------------- /textures/moreblocks_coal_checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_coal_checker.png -------------------------------------------------------------------------------- /textures/moreblocks_coal_glass_stairsplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_coal_glass_stairsplus.png -------------------------------------------------------------------------------- /textures/moreblocks_coal_stone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_coal_stone.png -------------------------------------------------------------------------------- /textures/moreblocks_coal_stone_bricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_coal_stone_bricks.png -------------------------------------------------------------------------------- /textures/moreblocks_cobble_compressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_cobble_compressed.png -------------------------------------------------------------------------------- /textures/moreblocks_copperpatina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_copperpatina.png -------------------------------------------------------------------------------- /textures/moreblocks_desert_cobble_compressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_desert_cobble_compressed.png -------------------------------------------------------------------------------- /textures/moreblocks_dirt_compressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_dirt_compressed.png -------------------------------------------------------------------------------- /textures/moreblocks_empty_shelf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_empty_shelf.png -------------------------------------------------------------------------------- /textures/moreblocks_glass_stairsplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_glass_stairsplus.png -------------------------------------------------------------------------------- /textures/moreblocks_glow_glass_stairsplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_glow_glass_stairsplus.png -------------------------------------------------------------------------------- /textures/moreblocks_grey_bricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_grey_bricks.png -------------------------------------------------------------------------------- /textures/moreblocks_iron_checker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_iron_checker.png -------------------------------------------------------------------------------- /textures/moreblocks_iron_glass_stairsplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_iron_glass_stairsplus.png -------------------------------------------------------------------------------- /textures/moreblocks_iron_stone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_iron_stone.png -------------------------------------------------------------------------------- /textures/moreblocks_iron_stone_bricks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_iron_stone_bricks.png -------------------------------------------------------------------------------- /textures/moreblocks_junglestick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_junglestick.png -------------------------------------------------------------------------------- /textures/moreblocks_obsidian_glass_stairsplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_obsidian_glass_stairsplus.png -------------------------------------------------------------------------------- /textures/moreblocks_plankstone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_plankstone.png -------------------------------------------------------------------------------- /textures/moreblocks_plankstone_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_plankstone_2.png -------------------------------------------------------------------------------- /textures/moreblocks_rope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_rope.png -------------------------------------------------------------------------------- /textures/moreblocks_split_stone_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_split_stone_tile.png -------------------------------------------------------------------------------- /textures/moreblocks_split_stone_tile_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_split_stone_tile_top.png -------------------------------------------------------------------------------- /textures/moreblocks_stone_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_stone_tile.png -------------------------------------------------------------------------------- /textures/moreblocks_super_glow_glass_stairsplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_super_glow_glass_stairsplus.png -------------------------------------------------------------------------------- /textures/moreblocks_sweeper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_sweeper.png -------------------------------------------------------------------------------- /textures/moreblocks_tar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_tar.png -------------------------------------------------------------------------------- /textures/moreblocks_trap_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_trap_box.png -------------------------------------------------------------------------------- /textures/moreblocks_trap_box_glass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_trap_box_glass.png -------------------------------------------------------------------------------- /textures/moreblocks_tree_stairsplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_tree_stairsplus.png -------------------------------------------------------------------------------- /textures/moreblocks_wood_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_wood_tile.png -------------------------------------------------------------------------------- /textures/moreblocks_wood_tile_center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_wood_tile_center.png -------------------------------------------------------------------------------- /textures/moreblocks_wood_tile_full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_wood_tile_full.png -------------------------------------------------------------------------------- /textures/moreblocks_wood_tile_offset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/minetest-mods/moreblocks/f17b84ade477f304acf0692e48770717d4c0baec/textures/moreblocks_wood_tile_offset.png --------------------------------------------------------------------------------