code:
# Spanish translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# kaeza, 2013.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: circular_saw.lua
msgid "Circular Saw"
msgstr ""

#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""

#: circular_saw.lua
msgid "Left-over"
msgstr ""

#: circular_saw.lua
msgid "Max"
msgstr ""

#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""

#: circular_saw.lua
msgid "Set"
msgstr ""

#: circular_saw.lua
msgid "owned by @1"
msgstr ""

#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr ""

#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr ""

#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] cargado."

#: nodes.lua
msgid "Deprecated"
msgstr ""

#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Pine Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Tree"
msgstr "Tronco de Árbol"

#: nodes.lua
msgid "Cactus Brick"
msgstr "Ladrillos de Cactus"

#: nodes.lua
msgid "Cactus Checker"
msgstr "Cuadros de Cactus"

#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Parquet Centrado"

#: nodes.lua
msgid "Checker Stone Tile"
msgstr ""

#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Bloques de Piedra Circulares"

#: nodes.lua
msgid "Clean Glass"
msgstr "Cristal Limpio"

#: nodes.lua
msgid "Coal Checker"
msgstr "Cuadros de Carbón"

#: nodes.lua
msgid "Coal Glass"
msgstr "Cristal con Carbón"

#: nodes.lua
msgid "Coal Stone"
msgstr "Carbón y Piedra"

#: nodes.lua
msgid "Coal Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Compressed Cobblestone"
msgstr ""

#: nodes.lua
msgid "Compressed Dirt"
msgstr ""

#: nodes.lua
msgid "Copper Patina Block"
msgstr ""

#: nodes.lua
msgid "Empty Shelf"
msgstr ""

#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Parquet Completo"

#: nodes.lua
msgid "Glow Glass"
msgstr "Cristal Brillante"

#: nodes.lua
msgid "Iron Checker"
msgstr "Cuadros de Hierro"

#: nodes.lua
msgid "Iron Glass"
msgstr "Cristal con Hierro"

#: nodes.lua
msgid "Iron Stone"
msgstr "Hierro y Piedra"

#: nodes.lua
msgid "Iron Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Plankstone"
msgstr "Tablones de piedra"

#: nodes.lua
msgid "Rope"
msgstr "Soga"

#: nodes.lua
msgid "Split Stone Tile"
msgstr "Baldosas de Piedra Partida"

#: nodes.lua
msgid "Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Stone Tile"
msgstr "Baldosa de Piedra"

#: nodes.lua
msgid "Super Glow Glass"
msgstr "Cristal Súper Brillante"

#: nodes.lua
msgid "Sweeper"
msgstr "Limpiador"

#: nodes.lua
msgid "Tar"
msgstr ""

#: nodes.lua
msgid "Trap Desert Stone"
msgstr ""

#: nodes.lua
msgid "Trap Glass"
msgstr "Cristal Trampa"

#: nodes.lua
msgid "Trap Glow Glass"
msgstr ""

#: nodes.lua
msgid "Trap Obsidian"
msgstr ""

#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr ""

#: nodes.lua
msgid "Trap Sandstone"
msgstr ""

#: nodes.lua
msgid "Trap Stone"
msgstr "Piedra Trampa"

#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr ""

#: nodes.lua
msgid "Wooden Tile"
msgstr "Parquet"

#: nodes.lua
msgid "Offset Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr ""

#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr ""

#: ownership.lua
msgid "someone"
msgstr ""

#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "Microbloque de %s"

#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "Losa de %s"

#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr ""

#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "Panel de %s"

#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "Escalera de %s"


code:
# French translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# Hugo Locurcio <hugo.locurcio@hugo.pro>, 2013-2019.
# Jat15, 2013.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: 2019-03-20 21:10+0100\n"
"Last-Translator: Hugo Locurcio <hugo.locurcio@hugo.pro>\n"
"Language-Team: \n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: circular_saw.lua
msgid "Circular Saw"
msgstr "Scie circulaire"

#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"Matériau\n"
"d'entrée"

#: circular_saw.lua
msgid "Left-over"
msgstr "Reste"

#: circular_saw.lua
msgid "Max"
msgstr "Max"

#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Sortie à\n"
"recycler"

#: circular_saw.lua
msgid "Set"
msgstr "Définir"

#: circular_saw.lua
msgid "owned by @1"
msgstr "propriété de @1"

#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "Scie circulaire vide"

#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "Scie circulaire manipulant @1"

#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] a été chargé."

#: nodes.lua
msgid "Deprecated"
msgstr "déprécié"

#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr "Tronc d'arbre d'acacia (toutes faces)"

#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr "Tronc d'arbre de peuplier (toutes faces)"

#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr "Tronc d'arbre de jungle (toutes faces)"

#: nodes.lua
msgid "All-faces Pine Tree"
msgstr "Tronc d'arbre de pin (toutes faces)"

#: nodes.lua
msgid "All-faces Tree"
msgstr "Tronc d'arbre (toutes faces)"

#: nodes.lua
msgid "Cactus Brick"
msgstr "Briques de cactus"

#: nodes.lua
msgid "Cactus Checker"
msgstr "Damier en cactus"

#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Dalle en bois centrée"

#: nodes.lua
msgid "Checker Stone Tile"
msgstr "Damier de dalle en pierre"

#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Briques en pierre circulaires"

#: nodes.lua
msgid "Clean Glass"
msgstr "Verre propre"

#: nodes.lua
msgid "Coal Checker"
msgstr "Damier en charbon"

#: nodes.lua
msgid "Coal Glass"
msgstr "Verre de charbon"

#: nodes.lua
msgid "Coal Stone"
msgstr "Pierre de charbon"

#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "Briques en pierre de charbon"

#: nodes.lua
msgid "Compressed Cobblestone"
msgstr "Pierre taillée compressée"

#: nodes.lua
msgid "Compressed Dirt"
msgstr "Terre compressée"

#: nodes.lua
msgid "Copper Patina Block"
msgstr "Bloc de patine de cuivre"

#: nodes.lua
msgid "Empty Shelf"
msgstr "Étagère vide"

#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Dalle en bois complète"

#: nodes.lua
msgid "Glow Glass"
msgstr "Verre brillant"

#: nodes.lua
msgid "Iron Checker"
msgstr "Damier de fer"

#: nodes.lua
msgid "Iron Glass"
msgstr "Verre de fer"

#: nodes.lua
msgid "Iron Stone"
msgstr "Pierre de fer"

#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "Briques en pierre de fer"

#: nodes.lua
msgid "Plankstone"
msgstr "Pierre-bois"

#: nodes.lua
msgid "Rope"
msgstr "Corde"

#: nodes.lua
msgid "Split Stone Tile"
msgstr "Dalle en pierre découpée"

#: nodes.lua
msgid "Stone Bricks"
msgstr "Briques en pierre"

#: nodes.lua
msgid "Stone Tile"
msgstr "Dalle en pierre"

#: nodes.lua
msgid "Super Glow Glass"
msgstr "Verre très brillant"

#: nodes.lua
msgid "Sweeper"
msgstr "Balai"

#: nodes.lua
msgid "Tar"
msgstr "Bitume"

#: nodes.lua
msgid "Trap Desert Stone"
msgstr "Pierre du désert traversable"

#: nodes.lua
msgid "Trap Glass"
msgstr "Verre traversable"

#: nodes.lua
msgid "Trap Glow Glass"
msgstr "Verre brillant traversable"

#: nodes.lua
msgid "Trap Obsidian"
msgstr "Obsidienne traversable"

#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr "Verre d'obsidienne traversable"

#: nodes.lua
msgid "Trap Sandstone"
msgstr "Grès traversable"

#: nodes.lua
msgid "Trap Stone"
msgstr "Pierre traversable"

#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "Verre très brillant traversable"

#: nodes.lua
msgid "Wooden Tile"
msgstr "Dalle en bois"

#: nodes.lua
msgid "Offset Wooden Tile"
msgstr "Dalle en bois décalée"

#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr "Dalle en bois vers le bas"

#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr "Dalle en bois vers la gauche"

#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr "Dalle en bois vers la droite"

#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Désolé, @1 possède cet endroit."

#: ownership.lua
msgid "someone"
msgstr "quelqu'un"

#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "Microbloc en %s"

#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "Demi-dalle en %s"

#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr "Pente en %s"

#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "Barre en %s"

#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "Escaliers en %s"

repo_name: korkut/MeseCraft

license: mit


code:
# Italian translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# Emon, 2016.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: circular_saw.lua
msgid "Circular Saw"
msgstr "Sega circolare"

#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"Materiale\n"
"iniziale"

#: circular_saw.lua
msgid "Left-over"
msgstr "Scarto"

#: circular_saw.lua
msgid "Max"
msgstr "Max."

#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Ricicla\n"
"finale"

#: circular_saw.lua
msgid "Set"
msgstr "Imp."

#: circular_saw.lua
msgid "owned by @1"
msgstr ""

#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "Sega circolare, vuota"

#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "Sega circolare, in funzione su @1"

#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] caricato."

#: nodes.lua
msgid "Deprecated"
msgstr ""

#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Pine Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Tree"
msgstr "Albero su ogni lato"

#: nodes.lua
msgid "Cactus Brick"
msgstr "Mattoni di cactus"

#: nodes.lua
msgid "Cactus Checker"
msgstr "Scacchiera in cactus"

#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Mattonella in legno centrata"

#: nodes.lua
msgid "Checker Stone Tile"
msgstr ""

#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Mattoni concentrici in pietra"

#: nodes.lua
msgid "Clean Glass"
msgstr "Vetro pulito"

#: nodes.lua
msgid "Coal Checker"
msgstr "Scacchiera in carbone"

#: nodes.lua
msgid "Coal Glass"
msgstr "Vetro e carbone"

#: nodes.lua
msgid "Coal Stone"
msgstr "Pietra in carbone"

#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "Mattoni di pietra in carbone"

#: nodes.lua
msgid "Compressed Cobblestone"
msgstr ""

#: nodes.lua
msgid "Compressed Dirt"
msgstr ""

#: nodes.lua
msgid "Copper Patina Block"
msgstr ""

#: nodes.lua
msgid "Empty Shelf"
msgstr "Scaffale Vuoto"

#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Mattonella in legno pieno"

#: nodes.lua
msgid "Glow Glass"
msgstr "Vetro luminoso"

#: nodes.lua
msgid "Iron Checker"
msgstr "Scacchiera in ferro"

#: nodes.lua
msgid "Iron Glass"
msgstr "Vetro e ferro"

#: nodes.lua
msgid "Iron Stone"
msgstr "Pietra in ferro"

#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "Mattoni di pietra in ferro"

#: nodes.lua
msgid "Plankstone"
msgstr "Pietra e legno"

#: nodes.lua
msgid "Rope"
msgstr "Corda"

#: nodes.lua
msgid "Split Stone Tile"
msgstr "Mattonella in pietra divisa"

#: nodes.lua
msgid "Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Stone Tile"
msgstr "Mattonella in pietra"

#: nodes.lua
msgid "Super Glow Glass"
msgstr "Super vetro luminoso"

#: nodes.lua
msgid "Sweeper"
msgstr "Spazzola"

#: nodes.lua
msgid "Tar"
msgstr ""

#: nodes.lua
msgid "Trap Desert Stone"
msgstr ""

#: nodes.lua
msgid "Trap Glass"
msgstr "Vetro trappola"

#: nodes.lua
msgid "Trap Glow Glass"
msgstr "Vetro luminoso trappola"

#: nodes.lua
msgid "Trap Obsidian"
msgstr ""

#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr ""

#: nodes.lua
msgid "Trap Sandstone"
msgstr ""

#: nodes.lua
msgid "Trap Stone"
msgstr "Pietra trappola"

#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "Super vetro luminoso trappola"

#: nodes.lua
msgid "Wooden Tile"
msgstr "Mattonella in legno"

#: nodes.lua
msgid "Offset Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr ""

#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Spiacente, quel punto è di proprietà di @1"

#: ownership.lua
msgid "someone"
msgstr "qualcuno"

#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "Microblocco %s"

#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "Lastra - %s"

#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr ""

#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "Pannello - %s"

#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "Scale - %s"


code:
# Polish translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# mat9117, 2019
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: circular_saw.lua
msgid "Circular Saw"
msgstr "Piła tarczowa"

#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"wejście\n"
"materiał"

#: circular_saw.lua
msgid "Left-over"
msgstr "Resztki"

#: circular_saw.lua
msgid "Max"
msgstr "Maks"

#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Przetwarzanie\n"
"Wyjście"

#: circular_saw.lua
msgid "Set"
msgstr "Ustaw"

#: circular_saw.lua
msgid "owned by @1"
msgstr "Należy do @1"

#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "Piła tarczowa jest pusta"

#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "Piła tarczowa pracuje na @1"

#: init.lua
msgid "[moreblocks] loaded."
msgstr "[moreblocks] załadowane."

#: nodes.lua
msgid "Deprecated"
msgstr "Przestarzałe"

#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr "Wielostronna tekstura akacji"

#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr "Wielostronna tekstura osiki"

#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr "Wielostronna tekstura drzewa dżunglowego"

#: nodes.lua
msgid "All-faces Pine Tree"
msgstr "Wielostronna tekstura sosny"

#: nodes.lua
msgid "All-faces Tree"
msgstr "Wielostronna tekstura drzewa"

#: nodes.lua
msgid "Cactus Brick"
msgstr "Kaktusowa cegła"

#: nodes.lua
msgid "Cactus Checker"
msgstr "Kaktusowa szachownica"

#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "Wyśrodkowany drewniany kafelek"

#: nodes.lua
msgid "Checker Stone Tile"
msgstr "Kamienna szachownica"

#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "Okrągłe kamienne cegły"

#: nodes.lua
msgid "Clean Glass"
msgstr "Czyste szkło"

#: nodes.lua
msgid "Coal Checker"
msgstr "Węglowa szachownica"

#: nodes.lua
msgid "Coal Glass"
msgstr "Szkło węglowe"

#: nodes.lua
msgid "Coal Stone"
msgstr "Kamień węglowy"

#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "Węglowe kamienne cegły"

#: nodes.lua
msgid "Compressed Cobblestone"
msgstr "Skompresowany bruk"

#: nodes.lua
msgid "Compressed Dirt"
msgstr "Skompresowana ziemia"

#: nodes.lua
msgid "Copper Patina Block"
msgstr "Blok patynowanej miedzi"

#: nodes.lua
msgid "Empty Shelf"
msgstr "Pusta półka"

#: nodes.lua
msgid "Full Wooden Tile"
msgstr "Pełny drewniany kafelek"

#: nodes.lua
msgid "Glow Glass"
msgstr "Świecące szkło"

#: nodes.lua
msgid "Iron Checker"
msgstr "Żelazna szachownica"

#: nodes.lua
msgid "Iron Glass"
msgstr "Żelazne szkło"

#: nodes.lua
msgid "Iron Stone"
msgstr "Żelazny kamień"

#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "Żelazne kamienne cegły"

#: nodes.lua
msgid "Plankstone"
msgstr "Deskokamień"

#: nodes.lua
msgid "Rope"
msgstr "Lina"

#: nodes.lua
msgid "Split Stone Tile"
msgstr "Kamienny blok kafelkowy"

#: nodes.lua
msgid "Stone Bricks"
msgstr "Kamienne cegły"

#: nodes.lua
msgid "Stone Tile"
msgstr "Kamienny kafelek"

#: nodes.lua
msgid "Super Glow Glass"
msgstr "Super świecące szkło"

#: nodes.lua
msgid "Sweeper"
msgstr "Miotła"

#: nodes.lua
msgid "Tar"
msgstr "Smoła"

#: nodes.lua
msgid "Trap Desert Stone"
msgstr "Pułapka z pustynnego kamienia"

#: nodes.lua
msgid "Trap Glass"
msgstr "Szklana pułapka"

#: nodes.lua
msgid "Trap Glow Glass"
msgstr "Pułapka ze świecącego szkłą"

#: nodes.lua
msgid "Trap Obsidian"
msgstr "Obsydianowa pułapka"

#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr "Pułapka z obsydianowego szkła"

#: nodes.lua
msgid "Trap Sandstone"
msgstr "Pułapka z piaskowca"

#: nodes.lua
msgid "Trap Stone"
msgstr "Kamienna pułapka"

#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "Pułapka z super świecącego szkła"

#: nodes.lua
msgid "Wooden Tile"
msgstr "Drewniany kafelek"

#: nodes.lua
msgid "Offset Wooden Tile"
msgstr ""

# @deprecated
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr "Dolny drewniany kafelek"

# @deprecated
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr "Lewy drewniany kafelek"

# @deprecated
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr "Prawy drewniany kafelek"

#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Przykro mi, to miejsce należy do @1"

#: ownership.lua
msgid "someone"
msgstr "ktoś"

#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "%s Mikroblok"

#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "%s Płyta"

#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr "%s Spad"

#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "%s Panel"

#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "%s Schody"


code:
# Russian translation for MOREBLOCKS minetest mod.
# Copyright (C) 2018 Hugo Locurcio and contributors
# This file is distributed under the same license as the MOREBLOCKS package.
# CodeXP <codexp@gmx.net>, 2018.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: MOREBLOCKS MOD\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 23:30+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: circular_saw.lua
msgid "Circular Saw"
msgstr "циркулярная пила"

#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""
"Входной\n"
"материал"

#: circular_saw.lua
msgid "Left-over"
msgstr "Остатки"

#: circular_saw.lua
msgid "Max"
msgstr "Кол."

#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""
"Пере-\n"
"обработка"

#: circular_saw.lua
msgid "Set"
msgstr "ОК"

#: circular_saw.lua
msgid "owned by @1"
msgstr "принадлежит @1"

#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr "циркулярная пила пустая"

#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr "циркулярная пила, @1 в обработке"

#: init.lua
msgid "[MOD] moreblocks loaded."
msgstr "[MOD] moreblocks загружен."

#: nodes.lua
msgid "Deprecated"
msgstr "устаревший"

#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr "всестороннее бревно акации"

#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr "всестороннее бревно осины"

#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr "всестороннее бревно дерева джунглей"

#: nodes.lua
msgid "All-faces Pine Tree"
msgstr "всестороннее бревно сосновое"

#: nodes.lua
msgid "All-faces Tree"
msgstr "всестороннее бревно дерева"

#: nodes.lua
msgid "Cactus Brick"
msgstr "кирпич из кактуса"

#: nodes.lua
msgid "Cactus Checker"
msgstr "мозаика из кактуса"

#: nodes.lua
msgid "Centered Wooden Tile"
msgstr "деревянная мозаика (центр)"

#: nodes.lua
msgid "Checker Stone Tile"
msgstr "каменная мозаика"

#: nodes.lua
msgid "Circle Stone Bricks"
msgstr "кольцевой камень"

#: nodes.lua
msgid "Clean Glass"
msgstr "чистое стекло"

#: nodes.lua
msgid "Coal Checker"
msgstr "угольная мозаика"

#: nodes.lua
msgid "Coal Glass"
msgstr "угольное стекло"

#: nodes.lua
msgid "Coal Stone"
msgstr "угольный камень"

#: nodes.lua
msgid "Coal Stone Bricks"
msgstr "угольно-каменный кирпич"

#: nodes.lua
msgid "Compressed Cobblestone"
msgstr "прессованный булыжник"

#: nodes.lua
msgid "Compressed Dirt"
msgstr "прессованная земля"

#: nodes.lua
msgid "Copper Patina Block"
msgstr "медный патинированный блок"

#: nodes.lua
msgid "Empty Shelf"
msgstr "пустые полки"

#: nodes.lua
msgid "Full Wooden Tile"
msgstr "деревянная мозаика"

#: nodes.lua
msgid "Glow Glass"
msgstr "светящееся стекло"

#: nodes.lua
msgid "Iron Checker"
msgstr "стальная мозаика"

#: nodes.lua
msgid "Iron Glass"
msgstr "металлизированное стекло"

#: nodes.lua
msgid "Iron Stone"
msgstr "железный камень"

#: nodes.lua
msgid "Iron Stone Bricks"
msgstr "железно-каменный кирпич"

#: nodes.lua
msgid "Plankstone"
msgstr "дерево-каменная мозаика"

#: nodes.lua
msgid "Rope"
msgstr "верёвка"

#: nodes.lua
msgid "Split Stone Tile"
msgstr "каменная мозаика"

#: nodes.lua
msgid "Stone Bricks"
msgstr "каменный кирпич"

#: nodes.lua
msgid "Stone Tile"
msgstr "каменная плитка"

#: nodes.lua
msgid "Super Glow Glass"
msgstr "супер светящееся стекло"

#: nodes.lua
msgid "Sweeper"
msgstr "метёлка"

#: nodes.lua
msgid "Tar"
msgstr "смола"

#: nodes.lua
msgid "Trap Desert Stone"
msgstr "мнимый пустынный камень"

#: nodes.lua
msgid "Trap Glass"
msgstr "мнимое стекло"

#: nodes.lua
msgid "Trap Glow Glass"
msgstr "мнимое светящееся стекло"

#: nodes.lua
msgid "Trap Obsidian"
msgstr "мнимый обсидиан"

#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr "мнимое обсидиановое стекло"

#: nodes.lua
msgid "Trap Sandstone"
msgstr "мнимый песчаник"

#: nodes.lua
msgid "Trap Stone"
msgstr "мнимый камень"

#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr "мнимое супер светящееся стекло"

#: nodes.lua
msgid "Wooden Tile"
msgstr "деревянная мозаика"

#: nodes.lua
msgid "Offset Wooden Tile"
msgstr "деревянная мозаика (сверху)"

# @deprecated
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr "деревянная мозаика (снизу)"

# @deprecated
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr "деревянная мозаика (слева)"

# @deprecated
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr "деревянная мозаика (справа)"

#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr "Извините, это принадлежит @1."

#: ownership.lua
msgid "someone"
msgstr "кому-то"

#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr "%s (микроблок)"

#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr "%s (плита)"

#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr "%s (наклон)"

#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr "%s (панель)"

#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr "%s (лестница)"


code:
# Template translation for More Blocks.
# Copyright © 2011-2019 Hugo Locurcio and contributors
# This file is distributed under the same license as the More Blocks package.
# CodeXP <codexp@gmx.net>, 2018.
msgid ""
msgstr ""
"Project-Id-Version: More Blocks\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-07-13 12:37+0200\n"
"PO-Revision-Date: \n"
"Last-Translator: CodeXP <codexp@gmx.net>\n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: circular_saw.lua
msgid "Circular Saw"
msgstr ""

#: circular_saw.lua
msgid ""
"Input\n"
"material"
msgstr ""

#: circular_saw.lua
msgid "Left-over"
msgstr ""

#: circular_saw.lua
msgid "Max"
msgstr ""

#: circular_saw.lua
msgid ""
"Recycle\n"
"output"
msgstr ""

#: circular_saw.lua
msgid "Set"
msgstr ""

#: circular_saw.lua
msgid "owned by @1"
msgstr ""

#: circular_saw.lua
msgid "Circular Saw is empty"
msgstr ""

#: circular_saw.lua
msgid "Circular Saw is working on @1"
msgstr ""

#: init.lua
msgid "[moreblocks] loaded."
msgstr ""

#: nodes.lua
msgid "Deprecated"
msgstr ""

#: nodes.lua
msgid "All-faces Acacia Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Aspen Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Jungle Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Pine Tree"
msgstr ""

#: nodes.lua
msgid "All-faces Tree"
msgstr ""

#: nodes.lua
msgid "Cactus Brick"
msgstr ""

#: nodes.lua
msgid "Cactus Checker"
msgstr ""

#: nodes.lua
msgid "Centered Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Checker Stone Tile"
msgstr ""

#: nodes.lua
msgid "Circle Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Clean Glass"
msgstr ""

#: nodes.lua
msgid "Coal Checker"
msgstr ""

#: nodes.lua
msgid "Coal Glass"
msgstr ""

#: nodes.lua
msgid "Coal Stone"
msgstr ""

#: nodes.lua
msgid "Coal Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Compressed Cobblestone"
msgstr ""

#: nodes.lua
msgid "Compressed Dirt"
msgstr ""

#: nodes.lua
msgid "Copper Patina Block"
msgstr ""

#: nodes.lua
msgid "Empty Shelf"
msgstr ""

#: nodes.lua
msgid "Full Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Glow Glass"
msgstr ""

#: nodes.lua
msgid "Iron Checker"
msgstr ""

#: nodes.lua
msgid "Iron Glass"
msgstr ""

#: nodes.lua
msgid "Iron Stone"
msgstr ""

#: nodes.lua
msgid "Iron Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Plankstone"
msgstr ""

#: nodes.lua
msgid "Rope"
msgstr ""

#: nodes.lua
msgid "Split Stone Tile"
msgstr ""

#: nodes.lua
msgid "Stone Bricks"
msgstr ""

#: nodes.lua
msgid "Stone Tile"
msgstr ""

#: nodes.lua
msgid "Super Glow Glass"
msgstr ""

#: nodes.lua
msgid "Sweeper"
msgstr ""

#: nodes.lua
msgid "Tar"
msgstr ""

#: nodes.lua
msgid "Trap Desert Stone"
msgstr ""

#: nodes.lua
msgid "Trap Glass"
msgstr ""

#: nodes.lua
msgid "Trap Glow Glass"
msgstr ""

#: nodes.lua
msgid "Trap Obsidian"
msgstr ""

#: nodes.lua
msgid "Trap Obsidian Glass"
msgstr ""

#: nodes.lua
msgid "Trap Sandstone"
msgstr ""

#: nodes.lua
msgid "Trap Stone"
msgstr ""

#: nodes.lua
msgid "Trap Super Glow Glass"
msgstr ""

#: nodes.lua
msgid "Wooden Tile"
msgstr ""

#: nodes.lua
msgid "Offset Wooden Tile"
msgstr ""

# @deprecated
#: nodes.lua
msgid "Downwards Wooden Tile"
msgstr ""

# @deprecated
#: nodes.lua
msgid "Leftwards Wooden Tile"
msgstr ""

# @deprecated
#: nodes.lua
msgid "Rightwards Wooden Tile"
msgstr ""

#: ownership.lua
msgid "Sorry, @1 owns that spot."
msgstr ""

#: ownership.lua
msgid "someone"
msgstr ""

#: stairsplus/common.lua
#, lua-format
msgid "%s Microblock"
msgstr ""

#: stairsplus/common.lua stairsplus/slabs.lua
#, lua-format
msgid "%s Slab"
msgstr ""

#: stairsplus/common.lua
#, lua-format
msgid "%s Slope"
msgstr ""

#: stairsplus/common.lua
#, lua-format
msgid "%s Panel"
msgstr ""

#: stairsplus/common.lua
#, lua-format
msgid "%s Stairs"
msgstr ""


code:
name = moreblocks
description = Adds various miscellaneous blocks to the game.
depends = default
optional_depends = intllib,stairs,farming,wool,basic_materials


code:
--[[
More Blocks: node definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

local S = moreblocks.S

local sound_dirt = default.node_sound_dirt_defaults()
local sound_wood = default.node_sound_wood_defaults()
local sound_stone = default.node_sound_stone_defaults()
local sound_glass = default.node_sound_glass_defaults()
local sound_leaves = default.node_sound_leaves_defaults()

-- Don't break on 0.4.14 and earlier.
local sound_metal = (default.node_sound_metal_defaults
		and default.node_sound_metal_defaults() or sound_stone)

local function tile_tiles(name)
	local tex = "moreblocks_" ..name.. ".png"
	return {tex, tex, tex, tex, tex.. "^[transformR90", tex.. "^[transformR90"}
end

local function wood_tile_replace(itemstack, placer, pointed_thing)
	local substack
	if itemstack:get_name() == "moreblocks:wood_tile_flipped" then
		substack = ItemStack("moreblocks:wood_tile")
	else -- right, left, and down variants
		substack = ItemStack("moreblocks:wood_tile_offset")
	end
	local _, success = minetest.item_place(substack, placer, pointed_thing)
	if success then
		itemstack:take_item()
	end
	return itemstack
end

local deprecated = (" (%s)"):format(S('Deprecated'))
local nodes = {
	["wood_tile"] = {
		description = S("Wooden Tile"),
		groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
		is_ground_content = false,
		paramtype2 = "facedir",
		place_param2 = 0,
		tiles = {"default_wood.png^moreblocks_wood_tile.png",
		"default_wood.png^moreblocks_wood_tile.png",
		"default_wood.png^moreblocks_wood_tile.png",
		"default_wood.png^moreblocks_wood_tile.png",
		"default_wood.png^moreblocks_wood_tile.png^[transformR90",
		"default_wood.png^moreblocks_wood_tile.png^[transformR90"},
		sounds = sound_wood,
	},
	["wood_tile_flipped"] = {
		description = S("Wooden Tile") .. deprecated,
		tiles = {"default_wood.png^moreblocks_wood_tile.png^[transformR90",
		"default_wood.png^moreblocks_wood_tile.png^[transformR90",
		"default_wood.png^moreblocks_wood_tile.png^[transformR90",
		"default_wood.png^moreblocks_wood_tile.png^[transformR90",
		"default_wood.png^moreblocks_wood_tile.png^[transformR180",
		"default_wood.png^moreblocks_wood_tile.png^[transformR180"},
		no_stairs = true,
		on_place = wood_tile_replace
	},
	["wood_tile_center"] = {
		description = S("Centered Wooden Tile"),
		groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
		is_ground_content = false,
		tiles = {"default_wood.png^moreblocks_wood_tile_center.png"},
		sounds = sound_wood,
	},
	["wood_tile_full"] = {
		description = S("Full Wooden Tile"),
		groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
		is_ground_content = false,
		tiles = tile_tiles("wood_tile_full"),
		sounds = sound_wood,
	},
	["wood_tile_offset"] = {
		description = S("Offset Wooden Tile"),
		paramtype2 = "facedir",
		place_param2 = 0,
		groups = {wood = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
		is_ground_content = false,
		tiles = {"default_wood.png^moreblocks_wood_tile_offset.png"},
		sounds = sound_wood,
		no_stairs = true,
	},
	["wood_tile_down"] = {
		description = S("Downwards Wooden Tile") .. deprecated,
		tiles = {"default_wood.png^[transformR180^moreblocks_wood_tile_offset.png^[transformR180"},
		no_stairs = true,
		on_place = wood_tile_replace
	},
	["wood_tile_left"] = {
		description = S("Leftwards Wooden Tile") .. deprecated,
		tiles = {"default_wood.png^[transformR270^moreblocks_wood_tile_offset.png^[transformR270"},
		no_stairs = true,
		on_place = wood_tile_replace
	},
	["wood_tile_right"] = {
		description = S("Rightwards Wooden Tile") .. deprecated,
		tiles = {"default_wood.png^[transformR90^moreblocks_wood_tile_offset.png^[transformR90"},
		no_stairs = true,
		on_place = wood_tile_replace
	},
	["circle_stone_bricks"] = {
		description = S("Circle Stone Bricks"),
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["grey_bricks"] = {
		description = S("Stone Bricks"),
		paramtype2 = "facedir",
		place_param2 = 0,
		groups = {cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["coal_stone_bricks"] = {
		description = S("Coal Stone Bricks"),
		paramtype2 = "facedir",
		place_param2 = 0,
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["iron_stone_bricks"] = {
		description = S("Iron Stone Bricks"),
		paramtype2 = "facedir",
		place_param2 = 0,
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["stone_tile"] = {
		description = S("Stone Tile"),
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["split_stone_tile"] = {
		description = S("Split Stone Tile"),
		paramtype2 = "facedir",
		place_param2 = 0,
		tiles = {"moreblocks_split_stone_tile_top.png",
			"moreblocks_split_stone_tile.png"},
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["checker_stone_tile"] = {
		description = S("Checker Stone Tile"),
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["tar"] = {
		description = S("Tar"),
		groups = {cracky=2, tar_block=1},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["dirt_compressed"] = {
		description = S("Compressed Dirt"),
		groups = {crumbly=2},
		is_ground_content = false,
		sounds = sound_dirt,
	},
	["cobble_compressed"] = {
		description = S("Compressed Cobblestone"),
		groups = {cracky = 1},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["plankstone"] = {
		description = S("Plankstone"),
		paramtype2 = "facedir",
		place_param2 = 0,
		groups = {cracky = 3},
		is_ground_content = false,
		tiles = tile_tiles("plankstone"),
		sounds = sound_stone,
	},
	["iron_glass"] = {
		description = S("Iron Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_glass.png^[colorize:#DEDEDE", "default_glass_detail.png^[colorize:#DEDEDE"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
	},
	["coal_glass"] = {
		description = S("Coal Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_glass.png^[colorize:#828282", "default_glass_detail.png^[colorize:#828282"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
	},
	["clean_glass"] = {
		description = S("Clean Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"moreblocks_clean_glass.png", "moreblocks_clean_glass_detail.png"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
	},
	["cactus_brick"] = {
		description = S("Cactus Brick"),
		paramtype2 = "facedir",
		place_param2 = 0,
		groups = {cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["cactus_checker"] = {
		description = S("Cactus Checker"),
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		tiles = {"default_stone.png^moreblocks_cactus_checker.png",
		"default_stone.png^moreblocks_cactus_checker.png",
		"default_stone.png^moreblocks_cactus_checker.png",
		"default_stone.png^moreblocks_cactus_checker.png",
		"default_stone.png^moreblocks_cactus_checker.png^[transformR90",
		"default_stone.png^moreblocks_cactus_checker.png^[transformR90"},
		sounds = sound_stone,
	},
	["empty_shelf"] = {
		description = S("Empty Shelf"),
		paramtype2 = "facedir",
		tiles = {"default_wood.png", "default_wood.png", "default_wood.png",
		"default_wood.png", "moreblocks_empty_shelf.png", "moreblocks_empty_shelf.png"},
		groups = {choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
		is_ground_content = false,
		sounds = sound_wood,
		furnace_burntime = 15,
		no_stairs = true,
	},
	["coal_stone"] = {
		description = S("Coal Stone"),
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["iron_stone"] = {
		description = S("Iron Stone"),
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["coal_checker"] = {
		description = S("Coal Checker"),
		tiles = {"default_stone.png^moreblocks_coal_checker.png",
		"default_stone.png^moreblocks_coal_checker.png",
		"default_stone.png^moreblocks_coal_checker.png",
		"default_stone.png^moreblocks_coal_checker.png",
		"default_stone.png^moreblocks_coal_checker.png^[transformR90",
		"default_stone.png^moreblocks_coal_checker.png^[transformR90"},
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["iron_checker"] = {
		description = S("Iron Checker"),
		tiles = {"default_stone.png^moreblocks_iron_checker.png",
		"default_stone.png^moreblocks_iron_checker.png",
		"default_stone.png^moreblocks_iron_checker.png",
		"default_stone.png^moreblocks_iron_checker.png",
		"default_stone.png^moreblocks_iron_checker.png^[transformR90",
		"default_stone.png^moreblocks_iron_checker.png^[transformR90"},
		groups = {stone = 1, cracky = 3},
		is_ground_content = false,
		sounds = sound_stone,
	},
	["trap_stone"] = {
		description = S("Trap Stone"),
		drawtype = "glasslike_framed",
		tiles = {"default_stone.png^moreblocks_trap_box.png"},
		walkable = false,
		groups = {cracky = 3},
		paramtype = "light",
		is_ground_content = false,
		sounds = sound_stone,
		no_stairs = true,
	},
	["trap_desert_stone"] = {
		description = S("Trap Desert Stone"),
		drawtype = "glasslike_framed",
		tiles = {"default_desert_stone.png^moreblocks_trap_box.png"},
		walkable = false,
		groups = {cracky = 3},
		paramtype = "light",
		is_ground_content = false,
		sounds = sound_stone,
		no_stairs = true,
	},
	["trap_glass"] = {
		description = S("Trap Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_glass.png^moreblocks_trap_box_glass.png", "default_glass_detail.png"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		walkable = false,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
		no_stairs = true,
	},
	["trap_obsidian_glass"] = {
		description = S("Trap Obsidian Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_obsidian_glass.png^moreblocks_trap_box_glass.png", "default_obsidian_glass_detail.png"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		walkable = false,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
		no_stairs = true,
	},
	["trap_obsidian"] = {
		description = S("Trap Obsidian"),
		drawtype = "glasslike_framed",
		tiles = {"default_obsidian.png^moreblocks_trap_box.png"},
		walkable = false,
		groups = {cracky = 1, level = 2},
		paramtype = "light",
		is_ground_content = false,
		sounds = sound_stone,
		no_stairs = true,
	},
	["trap_sandstone"] = {
		description = S("Trap Sandstone"),
		drawtype = "glasslike_framed",
		tiles = {"default_sandstone.png^moreblocks_trap_box.png"},
		walkable = false,
		groups = {crumbly = 1, cracky = 3},
		paramtype = "light",
		is_ground_content = false,
		sounds = sound_stone,
		no_stairs = true,
	},
	["all_faces_tree"] = {
		description = S("All-faces Tree"),
		tiles = {"default_tree_top.png"},
		groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
		sounds = sound_wood,
		furnace_burntime = 30,
	},
	["all_faces_jungle_tree"] = {
		description = S("All-faces Jungle Tree"),
		tiles = {"default_jungletree_top.png"},
		groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
		sounds = sound_wood,
		furnace_burntime = 38,
	},
	["all_faces_pine_tree"] = {
		description = S("All-faces Pine Tree"),
		tiles = {"default_pine_tree_top.png"},
		groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3},
		sounds = sound_wood,
		furnace_burntime = 26,
	},
	["all_faces_acacia_tree"] = {
		description = S("All-faces Acacia Tree"),
		tiles = {"default_acacia_tree_top.png"},
		groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
		sounds = sound_wood,
		furnace_burntime = 34,
	},
	["all_faces_aspen_tree"] = {
		description = S("All-faces Aspen Tree"),
		tiles = {"default_aspen_tree_top.png"},
		groups = {tree = 1, choppy = 3, oddly_breakable_by_hand = 1, flammable = 3},
		sounds = sound_wood,
		furnace_burntime = 22,
	},
	["glow_glass"] = {
		description = S("Glow Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_glass.png^[colorize:#E9CD61", "default_glass_detail.png^[colorize:#E9CD61"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		light_source = 11,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
	},
	["trap_glow_glass"] = {
		description = S("Trap Glow Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_glass.png^[colorize:#E9CD61^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#E9CD61"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		light_source = 11,
		walkable = false,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
		no_stairs = true,
	},
	["super_glow_glass"] = {
		description = S("Super Glow Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_glass.png^[colorize:#FFFF78", "default_glass_detail.png^[colorize:#FFFF78"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		light_source = default.LIGHT_MAX,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
	},
	["trap_super_glow_glass"] = {
		description = S("Trap Super Glow Glass"),
		drawtype = "glasslike_framed_optional",
		tiles = {"default_glass.png^[colorize:#FFFF78^moreblocks_trap_box_glass.png", "default_glass_detail.png^[colorize:#FFFF78"},
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		light_source = default.LIGHT_MAX,
		walkable = false,
		groups = {cracky = 3, oddly_breakable_by_hand = 3},
		sounds = sound_glass,
		no_stairs = true,
	},
	["rope"] = {
		description = S("Rope"),
		drawtype = "signlike",
		inventory_image = "moreblocks_rope.png",
		wield_image = "moreblocks_rope.png",
		paramtype = "light",
		sunlight_propagates = true,
		is_ground_content = false,
		paramtype2 = "wallmounted",
		walkable = false,
		climbable = true,
		selection_box = {type = "wallmounted",},
		groups = {snappy = 3, flammable = 2},
		sounds = sound_leaves,
		no_stairs = true,
	},
	["copperpatina"] = {
		description = S("Copper Patina Block"),
		groups = {cracky = 1, level = 2},
		is_ground_content = false,
		sounds = sound_metal,
	},
}

for name, def in pairs(nodes) do
	def.tiles = def.tiles or {"moreblocks_" ..name.. ".png"}
	minetest.register_node("moreblocks:" ..name, def)
	minetest.register_alias(name, "moreblocks:" ..name)

	def_copy = table.copy(def)

	-- Use the primary tile for all sides of cut glasslike nodes.
	-- This makes them easier to see
	if
		#def_copy.tiles > 1 and
		def_copy.drawtype and
		def_copy.drawtype == "glasslike_framed" or
		def_copy.drawtype == "glasslike_framed_optional"
	then
		def.tiles = {def_copy.tiles[1]}
	end

	if not def.no_stairs then
		local groups = {}
		for k, v in pairs(def.groups) do groups[k] = v end
		stairsplus:register_all("moreblocks", name, "moreblocks:" ..name, {
			description = def.description,
			groups = groups,
			tiles = def.tiles,
			sunlight_propagates = def.sunlight_propagates,
			light_source = def.light_source,
			sounds = def.sounds,
		})
	end
end

-- Items

minetest.register_craftitem("moreblocks:sweeper", {
	description = S("Sweeper"),
	inventory_image = "moreblocks_sweeper.png",
})


code:
--[[
More Blocks: ownership handling

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

local S = moreblocks.S

function moreblocks.node_is_owned(pos, placer)
	local ownername = false
	if type(IsPlayerNodeOwner) == "function" then					-- node_ownership mod
		if HasOwner(pos, placer) then						-- returns true if the node is owned
			if not IsPlayerNodeOwner(pos, placer:get_player_name()) then
				if type(getLastOwner) == "function" then		-- ...is an old version
					ownername = getLastOwner(pos)
				elseif type(GetNodeOwnerName) == "function" then	-- ...is a recent version
					ownername = GetNodeOwnerName(pos)
				else
					ownername = S("someone")
				end
			end
		end

	elseif type(isprotect)=="function" then						-- glomie's protection mod
		if not isprotect(5, pos, placer) then
			ownername = S("someone")
		end
	elseif type(protector)=="table" and type(protector.can_dig)=="function" then					-- Zeg9's protection mod
		if not protector.can_dig(5, pos, placer) then
			ownername = S("someone")
		end
	end

	if ownername ~= false then
		minetest.chat_send_player( placer:get_player_name(), S("Sorry, @1 owns that spot.", ownername) )
		return true
	else
		return false
	end
end


code:
--[[
More Blocks: redefinitions of default stuff

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Redefinitions of some default crafting recipes:

minetest.register_craft({
	output = "default:ladder 4",
	recipe = {
		{"default:stick", "", "default:stick"},
		{"default:stick", "default:stick", "default:stick"},
		{"default:stick", "", "default:stick"},
	}
})

minetest.clear_craft({
	recipe = {
		{"default:papyrus", "default:papyrus", "default:papyrus"}
	}
})
minetest.register_craft({
	output = "default:paper 4",
	recipe = {
		{"default:papyrus", "default:papyrus", "default:papyrus"},
	}
})

minetest.register_craft({
	output = "default:rail 24",
	recipe = {
		{"default:steel_ingot", "", "default:steel_ingot"},
		{"default:steel_ingot", "default:stick", "default:steel_ingot"},
		{"default:steel_ingot", "", "default:steel_ingot"},
	}
})

minetest.register_craft({
	type = "toolrepair",
	additional_wear = -0.10, -- Tool repair buff (10% bonus instead of 2%).
})


code:
# If enabled, Stairs+ nodes will be displayed in the inventory when playing in creative mode.
moreblocks.stairsplus_in_creative_inventory (Display Stairs+ nodes in creative inventory) bool true


code:
# API documentation for Stairs+

* `stairsplus:register_all(modname, subname, recipeitem, fields)`
	Registers a stair, slab, panel, microblock, and any other types of
	nodes to be added in the future.
	This also registers the node with the circular saw.
	Example:
	```lua
	stairsplus:register_all("moreblocks", "wood", "default:wood", {
		description = "Wooden",
		tiles = {"default_wood.png"},
		groups = {oddly_breakabe_by_hand=1},
		sounds = default.node_sound_wood_defaults(),
	})
	```
The following register only a particular type of microblock.
You will probably never want to use them directly:

* `stairsplus:register_stair(modname, subname, recipeitem, fields)`
* `stairsplus:register_slab(modname, subname, recipeitem, fields)`
* `stairsplus:register_panel(modname, subname, recipeitem, fields)`
* `stairsplus:register_micro(modname, subname, recipeitem, fields)`
* `stairsplus:register_slope(modname, subname, recipeitem, fields)`

If you only want to register a subset of stairsplus nodes,
you can use the `stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields)` function.
The subset table should have the following format:

```lua
    local subset = {
    	{ "micro", "" },
    	{ "micro", "_1" },
    	{ "micro", "_2" },
    	{ "micro", "_4" },
    	{ "micro", "_12" },
    	{ "micro", "_14" },
    	{ "micro", "_15" },
    	{ "panel", "" },
    	{ "panel", "_1" },
    	{ "panel", "_2" },
    	{ "panel", "_4" },
    	{ "panel", "_12" },
    	{ "panel", "_14" },
    	{ "panel", "_15" },
    	{ "slab",  "" },
    	{ "slab",  "_quarter" },
    	{ "slab",  "_three_quarter" },
    	{ "slab",  "_1" },
    	{ "slab",  "_2" },
    	{ "slab",  "_14" },
    	{ "slab",  "_15" },
    	{ "slab",  "_two_sides" },
    	{ "slab",  "_three_sides" },
    	{ "slab",  "_three_sides_u" },
    	{ "slope", "" },
    	{ "slope", "_half" },
    	{ "slope", "_half_raised" },
    	{ "slope", "_inner" },
    	{ "slope", "_inner_half" },
    	{ "slope", "_inner_half_raised" },
    	{ "slope", "_inner_cut" },
    	{ "slope", "_inner_cut_half" },
    	{ "slope", "_inner_cut_half_raised" },
    	{ "slope", "_outer" },
    	{ "slope", "_outer_half" },
    	{ "slope", "_outer_half_raised" },
    	{ "slope", "_outer_cut" },
    	{ "slope", "_outer_cut_half" },
    	{ "slope", "_outer_cut_half_raised" },
    	{ "slope", "_cut" },
    	{ "stair", "" },
    	{ "stair", "_half" },
    	{ "stair", "_right_half" },
    	{ "stair", "_inner" },
    	{ "stair", "_outer" },
    	{ "stair", "_alt" },
    	{ "stair", "_alt_1" },
    	{ "stair", "_alt_2" },
    	{ "stair", "_alt_4" },
    }
```
You can remove entries as needed.


code:
--[[
More Blocks: alias definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

local function register_stairsplus_alias(modname, origname, newname)
	minetest.register_alias(modname.. ":slab_" ..origname, "moreblocks:slab_" ..newname)
	minetest.register_alias(modname.. ":slab_" ..origname.. "_inverted", "moreblocks:slab_" ..newname.. "_inverted")
	minetest.register_alias(modname.. ":slab_" ..origname.. "_wall", "moreblocks:slab_" ..newname.. "_wall")
	minetest.register_alias(modname.. ":slab_" ..origname.. "_quarter", "moreblocks:slab_" ..newname.. "_quarter")
	minetest.register_alias(modname.. ":slab_" ..origname.. "_quarter_inverted", "moreblocks:slab_" ..newname.. "_quarter_inverted")
	minetest.register_alias(modname.. ":slab_" ..origname.. "_quarter_wall", "moreblocks:slab_" ..newname.. "_quarter_wall")
	minetest.register_alias(modname.. ":slab_" ..origname.. "_three_quarter", "moreblocks:slab_" ..newname.. "_three_quarter")
	minetest.register_alias(modname.. ":slab_" ..origname.. "_three_quarter_inverted", "moreblocks:slab_" ..newname.. "_three_quarter_inverted")
	minetest.register_alias(modname.. ":slab_" ..origname.. "_three_quarter_wall", "moreblocks:slab_" ..newname.. "_three_quarter_wall")
	minetest.register_alias(modname.. ":stair_" ..origname, "moreblocks:stair_" ..newname)
	minetest.register_alias(modname.. ":stair_" ..origname.. "_inverted", "moreblocks:stair_" ..newname.. "_inverted")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_wall", "moreblocks:stair_" ..newname.. "_wall")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_wall_half", "moreblocks:stair_" ..newname.. "_wall_half")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_wall_half_inverted", "moreblocks:stair_" ..newname.. "_wall_half_inverted")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_half", "moreblocks:stair_" ..newname.. "_half")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_half_inverted", "moreblocks:stair_" ..newname.. "_half_inverted")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_right_half", "moreblocks:stair_" ..newname.. "_right_half")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_right_half_inverted", "moreblocks:stair_" ..newname.. "_right_half_inverted")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_wall_half", "moreblocks:stair_" ..newname.. "_wall_half")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_wall_half_inverted", "moreblocks:stair_" ..newname.. "_wall_half_inverted")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_inner", "moreblocks:stair_" ..newname.. "_inner")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_inner_inverted", "moreblocks:stair_" ..newname.. "_inner_inverted")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_outer", "moreblocks:stair_" ..newname.. "_outer")
	minetest.register_alias(modname.. ":stair_" ..origname.. "_outer_inverted", "moreblocks:stair_" ..newname.. "_outer_inverted")
	minetest.register_alias(modname.. ":panel_" ..origname.. "_bottom", "moreblocks:panel_" ..newname.. "_bottom")
	minetest.register_alias(modname.. ":panel_" ..origname.. "_top", "moreblocks:panel_" ..newname.. "_top")
	minetest.register_alias(modname.. ":panel_" ..origname.. "_vertical", "moreblocks:panel_" ..newname.. "_vertical")
	minetest.register_alias(modname.. ":micro_" ..origname.. "_bottom", "moreblocks:micro_" ..newname.. "_bottom")
	minetest.register_alias(modname.. ":micro_" ..origname.. "_top", "moreblocks:micro_" ..newname.. "_top")
end

register_stairsplus_alias("stairsplus", "stone", "stone")
register_stairsplus_alias("stairsplus", "wood", "wood")
register_stairsplus_alias("stairsplus", "pinewood", "pinewood")
register_stairsplus_alias("stairsplus", "cobble", "cobble")
register_stairsplus_alias("stairsplus", "brick", "brick")
register_stairsplus_alias("stairsplus", "sandstone", "sandstone")
register_stairsplus_alias("stairsplus", "glass", "glass")
register_stairsplus_alias("stairsplus", "tree", "tree")
register_stairsplus_alias("stairsplus", "jungletree", "jungletree")
register_stairsplus_alias("stairsplus", "pinetree", "pinetree")
register_stairsplus_alias("stairsplus", "desert_stone", "desert_stone")
register_stairsplus_alias("stairsplus", "steelblock", "steelblock")
register_stairsplus_alias("stairsplus", "mossycobble", "mossycobble")

register_stairsplus_alias("moreblocks", "coalstone", "coal_stone")
register_stairsplus_alias("moreblocks", "junglewood", "jungle_wood")
register_stairsplus_alias("moreblocks", "circlestonebrick", "circle_stone_bricks")
register_stairsplus_alias("moreblocks", "ironstone", "iron_stone")
register_stairsplus_alias("moreblocks", "coalglass", "coal_glass")
register_stairsplus_alias("moreblocks", "ironglass", "iron_glass")
register_stairsplus_alias("moreblocks", "glowglass", "glow_glass")
register_stairsplus_alias("moreblocks", "superglowglass", "super_glow_glass")
register_stairsplus_alias("moreblocks", "coalchecker", "coal_checker")
register_stairsplus_alias("moreblocks", "ironchecker", "iron_checker")
register_stairsplus_alias("moreblocks", "cactuschecker", "cactus_checker")
register_stairsplus_alias("moreblocks", "ironstonebrick", "iron_stone_bricks")
register_stairsplus_alias("moreblocks", "stonesquare", "stone_tile")
register_stairsplus_alias("moreblocks", "splitstonesquare", "split_stone_tile")
register_stairsplus_alias("moreblocks", "woodtile", "wood_tile")
register_stairsplus_alias("moreblocks", "woodtile_centered", "wood_tile_centered")
register_stairsplus_alias("moreblocks", "woodtile_full", "wood_tile_full")


code:
--[[
More Blocks: registrations

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

local S = moreblocks.S

local descriptions = {
	["micro"] = S("%s Microblock"),
	["slab"] = S("%s Slab"),
	["slope"] = S("%s Slope"),
	["panel"] = S("%s Panel"),
	["stair"] = S("%s Stairs"),
}

stairsplus.register_single = function(category, alternate, info, modname, subname, recipeitem, fields)
	local desc_base = descriptions[category]:format(fields.description)
	local def = {}

	if category ~= "slab" then
		def = table.copy(info)
	end

	-- copy fields to def
	for k, v in pairs(fields) do
		def[k] = v
	end

	def.drawtype = "nodebox"
	def.paramtype = "light"
	def.paramtype2 = def.paramtype2 or "facedir"

	-- This makes node rotation work on placement
	def.place_param2 = nil

	-- Darken light sources slightly to make up for their smaller visual size
	def.light_source = math.max(0, (def.light_source or 0) - 1)

	def.on_place = minetest.rotate_node
	def.groups = stairsplus:prepare_groups(fields.groups)

	if category == "slab" then
		if type(info) ~= "table" then
			def.node_box = {
				type = "fixed",
				fixed = {-0.5, -0.5, -0.5, 0.5, (info/16)-0.5, 0.5},
			}
			def.description = ("%s (%d/16)"):format(desc_base, info)
		else
			def.node_box = {
				type = "fixed",
				fixed = info,
			}
			def.description = desc_base .. alternate:gsub("_", " "):gsub("(%a)(%S*)", function(a, b) return a:upper() .. b end)
		end
	else
		def.description = desc_base
		if category == "slope" then
			def.drawtype = "mesh"
		elseif category == "stair" and alternate == "" then
			def.groups.stair = 1
		end
	end

	if fields.drop and not (type(fields.drop) == "table") then
		def.drop = modname.. ":" .. category .. "_" .. fields.drop .. alternate
	end

	minetest.register_node(":" ..modname.. ":" .. category .. "_" .. subname .. alternate, def)
	stairsplus.register_recipes(category, alternate, modname, subname, recipeitem)
end


code:
--[[
More Blocks: conversion

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Function to convert all stairs/slabs/etc nodes from
-- inverted, wall, etc to regular + 6d facedir

local dirs1 = {21, 20, 23, 22, 21}
local dirs2 = {15, 8, 17, 6, 15}
local dirs3 = {14, 11, 16, 5, 14}

function stairsplus:register_6dfacedir_conversion(modname, material)
	--print("Register stairsplus 6d facedir conversion")
	--print('ABM for '..modname..' "'..material..'"')

	local objects_list1 = {
		modname.. ":slab_" ..material.. "_inverted",
		modname.. ":slab_" ..material.. "_quarter_inverted",
		modname.. ":slab_" ..material.. "_three_quarter_inverted",
		modname.. ":stair_" ..material.. "_inverted",
		modname.. ":stair_" ..material.. "_wall",
		modname.. ":stair_" ..material.. "_wall_half",
		modname.. ":stair_" ..material.. "_wall_half_inverted",
		modname.. ":stair_" ..material.. "_half_inverted",
		modname.. ":stair_" ..material.. "_right_half_inverted",
		modname.. ":panel_" ..material.. "_vertical",
		modname.. ":panel_" ..material.. "_top",
	}

	local objects_list2 = {
		modname.. ":slab_" ..material.. "_wall",
		modname.. ":slab_" ..material.. "_quarter_wall",
		modname.. ":slab_" ..material.. "_three_quarter_wall",
		modname.. ":stair_" ..material.. "_inner_inverted",
		modname.. ":stair_" ..material.. "_outer_inverted",
		modname.. ":micro_" ..material.. "_top"
	}

	for _, object in pairs(objects_list1) do
		local flip_upside_down = false
		local flip_to_wall = false

		local dest_object = object

		if string.find(dest_object, "_inverted") then
			flip_upside_down = true
			dest_object = string.gsub(dest_object, "_inverted", "")
		end

		if string.find(object, "_top") then
			flip_upside_down = true
			dest_object = string.gsub(dest_object, "_top", "")
		end

		if string.find(dest_object, "_wall") then
			flip_to_wall = true
			dest_object = string.gsub(dest_object, "_wall", "")
		end

		if string.find(dest_object, "_vertical") then
			flip_to_wall = true
			dest_object = string.gsub(dest_object, "_vertical", "")
		end

		if string.find(dest_object, "_half") and not string.find(dest_object, "_right_half") then
			dest_object = string.gsub(dest_object, "_half", "_right_half")
		elseif string.find(dest_object, "_right_half") then
			dest_object = string.gsub(dest_object, "_right_half", "_half")
		end

		--print("    +---> convert " ..object)
		--print("    |     to " ..dest_object)

		minetest.register_abm({
			nodenames = {object},
			interval = 1,
			chance = 1,
			action = function(pos, node, active_object_count, active_object_count_wider)
				local fdir = node.param2 or 0
				local nfdir

				if flip_upside_down and not flip_to_wall then
					nfdir = dirs1[fdir + 2]
				elseif flip_to_wall and not flip_upside_down then
					nfdir = dirs2[fdir + 1]
				elseif flip_to_wall and flip_upside_down then
					nfdir = dirs3[fdir + 2]
				end
				minetest.set_node(pos, {name = dest_object, param2 = nfdir})
			end
		})
	end

	for _, object in pairs(objects_list2) do
		local flip_upside_down = false
		local flip_to_wall = false

		local dest_object = object

		if string.find(dest_object, "_inverted") then
			flip_upside_down = true
			dest_object = string.gsub(dest_object, "_inverted", "")
		end

		if string.find(dest_object, "_top") then
			flip_upside_down = true
			dest_object = string.gsub(dest_object, "_top", "")
		end

		if string.find(dest_object, "_wall") then
			flip_to_wall = true
			dest_object = string.gsub(dest_object, "_wall", "")
		end

		--print("    +---> convert " ..object)
		--print("    |     to " ..dest_object)

		minetest.register_abm({
			nodenames = {object},
			interval = 1,
			chance = 1,
			action = function(pos, node, active_object_count, active_object_count_wider)
				local fdir = node.param2
				local nfdir = 20

				if flip_upside_down and not flip_to_wall then
					nfdir = dirs1[fdir + 1]
				elseif flip_to_wall and not flip_upside_down then
					nfdir = dirs2[fdir + 2]

				end
				minetest.set_node(pos, {name = dest_object, param2 = nfdir})
			end
		})
	end
end


code:
--[[
More Blocks: microblock definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

--[[
Subset table should have the following format: (You can remove entries as needed.)

local subset = {
	{ "micro", "" },
	{ "micro", "_1" },
	{ "micro", "_2" },
	{ "micro", "_4" },
	{ "micro", "_12" },
	{ "micro", "_14" },
	{ "micro", "_15" },
	{ "panel", "" },
	{ "panel", "_1" },
	{ "panel", "_2" },
	{ "panel", "_4" },
	{ "panel", "_12" },
	{ "panel", "_14" },
	{ "panel", "_15" },
	{ "slab",  "" },
	{ "slab",  "_quarter" },
	{ "slab",  "_three_quarter" },
	{ "slab",  "_1" },
	{ "slab",  "_2" },
	{ "slab",  "_14" },
	{ "slab",  "_15" },
	{ "slab",  "_two_sides" },
	{ "slab",  "_three_sides" },
	{ "slab",  "_three_sides_u" },
	{ "slope", "" },
	{ "slope", "_half" },
	{ "slope", "_half_raised" },
	{ "slope", "_inner" },
	{ "slope", "_inner_half" },
	{ "slope", "_inner_half_raised" },
	{ "slope", "_inner_cut" },
	{ "slope", "_inner_cut_half" },
	{ "slope", "_inner_cut_half_raised" },
	{ "slope", "_outer" },
	{ "slope", "_outer_half" },
	{ "slope", "_outer_half_raised" },
	{ "slope", "_outer_cut" },
	{ "slope", "_outer_cut_half" },
	{ "slope", "_outer_cut_half_raised" },
	{ "slope", "_cut" },
	{ "stair", "" },
	{ "stair", "_half" },
	{ "stair", "_right_half" },
	{ "stair", "_inner" },
	{ "stair", "_outer" },
	{ "stair", "_alt" },
	{ "stair", "_alt_1" },
	{ "stair", "_alt_2" },
	{ "stair", "_alt_4" },
}
--]]

-- luacheck: no unused
local function register_custom_subset(subset, modname, subname, recipeitem, groups, images, description, drop, light)
	stairsplus:register_custom_subset(subset, modname, subname, recipeitem, {
		groups = groups,
		tiles = images,
		description = description,
		drop = drop,
		light_source = light,
		sounds = default.node_sound_stone_defaults(),
	})
end

function stairsplus:register_custom_subset_alias(subset, modname_old, subname_old, modname_new, subname_new)
	local subset_copy = table.copy(subset)
	for k, v in pairs(subset_copy) do
		minetest.register_alias(modname_old .. ":" .. v[1] .. "_" .. subname_old .. v[2], modname_new .. ":" .. v[1] .. "_" .. subname_new .. v[2])
	end
end

function stairsplus:register_custom_subset_alias_force(subset, modname_old, subname_old, modname_new, subname_new)
	local subset_copy = table.copy(subset)
	for k, v in pairs(subset_copy) do
		minetest.register_alias_force(modname_old .. ":" .. v[1] .. "_" .. subname_old .. v[2], modname_new .. ":" .. v[1] .. "_" .. subname_new .. v[2])
	end
end

function stairsplus:register_custom_subset(subset, modname, subname, recipeitem, fields)
	local subset_copy = table.copy(subset)
	for k, v in pairs(subset_copy) do
		stairsplus.register_single(v[1], v[2], stairsplus.defs[v[1]][v[2]], modname, subname, recipeitem, fields)
	end

	circular_saw.known_nodes[recipeitem] = {modname, subname}
end


code:
--[[
More Blocks: Stairs+

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Nodes will be called <modname>:{stair,slab,panel,micro,slope}_<subname>

local modpath = minetest.get_modpath("moreblocks").. "/stairsplus"

stairsplus = {}
stairsplus.expect_infinite_stacks = false

stairsplus.shapes_list = {}

if
	not minetest.get_modpath("unified_inventory")
	and minetest.settings:get_bool("creative_mode")
then
	stairsplus.expect_infinite_stacks = true
end

function stairsplus:prepare_groups(groups)
	local result = {}
	if groups then
		for k, v in pairs(groups) do
			if k ~= "wood" and k ~= "stone" then
				result[k] = v
			end
		end
	end
	if not moreblocks.config.stairsplus_in_creative_inventory then
		result.not_in_creative_inventory = 1
	end
	return result
end

function stairsplus:register_all(modname, subname, recipeitem, fields)
	self:register_stair(modname, subname, recipeitem, fields)
	self:register_slab(modname, subname, recipeitem, fields)
	self:register_slope(modname, subname, recipeitem, fields)
	self:register_panel(modname, subname, recipeitem, fields)
	self:register_micro(modname, subname, recipeitem, fields)
	-- self:register_6dfacedir_conversion(modname, subname) -- Not needed as of Q3 2013, uncomment to fix old maps.
end

function stairsplus:register_alias_all(modname_old, subname_old, modname_new, subname_new)
	self:register_stair_alias(modname_old, subname_old, modname_new, subname_new)
	self:register_slab_alias(modname_old, subname_old, modname_new, subname_new)
	self:register_slope_alias(modname_old, subname_old, modname_new, subname_new)
	self:register_panel_alias(modname_old, subname_old, modname_new, subname_new)
	self:register_micro_alias(modname_old, subname_old, modname_new, subname_new)
end
function stairsplus:register_alias_force_all(modname_old, subname_old, modname_new, subname_new)
	self:register_stair_alias_force(modname_old, subname_old, modname_new, subname_new)
	self:register_slab_alias_force(modname_old, subname_old, modname_new, subname_new)
	self:register_slope_alias_force(modname_old, subname_old, modname_new, subname_new)
	self:register_panel_alias_force(modname_old, subname_old, modname_new, subname_new)
	self:register_micro_alias_force(modname_old, subname_old, modname_new, subname_new)
end

-- luacheck: no unused
local function register_stair_slab_panel_micro(modname, subname, recipeitem, groups, images, description, drop, light)
	stairsplus:register_all(modname, subname, recipeitem, {
		groups = groups,
		tiles = images,
		description = description,
		drop = drop,
		light_source = light
	})
end

-- dofile(modpath.. "/aliases.lua") -- Not needed as of Q2 2013, uncomment to fix old maps.
-- dofile(modpath.. "/conversion.lua") -- Not needed as of Q2 2013, uncomment to fix old maps.
dofile(modpath .. "/defs.lua")
dofile(modpath .. "/recipes.lua")
dofile(modpath .. "/common.lua")
dofile(modpath .. "/stairs.lua")
dofile(modpath .. "/slabs.lua")
dofile(modpath .. "/slopes.lua")
dofile(modpath .. "/panels.lua")
dofile(modpath .. "/microblocks.lua")
dofile(modpath .. "/custom.lua")
dofile(modpath .. "/registrations.lua")


code:
--[[
More Blocks: microblock definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Node will be called <modname>:micro_<subname>

-- luacheck: no unused
local function register_micro(modname, subname, recipeitem, groups, images, description, drop, light)
	stairsplus:register_micro(modname, subname, recipeitem, {
		groups = groups,
		tiles = images,
		description = description,
		drop = drop,
		light_source = light,
		sounds = default.node_sound_stone_defaults(),
	})
end

function stairsplus:register_micro_alias(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["micro"])
	for alternate, def in pairs(defs) do
		minetest.register_alias(modname_old .. ":micro_" .. subname_old .. alternate, modname_new .. ":micro_" .. subname_new .. alternate)
	end
end

function stairsplus:register_micro_alias_force(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["micro"])
	for alternate, def in pairs(defs) do
		minetest.register_alias_force(modname_old .. ":micro_" .. subname_old .. alternate, modname_new .. ":micro_" .. subname_new .. alternate)
	end
end

function stairsplus:register_micro(modname, subname, recipeitem, fields)
	local defs = table.copy(stairsplus.defs["micro"])
	for alternate, def in pairs(defs) do
		stairsplus.register_single("micro", alternate, def, modname, subname, recipeitem, fields)
	end

	circular_saw.known_nodes[recipeitem] = {modname, subname}
end


code:
--[[
More Blocks: panel definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Node will be called <modname>:panel_<subname>

-- luacheck: no unused
local function register_panel(modname, subname, recipeitem, groups, images, description, drop, light)
	stairsplus:register_panel(modname, subname, recipeitem, {
		groups = groups,
		tiles = images,
		description = description,
		drop = drop,
		light_source = light,
		sounds = default.node_sound_stone_defaults(),
	})
end

function stairsplus:register_panel_alias(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["panel"])
	for alternate, def in pairs(defs) do
		minetest.register_alias(modname_old .. ":panel_" .. subname_old .. alternate, modname_new .. ":panel_" .. subname_new .. alternate)
	end
end

function stairsplus:register_panel_alias_force(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["panel"])
	for alternate, def in pairs(defs) do
		minetest.register_alias_force(modname_old .. ":panel_" .. subname_old .. alternate, modname_new .. ":panel_" .. subname_new .. alternate)
	end
end

function stairsplus:register_panel(modname, subname, recipeitem, fields)
	local defs = table.copy(stairsplus.defs["panel"])
	for alternate, def in pairs(defs) do
		stairsplus.register_single("panel", alternate, def, modname, subname, recipeitem, fields)
	end

	circular_saw.known_nodes[recipeitem] = {modname, subname}
end


code:
--[[
More Blocks: Stairs+

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

stairsplus.register_recipes = function(category, alternate, modname, subname, recipeitem)
	if category == "micro" and alternate == "" then
		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":micro_" .. subname .. " 7",
			recipe = {modname .. ":stair_" .. subname .. "_inner"},
		})

		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":micro_" .. subname .. " 6",
			recipe = {modname .. ":stair_" .. subname},
		})

		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":micro_" .. subname .. " 5",
			recipe = {modname .. ":stair_" .. subname .. "_outer"},
		})

		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":micro_" .. subname .. " 4",
			recipe = {modname .. ":slab_" .. subname},
		})

		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":micro_" .. subname .. " 4",
			recipe = {modname .. ":stair_" .. subname .. "_alt"},
		})

		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":micro_" .. subname .. " 3",
			recipe = {modname .. ":stair_" .. subname .. "_right_half"},
		})

		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":micro_" .. subname .. " 2",
			recipe = {modname .. ":panel_" .. subname},
		})

		minetest.register_craft({
			type = "shapeless",
			output = recipeitem,
			recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
		})

		minetest.register_alias(modname .. ":micro_" .. subname .. "_bottom", modname .. ":micro_" .. subname)
	elseif category == "panel" and alternate == "" then
		minetest.register_craft({
			output = modname .. ":panel_" .. subname .. " 12",
			recipe = {
				{recipeitem, ""},
				{recipeitem, recipeitem},
			},
		})

		minetest.register_craft({
			output = modname .. ":panel_" .. subname .. " 12",
			recipe = {
				{"", recipeitem},
				{recipeitem, recipeitem},
			},
		})

		minetest.register_craft({
			type = "shapeless",
			output = modname .. ":panel_" .. subname,
			recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
		})

		minetest.register_craft({
			type = "shapeless",
			output = recipeitem,
			recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname},
		})

		minetest.register_alias(modname.. ":panel_" ..subname.. "_bottom", modname.. ":panel_" ..subname)
	elseif category == "slab" then
		if alternate == "" then
			minetest.register_craft({
				output = modname .. ":slab_" .. subname .. " 6",
				recipe = {{recipeitem, recipeitem, recipeitem}},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname,
				recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
			})

			-- uncomment this rule when conflict is no longer likely to happen
			--	https://github.com/minetest/minetest/issues/2881
			-- minetest.register_craft({
			--	type = "shapeless",
			--	output = modname .. ":slab_" .. subname,
			--	recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname},
			-- })

			-- then remove these two
			minetest.register_craft({
				output = modname .. ":slab_" .. subname,
				recipe = {{modname .. ":panel_" .. subname, modname .. ":panel_" .. subname}},
			})

			minetest.register_craft({
				output = modname .. ":slab_" .. subname,
				recipe = {
					{modname .. ":panel_" .. subname},
					{modname .. ":panel_" .. subname},
				},
			})
			------------------------------

			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. " 3",
				recipe = {modname .. ":stair_" .. subname, modname .. ":stair_" .. subname},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname,
				recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname,
				recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname,
				recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname,
				recipe =  {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname,
				recipe =  {modname .. ":slope_" .. subname .. "_outer_half", modname .. ":slope_" .. subname .. "_inner_half"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname,
				recipe =  {modname .. ":slope_" .. subname .. "_outer_cut_half", modname .. ":slope_" .. subname .. "_inner_cut_half"},
			})
		elseif alternate == "_quarter" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_quarter"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_quarter",
				recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_quarter",
				recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"},
			})
		elseif alternate == "_three_quarter" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_three_quarter",
				recipe = {modname .. ":slab_" .. subname, modname .. ":slab_" .. subname .. "_quarter"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_three_quarter",
				recipe = {modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter", modname .. ":slab_" .. subname .. "_quarter"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_three_quarter",
				recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
			})
		elseif alternate == "_2" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_2"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_2",
				recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"},
			})
		elseif alternate == "_14" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_14",
				recipe = {modname .. ":slab_" .. subname .. "_three_quarter", modname .. ":slab_" .. subname .. "_2"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_14",
				recipe = {modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2", modname .. ":slab_" .. subname .. "_2"},
			})
		elseif alternate == "_15" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe = {modname .. ":slab_" .. subname .. "_15", modname .. ":slab_" .. subname .. "_1"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slab_" .. subname .. "_15",
				recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_1"},
			})
		end
	elseif category == "slope" then
		if alternate == "" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname, modname .. ":slope_" .. subname},
			})
		elseif alternate == "_half" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half_raised"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half",
					modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half"},
			})
		elseif alternate == "_outer" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_outer", modname .. ":slope_" .. subname .. "_inner"},
			})
		elseif alternate == "_outer_half" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_outer_half", modname .. ":slope_" .. subname .. "_inner_half_raised"},
			})
		elseif alternate == "_inner_half" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_outer_half_raised", modname .. ":slope_" .. subname .. "_inner_half"},
			})
		elseif alternate == "_outer_cut" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_outer_cut", modname .. ":slope_" .. subname .. "_inner_cut"},
			})
		elseif alternate == "_outer_cut_half" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_outer_cut_half", modname .. ":slope_" .. subname .. "_inner_cut_half_raised"},
			})
		elseif alternate == "_cut" then
			minetest.register_craft({
				type = "shapeless",
				output = recipeitem,
				recipe =  {modname .. ":slope_" .. subname .. "_cut", modname .. ":slope_" .. subname .. "_cut"},
			})
		elseif alternate == "_half_raised" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slope_" .. subname .. "_half_raised",
				recipe =  {modname .. ":slope_" .. subname .. "_half", modname .. ":slope_" .. subname .. "_half",
					modname .. ":slope_" .. subname .. "_half"},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slope_" .. subname .. "_half_raised",
				recipe =  {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_half"},
			})
		elseif alternate == "_inner_half_raised" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slope_" .. subname .. "_inner_half_raised",
				recipe =  {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_half"},
			})
		elseif alternate == "_outer_half_raised" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slope_" .. subname .. "_outer_half_raised",
				recipe =  {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_outer_half"},
			})
		elseif alternate == "_inner_cut_half_raised" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":slope_" .. subname .. "_inner_cut_half_raised",
				recipe =  {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_cut_half"},
			})
		end
	elseif category == "stair" then
		if alternate == "" then
			minetest.register_craft({
				output = modname .. ":stair_" .. subname .. " 8",
				recipe = {
					{recipeitem, "", ""},
					{recipeitem, recipeitem, ""},
					{recipeitem, recipeitem, recipeitem},
				},
			})

			minetest.register_craft({
				output = modname .. ":stair_" .. subname .. " 8",
				recipe = {
					{"", "", recipeitem},
					{"", recipeitem, recipeitem},
					{recipeitem, recipeitem, recipeitem},
				},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname,
				recipe = {modname .. ":panel_" .. subname, modname .. ":slab_" .. subname},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname,
				recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname,
				recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname,
				recipe = {modname .. ":panel_" .. subname, modname .. ":panel_" .. subname, modname .. ":panel_" .. subname},
			})
		elseif alternate == "_inner" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname .. "_inner",
				recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
			})
		elseif alternate == "_outer" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname .. "_outer",
				recipe = {modname .. ":micro_" .. subname, modname .. ":slab_" .. subname},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname .. "_outer",
				recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
			})
		elseif alternate == "_half" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname .. "_half",
				recipe = {modname .. ":micro_" .. subname, modname .. ":micro_" .. subname, modname .. ":micro_" .. subname},
			})

			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname .. "_half",
				recipe = {modname .. ":panel_" .. subname, modname .. ":micro_" .. subname},
			})
		elseif alternate == "_right_half" then
			minetest.register_craft({
				type = "shapeless",
				output = modname .. ":stair_" .. subname .. "_right_half",
				recipe = {modname .. ":stair_" .. subname .. "_half"},
			})
		elseif alternate == "_alt" then
			minetest.register_craft({ -- See mirrored variation of the recipe below.
				output = modname .. ":stair_" .. subname .. "_alt",
				recipe = {
					{modname .. ":panel_" .. subname, ""},
					{""                            , modname .. ":panel_" .. subname},
				},
			})

			minetest.register_craft({ -- Mirrored variation of the recipe above.
				output = modname .. ":stair_" .. subname .. "_alt",
				recipe = {
					{""                            , modname .. ":panel_" .. subname},
					{modname .. ":panel_" .. subname, ""},
				},
			})
		end
	end
end


code:
--[[
More Blocks: registrations

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- default registrations
local default_nodes = { -- Default stairs/slabs/panels/microblocks:
	"stone",
	"stone_block",
	"cobble",
	"mossycobble",
	"brick",
	"sandstone",
	"steelblock",
	"goldblock",
	"copperblock",
	"bronzeblock",
	"diamondblock",
	"tinblock",
	"desert_stone",
	"desert_stone_block",
	"desert_cobble",
	"meselamp",
	"glass",
	"tree",
	"wood",
	"jungletree",
	"junglewood",
	"pine_tree",
	"pine_wood",
	"acacia_tree",
	"acacia_wood",
	"aspen_tree",
	"aspen_wood",
	"obsidian",
	"obsidian_block",
	"obsidianbrick",
	"obsidian_glass",
	"stonebrick",
	"desert_stonebrick",
	"sandstonebrick",
	"silver_sandstone",
	"silver_sandstone_brick",
	"silver_sandstone_block",
	"desert_sandstone",
	"desert_sandstone_brick",
	"desert_sandstone_block",
	"sandstone_block",
	"coral_skeleton",
}

for _, name in pairs(default_nodes) do
	local mod = "default"
	local nodename = mod .. ":" .. name
	local ndef = table.copy(minetest.registered_nodes[nodename])
	ndef.sunlight_propagates = true

	-- Stone and desert_stone drop cobble and desert_cobble respectively.
	if type(ndef.drop) == "string" then
		ndef.drop = ndef.drop:gsub(".+:", "")
	end

	-- Use the primary tile for all sides of cut glasslike nodes and disregard paramtype2.
	if #ndef.tiles > 1 and ndef.drawtype and ndef.drawtype:find("glass") then
		ndef.tiles = {ndef.tiles[1]}
		ndef.paramtype2 = nil
	end

	mod = "moreblocks"
	stairsplus:register_all(mod, name, nodename, ndef)
	minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name)
	minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer")
	minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner")
	minetest.register_alias_force("stairs:slab_"  .. name, mod .. ":slab_"  .. name)
end

-- farming registrations
if minetest.get_modpath("farming") then
	local farming_nodes = {"straw"}
	for _, name in pairs(farming_nodes) do
		local mod = "farming"
		local nodename = mod .. ":" .. name
		local ndef = table.copy(minetest.registered_nodes[nodename])
		ndef.sunlight_propagates = true

		mod = "moreblocks"
		stairsplus:register_all(mod, name, nodename, ndef)
		minetest.register_alias_force("stairs:stair_" .. name, mod .. ":stair_" .. name)
		minetest.register_alias_force("stairs:stair_outer_" .. name, mod .. ":stair_" .. name .. "_outer")
		minetest.register_alias_force("stairs:stair_inner_" .. name, mod .. ":stair_" .. name .. "_inner")
		minetest.register_alias_force("stairs:slab_"  .. name, mod .. ":slab_"  .. name)
	end
end

-- wool registrations
if minetest.get_modpath("wool") then
	local dyes = {"white", "grey", "black", "red", "yellow", "green", "cyan",
	              "blue", "magenta", "orange", "violet", "brown", "pink",
	              "dark_grey", "dark_green"}
	for _, name in pairs(dyes) do
		local mod = "wool"
		local nodename = mod .. ":" .. name
		local ndef = table.copy(minetest.registered_nodes[nodename])
		ndef.sunlight_propagates = true

		-- Prevent dye+cut wool recipy from creating a full wool block.
		ndef.groups.wool = nil

		stairsplus:register_all(mod, name, nodename, ndef)
	end
end

-- basic_materials, keeping the original other-mod-oriented names
-- for backwards compatibility

if minetest.get_modpath("basic_materials") then
	stairsplus:register_all("technic","concrete","basic_materials:concrete_block",{
		description = "Concrete",
		tiles = {"basic_materials_concrete_block.png",},
		groups = {cracky=1, level=2, concrete=1},
		sounds = default.node_sound_stone_defaults(),
	})

	minetest.register_alias("prefab:concrete_stair","technic:stair_concrete")
	minetest.register_alias("prefab:concrete_slab","technic:slab_concrete")

	stairsplus:register_all("gloopblocks", "cement", "basic_materials:cement_block", {
		description = "Cement",
		tiles = {"basic_materials_cement_block.png"},
		groups = {cracky=2, not_in_creative_inventory=1},
		sounds = default.node_sound_stone_defaults(),
		sunlight_propagates = true,
	})

	stairsplus:register_all("technic", "brass_block", "basic_materials:brass_block", {
		description="Brass Block",
		groups={cracky=1, not_in_creative_inventory=1},
		tiles={"basic_materials_brass_block.png"},
	})

end

-- Alias cuts of split_stone_tile_alt which was renamed checker_stone_tile.
stairsplus:register_alias_all("moreblocks", "split_stone_tile_alt", "moreblocks", "checker_stone_tile")

-- The following LBM is necessary because the name stair_split_stone_tile_alt
-- conflicts with another node and so the alias for that specific node gets
-- ignored.
minetest.register_lbm({
	name = "moreblocks:fix_split_stone_tile_alt_name_collision",
	nodenames = {"moreblocks:stair_split_stone_tile_alt"},
	action = function(pos, node)
		minetest.set_node(pos, {
			name = "moreblocks:stair_checker_stone_tile",
			param2 = minetest.get_node(pos).param2

		})
		minetest.log('action', "LBM replaced " .. node.name ..
			" at " .. minetest.pos_to_string(pos))
	end,
})


code:
--[[
More Blocks: slab definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Node will be called <modname>:slab_<subname>

-- luacheck: no unused
local function register_slab(modname, subname, recipeitem, groups, images, description, drop, light)
	stairsplus:register_slab(modname, subname, recipeitem, {
		groups = groups,
		tiles = images,
		description = description,
		drop = drop,
		light_source = light,
		sounds = default.node_sound_stone_defaults(),
	})
end

function stairsplus:register_slab_alias(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["slab"])
	for alternate, def in pairs(defs) do
		minetest.register_alias(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate)
	end
end

function stairsplus:register_slab_alias_force(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["slab"])
	for alternate, def in pairs(defs) do
		minetest.register_alias_force(modname_old .. ":slab_" .. subname_old .. alternate, modname_new .. ":slab_" .. subname_new .. alternate)
	end
end

function stairsplus:register_slab(modname, subname, recipeitem, fields)
	local defs = table.copy(stairsplus.defs["slab"])
	for alternate, shape in pairs(defs) do
		stairsplus.register_single("slab", alternate, shape, modname, subname, recipeitem, fields)
	end

	circular_saw.known_nodes[recipeitem] = {modname, subname}
end


code:
--[[
More Blocks: slope definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Node will be called <modname>:slope_<subname>

-- luacheck: no unused
local function register_slope(modname, subname, recipeitem, groups, images, description, drop, light)
	stairsplus:register_slope(modname, subname, recipeitem, {
		groups = groups,
		tiles = images,
		description = description,
		drop = drop,
		light_source = light,
		sounds = default.node_sound_stone_defaults(),
	})
end

function stairsplus:register_slope_alias(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["slope"])
	for alternate, def in pairs(defs) do
		minetest.register_alias(modname_old .. ":slope_" .. subname_old .. alternate, modname_new .. ":slope_" .. subname_new .. alternate)
	end
end

function stairsplus:register_slope_alias_force(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["slope"])
	for alternate, def in pairs(defs) do
		minetest.register_alias_force(modname_old .. ":slope_" .. subname_old .. alternate, modname_new .. ":slope_" .. subname_new .. alternate)
	end
end

function stairsplus:register_slope(modname, subname, recipeitem, fields)
	local defs = table.copy(stairsplus.defs["slope"])
	for alternate, def in pairs(defs) do
		stairsplus.register_single("slope", alternate, def, modname, subname, recipeitem, fields)
	end

	circular_saw.known_nodes[recipeitem] = {modname, subname}
end


code:
--[[
More Blocks: stair definitions

Copyright © 2011-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]

-- Node will be called <modname>:stair_<subname>

-- luacheck: no unused
local function register_stair(modname, subname, recipeitem, groups, images, description, drop, light)
	stairsplus:register_stair(modname, subname, recipeitem, {
		groups = groups,
		tiles = images,
		description = description,
		drop = drop,
		light_source = light,
		sounds = default.node_sound_stone_defaults(),
	})
end

function stairsplus:register_stair_alias(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["stair"])
	for alternate, def in pairs(defs) do
		minetest.register_alias(modname_old .. ":stair_" .. subname_old .. alternate, modname_new .. ":stair_" .. subname_new .. alternate)
	end
end

function stairsplus:register_stair_alias_force(modname_old, subname_old, modname_new, subname_new)
	local defs = table.copy(stairsplus.defs["stair"])
	for alternate, def in pairs(defs) do
		minetest.register_alias_force(modname_old .. ":stair_" .. subname_old .. alternate, modname_new .. ":stair_" .. subname_new .. alternate)
	end
end

function stairsplus:register_stair(modname, subname, recipeitem, fields)
	local defs = table.copy(stairsplus.defs["stair"])
	for alternate, def in pairs(defs) do
		stairsplus.register_single("stair", alternate, def, modname, subname, recipeitem, fields)
	end

	circular_saw.known_nodes[recipeitem] = {modname, subname}
end


code:
# morelights
Minetest mod adding additional lighting nodes.

![Screenshot](https://raw.githubusercontent.com/random-geek/morelights/master/screenshot.png "Screenshot")

The Morelights Modpack adds over 30 high-quality lighting nodes for your Minetest world.

## Craft Recipes

Recipes for dark-variant nodes are the same as those of the light variants, except with dark grey dye instead of white dye.

![Craft Recipes](https://raw.githubusercontent.com/random-geek/morelights/master/crafts.png "Craft Recipes")

## Licenses
Source code is licensed under the LGPL v3.0 license. All other media and assets are licensed under the CC BY-SA 4.0 license.


code:
name = mp_morelights
description = Morelights is a lightweight modpack providing flexible interior and exterior lighting options for different styles of builds.


code:
morelights = {}

if minetest.get_modpath("xpanes") then
  morelights.glass = "xpanes:pane_flat"
else
  morelights.glass = "default:glass"
end

function morelights.register_variants(variants, fixedDef)
  for _,variant in ipairs(variants) do
    local name = variant.name
    local def = table.copy(fixedDef)

    for k,v in pairs(variant) do
      if k ~= "name" then
        def[k] = v
      end
    end

    minetest.register_node(name, def)
  end
end

function morelights.on_place_hanging(itemstack, placer, pointed_thing, replaceName)
  local ceiling = minetest.get_node(vector.add(pointed_thing.above,
    {x=0, y=1, z=0}))

  if ceiling and ceiling.name ~= "air"
    and minetest.get_item_group(ceiling.name, "mounted_ceiling") == 0
    and not (placer and placer:get_player_control().sneak) then

    local name = itemstack:get_name()
    local fakestack = itemstack
    fakestack:set_name(replaceName)

    minetest.item_place(fakestack, placer, pointed_thing, 0)
    itemstack:set_name(name)

    return itemstack
  end

  minetest.item_place(itemstack, placer, pointed_thing, 0)
  return itemstack
end

function morelights.rotate_and_place(itemstack, placer, pointed_thing, lookup)
  local dir = minetest.dir_to_wallmounted(vector.subtract(pointed_thing.under, pointed_thing.above))
  local fDirs = lookup or {[0] = 20, 0, 16, 12, 8, 4}
  minetest.item_place(itemstack, placer, pointed_thing, fDirs[dir] or 0)
  return itemstack
end

local path = minetest.get_modpath("morelights")

dofile(path .. "/nodes.lua")


code:
name = morelights
author = random-geek
description = morelights
title = Morelights
depends = default, dye
optional_depends = xpanes


code:
minetest.register_craftitem("morelights:bulb", {
  description = "Light Bulb",
  inventory_image = "morelights_bulb.png"
})

--
-- Craft recipes
--

minetest.register_craft({
  output = "morelights:bulb",
  recipe = {
    {"", "default:glass", ""},
    {"", "default:copper_ingot", ""},
    {"", "default:steel_ingot", "default:mese_crystal_fragment"}
  }
})