summaryrefslogtreecommitdiff
path: root/moreblocks
diff options
context:
space:
mode:
authorVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 20:02:19 -0400
committerVanessa Ezekowitz <vanessaezekowitz@gmail.com>2016-04-01 21:09:33 -0400
commitda66780a569712c23ae4f2996cfb4608a9f9d69d (patch)
tree217556029a78bc23ad4564720afc86de97228a04 /moreblocks
parent615b22df4d423aded3613db7716943a2f389b047 (diff)
downloaddreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.gz
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.bz2
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.tar.xz
dreambuilder_modpack-da66780a569712c23ae4f2996cfb4608a9f9d69d.zip
copy all standard Dreambuilder mods in from the old subgame
(exactly as last supplied there, updates to these mods will follow later)
Diffstat (limited to 'moreblocks')
-rw-r--r--moreblocks/LICENSE.md14
-rw-r--r--moreblocks/README.md11
-rw-r--r--moreblocks/aliases.lua78
-rw-r--r--moreblocks/circular_saw.lua414
-rw-r--r--moreblocks/config.lua29
-rw-r--r--moreblocks/crafting.lua469
-rw-r--r--moreblocks/depends.txt2
-rw-r--r--moreblocks/init.lua33
-rw-r--r--moreblocks/locale/de.txt67
-rw-r--r--moreblocks/locale/es.txt52
-rw-r--r--moreblocks/locale/fr.txt72
-rw-r--r--moreblocks/locale/template.txt64
-rw-r--r--moreblocks/models/moreblocks_slope.obj26
-rw-r--r--moreblocks/models/moreblocks_slope_cut.obj33
-rw-r--r--moreblocks/models/moreblocks_slope_half.obj28
-rw-r--r--moreblocks/models/moreblocks_slope_half_raised.obj32
-rw-r--r--moreblocks/models/moreblocks_slope_inner.obj35
-rw-r--r--moreblocks/models/moreblocks_slope_inner_cut.obj32
-rw-r--r--moreblocks/models/moreblocks_slope_inner_cut_half.obj34
-rw-r--r--moreblocks/models/moreblocks_slope_inner_cut_half_raised.obj35
-rw-r--r--moreblocks/models/moreblocks_slope_inner_half.obj35
-rw-r--r--moreblocks/models/moreblocks_slope_inner_half_raised.obj38
-rw-r--r--moreblocks/models/moreblocks_slope_outer.obj25
-rw-r--r--moreblocks/models/moreblocks_slope_outer_cut.obj23
-rw-r--r--moreblocks/models/moreblocks_slope_outer_cut_half.obj24
-rw-r--r--moreblocks/models/moreblocks_slope_outer_cut_half_raised.obj28
-rw-r--r--moreblocks/models/moreblocks_slope_outer_half.obj27
-rw-r--r--moreblocks/models/moreblocks_slope_outer_half_raised.obj34
-rw-r--r--moreblocks/nodes.lua372
-rw-r--r--moreblocks/ownership.lua41
-rw-r--r--moreblocks/redefinitions.lua100
-rw-r--r--moreblocks/stairsplus/API.md24
-rw-r--r--moreblocks/stairsplus/aliases.lua70
-rw-r--r--moreblocks/stairsplus/conversion.lua139
-rw-r--r--moreblocks/stairsplus/init.lua61
-rw-r--r--moreblocks/stairsplus/microblocks.lua138
-rw-r--r--moreblocks/stairsplus/panels.lua118
-rw-r--r--moreblocks/stairsplus/registrations.lua57
-rw-r--r--moreblocks/stairsplus/slabs.lua209
-rw-r--r--moreblocks/stairsplus/slopes.lua347
-rw-r--r--moreblocks/stairsplus/stairs.lua224
-rw-r--r--moreblocks/textures/default_brick.pngbin0 -> 716 bytes
-rw-r--r--moreblocks/textures/default_fence_overlay.pngbin0 -> 285 bytes
-rw-r--r--moreblocks/textures/invisible.pngbin0 -> 68 bytes
-rw-r--r--moreblocks/textures/moreblocks_cactus_brick.pngbin0 -> 718 bytes
-rw-r--r--moreblocks/textures/moreblocks_cactus_checker.pngbin0 -> 693 bytes
-rw-r--r--moreblocks/textures/moreblocks_circle_stone_bricks.pngbin0 -> 448 bytes
-rw-r--r--moreblocks/textures/moreblocks_circular_saw_bottom.pngbin0 -> 579 bytes
-rw-r--r--moreblocks/textures/moreblocks_circular_saw_side.pngbin0 -> 478 bytes
-rw-r--r--moreblocks/textures/moreblocks_circular_saw_top.pngbin0 -> 441 bytes
-rw-r--r--moreblocks/textures/moreblocks_clean_glass.pngbin0 -> 177 bytes
-rw-r--r--moreblocks/textures/moreblocks_clean_glass_detail.pngbin0 -> 96 bytes
-rw-r--r--moreblocks/textures/moreblocks_coal_checker.pngbin0 -> 744 bytes
-rw-r--r--moreblocks/textures/moreblocks_coal_glass.pngbin0 -> 155 bytes
-rw-r--r--moreblocks/textures/moreblocks_coal_glass_detail.pngbin0 -> 159 bytes
-rw-r--r--moreblocks/textures/moreblocks_coal_glass_stairsplus.pngbin0 -> 166 bytes
-rw-r--r--moreblocks/textures/moreblocks_coal_stone.pngbin0 -> 229 bytes
-rw-r--r--moreblocks/textures/moreblocks_coal_stone_bricks.pngbin0 -> 484 bytes
-rw-r--r--moreblocks/textures/moreblocks_cobble_compressed.pngbin0 -> 356 bytes
-rw-r--r--moreblocks/textures/moreblocks_empty_bookshelf.pngbin0 -> 219 bytes
-rw-r--r--moreblocks/textures/moreblocks_fence_jungle_wood.pngbin0 -> 204 bytes
-rw-r--r--moreblocks/textures/moreblocks_fence_wood.pngbin0 -> 480 bytes
-rw-r--r--moreblocks/textures/moreblocks_glass.pngbin0 -> 210 bytes
-rw-r--r--moreblocks/textures/moreblocks_glass_stairsplus.pngbin0 -> 215 bytes
-rw-r--r--moreblocks/textures/moreblocks_glow_glass.pngbin0 -> 157 bytes
-rw-r--r--moreblocks/textures/moreblocks_glow_glass_detail.pngbin0 -> 161 bytes
-rw-r--r--moreblocks/textures/moreblocks_glow_glass_stairsplus.pngbin0 -> 169 bytes
-rw-r--r--moreblocks/textures/moreblocks_grey_bricks.pngbin0 -> 725 bytes
-rw-r--r--moreblocks/textures/moreblocks_iron_checker.pngbin0 -> 850 bytes
-rw-r--r--moreblocks/textures/moreblocks_iron_glass.pngbin0 -> 158 bytes
-rw-r--r--moreblocks/textures/moreblocks_iron_glass_detail.pngbin0 -> 163 bytes
-rw-r--r--moreblocks/textures/moreblocks_iron_glass_stairsplus.pngbin0 -> 169 bytes
-rw-r--r--moreblocks/textures/moreblocks_iron_stone.pngbin0 -> 230 bytes
-rw-r--r--moreblocks/textures/moreblocks_iron_stone_bricks.pngbin0 -> 485 bytes
-rw-r--r--moreblocks/textures/moreblocks_junglestick.pngbin0 -> 122 bytes
-rw-r--r--moreblocks/textures/moreblocks_obsidian_glass_stairsplus.pngbin0 -> 144 bytes
-rw-r--r--moreblocks/textures/moreblocks_plankstone.pngbin0 -> 335 bytes
-rw-r--r--moreblocks/textures/moreblocks_plankstone_2.pngbin0 -> 354 bytes
-rw-r--r--moreblocks/textures/moreblocks_rope.pngbin0 -> 356 bytes
-rw-r--r--moreblocks/textures/moreblocks_split_stone_tile.pngbin0 -> 273 bytes
-rw-r--r--moreblocks/textures/moreblocks_split_stone_tile_alt.pngbin0 -> 306 bytes
-rw-r--r--moreblocks/textures/moreblocks_split_stone_tile_top.pngbin0 -> 279 bytes
-rw-r--r--moreblocks/textures/moreblocks_stone_tile.pngbin0 -> 271 bytes
-rw-r--r--moreblocks/textures/moreblocks_super_glow_glass.pngbin0 -> 154 bytes
-rw-r--r--moreblocks/textures/moreblocks_super_glow_glass_detail.pngbin0 -> 156 bytes
-rw-r--r--moreblocks/textures/moreblocks_super_glow_glass_stairsplus.pngbin0 -> 171 bytes
-rw-r--r--moreblocks/textures/moreblocks_sweeper.pngbin0 -> 310 bytes
-rw-r--r--moreblocks/textures/moreblocks_tar.pngbin0 -> 270 bytes
-rw-r--r--moreblocks/textures/moreblocks_trap_glass.pngbin0 -> 170 bytes
-rw-r--r--moreblocks/textures/moreblocks_trap_glow_glass.pngbin0 -> 170 bytes
-rw-r--r--moreblocks/textures/moreblocks_trap_stone.pngbin0 -> 333 bytes
-rw-r--r--moreblocks/textures/moreblocks_trap_super_glow_glass.pngbin0 -> 170 bytes
-rw-r--r--moreblocks/textures/moreblocks_tree_stairsplus.pngbin0 -> 311 bytes
-rw-r--r--moreblocks/textures/moreblocks_wood_tile.pngbin0 -> 396 bytes
-rw-r--r--moreblocks/textures/moreblocks_wood_tile_center.pngbin0 -> 288 bytes
-rw-r--r--moreblocks/textures/moreblocks_wood_tile_full.pngbin0 -> 436 bytes
-rw-r--r--moreblocks/textures/moreblocks_wood_tile_up.pngbin0 -> 289 bytes
97 files changed, 3694 insertions, 0 deletions
diff --git a/moreblocks/LICENSE.md b/moreblocks/LICENSE.md
new file mode 100644
index 0000000..45c5ff5
--- /dev/null
+++ b/moreblocks/LICENSE.md
@@ -0,0 +1,14 @@
+zlib license
+============
+
+Copyright (c) 2011-2015 Calinou and contributors
+
+**This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.**
+
+Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source distribution.
diff --git a/moreblocks/README.md b/moreblocks/README.md
new file mode 100644
index 0000000..228ce97
--- /dev/null
+++ b/moreblocks/README.md
@@ -0,0 +1,11 @@
+More Blocks
+===========
+
+More Blocks for Minetest <http://minetest.net>, a free/libre infinite
+world block sandbox game.
+
+To install, just clone this repository into your "mods" directory.
+
+More Blocks code is licensed under the zlib license, textures are by Calinou and are licensed under CC BY-SA 3.0 Unported.
+
+**Forum topic:** <https://forum.minetest.net/viewtopic.php?f=11&t=509>
diff --git a/moreblocks/aliases.lua b/moreblocks/aliases.lua
new file mode 100644
index 0000000..15f7b6b
--- /dev/null
+++ b/moreblocks/aliases.lua
@@ -0,0 +1,78 @@
+--[[
+More Blocks: alias definitions
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+-- More Blocks aliases:
+minetest.register_alias("sweeper", "moreblocks:sweeper")
+minetest.register_alias("circular_saw", "moreblocks:circular_saw")
+minetest.register_alias("jungle_stick", "moreblocks:jungle_stick")
+
+-- Old block/item replacement:
+minetest.register_alias("moreblocks:oerkkiblock", "default:mossycobble")
+minetest.register_alias("moreblocks:screwdriver", "screwdriver:screwdriver")
+
+-- Node and item renaming:
+minetest.register_alias("moreblocks:stone_bricks", "default:stonebrick")
+minetest.register_alias("moreblocks:stonebrick", "default:stonebrick")
+minetest.register_alias("moreblocks:junglewood", "default:junglewood")
+minetest.register_alias("moreblocks:jungle_wood", "default:junglewood")
+
+for _, t in pairs(circular_saw.names) do
+ minetest.register_alias("moreblocks:" .. t[1] .. "_jungle_wood" .. t[2],
+ "moreblocks:" .. t[1] .. "_junglewood" .. t[2])
+end
+minetest.register_alias("moreblocks:horizontaltree", "moreblocks:horizontal_tree")
+minetest.register_alias("moreblocks:horizontaljungletree", "moreblocks:horizontal_jungle_tree")
+minetest.register_alias("moreblocks:stonesquare", "moreblocks:stone_tile")
+minetest.register_alias("moreblocks:circlestonebrick", "moreblocks:circle_stone_bricks")
+minetest.register_alias("moreblocks:ironstonebrick", "moreblocks:iron_stone_bricks")
+minetest.register_alias("moreblocks:fence_junglewood", "moreblocks:fence_jungle_wood")
+minetest.register_alias("moreblocks:coalstone", "moreblocks:coal_stone")
+minetest.register_alias("moreblocks:ironstone", "moreblocks:iron_stone")
+minetest.register_alias("moreblocks:woodtile", "moreblocks:wood_tile")
+minetest.register_alias("moreblocks:woodtile_full", "moreblocks:wood_tile_full")
+minetest.register_alias("moreblocks:woodtile_centered", "moreblocks:wood_tile_centered")
+minetest.register_alias("moreblocks:woodtile_up", "moreblocks:wood_tile_up")
+minetest.register_alias("moreblocks:woodtile_down", "moreblocks:wood_tile_down")
+minetest.register_alias("moreblocks:woodtile_left", "moreblocks:wood_tile_left")
+minetest.register_alias("moreblocks:woodtile_right", "moreblocks:wood_tile_right")
+minetest.register_alias("moreblocks:coalglass", "moreblocks:coal_glass")
+minetest.register_alias("moreblocks:ironglass", "moreblocks:iron_glass")
+minetest.register_alias("moreblocks:glowglass", "moreblocks:glow_glass")
+minetest.register_alias("moreblocks:superglowglass", "moreblocks:super_glow_glass")
+minetest.register_alias("moreblocks:trapglass", "moreblocks:trap_glass")
+minetest.register_alias("moreblocks:trapstone", "moreblocks:trap_stone")
+minetest.register_alias("moreblocks:cactuschecker", "moreblocks:cactus_checker")
+minetest.register_alias("moreblocks:coalchecker", "moreblocks:coal_checker")
+minetest.register_alias("moreblocks:ironchecker", "moreblocks:iron_checker")
+minetest.register_alias("moreblocks:cactusbrick", "moreblocks:cactus_brick")
+minetest.register_alias("moreblocks:cleanglass", "moreblocks:clean_glass")
+minetest.register_alias("moreblocks:emptybookshelf", "moreblocks:empty_bookshelf")
+minetest.register_alias("moreblocks:junglestick", "moreblocks:jungle_stick")
+minetest.register_alias("moreblocks:splitstonesquare","moreblocks:split_stone_tile")
+minetest.register_alias("moreblocks:allfacestree","moreblocks:all_faces_tree")
+
+-- ABM for horizontal trees (fix facedir):
+local horizontal_tree_convert_facedir = {7, 12, 9, 18}
+
+minetest.register_abm({
+ nodenames = {"moreblocks:horizontal_tree","moreblocks:horizontal_jungle_tree"},
+ interval = 1,
+ chance = 1,
+ action = function(pos, node)
+ if node.name == "moreblocks:horizontal_tree" then
+ node.name = "default:tree"
+ else
+ node.name = "default:jungletree"
+ end
+ node.param2 = node.param2 < 3 and node.param2 or 0
+ minetest.set_node(pos, {
+ name = node.name,
+ param2 = horizontal_tree_convert_facedir[node.param2 + 1]
+ })
+ end,
+})
+
diff --git a/moreblocks/circular_saw.lua b/moreblocks/circular_saw.lua
new file mode 100644
index 0000000..dd945b8
--- /dev/null
+++ b/moreblocks/circular_saw.lua
@@ -0,0 +1,414 @@
+--[[
+More Blocks: circular saw
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.intllib
+
+circular_saw = {}
+
+circular_saw.known_stairs = setmetatable({}, {
+ __newindex = function(k, v)
+ local modname = minetest.get_current_modname()
+ print(("WARNING: mod %s tried to add node %s to the circular saw"
+ .. " manually."):format(modname, v))
+ end,
+})
+
+-- This is populated by stairsplus:register_all:
+circular_saw.known_nodes = {}
+
+-- How many microblocks does this shape at the output inventory cost:
+-- It may cause slight loss, but no gain.
+circular_saw.cost_in_microblocks = {
+ 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 3, 2, 4, 2, 4, 5, 6,
+ 7, 1, 1, 2, 4, 6, 7, 8,
+ 3, 1, 1, 2, 4, 4, 2, 6,
+ 7, 3, 7, 7, 4, 8, 3, 2,
+ 6, 2, 1, 3, 4,
+}
+
+circular_saw.names = {
+ {"micro", "_1"},
+ {"panel", "_1"},
+ {"micro", "_2"},
+ {"panel", "_2"},
+ {"micro", "_4"},
+ {"panel", "_4"},
+ {"micro", ""},
+ {"panel", ""},
+ {"micro", "_12"},
+ {"panel", "_12"},
+ {"micro", "_14"},
+ {"panel", "_14"},
+ {"micro", "_15"},
+ {"panel", "_15"},
+ {"stair", "_outer"},
+ {"stair", ""},
+ {"stair", "_inner"},
+ {"slab", "_1"},
+ {"slab", "_2"},
+ {"slab", "_quarter"},
+ {"slab", ""},
+ {"slab", "_three_quarter"},
+ {"slab", "_14"},
+ {"slab", "_15"},
+ {"stair", "_half"},
+ {"stair", "_alt_1"},
+ {"stair", "_alt_2"},
+ {"stair", "_alt_4"},
+ {"stair", "_alt"},
+ {"slope", ""},
+ {"slope", "_half"},
+ {"slope", "_half_raised"},
+ {"slope", "_inner"},
+ {"slope", "_inner_half"},
+ {"slope", "_inner_half_raised"},
+ {"slope", "_inner_cut"},
+ {"slope", "_inner_cut_half"},
+ {"slope", "_inner_cut_half_raised"},
+ {"slope", "_outer"},
+ {"slope", "_outer_half"},
+ {"slope", "_outer_half_raised"},
+ {"slope", "_outer_cut"},
+ {"slope", "_outer_cut_half"},
+ {"slope", "_outer_cut_half_raised"},
+ {"slope", "_cut"},
+}
+
+function circular_saw:get_cost(inv, stackname)
+ for i, item in pairs(inv:get_list("output")) do
+ if item:get_name() == stackname then
+ return circular_saw.cost_in_microblocks[i]
+ end
+ end
+end
+
+function circular_saw:get_output_inv(modname, material, amount, max)
+ if (not max or max < 1 or max > 99) then max = 99 end
+
+ local list = {}
+ local pos = #list
+
+ -- If there is nothing inside, display empty inventory:
+ if amount < 1 then
+ return list
+ end
+
+ for i = 1, #circular_saw.names do
+ local t = circular_saw.names[i]
+ local cost = circular_saw.cost_in_microblocks[i]
+ local balance = math.min(math.floor(amount/cost), max)
+ local nodename = modname .. ":" .. t[1] .. "_" .. material .. t[2]
+ if minetest.registered_nodes[nodename] then
+ pos = pos + 1
+ list[pos] = nodename .. " " .. balance
+ end
+ end
+ return list
+end
+
+
+-- Reset empty circular_saw after last full block has been taken out
+-- (or the circular_saw has been placed the first time)
+-- Note: max_offered is not reset:
+function circular_saw:reset(pos)
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+
+ inv:set_list("input", {})
+ inv:set_list("micro", {})
+ inv:set_list("output", {})
+ meta:set_int("anz", 0)
+
+ meta:set_string("infotext",
+ S("Circular Saw is empty (owned by %s)")
+ :format(meta:get_string("owner") or ""))
+end
+
+
+-- Player has taken something out of the box or placed something inside
+-- that amounts to count microblocks:
+function circular_saw:update_inventory(pos, amount)
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+
+ amount = meta:get_int("anz") + amount
+
+ -- The material is recycled automaticly.
+ inv:set_list("recycle", {})
+
+ if amount < 1 then -- If the last block is taken out.
+ self:reset(pos)
+ return
+ end
+
+ local stack = inv:get_stack("input", 1)
+ -- At least one "normal" block is necessary to see what kind of stairs are requested.
+ if stack:is_empty() then
+ -- Any microblocks not taken out yet are now lost.
+ -- (covers material loss in the machine)
+ self:reset(pos)
+ return
+
+ end
+ local node_name = stack:get_name() or ""
+ local name_parts = circular_saw.known_nodes[node_name] or ""
+ local modname = name_parts[1] or ""
+ local material = name_parts[2] or ""
+
+ inv:set_list("input", { -- Display as many full blocks as possible:
+ node_name.. " " .. math.floor(amount / 8)
+ })
+
+ -- The stairnodes made of default nodes use moreblocks namespace, other mods keep own:
+ if modname == "default" then
+ modname = "moreblocks"
+ end
+ -- print("circular_saw set to " .. modname .. " : "
+ -- .. material .. " with " .. (amount) .. " microblocks.")
+
+ -- 0-7 microblocks may remain left-over:
+ inv:set_list("micro", {
+ modname .. ":micro_" .. material .. "_bottom " .. (amount % 8)
+ })
+ -- Display:
+ inv:set_list("output",
+ self:get_output_inv(modname, material, amount,
+ meta:get_int("max_offered")))
+ -- Store how many microblocks are available:
+ meta:set_int("anz", amount)
+
+ meta:set_string("infotext",
+ S("Circular Saw is working on %s (owned by %s)")
+ :format(material, meta:get_string("owner") or ""))
+end
+
+
+-- The amount of items offered per shape can be configured:
+function circular_saw.on_receive_fields(pos, formname, fields, sender)
+ local meta = minetest.get_meta(pos)
+ local max = tonumber(fields.max_offered)
+ if max and max > 0 then
+ meta:set_string("max_offered", max)
+ -- Update to show the correct number of items:
+ circular_saw:update_inventory(pos, 0)
+ end
+end
+
+
+-- Moving the inventory of the circular_saw around is not allowed because it
+-- is a fictional inventory. Moving inventory around would be rather
+-- impractical and make things more difficult to calculate:
+function circular_saw.allow_metadata_inventory_move(
+ pos, from_list, from_index, to_list, to_index, count, player)
+ return 0
+end
+
+
+-- Only input- and recycle-slot are intended as input slots:
+function circular_saw.allow_metadata_inventory_put(
+ pos, listname, index, stack, player)
+ -- The player is not allowed to put something in there:
+ if listname == "output" or listname == "micro" then
+ return 0
+ end
+
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ local stackname = stack:get_name()
+ local count = stack:get_count()
+
+ -- Only alow those items that are offered in the output inventory to be recycled:
+ if listname == "recycle" then
+ if not inv:contains_item("output", stackname) then
+ return 0
+ end
+ local stackmax = stack:get_stack_max()
+ local instack = inv:get_stack("input", 1)
+ local microstack = inv:get_stack("micro", 1)
+ local incount = instack:get_count()
+ local incost = (incount * 8) + microstack:get_count()
+ local maxcost = (stackmax * 8) + 7
+ local cost = circular_saw:get_cost(inv, stackname)
+ if (incost + cost) > maxcost then
+ return math.max((maxcost - incost) / cost, 0)
+ end
+ return count
+ end
+
+ -- Only accept certain blocks as input which are known to be craftable into stairs:
+ if listname == "input" then
+ if not inv:is_empty("input") then
+ if inv:get_stack("input", index):get_name() ~= stackname then
+ return 0
+ end
+ end
+ if not inv:is_empty("micro") then
+ local microstackname = inv:get_stack("micro", 1):get_name():gsub("^.+:micro_", "", 1)
+ local cutstackname = stackname:gsub("^.+:", "", 1)
+ if microstackname ~= cutstackname then
+ return 0
+ end
+ end
+ for name, t in pairs(circular_saw.known_nodes) do
+ if name == stackname and inv:room_for_item("input", stack) then
+ return count
+ end
+ end
+ return 0
+ end
+end
+
+-- Taking is allowed from all slots (even the internal microblock slot).
+-- Putting something in is slightly more complicated than taking anything
+-- because we have to make sure it is of a suitable material:
+function circular_saw.on_metadata_inventory_put(
+ pos, listname, index, stack, player)
+ -- We need to find out if the circular_saw is already set to a
+ -- specific material or not:
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ local stackname = stack:get_name()
+ local count = stack:get_count()
+
+ -- Putting something into the input slot is only possible if that had
+ -- been empty before or did contain something of the same material:
+ if listname == "input" then
+ -- Each new block is worth 8 microblocks:
+ circular_saw:update_inventory(pos, 8 * count)
+ elseif listname == "recycle" then
+ -- Lets look which shape this represents:
+ local cost = circular_saw:get_cost(inv, stackname)
+ circular_saw:update_inventory(pos, cost * count)
+ end
+end
+
+function circular_saw.on_metadata_inventory_take(
+ pos, listname, index, stack, player)
+
+ -- Prevent (inbuilt) swapping between inventories with different blocks
+ -- corrupting player inventory or Saw with 'unknown' items.
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ local input_stack = inv:get_stack(listname, index)
+ if not input_stack:is_empty() and input_stack:get_name()~=stack:get_name() then
+ local player_inv = player:get_inventory()
+ if player_inv:room_for_item("main", input_stack) then
+ player_inv:add_item("main", input_stack)
+ end
+
+ circular_saw:reset(pos)
+ return
+ end
+
+ -- If it is one of the offered stairs: find out how many
+ -- microblocks have to be substracted:
+ if listname == "output" then
+ -- We do know how much each block at each position costs:
+ local cost = circular_saw.cost_in_microblocks[index]
+ * stack:get_count()
+
+ circular_saw:update_inventory(pos, -cost)
+ elseif listname == "micro" then
+ -- Each microblock costs 1 microblock:
+ circular_saw:update_inventory(pos, -stack:get_count())
+ elseif listname == "input" then
+ -- Each normal (= full) block taken costs 8 microblocks:
+ circular_saw:update_inventory(pos, 8 * -stack:get_count())
+ end
+ -- The recycle field plays no role here since it is processed immediately.
+end
+
+gui_slots = "listcolors[#606060AA;#808080;#101010;#202020;#FFF]"
+
+function circular_saw.on_construct(pos)
+ local meta = minetest.get_meta(pos)
+ local fancy_inv = default.gui_bg..default.gui_bg_img..default.gui_slots
+ meta:set_string("formspec", "size[11,10]"..fancy_inv..
+ "label[0,0;" ..S("Input\nmaterial").. "]" ..
+ "list[current_name;input;1.5,0;1,1;]" ..
+ "label[0,1;" ..S("Left-over").. "]" ..
+ "list[current_name;micro;1.5,1;1,1;]" ..
+ "label[0,2;" ..S("Recycle\noutput").. "]" ..
+ "list[current_name;recycle;1.5,2;1,1;]" ..
+ "field[0.3,3.5;1,1;max_offered;" ..S("Max").. ":;${max_offered}]" ..
+ "button[1,3.2;1,1;Set;" ..S("Set").. "]" ..
+ "list[current_name;output;2.8,0;8,6;]" ..
+ "list[current_player;main;1.5,6.25;8,4;]")
+
+ meta:set_int("anz", 0) -- No microblocks inside yet.
+ meta:set_string("max_offered", 99) -- How many items of this kind are offered by default?
+ meta:set_string("infotext", S("Circular Saw is empty"))
+
+ local inv = meta:get_inventory()
+ inv:set_size("input", 1) -- Input slot for full blocks of material x.
+ inv:set_size("micro", 1) -- Storage for 1-7 surplus microblocks.
+ inv:set_size("recycle", 1) -- Surplus partial blocks can be placed here.
+ inv:set_size("output", 6*8) -- 6x8 versions of stair-parts of material x.
+
+ circular_saw:reset(pos)
+end
+
+
+function circular_saw.can_dig(pos,player)
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ if not inv:is_empty("input") or
+ not inv:is_empty("micro") or
+ not inv:is_empty("recycle") then
+ return false
+ end
+ -- Can be dug by anyone when empty, not only by the owner:
+ return true
+end
+
+minetest.register_node("moreblocks:circular_saw", {
+ description = S("Circular Saw"),
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.4, -0.5, -0.4, -0.25, 0.25, -0.25}, -- Leg
+ {0.25, -0.5, 0.25, 0.4, 0.25, 0.4}, -- Leg
+ {-0.4, -0.5, 0.25, -0.25, 0.25, 0.4}, -- Leg
+ {0.25, -0.5, -0.4, 0.4, 0.25, -0.25}, -- Leg
+ {-0.5, 0.25, -0.5, 0.5, 0.375, 0.5}, -- Tabletop
+ {-0.01, 0.4375, -0.125, 0.01, 0.5, 0.125}, -- Saw blade (top)
+ {-0.01, 0.375, -0.1875, 0.01, 0.4375, 0.1875}, -- Saw blade (bottom)
+ {-0.25, -0.0625, -0.25, 0.25, 0.25, 0.25}, -- Motor case
+ },
+ },
+ tiles = {"moreblocks_circular_saw_top.png",
+ "moreblocks_circular_saw_bottom.png",
+ "moreblocks_circular_saw_side.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ paramtype2 = "facedir",
+ groups = {choppy = 2,oddly_breakable_by_hand = 2},
+ sounds = default.node_sound_wood_defaults(),
+ on_construct = circular_saw.on_construct,
+ can_dig = circular_saw.can_dig,
+ -- Set the owner of this circular saw.
+ after_place_node = function(pos, placer)
+ local meta = minetest.get_meta(pos)
+ local owner = placer and placer:get_player_name() or ""
+ meta:set_string("owner", owner)
+ meta:set_string("infotext",
+ S("Circular Saw is empty (owned by %s)")
+ :format(owner))
+ end,
+
+ -- The amount of items offered per shape can be configured:
+ on_receive_fields = circular_saw.on_receive_fields,
+ allow_metadata_inventory_move = circular_saw.allow_metadata_inventory_move,
+ -- Only input- and recycle-slot are intended as input slots:
+ allow_metadata_inventory_put = circular_saw.allow_metadata_inventory_put,
+ -- Taking is allowed from all slots (even the internal microblock slot). Moving is forbidden.
+ -- Putting something in is slightly more complicated than taking anything because we have to make sure it is of a suitable material:
+ on_metadata_inventory_put = circular_saw.on_metadata_inventory_put,
+ on_metadata_inventory_take = circular_saw.on_metadata_inventory_take,
+})
diff --git a/moreblocks/config.lua b/moreblocks/config.lua
new file mode 100644
index 0000000..d646dac
--- /dev/null
+++ b/moreblocks/config.lua
@@ -0,0 +1,29 @@
+--[[
+More Blocks: configuration handling
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+moreblocks.config = {}
+
+local function getbool_default(setting, default)
+ local value = minetest.setting_getbool(setting)
+ if value == nil then
+ value = default
+ end
+ return value
+end
+
+local function setting(settingtype, name, default)
+ if settingtype == "bool" then
+ moreblocks.config[name] =
+ getbool_default("moreblocks." .. name, default)
+ else
+ moreblocks.config[name] =
+ minetest.setting_get("moreblocks." .. name) or default
+ end
+end
+
+-- Show stairs/slabs/panels/microblocks in creative inventory (true or false):
+setting("bool", "stairsplus_in_creative_inventory", false)
diff --git a/moreblocks/crafting.lua b/moreblocks/crafting.lua
new file mode 100644
index 0000000..c85cc3f
--- /dev/null
+++ b/moreblocks/crafting.lua
@@ -0,0 +1,469 @@
+--[[
+More Blocks: crafting recipes
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+minetest.register_craft({
+ output = "default:stick",
+ recipe = {{"default:dry_shrub"},}
+})
+
+minetest.register_craft({
+ output = "default:stick",
+ recipe = {{"default:sapling"},}
+})
+
+minetest.register_craft({
+ output = "default:stick",
+ recipe = {{"default:junglesapling"},}
+})
+
+minetest.register_craft({
+ output = "default:wood",
+ recipe = {
+ {"default:stick", "default:stick"},
+ {"default:stick", "default:stick"},
+ }
+})
+
+minetest.register_craft({
+ output = "default:junglewood",
+ recipe = {
+ {"moreblocks:jungle_stick", "moreblocks:jungle_stick"},
+ {"moreblocks:jungle_stick", "moreblocks:jungle_stick"},
+ }
+})
+
+minetest.register_craft({
+ output = "default:dirt_with_grass",
+ type = "shapeless",
+ recipe = {"default:junglegrass", "default:dirt"},
+})
+
+minetest.register_craft({
+ output = "default:dirt_with_grass",
+ type = "shapeless",
+ recipe = {"default:mese", "default:dirt"},
+})
+
+minetest.register_craft({
+ output = "default:mossycobble",
+ type = "shapeless",
+ recipe = {"default:junglegrass", "default:cobble"},
+})
+
+minetest.register_craft({
+ output = "default:mossycobble",
+ type = "shapeless",
+ recipe = {"default:mese_crystal_fragment", "default:cobble"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile 9",
+ recipe = {
+ {"default:wood", "default:wood", "default:wood"},
+ {"default:wood", "default:wood", "default:wood"},
+ {"default:wood", "default:wood", "default:wood"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile_flipped",
+ recipe = {{"moreblocks:wood_tile"},}
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile_center 9",
+ recipe = {
+ {"default:wood", "default:wood", "default:wood"},
+ {"default:wood", "moreblocks:wood_tile", "default:wood"},
+ {"default:wood", "default:wood", "default:wood"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile_full 4",
+ recipe = {
+ {"moreblocks:wood_tile", "moreblocks:wood_tile"},
+ {"moreblocks:wood_tile", "moreblocks:wood_tile"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile_up",
+ recipe = {
+ {"default:stick"},
+ {"moreblocks:wood_tile_center"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile_down",
+ recipe = {
+ {"moreblocks:wood_tile_center"},
+ {"default:stick"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile_left",
+ recipe = {
+ {"default:stick", "moreblocks:wood_tile_center"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:wood_tile_right",
+ recipe = {
+ {"moreblocks:wood_tile_center", "default:stick"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:junglestick 4",
+ recipe = {{"default:junglewood"},}
+})
+
+minetest.register_craft({
+ output = "moreblocks:fence_jungle_wood 2",
+ recipe = {
+ {"moreblocks:jungle_stick", "moreblocks:jungle_stick", "moreblocks:jungle_stick"},
+ {"moreblocks:jungle_stick", "moreblocks:jungle_stick", "moreblocks:jungle_stick"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:circle_stone_bricks 8",
+ recipe = {
+ {"default:stone", "default:stone", "default:stone"},
+ {"default:stone", "", "default:stone"},
+ {"default:stone", "default:stone", "default:stone"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:all_faces_tree 8",
+ recipe = {
+ {"default:tree", "default:tree", "default:tree"},
+ {"default:tree", "", "default:tree"},
+ {"default:tree", "default:tree", "default:tree"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:all_faces_jungle_tree 8",
+ recipe = {
+ {"default:jungletree", "default:jungletree", "default:jungletree"},
+ {"default:jungletree", "", "default:jungletree"},
+ {"default:jungletree", "default:jungletree", "default:jungletree"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:sweeper 4",
+ recipe = {
+ {"default:junglegrass"},
+ {"default:stick"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:stone_tile 4",
+ recipe = {
+ {"default:cobble", "default:cobble"},
+ {"default:cobble", "default:cobble"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:split_stone_tile",
+ recipe = {
+ {"moreblocks:stone_tile"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:split_stone_tile_alt",
+ recipe = {
+ {"moreblocks:split_stone_tile"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:grey_bricks 2",
+ type = "shapeless",
+ recipe = {"default:stone", "default:brick"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:grey_bricks 2",
+ type = "shapeless",
+ recipe = {"default:stonebrick", "default:brick"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:empty_bookshelf",
+ type = "shapeless",
+ recipe = {"moreblocks:sweeper", "default:bookshelf"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:coal_stone_bricks 4",
+ recipe = {
+ {"moreblocks:coal_stone", "moreblocks:coal_stone"},
+ {"moreblocks:coal_stone", "moreblocks:coal_stone"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:iron_stone_bricks 4",
+ recipe = {
+ {"moreblocks:iron_stone", "moreblocks:iron_stone"},
+ {"moreblocks:iron_stone", "moreblocks:iron_stone"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:plankstone 4",
+ recipe = {
+ {"default:stone", "default:wood"},
+ {"default:wood", "default:stone"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:plankstone 4",
+ recipe = {
+ {"default:wood", "default:stone"},
+ {"default:stone", "default:wood"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:coal_checker 4",
+ recipe = {
+ {"default:stone", "default:coal_lump"},
+ {"default:coal_lump", "default:stone"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:coal_checker 4",
+ recipe = {
+ {"default:coal_lump", "default:stone"},
+ {"default:stone", "default:coal_lump"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:iron_checker 4",
+ recipe = {
+ {"default:steel_ingot", "default:stone"},
+ {"default:stone", "default:steel_ingot"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:iron_checker 4",
+ recipe = {
+ {"default:stone", "default:steel_ingot"},
+ {"default:steel_ingot", "default:stone"},
+ }
+})
+
+minetest.register_craft({
+ output = "default:chest_locked",
+ type = "shapeless",
+ recipe = {"default:steel_ingot", "default:chest"},
+})
+minetest.register_craft({
+ output = "default:chest_locked",
+ type = "shapeless",
+ recipe = {"default:copper_ingot", "default:chest"},
+})
+
+minetest.register_craft({
+ output = "default:chest_locked",
+ type = "shapeless",
+ recipe = {"default:bronze_ingot", "default:chest"},
+})
+
+minetest.register_craft({
+ output = "default:chest_locked",
+ type = "shapeless",
+ recipe = {"default:gold_ingot", "default:chest"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:iron_glass",
+ type = "shapeless",
+ recipe = {"default:steel_ingot", "default:glass"},
+})
+
+minetest.register_craft({
+ output = "default:glass",
+ type = "shapeless",
+ recipe = {"default:coal_lump", "moreblocks:iron_glass"},
+})
+
+
+minetest.register_craft({
+ output = "moreblocks:coal_glass",
+ type = "shapeless",
+ recipe = {"default:coal_lump", "default:glass"},
+})
+
+minetest.register_craft({
+ output = "default:glass",
+ type = "shapeless",
+ recipe = {"default:steel_ingot", "moreblocks:coal_glass"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:clean_glass",
+ type = "shapeless",
+ recipe = {"moreblocks:sweeper", "default:glass"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:glow_glass",
+ type = "shapeless",
+ recipe = {"default:torch", "default:glass"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:trap_glow_glass",
+ type = "shapeless",
+ recipe = {"default:mese_crystal_fragment", "default:glass", "default:torch"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:trap_glow_glass",
+ type = "shapeless",
+ recipe = {"default:mese_crystal_fragment", "moreblocks:glow_glass"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:super_glow_glass",
+ type = "shapeless",
+ recipe = {"default:torch", "default:torch", "default:glass"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:super_glow_glass",
+ type = "shapeless",
+ recipe = {"default:torch", "moreblocks:glow_glass"},
+})
+
+
+minetest.register_craft({
+ output = "moreblocks:trap_super_glow_glass",
+ type = "shapeless",
+ recipe = {"default:mese_crystal_fragment", "default:glass", "default:torch", "default:torch"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:trap_super_glow_glass",
+ type = "shapeless",
+ recipe = {"default:mese_crystal_fragment", "moreblocks:super_glow_glass"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:coal_stone",
+ type = "shapeless",
+ recipe = {"default:coal_lump", "default:stone"},
+})
+
+minetest.register_craft({
+ output = "default:stone",
+ type = "shapeless",
+ recipe = {"default:steel_ingot", "moreblocks:coal_stone"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:iron_stone",
+ type = "shapeless",
+ recipe = {"default:steel_ingot", "default:stone"},
+})
+
+minetest.register_craft({
+ output = "default:stone",
+ type = "shapeless",
+ recipe = {"default:coal_lump", "moreblocks:iron_stone"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:trap_stone",
+ type = "shapeless",
+ recipe = {"default:mese_crystal_fragment", "default:stone"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:trap_glass",
+ type = "shapeless",
+ recipe = {"default:mese_crystal_fragment", "default:glass"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:cactus_brick",
+ type = "shapeless",
+ recipe = {"default:cactus", "default:brick"},
+})
+
+minetest.register_craft({
+ output = "moreblocks:cactus_checker 4",
+ recipe = {
+ {"default:cactus", "default:stone"},
+ {"default:stone", "default:cactus"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:cactuschecker 4",
+ recipe = {
+ {"default:stone", "default:cactus"},
+ {"default:cactus", "default:stone"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:rope 3",
+ recipe = {
+ {"default:junglegrass"},
+ {"default:junglegrass"},
+ {"default:junglegrass"},
+ }
+})
+
+minetest.register_craft({
+ output = "moreblocks:cobble_compressed",
+ recipe = {
+ {"default:cobble", "default:cobble", "default:cobble"},
+ {"default:cobble", "default:cobble", "default:cobble"},
+ {"default:cobble", "default:cobble", "default:cobble"},
+ }
+})
+
+minetest.register_craft({
+ output = "default:cobble 9",
+ recipe = {
+ {"moreblocks:cobble_compressed"},
+ }
+})
+
+minetest.register_craft({
+ type = "cooking", output = "moreblocks:tar", recipe = "default:gravel",
+})
+
+if minetest.setting_getbool("moreblocks.circular_saw_crafting") ~= false then -- “If nil or true thenâ€
+ minetest.register_craft({
+ output = "moreblocks:circular_saw",
+ recipe = {
+ { "", "default:steel_ingot", "" },
+ { "group:wood", "group:wood", "group:wood"},
+ { "group:wood", "", "group:wood"},
+ }
+ })
+end
diff --git a/moreblocks/depends.txt b/moreblocks/depends.txt
new file mode 100644
index 0000000..198fe8a
--- /dev/null
+++ b/moreblocks/depends.txt
@@ -0,0 +1,2 @@
+default
+intllib?
diff --git a/moreblocks/init.lua b/moreblocks/init.lua
new file mode 100644
index 0000000..2919a30
--- /dev/null
+++ b/moreblocks/init.lua
@@ -0,0 +1,33 @@
+--[[
+=====================================================================
+** More Blocks **
+By Calinou, with the help of ShadowNinja and VanessaE.
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+=====================================================================
+--]]
+
+moreblocks = {}
+
+local S
+if minetest.get_modpath("intllib") then
+ S = intllib.Getter()
+else
+ S = function(s) return s end
+end
+moreblocks.intllib = S
+
+local modpath = minetest.get_modpath("moreblocks")
+
+dofile(modpath .. "/config.lua")
+dofile(modpath .. "/circular_saw.lua")
+dofile(modpath .. "/stairsplus/init.lua")
+dofile(modpath .. "/nodes.lua")
+dofile(modpath .. "/redefinitions.lua")
+dofile(modpath .. "/crafting.lua")
+dofile(modpath .. "/aliases.lua")
+
+if minetest.setting_getbool("log_mods") then
+ minetest.log("action", S("[moreblocks] loaded."))
+end
diff --git a/moreblocks/locale/de.txt b/moreblocks/locale/de.txt
new file mode 100644
index 0000000..542f977
--- /dev/null
+++ b/moreblocks/locale/de.txt
@@ -0,0 +1,67 @@
+# Translation by Xanthin
+
+###init.lua###
+[moreblocks] loaded. = [moreblocks] geladen.
+
+###nodes.lua###
+Jungle Wood Fence = Tropenholzzaun
+Empty Bookshelf = Leeres Buecherregal
+Clean Glass = Klares Glas
+Plankstone = Brettstein
+Wooden Tile = Holzfliese
+Full Wooden Tile = Vollholzfliese
+Centered Wooden Tile = Holzfliese mittig
+Up Wooden Tile = Holzfliese oben
+Down Wooden Tile = Holzfliese unten
+Left Wooden Tile = Holzfliese links
+Right Wooden Tile = Holzfliese rechts
+Circle Stone Bricks = Kreissteinziegel
+Stone Tile = Steinfliese
+Split Stone Tile = Geteilte Steinfliese
+Glow Glass = Leuchtglas
+Super Glow Glass = Superleuchtglas
+Coal Glass = Kohleglas
+Iron Glass = Eisenglas
+Coal Checker = Karierte Kohle
+Iron Checker = Kariertes Eisen
+Trap Stone = Steinfalle
+Trap Glass = Glasfalle
+Trap Glow Glass = Leuchtglasfalle
+Trap Super Glow Glass = Superleuchtglasfalle
+Coal Stone = Kohlestein
+Iron Stone = Eisenstein
+Coal Stone Bricks = Kohlesteinziegel
+Iron Stone Bricks = Eisensteinziegel
+Cactus Checker = Karierter Kaktus
+Cactus Brick = Kaktusziegel
+Sweeper = Besen
+Jungle Stick = Tropenholzstock
+Rope = Seil
+All-faces Tree = Baumscheibenstamm
+
+###circular_saw.lua###
+Circular Saw = Kreissaege
+Circular saw, empty (owned by %s) = Kreissaege, leer (gehoert %s)
+Circular saw, working with %s (owned by %s) = Kreissaege, arbeitet mit %s (gehoert %s)
+Circular saw, empty = Kreissaege, leer
+Circular saw is empty (owned by %s) = Kreissaege ist leer (gehoert %s)
+
+Input\nmaterial = Ausgangs-\nmaterial
+Left-over = Rest
+Max = Anzahl
+Set = Ok
+Recycle\noutput = Wiederver-\nwerten
+
+###./stairsplus/*###
+%s Stairs = %streppe
+%s Slab = %sstufe
+%s Panel = %spaneel
+%s Microblock = %smikroblock
+
+%s Pane = %sscheibe
+%s Fence = %szaun
+
+###ownership.lua###
+someone = jemand
+Sorry, %s owns that spot. = Tut mir leid, %s gehoert diese Stelle.
+
diff --git a/moreblocks/locale/es.txt b/moreblocks/locale/es.txt
new file mode 100644
index 0000000..d11ba49
--- /dev/null
+++ b/moreblocks/locale/es.txt
@@ -0,0 +1,52 @@
+# Translation by kaeza
+
+[moreblocks] loaded. = [moreblocks] cargado.
+
+Jungle Wooden Planks = Tablones de madera de jungla
+Empty Bookshelf = Estante para libros vacío
+Clean Glass = Cristal Limpio
+Plankstone = Tablones de piedra
+Wooden Tile = Parquet
+Full Wooden Tile = Parquet Completo
+Centered Wooden Tile = Parquet Centrado
+Up Wooden Tile = Parquet Superior
+Down Wooden Tile = Parquet Inferior
+Left Wooden Tile = Parquet Izquierdo
+Right Wooden Tile = Parquet Derecho
+Circle Stone Bricks = Bloques de Piedra Circulares
+Stone Tile = Baldosa de Piedra
+Split Stone Tile = Baldosas de Piedra Partida
+Glow Glass = Cristal Brillante
+Super Glow Glass = Cristal Súper Brillante
+Coal Glass = Cristal con Carbón
+Iron Glass = Cristal con Hierro
+Coal Checker = Cuadros de Carbón
+Iron Checker = Cuadros de Hierro
+Trap Stone = Piedra Trampa
+Trap Glass = Cristal Trampa
+Coal Stone = Carbón y Piedra
+Iron Stone = Hierro y Piedra
+Cactus Checker = Cuadros de Cactus
+Cactus Brick = Ladrillos de Cactus
+Sweeper = Limpiador
+Jungle Stick = Varita de Madera de Jungla
+Horizontal Tree = Tronco de árbol horizontal
+Horizontal Jungle Tree = Tronco de árbol de la jungla horizontal
+Rope = Soga
+All-faces Tree = Tronco de Ãrbol
+
+%s Stairs = Escalera de %s
+%s Slab = Losa de %s
+%s Panel = Panel de %s
+%s Microblock = Microbloque de %s
+
+Wooden = Madera
+Papyrus = Papiro
+Dry Shrub = Arbusto Desértico
+Sapling = Brote de Ãrbol
+Wooden Planks = Tablones de Madera
+Ladder = Escalera de Mano
+Glass = Cristal
+
+%s Pane = Panel de %s
+%s Fence = Valla de %s
diff --git a/moreblocks/locale/fr.txt b/moreblocks/locale/fr.txt
new file mode 100644
index 0000000..6bd7f98
--- /dev/null
+++ b/moreblocks/locale/fr.txt
@@ -0,0 +1,72 @@
+# Translation by Calinou
+
+###init.lua###
+[moreblocks] loaded. = [moreblocks] a été chargé.
+
+Jungle Wooden Planks = Planches de bois de jungle
+Empty Bookshelf = Ètagère vide
+Clean Glass = Verre propre
+Plankstone = Pierre-bois
+Wooden Tile = Dalle en bois
+Full Wooden Tile = Dalle en bois complète
+Centered Wooden Tile = Dalle en bois centrée
+Up Wooden Tile = Dalle en bois vers le haut
+Down Wooden Tile = Dalle en bois vers le bas
+Left Wooden Tile = Dalle en bois vers la gauche
+Right Wooden Tile = Dalle en bois vers la droite
+Circle Stone Bricks = Briques en pierre circulaires
+Stone Tile = Dalle en pierre
+Split Stone Tile = Dalle en pierre découpée
+Glow Glass = Verre brillant
+Super Glow Glass = Verre très brillant
+Coal Glass = Verre de charbon
+Iron Glass = Verre de fer
+Coal Checker = Damier en charbon
+Iron Checker = Damier en fer
+Trap Stone = Pierre traversable
+Trap Glass = Verre traversable
+Trap Glow Glass = Verre brillant traversable
+Trap Super Glow Glass = Verre très brillant traversable
+Coal Stone = Pierre de charbon
+Iron Stone = Pierre de fer
+Coal Stone Bricks = Briques en pierre de charbon
+Iron Stone Bricks = Briques en pierre de fer
+Cactus Checker = Damier en cactus
+Cactus Brick = Briques de cactus
+Sweeper = Balai
+Jungle Stick = Bâton en bois de jungle
+Horizontal Tree = Tronc d'arbre horizontal
+Horizontal Jungle Tree = Tronc d'arbre de jungle horizontal
+Rope = Corde
+All-faces Tree = Tronc d'arbre
+
+###redefinition.lua###
+Wooden = bois
+Papyrus = Papyrus
+Dry Shrub = Buisson mort
+Sapling = Pousse d'arbre
+Wooden Planks = Planches de bois
+Ladder = Échelle
+Glass = Verre
+
+###circular_saw.lua###
+Circular Saw = Scie circulaire
+Circular saw, empty (owned by %s) = Scie circulaire, vide (propriété de %s)
+Circular saw, working with %s (owned by %s) = Scie circulaire, manipule %s (propriété de %s)
+Circular saw, empty = Scie circulaire, vide
+Circular saw is empty (owned by %s) = Scie circulaire est vide (propriété de %s)
+
+Input material = Entrée du matériel
+Rest/microblocks = Reste/microbloc
+Max: = Max:
+Set = Fixer
+Recycle output = Recyclage
+
+###./stairsplus/*###
+%s Stairs = Escaliers en %s
+%s Slab = Demi-dalle en %s
+%s Panel = Barre en %s
+%s Microblock = Microbloc en %s
+
+%s Pane = Panneau en %s
+%s Fence = Barrière en %s \ No newline at end of file
diff --git a/moreblocks/locale/template.txt b/moreblocks/locale/template.txt
new file mode 100644
index 0000000..2b88227
--- /dev/null
+++ b/moreblocks/locale/template.txt
@@ -0,0 +1,64 @@
+###init.lua###
+[moreblocks] loaded. =
+
+###nodes.lua###
+Jungle Wood Fence =
+Empty Bookshelf =
+Clean Glass =
+Plankstone =
+Wooden Tile =
+Full Wooden Tile =
+Centered Wooden Tile =
+Up Wooden Tile =
+Down Wooden Tile =
+Left Wooden Tile =
+Right Wooden Tile =
+Circle Stone Bricks =
+Stone Tile =
+Split Stone Tile =
+Glow Glass =
+Super Glow Glass =
+Coal Glass =
+Iron Glass =
+Coal Checker =
+Iron Checker =
+Trap Stone =
+Trap Glass =
+Trap Glow Glass =
+Trap Super Glow Glass =
+Coal Stone =
+Iron Stone =
+Coal Stone Bricks =
+Iron Stone Bricks =
+Cactus Checker =
+Cactus Brick =
+Sweeper =
+Jungle Stick =
+Rope =
+All-faces Tree =
+
+###circular_saw.lua###
+Circular Saw =
+Circular saw, empty (owned by %s) =
+Circular saw, working with %s (owned by %s) =
+Circular saw, empty =
+Circular saw is empty (owned by %s) =
+
+Input\nmaterial =
+Left-over =
+Max =
+Set =
+Recycle\noutput =
+
+###ownership.lua###
+someone =
+Sorry, %s owns that spot. =
+
+###./stairsplus/*###
+%s Stairs =
+%s Slab =
+%s Panel =
+%s Microblock =
+
+%s Pane =
+%s Fence =
diff --git a/moreblocks/models/moreblocks_slope.obj b/moreblocks/models/moreblocks_slope.obj
new file mode 100644
index 0000000..22a833f
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope.obj
@@ -0,0 +1,26 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope.mtl
+o Cube_Cube.002
+v 0.500000 0.500000 0.500000
+v -0.500000 0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 -0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -1.000000 -0.000000
+vn -1.000000 0.000000 0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 0.707100 -0.707100
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/3/2 3/4/2 5/1/2 6/2/2
+f 2/1/3 5/3/3 3/4/3
+f 1/2/4 4/3/4 6/4/4
+f 2/1/5 1/2/5 6/3/5 5/4/5
diff --git a/moreblocks/models/moreblocks_slope_cut.obj b/moreblocks/models/moreblocks_slope_cut.obj
new file mode 100644
index 0000000..a9ea83d
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_cut.obj
@@ -0,0 +1,33 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_cut.mtl
+o moreblocks_slope_cut
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 0.500000 0.500000
+v -0.500000 -0.000000 0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 -0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 0.500000
+vt 1.000000 0.500000
+vt 0.000000 1.000000
+vt 0.500000 0.000000
+vt 0.500000 2.000000
+vn 0.000000 -0.000000 1.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -1.000000 -0.000000
+vn -0.408200 0.816500 -0.408200
+vn 0.000000 0.000000 -1.000000
+vn -1.000000 0.000000 0.000000
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 2/1/2 5/2/2 6/5/2 3/6/2
+f 2/3/3 1/6/3 7/1/3 5/2/3
+f 7/7/4 4/3/4 3/8/4 6/6/4
+f 5/1/5 7/2/5 6/4/5
+f 7/1/6 1/2/6 4/5/6
diff --git a/moreblocks/models/moreblocks_slope_half.obj b/moreblocks/models/moreblocks_slope_half.obj
new file mode 100644
index 0000000..a6b1a56
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_half.obj
@@ -0,0 +1,28 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_half.mtl
+o Cube_Cube.002
+v 0.500000 -0.000000 0.500000
+v -0.500000 -0.000000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 -0.500000
+vt 1.000000 0.500000
+vt 0.000000 0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -1.000000 -0.000000
+vn -1.000000 0.000000 0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 0.894400 -0.447200
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/3/2 3/4/2 5/5/2 6/6/2
+f 2/1/3 5/3/3 3/4/3
+f 1/2/4 4/3/4 6/4/4
+f 2/5/5 1/6/5 6/3/5 5/4/5
diff --git a/moreblocks/models/moreblocks_slope_half_raised.obj b/moreblocks/models/moreblocks_slope_half_raised.obj
new file mode 100644
index 0000000..6f985e3
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_half_raised.obj
@@ -0,0 +1,32 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_half_raised.mtl
+o Cube.001
+v -0.500000 0.500000 0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 0.000000 -0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.500000
+vt 0.000000 1.000000
+vn -1.000000 0.000000 0.000000
+vn 0.000000 0.000000 -1.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 0.894400 -0.447200
+usemtl None.001
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 2/5/2 5/2/2 6/3/2 3/4/2
+f 5/5/3 7/6/3 8/3/3 6/4/3
+f 7/1/4 1/6/4 4/3/4 8/4/4
+f 4/4/5 3/1/5 6/6/5 8/3/5
+f 2/4/6 1/1/6 7/6/6 5/3/6
diff --git a/moreblocks/models/moreblocks_slope_inner.obj b/moreblocks/models/moreblocks_slope_inner.obj
new file mode 100644
index 0000000..d4a444e
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_inner.obj
@@ -0,0 +1,35 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_inner.mtl
+o Cube_Cube.000
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v -0.500000 0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vn 1.000000 0.000000 0.000000
+vn -1.000000 0.000000 0.000000
+vn 0.000000 0.707100 -0.707100
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.707100 0.707100 0.000000
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/1/2 6/3/2 7/4/2
+f 5/1/3 2/2/3 6/4/3
+f 1/2/4 4/3/4 8/4/4
+f 8/1/5 4/2/5 3/3/5 7/4/5
+f 7/3/6 3/4/6 2/1/6 5/2/6
+f 2/1/7 1/2/7 8/3/7
+l 7 9
+l 2 9
diff --git a/moreblocks/models/moreblocks_slope_inner_cut.obj b/moreblocks/models/moreblocks_slope_inner_cut.obj
new file mode 100644
index 0000000..b687b11
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_inner_cut.obj
@@ -0,0 +1,32 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_inner_cut.mtl
+o moreblocks_slope_inner_cut
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.500000 0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 1.000000 0.000000
+vn -1.000000 0.000000 0.000000
+vn 0.000000 0.000000 -1.000000
+vn -0.577400 0.577400 -0.577400
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/1/2 1/2/2 4/3/2 6/4/2
+f 2/1/3 1/2/3 5/3/3 7/4/3
+f 6/1/4 4/2/4 3/3/4
+f 7/1/5 5/2/5 6/3/5
+f 2/1/6 7/2/6 3/4/6
+f 7/5/7 6/3/7 3/4/7
diff --git a/moreblocks/models/moreblocks_slope_inner_cut_half.obj b/moreblocks/models/moreblocks_slope_inner_cut_half.obj
new file mode 100644
index 0000000..82a387b
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_inner_cut_half.obj
@@ -0,0 +1,34 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_inner_cut_half.mtl
+o moreblocks_slope_inner_cut_half
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.000000 -0.500000
+v 0.500000 -0.000000 0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.000000 0.500000
+v -0.500000 -0.500000 -0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.500000
+vt 0.000000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.500000 0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 1.000000 0.000000
+vn -1.000000 0.000000 0.000000
+vn 0.000000 0.000000 -1.000000
+vn -0.408200 0.816500 -0.408200
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/1/2 1/2/2 4/3/2 6/4/2
+f 2/1/3 1/2/3 5/5/3 7/6/3
+f 6/1/4 4/2/4 3/5/4
+f 7/1/5 5/2/5 6/3/5
+f 2/1/6 7/2/6 3/4/6
+f 7/7/7 6/5/7 3/6/7
diff --git a/moreblocks/models/moreblocks_slope_inner_cut_half_raised.obj b/moreblocks/models/moreblocks_slope_inner_cut_half_raised.obj
new file mode 100644
index 0000000..8231ee4
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_inner_cut_half_raised.obj
@@ -0,0 +1,35 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_inner_cut_half_raised.mtl
+o moreblocks_slope_inner_cut_half_raised
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 0.000000 -0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.500000
+vt 1.000000 0.500000
+vt 0.500000 0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -0.000000 1.000000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 1.000000 0.000000
+vn -1.000000 0.000000 0.000000
+vn -0.000000 0.000000 -1.000000
+vn -0.408200 0.816500 -0.408200
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/1/2 1/2/2 4/3/2 6/4/2
+f 2/1/3 1/2/3 5/3/3 7/4/3
+f 6/1/4 4/2/4 3/3/4
+f 7/1/5 5/2/5 6/3/5 8/5/5
+f 2/1/6 7/2/6 8/6/6 3/4/6
+f 8/7/7 6/3/7 3/4/7
diff --git a/moreblocks/models/moreblocks_slope_inner_half.obj b/moreblocks/models/moreblocks_slope_inner_half.obj
new file mode 100644
index 0000000..3e54dea
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_inner_half.obj
@@ -0,0 +1,35 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_inner_half.mtl
+o Cube_Cube.001
+v 0.500000 0.000000 -0.500000
+v 0.500000 -0.000000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v -0.500000 -0.000000 0.500000
+v -0.500000 -0.500000 -0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vn 1.000000 0.000000 0.000000
+vn -1.000000 0.000000 0.000000
+vn 0.000000 0.894400 -0.447200
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.447200 0.894400 0.000000
+usemtl None.002
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/1/2 6/3/2 7/4/2
+f 5/1/3 2/2/3 6/4/3
+f 1/2/4 4/3/4 8/4/4
+f 8/1/5 4/2/5 3/3/5 7/4/5
+f 7/3/6 3/4/6 2/1/6 5/2/6
+f 2/1/7 1/2/7 8/3/7
+l 7 9
+l 2 9
diff --git a/moreblocks/models/moreblocks_slope_inner_half_raised.obj b/moreblocks/models/moreblocks_slope_inner_half_raised.obj
new file mode 100644
index 0000000..e6c2205
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_inner_half_raised.obj
@@ -0,0 +1,38 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_inner_half_raised.mtl
+o Cube_Cube.003
+v 0.500000 0.500000 -0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v -0.500000 0.500000 0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.500000
+vt 0.000000 0.500000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 0.894400 -0.447200
+vn 0.000000 -0.000000 1.000000
+vn -0.447200 0.894400 0.000000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 0.000000 -1.000000
+vn -1.000000 0.000000 0.000000
+usemtl None.003
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/1/2 2/2/2 6/4/2
+f 7/3/3 3/4/3 2/1/3 5/2/3
+f 2/2/4 1/3/4 8/4/4
+f 7/1/5 9/2/5 4/3/5 3/4/5
+f 6/5/6 1/2/6 4/3/6 9/4/6
+f 7/4/7 5/1/7 6/6/7 9/3/7
+l 2 10
+l 7 10
diff --git a/moreblocks/models/moreblocks_slope_outer.obj b/moreblocks/models/moreblocks_slope_outer.obj
new file mode 100644
index 0000000..b8f4e9e
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_outer.obj
@@ -0,0 +1,25 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_outer.mtl
+o Cube_Cube.004
+v 0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.500000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vn 0.000000 -1.000000 -0.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -0.000000 1.000000
+vn -0.707100 0.707100 0.000000
+vn 0.000000 0.707100 -0.707100
+usemtl None
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/2/2 1/3/2 4/4/2
+f 2/3/3 1/4/3 5/1/3
+f 5/1/4 3/3/4 2/4/4
+f 5/2/5 4/3/5 3/4/5
diff --git a/moreblocks/models/moreblocks_slope_outer_cut.obj b/moreblocks/models/moreblocks_slope_outer_cut.obj
new file mode 100644
index 0000000..e6cbfb4
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_outer_cut.obj
@@ -0,0 +1,23 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_outer_cut.mtl
+o Cube.002
+v 0.500000 0.500000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+vt 1.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 0.000000 1.000000
+vt 0.500000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -1.000000 0.000000
+vn -0.577400 0.577400 -0.577400
+usemtl None.004
+s off
+f 1/1/1 2/2/1 3/3/1
+f 4/3/2 1/4/2 3/2/2
+f 3/2/3 2/3/3 4/4/3
+f 2/3/4 1/5/4 4/2/4
diff --git a/moreblocks/models/moreblocks_slope_outer_cut_half.obj b/moreblocks/models/moreblocks_slope_outer_cut_half.obj
new file mode 100644
index 0000000..bd64194
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_outer_cut_half.obj
@@ -0,0 +1,24 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_outer_cut_half.mtl
+o Cube.003
+v 0.500000 -0.000000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+vt 1.000000 0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 0.000000 0.500000
+vt 0.000000 1.000000
+vt 0.500000 1.000000
+vn 0.000000 -0.000000 1.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -1.000000 0.000000
+vn -0.408200 0.816500 -0.408200
+usemtl None.005
+s off
+f 1/1/1 2/2/1 3/3/1
+f 4/3/2 1/4/2 3/2/2
+f 3/2/3 2/3/3 4/5/3
+f 2/3/4 1/6/4 4/2/4
diff --git a/moreblocks/models/moreblocks_slope_outer_cut_half_raised.obj b/moreblocks/models/moreblocks_slope_outer_cut_half_raised.obj
new file mode 100644
index 0000000..c65e08d
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_outer_cut_half_raised.obj
@@ -0,0 +1,28 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_outer_cut_half_raised.mtl
+o Cube_Cube.005
+v -0.500000 -0.000000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.000000 -0.500000
+vt 0.000000 0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 1.000000 0.500000
+vn 0.000000 -0.000000 1.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 -1.000000 0.000000
+vn -0.408200 0.816500 -0.408200
+vn -0.707100 0.000000 -0.707100
+usemtl None.006
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/5/2 3/2/2 5/3/2 6/6/2
+f 2/5/3 5/3/3 3/4/3
+f 1/2/4 4/3/4 6/4/4
+f 2/3/5 1/6/5 6/1/5 5/2/5
diff --git a/moreblocks/models/moreblocks_slope_outer_half.obj b/moreblocks/models/moreblocks_slope_outer_half.obj
new file mode 100644
index 0000000..7bbb38d
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_outer_half.obj
@@ -0,0 +1,27 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_outer_half.mtl
+o Cube.004
+v -0.500000 -0.500000 0.500000
+v -0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 -0.000000 0.500000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 0.500000
+vt 0.000000 0.500000
+vn 0.000000 -1.000000 -0.000000
+vn 0.000000 -0.000000 1.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 0.894400 -0.447200
+vn -0.447200 0.894400 0.000000
+usemtl None.007
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 5/5/2 1/3/2 4/4/2
+f 3/4/3 5/6/3 4/3/3
+f 2/4/4 5/2/4 3/3/4
+f 1/4/5 5/1/5 2/3/5
diff --git a/moreblocks/models/moreblocks_slope_outer_half_raised.obj b/moreblocks/models/moreblocks_slope_outer_half_raised.obj
new file mode 100644
index 0000000..51a929a
--- /dev/null
+++ b/moreblocks/models/moreblocks_slope_outer_half_raised.obj
@@ -0,0 +1,34 @@
+# Blender v2.72 (sub 0) OBJ File: ''
+# www.blender.org
+mtllib moreblocks_slope_outer_half_raised.mtl
+o Cube_Cube.006
+v -0.500000 -0.000000 0.500000
+v -0.500000 -0.500000 0.500000
+v 0.500000 -0.500000 0.500000
+v 0.500000 0.500000 0.500000
+v 0.500000 -0.500000 -0.500000
+v 0.500000 0.000000 -0.500000
+v -0.500000 0.000000 -0.500000
+v -0.500000 -0.500000 -0.500000
+vt 0.000000 0.500000
+vt 0.000000 0.000000
+vt 1.000000 0.000000
+vt 1.000000 1.000000
+vt 0.000000 1.000000
+vt 1.000000 0.500000
+vn 0.000000 -0.000000 1.000000
+vn 1.000000 0.000000 0.000000
+vn 0.000000 0.894400 -0.447200
+vn -1.000000 0.000000 0.000000
+vn -0.447200 0.894400 0.000000
+vn 0.000000 0.000000 -1.000000
+vn 0.000000 -1.000000 -0.000000
+usemtl None.008
+s off
+f 1/1/1 2/2/1 3/3/1 4/4/1
+f 4/5/2 3/2/2 5/3/2 6/6/2
+f 7/3/3 4/5/3 6/2/3
+f 1/6/4 7/1/4 8/2/4 2/3/4
+f 7/3/5 1/4/5 4/5/5
+f 6/1/6 5/2/6 8/3/6 7/6/6
+f 5/5/7 3/2/7 2/3/7 8/4/7
diff --git a/moreblocks/nodes.lua b/moreblocks/nodes.lua
new file mode 100644
index 0000000..810df36
--- /dev/null
+++ b/moreblocks/nodes.lua
@@ -0,0 +1,372 @@
+--[[
+More Blocks: node definitions
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.intllib
+
+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()
+
+local function tile_tiles(name)
+ local tex = "moreblocks_" ..name.. ".png"
+ return {tex, tex, tex, tex, tex.. "^[transformR90", tex.. "^[transformR90"}
+end
+
+local nodes = {
+ ["wood_tile"] = {
+ description = S("Wooden Tile"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ 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"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ 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"},
+ sounds = sound_wood,
+ no_stairs = true,
+ },
+ ["wood_tile_center"] = {
+ description = S("Centered Wooden Tile"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ tiles = {"default_wood.png^moreblocks_wood_tile_center.png"},
+ sounds = sound_wood,
+ },
+ ["wood_tile_full"] = {
+ description = S("Full Wooden Tile"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ tiles = tile_tiles("wood_tile_full"),
+ sounds = sound_wood,
+ },
+ ["wood_tile_up"] = {
+ description = S("Upwards Wooden Tile"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ tiles = {"default_wood.png^moreblocks_wood_tile_up.png"},
+ sounds = sound_wood,
+ no_stairs = true,
+ },
+ ["wood_tile_down"] = {
+ description = S("Downwards Wooden Tile"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ tiles = {"default_wood.png^[transformR180^moreblocks_wood_tile_up.png^[transformR180"},
+ sounds = sound_wood,
+ no_stairs = true,
+ },
+ ["wood_tile_left"] = {
+ description = S("Leftwards Wooden Tile"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ tiles = {"default_wood.png^[transformR270^moreblocks_wood_tile_up.png^[transformR270"},
+ sounds = sound_wood,
+ no_stairs = true,
+ },
+ ["wood_tile_right"] = {
+ description = S("Rightwards Wooden Tile"),
+ groups = {snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
+ tiles = {"default_wood.png^[transformR90^moreblocks_wood_tile_up.png^[transformR90"},
+ sounds = sound_wood,
+ no_stairs = true,
+ },
+ ["circle_stone_bricks"] = {
+ description = S("Circle Stone Bricks"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["grey_bricks"] = {
+ description = S("Stone Bricks"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["coal_stone_bricks"] = {
+ description = S("Coal Stone Bricks"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["iron_stone_bricks"] = {
+ description = S("Iron Stone Bricks"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["stone_tile"] = {
+ description = S("Stone Tile"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["split_stone_tile"] = {
+ description = S("Split Stone Tile"),
+ tiles = {"moreblocks_split_stone_tile_top.png",
+ "moreblocks_split_stone_tile.png"},
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["split_stone_tile_alt"] = {
+ description = S("Checkered Stone Tile"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["tar"] = {
+ description = S("Tar"),
+ groups = {cracky = 2, tar_block = 1},
+ sounds = sound_stone,
+ },
+ ["cobble_compressed"] = {
+ description = S("Compressed Cobblestone"),
+ groups = {cracky = 1},
+ sounds = sound_stone,
+ },
+ ["plankstone"] = {
+ description = S("Plankstone"),
+ groups = {cracky = 3},
+ tiles = tile_tiles("plankstone"),
+ sounds = sound_stone,
+ },
+ ["iron_glass"] = {
+ description = S("Iron Glass"),
+ drawtype = "glasslike_framed_optional",
+ --tiles = {"moreblocks_iron_glass.png", "moreblocks_iron_glass_detail.png"},
+ tiles = {"moreblocks_iron_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3},
+ sounds = sound_glass,
+ },
+ ["coal_glass"] = {
+ description = S("Coal Glass"),
+ drawtype = "glasslike_framed_optional",
+ --tiles = {"moreblocks_coal_glass.png", "moreblocks_coal_glass_detail.png"},
+ tiles = {"moreblocks_coal_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {snappy = 2, 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"},
+ tiles = {"moreblocks_clean_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3},
+ sounds = sound_glass,
+ },
+ ["cactus_brick"] = {
+ description = S("Cactus Brick"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["cactus_checker"] = {
+ description = S("Cactus Checker"),
+ groups = {cracky = 3},
+ 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_bookshelf"] = {
+ description = S("Empty Bookshelf"),
+ tiles = {"default_wood.png", "default_wood.png",
+ "moreblocks_empty_bookshelf.png"},
+ groups = {snappy = 2, choppy = 3, oddly_breakable_by_hand = 2, flammable = 3},
+ sounds = sound_wood,
+ no_stairs = true,
+ },
+ ["coal_stone"] = {
+ description = S("Coal Stone"),
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["iron_stone"] = {
+ description = S("Iron Stone"),
+ groups = {cracky = 3},
+ 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 = {cracky = 3},
+ 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 = {cracky = 3},
+ sounds = sound_stone,
+ },
+ ["trap_stone"] = {
+ description = S("Trap Stone"),
+ walkable = false,
+ groups = {cracky = 3},
+ sounds = sound_stone,
+ no_stairs = true,
+ },
+ ["trap_glass"] = {
+ description = S("Trap Glass"),
+ drawtype = "glasslike_framed_optional",
+ --tiles = {"moreblocks_trap_glass.png", "default_glass_detail.png"},
+ tiles = {"moreblocks_trap_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ walkable = false,
+ groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3},
+ sounds = sound_glass,
+ no_stairs = true,
+ },
+ ["fence_jungle_wood"] = {
+ description = S("Jungle Wood Fence"),
+ drawtype = "fencelike",
+ tiles = {"default_junglewood.png"},
+ inventory_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
+ wield_image = "default_fence_overlay.png^default_junglewood.png^default_fence_overlay.png^[makealpha:255,126,126",
+ paramtype = "light",
+ selection_box = {
+ type = "fixed",
+ fixed = {-1/7, -1/2, -1/7, 1/7, 1/2, 1/7},
+ },
+ groups = {snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
+ sounds = sound_wood,
+ no_stairs = true,
+ },
+ ["all_faces_tree"] = {
+ description = S("All-faces Tree"),
+ tiles = {"default_tree_top.png"},
+ groups = {tree = 1,snappy = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
+ sounds = sound_wood,
+ furnace_burntime = 30,
+ },
+ ["all_faces_jungle_tree"] = {
+ description = S("All-faces Jungle Tree"),
+ tiles = {"default_jungletree_top.png"},
+ groups = {tree = 1,snappy = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2},
+ sounds = sound_wood,
+ furnace_burntime = 30,
+ },
+ ["glow_glass"] = {
+ description = S("Glow Glass"),
+ drawtype = "glasslike_framed_optional",
+ --tiles = {"moreblocks_glow_glass.png", "moreblocks_glow_glass_detail.png"},
+ tiles = {"moreblocks_glow_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ light_source = 11,
+ groups = {snappy = 2, cracky = 3, oddly_breakable_by_hand = 3},
+ sounds = sound_glass,
+ },
+ ["trap_glow_glass"] = {
+ description = S("Trap Glow Glass"),
+ drawtype = "glasslike_framed_optional",
+ --tiles = {"moreblocks_trap_glass.png", "moreblocks_glow_glass_detail.png"},
+ tiles = {"moreblocks_trap_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ light_source = 11,
+ walkable = false,
+ groups = {snappy = 2, 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 = {"moreblocks_super_glow_glass.png", "moreblocks_super_glow_glass_detail.png"},
+ tiles = {"moreblocks_super_glow_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ light_source = 15,
+ groups = {snappy = 2, 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 = {"moreblocks_trap_super_glow_glass.png", "moreblocks_super_glow_glass_detail.png"},
+ tiles = {"moreblocks_trap_super_glow_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ light_source = 15,
+ walkable = false,
+ groups = {snappy = 2, 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,
+ paramtype2 = "wallmounted",
+ walkable = false,
+ climbable = true,
+ selection_box = {type = "wallmounted",},
+ groups = {snappy = 3, flammable = 2},
+ sounds = sound_leaves,
+ no_stairs = true,
+ },
+}
+
+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)
+ 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",
+})
+
+minetest.register_craftitem("moreblocks:jungle_stick", {
+ description = S("Jungle Stick"),
+ inventory_image = "moreblocks_junglestick.png",
+ groups = {stick= 1},
+})
+
+minetest.register_craftitem("moreblocks:nothing", {
+ inventory_image = "invisible.png",
+ on_use = function() end,
+})
+
diff --git a/moreblocks/ownership.lua b/moreblocks/ownership.lua
new file mode 100644
index 0000000..1c2431b
--- /dev/null
+++ b/moreblocks/ownership.lua
@@ -0,0 +1,41 @@
+--[[
+More Blocks: ownership handling
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.gettext
+
+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, %s owns that spot."):format(ownername) )
+ return true
+ else
+ return false
+ end
+end
diff --git a/moreblocks/redefinitions.lua b/moreblocks/redefinitions.lua
new file mode 100644
index 0000000..9dc7ae3
--- /dev/null
+++ b/moreblocks/redefinitions.lua
@@ -0,0 +1,100 @@
+--[[
+More Blocks: redefinitions of default stuff
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+-- Redefinitions of some default crafting recipes:
+
+minetest.register_craft({
+ output = "default:sign_wall 4",
+ recipe = {
+ {"default:wood", "default:wood", "default:wood"},
+ {"default:wood", "default:wood", "default:wood"},
+ {"", "default:stick", ""},
+ }
+})
+
+minetest.register_craft({
+ output = "default:ladder 4",
+ recipe = {
+ {"default:stick", "", "default:stick"},
+ {"default:stick", "default:stick", "default:stick"},
+ {"default:stick", "", "default:stick"},
+ }
+})
+
+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%).
+})
+
+-- Redefinitions of some default nodes
+-- ===================================
+
+-- Let there be light. This makes some nodes let light pass through:
+minetest.override_item("default:ladder", {
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+minetest.override_item("default:sapling", {
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+minetest.override_item("default:dry_shrub", {
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+minetest.override_item("default:papyrus", {
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+minetest.override_item("default:fence_wood", {
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+minetest.override_item("default:junglegrass", {
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+minetest.override_item("default:junglesapling", {
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+minetest.override_item("default:grass_1", {
+ inventory_image = "default_grass_3.png", -- Use a bigger inventory image.
+ wield_image = "default_grass_3.png",
+ paramtype = "light",
+ sunlight_propagates = true,
+})
+
+for i = 2, 5 do
+ minetest.override_item("default:grass_" ..i, {
+ paramtype = "light",
+ sunlight_propagates = true,
+ })
+end
diff --git a/moreblocks/stairsplus/API.md b/moreblocks/stairsplus/API.md
new file mode 100644
index 0000000..2db0f2b
--- /dev/null
+++ b/moreblocks/stairsplus/API.md
@@ -0,0 +1,24 @@
+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", "defaut: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)`
+
diff --git a/moreblocks/stairsplus/aliases.lua b/moreblocks/stairsplus/aliases.lua
new file mode 100644
index 0000000..c235d34
--- /dev/null
+++ b/moreblocks/stairsplus/aliases.lua
@@ -0,0 +1,70 @@
+--[[
+More Blocks: alias definitions
+
+Copyright (c) 2011-2015 Calinou 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")
diff --git a/moreblocks/stairsplus/conversion.lua b/moreblocks/stairsplus/conversion.lua
new file mode 100644
index 0000000..13966b6
--- /dev/null
+++ b/moreblocks/stairsplus/conversion.lua
@@ -0,0 +1,139 @@
+--[[
+More Blocks: conversion
+
+Copyright (c) 2011-2015 Calinou 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
+
+ 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
+
diff --git a/moreblocks/stairsplus/init.lua b/moreblocks/stairsplus/init.lua
new file mode 100644
index 0000000..2a959c0
--- /dev/null
+++ b/moreblocks/stairsplus/init.lua
@@ -0,0 +1,61 @@
+--[[
+More Blocks: Stairs+
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+-- Nodes will be called <modname>:{stair,slab,panel,micro}_<subname>
+
+local modpath = minetest.get_modpath("moreblocks").. "/stairsplus"
+
+stairsplus = {}
+stairsplus.expect_infinite_stacks = false
+
+if not minetest.get_modpath("unified_inventory")
+and minetest.setting_getbool("creative_mode") then
+ stairsplus.expect_infinite_stacks = true
+end
+
+function stairsplus:prepare_groups(groups)
+ 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 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 .. "/stairs.lua")
+dofile(modpath .. "/slabs.lua")
+dofile(modpath .. "/slopes.lua")
+dofile(modpath .. "/panels.lua")
+dofile(modpath .. "/microblocks.lua")
+dofile(modpath .. "/registrations.lua")
diff --git a/moreblocks/stairsplus/microblocks.lua b/moreblocks/stairsplus/microblocks.lua
new file mode 100644
index 0000000..680b3ca
--- /dev/null
+++ b/moreblocks/stairsplus/microblocks.lua
@@ -0,0 +1,138 @@
+--[[
+More Blocks: microblock definitions
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.intllib
+
+-- Node will be called <modname>:micro_<subname>
+
+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(modname, subname, recipeitem, fields)
+ local defs = {
+ [""] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0, 0, 0.5},
+ },
+ },
+ ["_1"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0, -0.4375, 0.5},
+ },
+ },
+ ["_2"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0, -0.375, 0.5},
+ },
+ },
+ ["_4"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0, -0.25, 0.5},
+ },
+ },
+ ["_12"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0, 0.25, 0.5},
+ },
+ },
+ ["_14"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0, 0.375, 0.5},
+ },
+ },
+ ["_15"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0, 0.4375, 0.5},
+ },
+ }
+ }
+
+ local desc = S("%s Microblock"):format(fields.description)
+ for alternate, def in pairs(defs) do
+ for k, v in pairs(fields) do
+ def[k] = v
+ end
+ def.drawtype = "nodebox"
+ def.paramtype = "light"
+ def.paramtype2 = "facedir"
+ def.on_place = minetest.rotate_node
+ def.groups = stairsplus:prepare_groups(fields.groups)
+ def.description = desc
+ if fields.drop then
+ def.drop = modname.. ":micro_" ..fields.drop..alternate
+ end
+ minetest.register_node(":" ..modname.. ":micro_" ..subname..alternate, def)
+ end
+ minetest.register_alias(modname.. ":micro_" ..subname.. "_bottom", modname.. ":micro_" ..subname)
+
+ circular_saw.known_nodes[recipeitem] = {modname, subname}
+
+ -- Some saw-less recipes:
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":micro_" .. subname .. " 7",
+ recipe = {modname .. ":stair_" .. subname .. "_inner"},
+ })
+
+ minetest.register_craft({
+ output = modname .. ":micro_" .. subname .. " 6",
+ type = "shapeless",
+ 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},
+ })
+end
diff --git a/moreblocks/stairsplus/panels.lua b/moreblocks/stairsplus/panels.lua
new file mode 100644
index 0000000..4fb3f13
--- /dev/null
+++ b/moreblocks/stairsplus/panels.lua
@@ -0,0 +1,118 @@
+--[[
+More Blocks: panel definitions
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.intllib
+
+-- Node will be called <modname>:panel_<subname>
+
+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(modname, subname, recipeitem, fields)
+ local defs = {
+ [""] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0.5, 0, 0.5},
+ },
+ },
+ ["_1"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0.5, -0.4375, 0.5},
+ },
+ },
+ ["_2"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0.5, -0.375, 0.5},
+ },
+ },
+ ["_4"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0.5, -0.25, 0.5},
+ },
+ },
+ ["_12"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0.5, 0.25, 0.5},
+ },
+ },
+ ["_14"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0.5, 0.375, 0.5},
+ },
+ },
+ ["_15"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, 0, 0.5, 0.4375, 0.5},
+ },
+ }
+ }
+
+ local desc = S("%s Panel"):format(fields.description)
+ for alternate, def in pairs(defs) do
+ for k, v in pairs(fields) do
+ def[k] = v
+ end
+ def.drawtype = "nodebox"
+ def.paramtype = "light"
+ def.paramtype2 = "facedir"
+ def.on_place = minetest.rotate_node
+ def.description = desc
+ def.groups = stairsplus:prepare_groups(fields.groups)
+ if fields.drop then
+ def.drop = modname.. ":panel_" ..fields.drop..alternate
+ end
+ minetest.register_node(":" ..modname.. ":panel_" ..subname..alternate, def)
+ end
+ minetest.register_alias(modname.. ":panel_" ..subname.. "_bottom", modname.. ":panel_" ..subname)
+
+ circular_saw.known_nodes[recipeitem] = {modname, subname}
+
+ -- Some saw-less recipes:
+
+ 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},
+ })
+end
diff --git a/moreblocks/stairsplus/registrations.lua b/moreblocks/stairsplus/registrations.lua
new file mode 100644
index 0000000..3e08565
--- /dev/null
+++ b/moreblocks/stairsplus/registrations.lua
@@ -0,0 +1,57 @@
+--[[
+More Blocks: registrations
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local default_nodes = { -- Default stairs/slabs/panels/microblocks:
+ "stone",
+ "cobble",
+ "mossycobble",
+ "brick",
+ "sandstone",
+ "steelblock",
+ "goldblock",
+ "copperblock",
+ "bronzeblock",
+ "diamondblock",
+ "desert_stone",
+ "desert_cobble",
+ "meselamp",
+ "glass",
+ "tree",
+ "wood",
+ "jungletree",
+ "junglewood",
+ "pine_tree",
+ "pine_wood",
+ "acacia_tree",
+ "acacia_wood",
+ "obsidian",
+ "obsidian_glass",
+ "stonebrick",
+ "desert_stonebrick",
+ "sandstonebrick",
+ "obsidianbrick",
+}
+
+for _, name in pairs(default_nodes) do
+ local nodename = "default:" .. name
+ local ndef = minetest.registered_nodes[nodename]
+ if ndef then
+ local drop
+ if type(ndef.drop) == "string" then
+ drop = ndef.drop:sub(9)
+ end
+ stairsplus:register_all("moreblocks", name, nodename, {
+ description = ndef.description,
+ drop = drop,
+ groups = ndef.groups,
+ sounds = ndef.sounds,
+ tiles = ndef.tiles,
+ sunlight_propagates = true,
+ light_source = ndef.light_source
+ })
+ end
+end
diff --git a/moreblocks/stairsplus/slabs.lua b/moreblocks/stairsplus/slabs.lua
new file mode 100644
index 0000000..cc3502c
--- /dev/null
+++ b/moreblocks/stairsplus/slabs.lua
@@ -0,0 +1,209 @@
+--[[
+More Blocks: slab definitions
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.intllib
+
+-- Node will be called <modname>:slab_<subname>
+
+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(modname, subname, recipeitem, fields)
+ local defs = {
+ [""] = 8,
+ ["_quarter"] = 4,
+ ["_three_quarter"] = 12,
+ ["_1"] = 1,
+ ["_2"] = 2,
+ ["_14"] = 14,
+ ["_15"] = 15,
+ }
+
+ local desc_base = S("%s Slab"):format(fields.description)
+ for alternate, num in pairs(defs) do
+ local def = {
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, (num/16)-0.5, 0.5},
+ }
+ }
+ for k, v in pairs(fields) do
+ def[k] = v
+ end
+ def.drawtype = "nodebox"
+ def.paramtype = "light"
+ def.paramtype2 = "facedir"
+ def.on_place = minetest.rotate_node
+ def.description = ("%s (%d/16)"):format(desc_base, num)
+ def.groups = stairsplus:prepare_groups(fields.groups)
+ if fields.drop then
+ def.drop = modname.. ":slab_" .. fields.drop .. alternate
+ end
+ minetest.register_node(":" .. modname .. ":slab_" .. subname .. alternate, def)
+ end
+ minetest.register_alias("stairs:slab_" .. subname, modname .. ":slab_" .. subname)
+
+ circular_saw.known_nodes[recipeitem] = {modname, subname}
+
+ -- Some saw-less recipes:
+
+ 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 = 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 .. "_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 .. "_three_quarter", modname .. ":slab_" .. subname .. "_quarter"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_2"},
+ })
+
+ 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,
+ 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 .. "_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"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":slab_" .. subname .. "_2",
+ recipe = {modname .. ":slab_" .. subname .. "_1", modname .. ":slab_" .. subname .. "_1"},
+ })
+
+ 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"},
+ })
+
+ 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"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":slab_" .. subname .. "_15",
+ recipe = {modname .. ":slab_" .. subname .. "_14", modname .. ":slab_" .. subname .. "_1"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":slab_" .. subname .. " 3",
+ recipe = {modname .. ":stair_" .. subname, modname .. ":stair_" .. subname},
+ })
+end
diff --git a/moreblocks/stairsplus/slopes.lua b/moreblocks/stairsplus/slopes.lua
new file mode 100644
index 0000000..49058e3
--- /dev/null
+++ b/moreblocks/stairsplus/slopes.lua
@@ -0,0 +1,347 @@
+--[[
+More Blocks: slope definitions
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.intllib
+
+local box_slope = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
+ {-0.5, -0.25, -0.25, 0.5, 0, 0.5},
+ {-0.5, 0, 0, 0.5, 0.25, 0.5},
+ {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
+ }
+}
+
+local box_slope_half = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5},
+ {-0.5, -0.375, -0.25, 0.5, -0.25, 0.5},
+ {-0.5, -0.25, 0, 0.5, -0.125, 0.5},
+ {-0.5, -0.125, 0.25, 0.5, 0, 0.5},
+ }
+}
+
+local box_slope_half_raised = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5},
+ {-0.5, 0.125, -0.25, 0.5, 0.25, 0.5},
+ {-0.5, 0.25, 0, 0.5, 0.375, 0.5},
+ {-0.5, 0.375, 0.25, 0.5, 0.5, 0.5},
+ }
+}
+
+--==============================================================
+
+local box_slope_inner = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
+ {-0.5, -0.5, -0.25, 0.5, 0, 0.5},
+ {-0.5, -0.5, -0.5, 0.25, 0, 0.5},
+ {-0.5, 0, -0.5, 0, 0.25, 0.5},
+ {-0.5, 0, 0, 0.5, 0.25, 0.5},
+ {-0.5, 0.25, 0.25, 0.5, 0.5, 0.5},
+ {-0.5, 0.25, -0.5, -0.25, 0.5, 0.5},
+ }
+}
+
+local box_slope_inner_half = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5},
+ {-0.5, -0.375, -0.25, 0.5, -0.25, 0.5},
+ {-0.5, -0.375, -0.5, 0.25, -0.25, 0.5},
+ {-0.5, -0.25, -0.5, 0, -0.125, 0.5},
+ {-0.5, -0.25, 0, 0.5, -0.125, 0.5},
+ {-0.5, -0.125, 0.25, 0.5, 0, 0.5},
+ {-0.5, -0.125, -0.5, -0.25, 0, 0.5},
+ }
+}
+
+local box_slope_inner_half_raised = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5},
+ {-0.5, 0.125, -0.25, 0.5, 0.25, 0.5},
+ {-0.5, 0.125, -0.5, 0.25, 0.25, 0.5},
+ {-0.5, 0.25, -0.5, 0, 0.375, 0.5},
+ {-0.5, 0.25, 0, 0.5, 0.375, 0.5},
+ {-0.5, 0.375, 0.25, 0.5, 0.5, 0.5},
+ {-0.5, 0.375, -0.5, -0.25, 0.5, 0.5},
+ }
+}
+
+--==============================================================
+
+local box_slope_outer = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
+ {-0.5, -0.25, -0.25, 0.25, 0, 0.5},
+ {-0.5, 0, 0, 0, 0.25, 0.5},
+ {-0.5, 0.25, 0.25, -0.25, 0.5, 0.5}
+ }
+}
+
+local box_slope_outer_half = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, -0.375, 0.5},
+ {-0.5, -0.375, -0.25, 0.25, -0.25, 0.5},
+ {-0.5, -0.25, 0, 0, -0.125, 0.5},
+ {-0.5, -0.125, 0.25, -0.25, 0, 0.5}
+ }
+}
+
+local box_slope_outer_half_raised = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0.125, 0.5},
+ {-0.5, 0.125, -0.25, 0.25, 0.25, 0.5},
+ {-0.5, 0.25, 0, 0, 0.375, 0.5},
+ {-0.5, 0.375, 0.25, -0.25, 0.5, 0.5}
+ }
+}
+
+-- Node will be called <modname>:slope_<subname>
+
+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(modname, subname, recipeitem, fields)
+ local defs = {
+ [""] = {
+ mesh = "moreblocks_slope.obj",
+ collision_box = box_slope,
+ selection_box = box_slope,
+
+ },
+ ["_half"] = {
+ mesh = "moreblocks_slope_half.obj",
+ collision_box = box_slope_half,
+ selection_box = box_slope_half,
+ },
+ ["_half_raised"] = {
+ mesh = "moreblocks_slope_half_raised.obj",
+ collision_box = box_slope_half_raised,
+ selection_box = box_slope_half_raised,
+ },
+
+--==============================================================
+
+ ["_inner"] = {
+ mesh = "moreblocks_slope_inner.obj",
+ collision_box = box_slope_inner,
+ selection_box = box_slope_inner,
+ },
+ ["_inner_half"] = {
+ mesh = "moreblocks_slope_inner_half.obj",
+ collision_box = box_slope_inner_half,
+ selection_box = box_slope_inner_half,
+ },
+ ["_inner_half_raised"] = {
+ mesh = "moreblocks_slope_inner_half_raised.obj",
+ collision_box = box_slope_inner_half_raised,
+ selection_box = box_slope_inner_half_raised,
+ },
+
+--==============================================================
+
+ ["_inner_cut"] = {
+ mesh = "moreblocks_slope_inner_cut.obj",
+ collision_box = box_slope_inner,
+ selection_box = box_slope_inner,
+ },
+ ["_inner_cut_half"] = {
+ mesh = "moreblocks_slope_inner_cut_half.obj",
+ collision_box = box_slope_inner_half,
+ selection_box = box_slope_inner_half,
+ },
+ ["_inner_cut_half_raised"] = {
+ mesh = "moreblocks_slope_inner_cut_half_raised.obj",
+ collision_box = box_slope_inner_half_raised,
+ selection_box = box_slope_inner_half_raised,
+ },
+
+--==============================================================
+
+ ["_outer"] = {
+ mesh = "moreblocks_slope_outer.obj",
+ collision_box = box_slope_outer,
+ selection_box = box_slope_outer,
+ },
+ ["_outer_half"] = {
+ mesh = "moreblocks_slope_outer_half.obj",
+ collision_box = box_slope_outer_half,
+ selection_box = box_slope_outer_half,
+ },
+ ["_outer_half_raised"] = {
+ mesh = "moreblocks_slope_outer_half_raised.obj",
+ collision_box = box_slope_outer_half_raised,
+ selection_box = box_slope_outer_half_raised,
+ },
+
+--==============================================================
+
+ ["_outer_cut"] = {
+ mesh = "moreblocks_slope_outer_cut.obj",
+ collision_box = box_slope_outer,
+ selection_box = box_slope_outer,
+ },
+ ["_outer_cut_half"] = {
+ mesh = "moreblocks_slope_outer_cut_half.obj",
+ collision_box = box_slope_outer_half,
+ selection_box = box_slope_outer_half,
+ },
+ ["_outer_cut_half_raised"] = {
+ mesh = "moreblocks_slope_outer_cut_half_raised.obj",
+ collision_box = box_slope_outer_half_raised,
+ selection_box = box_slope_outer_half_raised,
+ },
+ ["_cut"] = {
+ mesh = "moreblocks_slope_cut.obj",
+ collision_box = box_slope_outer,
+ selection_box = box_slope_outer,
+ },
+ }
+
+ local desc = S("%s Slope"):format(fields.description)
+ for alternate, def in pairs(defs) do
+ for k, v in pairs(fields) do
+ def[k] = v
+ end
+ def.drawtype = "mesh"
+ def.paramtype = "light"
+ def.paramtype2 = "facedir"
+ def.on_place = minetest.rotate_node
+ def.description = desc
+ def.groups = stairsplus:prepare_groups(fields.groups)
+ if fields.drop then
+ def.drop = modname.. ":slope_" ..fields.drop..alternate
+ end
+ minetest.register_node(":" ..modname.. ":slope_" ..subname..alternate, def)
+ end
+
+ circular_saw.known_nodes[recipeitem] = {modname, subname}
+
+ -- Some saw-less recipes:
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slope_" .. subname, modname .. ":slope_" .. subname},
+ })
+
+ 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"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slope_" .. subname .. "_outer", modname .. ":slope_" .. subname .. "_inner"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slope_" .. subname .. "_outer_half", modname .. ":slope_" .. subname .. "_inner_half_raised"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slope_" .. subname .. "_outer_half_raised", modname .. ":slope_" .. subname .. "_inner_half"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slope_" .. subname .. "_outer_cut", modname .. ":slope_" .. subname .. "_inner_cut"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slope_" .. subname .. "_outer_cut_half", modname .. ":slope_" .. subname .. "_inner_cut_half_raised"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = recipeitem,
+ recipe = {modname .. ":slope_" .. subname .. "_cut", modname .. ":slope_" .. subname .. "_cut"},
+ })
+
+ 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"},
+ })
+
+ 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"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":slope_" .. subname .. "_inner_half_raised",
+ recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_half"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":slope_" .. subname .. "_outer_half_raised",
+ recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_outer_half"},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":slope_" .. subname .. "_inner_cut_half_raised",
+ recipe = {modname .. ":slab_" .. subname, modname .. ":slope_" .. subname .. "_inner_cut_half"},
+ })
+end
diff --git a/moreblocks/stairsplus/stairs.lua b/moreblocks/stairsplus/stairs.lua
new file mode 100644
index 0000000..dde6d50
--- /dev/null
+++ b/moreblocks/stairsplus/stairs.lua
@@ -0,0 +1,224 @@
+--[[
+More Blocks: stair definitions
+
+Copyright (c) 2011-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = moreblocks.intllib
+
+-- Node will be called <modname>:stair_<subname>
+
+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(modname, subname, recipeitem, fields)
+ local defs = {
+ [""] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ {-0.5, 0, 0, 0.5, 0.5, 0.5},
+ },
+ },
+ },
+ ["_half"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0, 0, 0.5},
+ {-0.5, 0, 0, 0, 0.5, 0.5},
+ },
+ },
+ },
+ ["_right_half" ]= {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0, -0.5, -0.5, 0.5, 0, 0.5},
+ {0, 0, 0, 0.5, 0.5, 0.5},
+ },
+ },
+ },
+ ["_inner"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ {-0.5, 0, 0, 0.5, 0.5, 0.5},
+ {-0.5, 0, -0.5, 0, 0.5, 0},
+ },
+ },
+ },
+ ["_outer"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
+ {-0.5, 0, 0, 0, 0.5, 0.5},
+ },
+ },
+ },
+ ["_alt"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.5, -0.5, 0.5, 0, 0},
+ {-0.5, 0, 0, 0.5, 0.5, 0.5},
+ },
+ },
+ },
+ ["_alt_1"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.0625, -0.5, 0.5, 0, 0},
+ {-0.5, 0.4375, 0, 0.5, 0.5, 0.5},
+ },
+ },
+ },
+ ["_alt_2"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.125, -0.5, 0.5, 0, 0},
+ {-0.5, 0.375, 0, 0.5, 0.5, 0.5},
+ },
+ },
+ },
+ ["_alt_4"] = {
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {-0.5, -0.25, -0.5, 0.5, 0, 0},
+ {-0.5, 0.25, 0, 0.5, 0.5, 0.5},
+ },
+ },
+ },
+ }
+
+ local desc = S("%s Stairs"):format(fields.description)
+ for alternate, def in pairs(defs) do
+ for k, v in pairs(fields) do
+ def[k] = v
+ end
+ def.drawtype = "nodebox"
+ def.paramtype = "light"
+ def.paramtype2 = "facedir"
+ def.on_place = minetest.rotate_node
+ def.description = desc
+ def.groups = stairsplus:prepare_groups(fields.groups)
+ if fields.drop then
+ def.drop = modname .. ":stair_" .. fields.drop .. alternate
+ end
+ minetest.register_node(":" .. modname .. ":stair_" .. subname .. alternate, def)
+ end
+ minetest.register_alias("stairs:stair_" .. subname, modname .. ":stair_" .. subname)
+
+ circular_saw.known_nodes[recipeitem] = {modname, subname}
+
+ -- Some saw-less recipes:
+
+ 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 .. "_outer",
+ recipe = {modname .. ":micro_" .. subname, modname .. ":slab_" .. subname},
+ })
+
+ 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},
+ })
+
+ minetest.register_craft({
+ type = "shapeless",
+ output = modname .. ":stair_" .. subname .. "_right_half",
+ recipe = {modname .. ":stair_" .. subname .. "_half"},
+ })
+
+ 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 .. "_inner",
+ recipe = {modname .. ":micro_" .. subname, 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 .. "_outer",
+ recipe = {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},
+ })
+
+ 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
diff --git a/moreblocks/textures/default_brick.png b/moreblocks/textures/default_brick.png
new file mode 100644
index 0000000..9c76033
--- /dev/null
+++ b/moreblocks/textures/default_brick.png
Binary files differ
diff --git a/moreblocks/textures/default_fence_overlay.png b/moreblocks/textures/default_fence_overlay.png
new file mode 100644
index 0000000..780e736
--- /dev/null
+++ b/moreblocks/textures/default_fence_overlay.png
Binary files differ
diff --git a/moreblocks/textures/invisible.png b/moreblocks/textures/invisible.png
new file mode 100644
index 0000000..4b5b302
--- /dev/null
+++ b/moreblocks/textures/invisible.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_cactus_brick.png b/moreblocks/textures/moreblocks_cactus_brick.png
new file mode 100644
index 0000000..0e8c2c9
--- /dev/null
+++ b/moreblocks/textures/moreblocks_cactus_brick.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_cactus_checker.png b/moreblocks/textures/moreblocks_cactus_checker.png
new file mode 100644
index 0000000..99c2677
--- /dev/null
+++ b/moreblocks/textures/moreblocks_cactus_checker.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_circle_stone_bricks.png b/moreblocks/textures/moreblocks_circle_stone_bricks.png
new file mode 100644
index 0000000..4ca0134
--- /dev/null
+++ b/moreblocks/textures/moreblocks_circle_stone_bricks.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_circular_saw_bottom.png b/moreblocks/textures/moreblocks_circular_saw_bottom.png
new file mode 100644
index 0000000..1522829
--- /dev/null
+++ b/moreblocks/textures/moreblocks_circular_saw_bottom.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_circular_saw_side.png b/moreblocks/textures/moreblocks_circular_saw_side.png
new file mode 100644
index 0000000..ce9e16f
--- /dev/null
+++ b/moreblocks/textures/moreblocks_circular_saw_side.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_circular_saw_top.png b/moreblocks/textures/moreblocks_circular_saw_top.png
new file mode 100644
index 0000000..96f3350
--- /dev/null
+++ b/moreblocks/textures/moreblocks_circular_saw_top.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_clean_glass.png b/moreblocks/textures/moreblocks_clean_glass.png
new file mode 100644
index 0000000..140ee2b
--- /dev/null
+++ b/moreblocks/textures/moreblocks_clean_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_clean_glass_detail.png b/moreblocks/textures/moreblocks_clean_glass_detail.png
new file mode 100644
index 0000000..71414e8
--- /dev/null
+++ b/moreblocks/textures/moreblocks_clean_glass_detail.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_coal_checker.png b/moreblocks/textures/moreblocks_coal_checker.png
new file mode 100644
index 0000000..3df90c3
--- /dev/null
+++ b/moreblocks/textures/moreblocks_coal_checker.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_coal_glass.png b/moreblocks/textures/moreblocks_coal_glass.png
new file mode 100644
index 0000000..5cb7227
--- /dev/null
+++ b/moreblocks/textures/moreblocks_coal_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_coal_glass_detail.png b/moreblocks/textures/moreblocks_coal_glass_detail.png
new file mode 100644
index 0000000..5ea081f
--- /dev/null
+++ b/moreblocks/textures/moreblocks_coal_glass_detail.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_coal_glass_stairsplus.png b/moreblocks/textures/moreblocks_coal_glass_stairsplus.png
new file mode 100644
index 0000000..8086a28
--- /dev/null
+++ b/moreblocks/textures/moreblocks_coal_glass_stairsplus.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_coal_stone.png b/moreblocks/textures/moreblocks_coal_stone.png
new file mode 100644
index 0000000..1e514ed
--- /dev/null
+++ b/moreblocks/textures/moreblocks_coal_stone.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_coal_stone_bricks.png b/moreblocks/textures/moreblocks_coal_stone_bricks.png
new file mode 100644
index 0000000..366e445
--- /dev/null
+++ b/moreblocks/textures/moreblocks_coal_stone_bricks.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_cobble_compressed.png b/moreblocks/textures/moreblocks_cobble_compressed.png
new file mode 100644
index 0000000..94d02b5
--- /dev/null
+++ b/moreblocks/textures/moreblocks_cobble_compressed.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_empty_bookshelf.png b/moreblocks/textures/moreblocks_empty_bookshelf.png
new file mode 100644
index 0000000..af874d7
--- /dev/null
+++ b/moreblocks/textures/moreblocks_empty_bookshelf.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_fence_jungle_wood.png b/moreblocks/textures/moreblocks_fence_jungle_wood.png
new file mode 100644
index 0000000..b59db10
--- /dev/null
+++ b/moreblocks/textures/moreblocks_fence_jungle_wood.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_fence_wood.png b/moreblocks/textures/moreblocks_fence_wood.png
new file mode 100644
index 0000000..e3510c5
--- /dev/null
+++ b/moreblocks/textures/moreblocks_fence_wood.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_glass.png b/moreblocks/textures/moreblocks_glass.png
new file mode 100644
index 0000000..912b029
--- /dev/null
+++ b/moreblocks/textures/moreblocks_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_glass_stairsplus.png b/moreblocks/textures/moreblocks_glass_stairsplus.png
new file mode 100644
index 0000000..b879ec3
--- /dev/null
+++ b/moreblocks/textures/moreblocks_glass_stairsplus.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_glow_glass.png b/moreblocks/textures/moreblocks_glow_glass.png
new file mode 100644
index 0000000..843bebf
--- /dev/null
+++ b/moreblocks/textures/moreblocks_glow_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_glow_glass_detail.png b/moreblocks/textures/moreblocks_glow_glass_detail.png
new file mode 100644
index 0000000..ea67bc3
--- /dev/null
+++ b/moreblocks/textures/moreblocks_glow_glass_detail.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_glow_glass_stairsplus.png b/moreblocks/textures/moreblocks_glow_glass_stairsplus.png
new file mode 100644
index 0000000..cdb8044
--- /dev/null
+++ b/moreblocks/textures/moreblocks_glow_glass_stairsplus.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_grey_bricks.png b/moreblocks/textures/moreblocks_grey_bricks.png
new file mode 100644
index 0000000..9839ca2
--- /dev/null
+++ b/moreblocks/textures/moreblocks_grey_bricks.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_iron_checker.png b/moreblocks/textures/moreblocks_iron_checker.png
new file mode 100644
index 0000000..d27f4df
--- /dev/null
+++ b/moreblocks/textures/moreblocks_iron_checker.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_iron_glass.png b/moreblocks/textures/moreblocks_iron_glass.png
new file mode 100644
index 0000000..51be0d6
--- /dev/null
+++ b/moreblocks/textures/moreblocks_iron_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_iron_glass_detail.png b/moreblocks/textures/moreblocks_iron_glass_detail.png
new file mode 100644
index 0000000..2b8fc12
--- /dev/null
+++ b/moreblocks/textures/moreblocks_iron_glass_detail.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_iron_glass_stairsplus.png b/moreblocks/textures/moreblocks_iron_glass_stairsplus.png
new file mode 100644
index 0000000..52e3bf3
--- /dev/null
+++ b/moreblocks/textures/moreblocks_iron_glass_stairsplus.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_iron_stone.png b/moreblocks/textures/moreblocks_iron_stone.png
new file mode 100644
index 0000000..20c42f3
--- /dev/null
+++ b/moreblocks/textures/moreblocks_iron_stone.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_iron_stone_bricks.png b/moreblocks/textures/moreblocks_iron_stone_bricks.png
new file mode 100644
index 0000000..1f817f8
--- /dev/null
+++ b/moreblocks/textures/moreblocks_iron_stone_bricks.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_junglestick.png b/moreblocks/textures/moreblocks_junglestick.png
new file mode 100644
index 0000000..7c6c462
--- /dev/null
+++ b/moreblocks/textures/moreblocks_junglestick.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_obsidian_glass_stairsplus.png b/moreblocks/textures/moreblocks_obsidian_glass_stairsplus.png
new file mode 100644
index 0000000..3eb22d0
--- /dev/null
+++ b/moreblocks/textures/moreblocks_obsidian_glass_stairsplus.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_plankstone.png b/moreblocks/textures/moreblocks_plankstone.png
new file mode 100644
index 0000000..b1a65c5
--- /dev/null
+++ b/moreblocks/textures/moreblocks_plankstone.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_plankstone_2.png b/moreblocks/textures/moreblocks_plankstone_2.png
new file mode 100644
index 0000000..953c2f5
--- /dev/null
+++ b/moreblocks/textures/moreblocks_plankstone_2.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_rope.png b/moreblocks/textures/moreblocks_rope.png
new file mode 100644
index 0000000..19787fe
--- /dev/null
+++ b/moreblocks/textures/moreblocks_rope.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_split_stone_tile.png b/moreblocks/textures/moreblocks_split_stone_tile.png
new file mode 100644
index 0000000..d7d69af
--- /dev/null
+++ b/moreblocks/textures/moreblocks_split_stone_tile.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_split_stone_tile_alt.png b/moreblocks/textures/moreblocks_split_stone_tile_alt.png
new file mode 100644
index 0000000..9d11b4f
--- /dev/null
+++ b/moreblocks/textures/moreblocks_split_stone_tile_alt.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_split_stone_tile_top.png b/moreblocks/textures/moreblocks_split_stone_tile_top.png
new file mode 100644
index 0000000..3c8eb6d
--- /dev/null
+++ b/moreblocks/textures/moreblocks_split_stone_tile_top.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_stone_tile.png b/moreblocks/textures/moreblocks_stone_tile.png
new file mode 100644
index 0000000..c2083ea
--- /dev/null
+++ b/moreblocks/textures/moreblocks_stone_tile.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_super_glow_glass.png b/moreblocks/textures/moreblocks_super_glow_glass.png
new file mode 100644
index 0000000..a9d4c5f
--- /dev/null
+++ b/moreblocks/textures/moreblocks_super_glow_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_super_glow_glass_detail.png b/moreblocks/textures/moreblocks_super_glow_glass_detail.png
new file mode 100644
index 0000000..e321a5c
--- /dev/null
+++ b/moreblocks/textures/moreblocks_super_glow_glass_detail.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_super_glow_glass_stairsplus.png b/moreblocks/textures/moreblocks_super_glow_glass_stairsplus.png
new file mode 100644
index 0000000..9118c78
--- /dev/null
+++ b/moreblocks/textures/moreblocks_super_glow_glass_stairsplus.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_sweeper.png b/moreblocks/textures/moreblocks_sweeper.png
new file mode 100644
index 0000000..34f1cde
--- /dev/null
+++ b/moreblocks/textures/moreblocks_sweeper.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_tar.png b/moreblocks/textures/moreblocks_tar.png
new file mode 100644
index 0000000..e1eb427
--- /dev/null
+++ b/moreblocks/textures/moreblocks_tar.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_trap_glass.png b/moreblocks/textures/moreblocks_trap_glass.png
new file mode 100644
index 0000000..25c3387
--- /dev/null
+++ b/moreblocks/textures/moreblocks_trap_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_trap_glow_glass.png b/moreblocks/textures/moreblocks_trap_glow_glass.png
new file mode 100644
index 0000000..1096dd7
--- /dev/null
+++ b/moreblocks/textures/moreblocks_trap_glow_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_trap_stone.png b/moreblocks/textures/moreblocks_trap_stone.png
new file mode 100644
index 0000000..764aa81
--- /dev/null
+++ b/moreblocks/textures/moreblocks_trap_stone.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_trap_super_glow_glass.png b/moreblocks/textures/moreblocks_trap_super_glow_glass.png
new file mode 100644
index 0000000..fef974b
--- /dev/null
+++ b/moreblocks/textures/moreblocks_trap_super_glow_glass.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_tree_stairsplus.png b/moreblocks/textures/moreblocks_tree_stairsplus.png
new file mode 100644
index 0000000..60100c9
--- /dev/null
+++ b/moreblocks/textures/moreblocks_tree_stairsplus.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_wood_tile.png b/moreblocks/textures/moreblocks_wood_tile.png
new file mode 100644
index 0000000..d0faa3d
--- /dev/null
+++ b/moreblocks/textures/moreblocks_wood_tile.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_wood_tile_center.png b/moreblocks/textures/moreblocks_wood_tile_center.png
new file mode 100644
index 0000000..02b0f84
--- /dev/null
+++ b/moreblocks/textures/moreblocks_wood_tile_center.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_wood_tile_full.png b/moreblocks/textures/moreblocks_wood_tile_full.png
new file mode 100644
index 0000000..7ec7f05
--- /dev/null
+++ b/moreblocks/textures/moreblocks_wood_tile_full.png
Binary files differ
diff --git a/moreblocks/textures/moreblocks_wood_tile_up.png b/moreblocks/textures/moreblocks_wood_tile_up.png
new file mode 100644
index 0000000..3f6a2f2
--- /dev/null
+++ b/moreblocks/textures/moreblocks_wood_tile_up.png
Binary files differ