summaryrefslogtreecommitdiff
path: root/maptools
diff options
context:
space:
mode:
Diffstat (limited to 'maptools')
-rw-r--r--maptools/LICENSE.md14
-rw-r--r--maptools/NODES.md45
-rw-r--r--maptools/README.md11
-rw-r--r--maptools/aliases.lua96
-rw-r--r--maptools/config.lua29
-rw-r--r--maptools/craftitems.lua47
-rw-r--r--maptools/default_nodes.lua389
-rw-r--r--maptools/depends.txt1
-rw-r--r--maptools/init.lua32
-rw-r--r--maptools/locale/es.txt39
-rw-r--r--maptools/locale/fr.txt47
-rw-r--r--maptools/nodes.lua429
-rw-r--r--maptools/textures/black.pngbin0 -> 67 bytes
-rw-r--r--maptools/textures/fire_basic_flame.pngbin0 -> 794 bytes
-rw-r--r--maptools/textures/fire_basic_flame_animated.pngbin0 -> 1233 bytes
-rw-r--r--maptools/textures/invisible.pngbin0 -> 68 bytes
-rw-r--r--maptools/textures/maptools_adminpick.pngbin0 -> 285 bytes
-rw-r--r--maptools/textures/maptools_adminpick_with_drops.pngbin0 -> 278 bytes
-rw-r--r--maptools/textures/maptools_copper_coin.pngbin0 -> 214 bytes
-rw-r--r--maptools/textures/maptools_gold_coin.pngbin0 -> 215 bytes
-rw-r--r--maptools/textures/maptools_grass_side_12.pngbin0 -> 561 bytes
-rw-r--r--maptools/textures/maptools_grass_side_4.pngbin0 -> 294 bytes
-rw-r--r--maptools/textures/maptools_grass_side_8.pngbin0 -> 466 bytes
-rw-r--r--maptools/textures/maptools_infinitefuel.pngbin0 -> 388 bytes
-rw-r--r--maptools/textures/maptools_silver_coin.pngbin0 -> 215 bytes
-rw-r--r--maptools/textures/maptools_smoke.pngbin0 -> 303 bytes
-rw-r--r--maptools/textures/maptools_superapple.pngbin0 -> 231 bytes
-rw-r--r--maptools/textures/white.pngbin0 -> 67 bytes
-rw-r--r--maptools/tools.lua61
29 files changed, 1240 insertions, 0 deletions
diff --git a/maptools/LICENSE.md b/maptools/LICENSE.md
new file mode 100644
index 0000000..ca48e3a
--- /dev/null
+++ b/maptools/LICENSE.md
@@ -0,0 +1,14 @@
+zlib license
+============
+
+Copyright (c) 2012-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/maptools/NODES.md b/maptools/NODES.md
new file mode 100644
index 0000000..f5ce3cc
--- /dev/null
+++ b/maptools/NODES.md
@@ -0,0 +1,45 @@
+Item names for spawning the items using /give or /giveme
+========================================================
+
+Items
+-----
+
+* `admin_pick:` magenta pickaxe, infinite durability, mines everything including unbreakable blocks instantly. No drops. Don't put this pickaxe in the hands of a griefer, of course.
+
+* `admin_pick_with_drops:` same as admin pickaxe, but drops stuff.
+
+* `infinite_fuel:` fuel lasting for a (near)-infinite time. Don't worry about the "near" * it lasts for about 50 in-real-life years.
+
+* `super_apple:` a yellow apple which heals 20 HP.
+
+* `copper_coin,`
+* `silver_coin,`
+* `gold_coin:` these have nothing to do with the More Ores mod; they can be used as a currency for trading, or as an universal currency for mods that add shops.
+
+Blocks
+------
+
+**[!]** denotes an unpointable, unbreakable block; be very careful with them, they cannot be removed by hand (they can only be removed with WorldEdit or similar).
+
+
+* `(block)_u` : unbreakable, non-flammable, non-falling, non-decaying blocks, most common blocks have their unbreakable form (examples: maptools:stone or maptools:wood for unbreakable stone/wood). Examples: `stone_u`, `wood_u`, `glass_u`, …
+
+* `full_grass:` unbreakable block with the grass texture on all sides.
+
+* `player_clip:` **[!]** invisible block, not pointable.
+
+* `full_clip:` invisible block, pointable. Also available as a thin face: full_clip_face.
+
+* `smoke_block:` some smoke (does not harm players or entities).
+
+* `no_build:` **[!]** very basic building prevention.
+
+* `no_interact:` prevents interacting through the block (opening chests, furnaces, attacking entities, …).
+
+* `damage_(1…5):` **[!]** damaging blocks. The damage is in half hearts and ranges from 1 to 5 (0.5 to 2.5 hearts damage every second).
+
+* `kill:` **[!]** instant kill (deals 10 heart damage) blocks.
+
+* `light_block:` **[!]** invisible non-solid block, prevents light from passing through.
+
+* `light_bulb:` **[!]** invisible non-solid block, emitting a good amount of light.
diff --git a/maptools/README.md b/maptools/README.md
new file mode 100644
index 0000000..3a428b7
--- /dev/null
+++ b/maptools/README.md
@@ -0,0 +1,11 @@
+Map Tools
+=========
+
+Map Tools for Minetest <http://minetest.net>, a free/libre infinite
+world block sandbox game.
+
+To install, just clone this repository into your "mods" directory.
+
+Map Tools 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=1882>
diff --git a/maptools/aliases.lua b/maptools/aliases.lua
new file mode 100644
index 0000000..f1f0cc5
--- /dev/null
+++ b/maptools/aliases.lua
@@ -0,0 +1,96 @@
+--[[
+Map Tools: alias definitions
+
+Copyright (c) 2012-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+minetest.register_alias("adminpick", "maptools:pick_admin")
+minetest.register_alias("adminpickaxe", "maptools:pick_admin")
+minetest.register_alias("admin_pick", "maptools:pick_admin")
+minetest.register_alias("admin_pickaxe", "maptools:pick_admin")
+minetest.register_alias("pick_admin", "maptools:pick_admin")
+minetest.register_alias("pickaxe_admin", "maptools:pick_admin")
+minetest.register_alias("pickadmin", "maptools:pick_admin")
+minetest.register_alias("pickaxeadmin", "maptools:pick_admin")
+minetest.register_alias("adminpickdrops", "maptools:pick_admin_with_drops")
+minetest.register_alias("adminpickaxedrops", "maptools:pick_admin_with_drops")
+minetest.register_alias("admin_pick_drops", "maptools:pick_admin_with_drops")
+minetest.register_alias("admin_pickaxe_drops", "maptools:pick_admin_with_drops")
+minetest.register_alias("pick_admin_drops", "maptools:pick_admin_with_drops")
+minetest.register_alias("pickaxe_admin_drops", "maptools:pick_admin_with_drops")
+minetest.register_alias("pickadmindrops", "maptools:pick_admin_with_drops")
+minetest.register_alias("pickaxeadmindrops", "maptools:pick_admin_with_drops")
+minetest.register_alias("infinitefuel", "maptools:infinitefuel")
+minetest.register_alias("infinite_fuel", "maptools:infinitefuel")
+minetest.register_alias("ifuel", "maptools:infinitefuel")
+minetest.register_alias("superapple", "maptools:superapple")
+minetest.register_alias("super_apple", "maptools:superapple")
+minetest.register_alias("sapple", "maptools:superapple")
+minetest.register_alias("nobuild", "maptools:nobuild")
+minetest.register_alias("nointeract", "maptools:nointeract")
+minetest.register_alias("damage_1", "maptools:damage_1")
+minetest.register_alias("damage_2", "maptools:damage_2")
+minetest.register_alias("damage_3", "maptools:damage_3")
+minetest.register_alias("damage_4", "maptools:damage_4")
+minetest.register_alias("damage_5", "maptools:damage_5")
+minetest.register_alias("pusher_1", "maptools:pusher_1")
+minetest.register_alias("pusher_2", "maptools:pusher_2")
+minetest.register_alias("pusher_3", "maptools:pusher_3")
+minetest.register_alias("pusher_4", "maptools:pusher_4")
+minetest.register_alias("pusher_5", "maptools:pusher_5")
+minetest.register_alias("pusher_6", "maptools:pusher_6")
+minetest.register_alias("pusher_7", "maptools:pusher_7")
+minetest.register_alias("pusher_8", "maptools:pusher_8")
+minetest.register_alias("pusher_9", "maptools:pusher_9")
+minetest.register_alias("pusher_10", "maptools:pusher_10")
+minetest.register_alias("killblock", "maptools:kill")
+minetest.register_alias("kill_block", "maptools:kill")
+minetest.register_alias("lightblock", "maptools:lightblock")
+minetest.register_alias("light_block", "maptools:lightblock")
+minetest.register_alias("lightbulb", "maptools:lightbulb")
+minetest.register_alias("light_bulb", "maptools:lightbulb")
+minetest.register_alias("playerclip", "maptools:playerclip")
+minetest.register_alias("player_clip", "maptools:playerclip")
+minetest.register_alias("pclip", "maptools:playerclip")
+minetest.register_alias("fullclip", "maptools:fullclip")
+minetest.register_alias("full_clip", "maptools:fullclip")
+minetest.register_alias("fclip", "maptools:fullclip")
+minetest.register_alias("full_clip", "maptools:fullclip")
+minetest.register_alias("full_clip_face", "maptools:fullclip_face")
+minetest.register_alias("fullclip_face", "maptools:fullclip_face")
+minetest.register_alias("fullclipface", "maptools:fullclip_face")
+minetest.register_alias("player_clip_bottom", "maptools:playerclip_bottom")
+minetest.register_alias("playerclip_bottom", "maptools:playerclip_bottom")
+minetest.register_alias("playerclipbottom", "maptools:playerclip_bottom")
+minetest.register_alias("player_clip_top", "maptools:playerclip_top")
+minetest.register_alias("playerclip_top", "maptools:playerclip_top")
+minetest.register_alias("playercliptop", "maptools:playerclip_top")
+minetest.register_alias("permanentfire", "maptools:permanent_fire")
+minetest.register_alias("permanent_fire", "maptools:permanent_fire")
+minetest.register_alias("pfire", "maptools:permanent_fire")
+minetest.register_alias("fakefire", "maptools:fake_fire")
+minetest.register_alias("fake_fire", "maptools:fake_fire")
+minetest.register_alias("ffire", "maptools:fake_fire")
+minetest.register_alias("igniter", "maptools:igniter")
+
+minetest.register_alias("stone_u", "maptools:stone")
+minetest.register_alias("tree_u", "maptools:tree")
+minetest.register_alias("cobble_u", "maptools:cobble")
+minetest.register_alias("wood_u", "maptools:wood")
+minetest.register_alias("sand_u", "maptools:sand")
+minetest.register_alias("gravel_u", "maptools:gravel")
+minetest.register_alias("brick_u", "maptools:brick")
+minetest.register_alias("dirt_u", "maptools:dirt")
+minetest.register_alias("glass_u", "maptools:glass")
+minetest.register_alias("sandstone_u", "maptools:sandstone")
+minetest.register_alias("desert_stone_u", "maptools:desert_stone")
+minetest.register_alias("desertstone_u", "maptools:desert_stone")
+minetest.register_alias("desert_sand_u", "maptools:desert_sand")
+minetest.register_alias("desertsand_u", "maptools:desert_sand")
+minetest.register_alias("leaves_u", "maptools:leaves")
+minetest.register_alias("grass_u", "maptools:grass")
+minetest.register_alias("fullgrass", "maptools:fullgrass")
+minetest.register_alias("fullgrass_u", "maptools:fullgrass")
+minetest.register_alias("mossycobble_u", "maptools:mossycobble")
+minetest.register_alias("mossy_cobble_u", "maptools:mossycobble")
diff --git a/maptools/config.lua b/maptools/config.lua
new file mode 100644
index 0000000..63f1a26
--- /dev/null
+++ b/maptools/config.lua
@@ -0,0 +1,29 @@
+--[[
+Map Tools: configuration handling
+
+Copyright (c) 2012-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+maptools.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
+ maptools.config[name] =
+ getbool_default("maptools." .. name, default)
+ else
+ maptools.config[name] =
+ minetest.setting_get("maptools." .. name) or default
+ end
+end
+
+-- Show Map Tools stuff in creative inventory (1 or 0):
+setting("integer", "hide_from_creative_inventory", 1)
diff --git a/maptools/craftitems.lua b/maptools/craftitems.lua
new file mode 100644
index 0000000..c311aa9
--- /dev/null
+++ b/maptools/craftitems.lua
@@ -0,0 +1,47 @@
+--[[
+Map Tools: item definitions
+
+Copyright (c) 2012-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = maptools.intllib
+
+maptools.creative = maptools.config["hide_from_creative_inventory"]
+
+minetest.register_craftitem("maptools:copper_coin", {
+ description = S("Copper Coin"),
+ inventory_image = "maptools_copper_coin.png",
+ wield_scale = {x = 0.5, y = 0.5, z = 0.25},
+ stack_max = 10000,
+ groups = {not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_craftitem("maptools:silver_coin", {
+ description = S("Silver Coin"),
+ inventory_image = "maptools_silver_coin.png",
+ wield_scale = {x = 0.5, y = 0.5, z = 0.25},
+ stack_max = 10000,
+ groups = {not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_craftitem("maptools:gold_coin", {
+ description = S("Gold Coin"),
+ inventory_image = "maptools_gold_coin.png",
+ wield_scale = {x = 0.5, y = 0.5, z = 0.25},
+ stack_max = 10000,
+ groups = {not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_craftitem("maptools:infinitefuel", {
+ description = S("Infinite Fuel"),
+ inventory_image = "maptools_infinitefuel.png",
+ stack_max = 10000,
+ groups = {not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_craft({
+ type = "fuel",
+ recipe = "maptools:infinitefuel",
+ burntime = 1000000000,
+})
diff --git a/maptools/default_nodes.lua b/maptools/default_nodes.lua
new file mode 100644
index 0000000..7c1e135
--- /dev/null
+++ b/maptools/default_nodes.lua
@@ -0,0 +1,389 @@
+--[[
+Map Tools: unbreakable default nodes
+
+Copyright (c) 2012-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = maptools.intllib
+
+maptools.creative = maptools.config["hide_from_creative_inventory"]
+
+minetest.register_node("maptools:stone", {
+ description = S("Unbreakable Stone"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_stone.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:stonebrick", {
+ description = S("Unbreakable Stone Brick"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_stone_brick.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:tree", {
+ description = S("Unbreakable Tree"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_wood_defaults(),
+ on_place = minetest.rotate_node
+})
+
+minetest.register_node("maptools:jungletree", {
+ description = S("Unbreakable Jungle Tree"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_wood_defaults(),
+ on_place = minetest.rotate_node
+})
+
+minetest.register_node("maptools:cactus", {
+ description = S("Unbreakable Cactus"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_wood_defaults(),
+ on_place = minetest.rotate_node
+})
+
+minetest.register_node("maptools:papyrus", {
+ description = S("Unbreakable Papyrus"),
+ drawtype = "plantlike",
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_papyrus.png"},
+ inventory_image = "default_papyrus.png",
+ wield_image = "default_papyrus.png",
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}
+ },
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+minetest.register_node("maptools:dirt", {
+ description = S("Unbreakable Dirt"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_dirt.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+minetest.register_node("maptools:wood", {
+ description = S("Unbreakable Wooden Planks"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_wood.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+minetest.register_node("maptools:junglewood", {
+ description = S("Unbreakable Junglewood Planks"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_junglewood.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+minetest.register_node("maptools:glass", {
+ description = S("Unbreakable Glass"),
+ range = 12,
+ stack_max = 10000,
+ drawtype = "glasslike",
+ tiles = {"default_glass.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_glass_defaults(),
+})
+
+minetest.register_node("maptools:leaves", {
+ description = S("Unbreakable Leaves"),
+ range = 12,
+ stack_max = 10000,
+ drawtype = "allfaces_optional",
+ tiles = {"default_leaves.png"},
+ paramtype = "light",
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_leaves_defaults(),
+})
+
+minetest.register_node("maptools:sand", {
+ description = S("Unbreakable Sand"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_sand.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_sand_defaults(),
+})
+
+minetest.register_node("maptools:gravel", {
+ description = S("Unbreakable Gravel"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_gravel.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_dirt_defaults({
+ footstep = {name="default_gravel_footstep", gain=0.35},
+ dug = {name="default_gravel_footstep", gain=0.6},
+ }),
+})
+
+minetest.register_node("maptools:clay", {
+ description = S("Unbreakable Clay"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_clay.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+minetest.register_node("maptools:desert_sand", {
+ description = S("Unbreakable Desert Sand"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_desert_sand.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_sand_defaults(),
+})
+
+minetest.register_node("maptools:sandstone", {
+ description = S("Unbreakable Sandstone"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_sandstone.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:sandstone_brick", {
+ description = S("Unbreakable Sandstone Brick"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_sandstone_brick.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:desert_stone", {
+ description = S("Unbreakable Desert Stone"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_desert_stone.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:desert_cobble", {
+ description = S("Unbreakable Desert Cobble"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_desert_cobble.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:desert_stonebrick", {
+ description = S("Unbreakable Desert Stone Brick"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_desert_stone_brick.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:grass", {
+ description = S("Unbreakable Dirt with Grass"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
+ paramtype2 = "facedir",
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_dirt_defaults({
+ footstep = {name="default_grass_footstep", gain = 0.4},
+ }),
+})
+
+minetest.register_node("maptools:fullgrass", {
+ description = S("Unbreakable Full Grass"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_grass.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_dirt_defaults({
+ footstep = {name="default_grass_footstep", gain=0.4},
+ }),
+})
+
+for slab_num = 1,3,1 do
+ minetest.register_node("maptools:slab_grass_" .. slab_num * 4, {
+ description = S("Grass Slab"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^maptools_grass_side_" .. slab_num * 4 .. ".png"},
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -0.5 + slab_num * 0.25, 0.5},
+ },
+ sunlight_propagates = true,
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_dirt_defaults({footstep = {name="default_grass_footstep", gain = 0.4}}),
+ })
+end
+
+minetest.register_node("maptools:cobble", {
+ description = S("Unbreakable Cobblestone"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_cobble.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:mossycobble", {
+ description = S("Unbreakable Mossy Cobblestone"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_mossycobble.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:brick", {
+ description = S("Unbreakable Brick"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_brick.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:coalblock", {
+ description = S("Unbreakable Coal Block"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_coal_block.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+
+minetest.register_node("maptools:steelblock", {
+ description = S("Unbreakable Steel Block"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_steel_block.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:goldblock", {
+ description = S("Unbreakable Gold Block"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_gold_block.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:copperblock", {
+ description = S("Unbreakable Copper Block"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_copper_block.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:bronzeblock", {
+ description = S("Unbreakable Bronze Block"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_bronze_block.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:diamondblock", {
+ description = S("Unbreakable Diamond Block"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"default_diamond_block.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+-- Farming:
+
+minetest.register_node("maptools:soil_wet", {
+ description = "Wet Soil",
+ range = 12,
+ stack_max = 10000,
+ tiles = {"farming_soil_wet.png", "farming_soil_wet_side.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, soil = 3, wet = 1, grassland = 1},
+ sounds = default.node_sound_dirt_defaults(),
+})
+
+minetest.register_node("maptools:desert_sand_soil_wet", {
+ description = "Wet Desert Sand Soil",
+ range = 12,
+ stack_max = 10000,
+ drop = "",
+ tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"},
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, soil = 3, wet = 1, desert = 1},
+ sounds = default.node_sound_sand_defaults(),
+})
diff --git a/maptools/depends.txt b/maptools/depends.txt
new file mode 100644
index 0000000..4ad96d5
--- /dev/null
+++ b/maptools/depends.txt
@@ -0,0 +1 @@
+default
diff --git a/maptools/init.lua b/maptools/init.lua
new file mode 100644
index 0000000..dbff209
--- /dev/null
+++ b/maptools/init.lua
@@ -0,0 +1,32 @@
+--[[
+=====================================================================
+** Map Tools **
+By Calinou.
+
+Copyright (c) 2012-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+=====================================================================
+--]]
+
+maptools = {}
+
+local S
+if minetest.get_modpath("intllib") then
+ S = intllib.Getter()
+else
+ S = function(s) return s end
+end
+maptools.intllib = S
+
+local modpath = minetest.get_modpath("maptools")
+
+dofile(modpath .. "/config.lua")
+dofile(modpath .. "/aliases.lua")
+dofile(modpath .. "/craftitems.lua")
+dofile(modpath .. "/default_nodes.lua")
+dofile(modpath .. "/nodes.lua")
+dofile(modpath .. "/tools.lua")
+
+if minetest.setting_getbool("log_mods") then
+ minetest.log("action", S("[maptools] loaded."))
+end
diff --git a/maptools/locale/es.txt b/maptools/locale/es.txt
new file mode 100644
index 0000000..1bc96f2
--- /dev/null
+++ b/maptools/locale/es.txt
@@ -0,0 +1,39 @@
+# Translation by kaeza
+
+[maptools] loaded. = [maptools] cargado.
+
+Cloud = Nube
+Infinite Fuel = Combustible Infinito
+Admin Pickaxe = Pico de Administrador
+Copper Coin = Moneda de Cobre
+Silver Coin = Moneda de Plata
+Gold Coin = Moneda de Oro
+Super Apple = Super Manzana
+Fake Ladder = Escalera Falsa
+Smoke Block = Bloque de Humo
+Damaging Block: %s = Bloque Dañino: %s
+Kill Block = Bloque Mortal
+Build Prevention = Bloqueador de Construcción
+Interact Prevention = Bloqueador de Interacción
+Climb Block = Bloque Escalable
+Light Block = Bloqueador de Luz
+Light Bulb = Lamparilla
+Player Clip = Bloqueo de Jugador
+Full Clip = Bloqueo Total
+
+Unbreakable Stone = Piedra Irrompible
+Unbreakable Sand = Arena Irrompible
+Unbreakable Desert Stone = Piedra Desértica Irrompible
+Unbreakable Desert Sand = Arena Desértica Irrompible
+Unbreakable Gravel = Gravilla Irrompible
+Unbreakable Dirt = Tierra Irrompible
+Unbreakable Dirt with Grass = Hierba Irrompible
+Unbreakable Full Grass= Bloque de Hierba Irrompible
+Unbreakable Brick = Ladrillos Irrompibles
+Unbreakable Wooden Planks = Planchas de Madera Irrompibles
+Unbreakable Tree = Tronco de Árbol Irrompible
+Unbreakable Glass = Cristal Irrompible
+Unbreakable Sandstone = Arenisca Irrompible
+Unbreakable Leaves = Foliaje Irrompible
+Unbreakable Cobblestone = Guijarros Irrompibles
+Unbreakable Mossy Cobblestone = Guijarros Enmohecidos Irrompibles
diff --git a/maptools/locale/fr.txt b/maptools/locale/fr.txt
new file mode 100644
index 0000000..d137871
--- /dev/null
+++ b/maptools/locale/fr.txt
@@ -0,0 +1,47 @@
+# Translation by Calinou
+
+[maptools] loaded. = [maptools] a été chargé.
+
+Cloud = Nuage
+Infinite Fuel = Carburant infini
+Admin Pickaxe = Pioche d'administrateur
+Admin Pickaxe With Drops = Pioche d'administrateur qui donne des objets
+Copper Coin = Pièce de cuivre
+Silver Coin = Pièce d'argent
+Gold Coin = Pièce d'or
+Super Apple = Super pomme
+Fake Ladder = Fausse échelle
+Smoke Block = Bloc de fumée
+Damaging Block: %s = Bloc de dégâts : %s
+Kill Block = Bloc qui tue
+Build Prevention = Prévention de construction
+Interact Prevention = Prévention d'interaction
+Climb Block = Bloc à grimper
+Light Block = Bloqueur de lumière
+Light Bulb = Bloc lumineux
+Player Clip = Bloque-joueurs
+Player Clip Bottom Face = Face inférieure de bloque-joueurs
+Player Clip Top Face = Face supérieure de bloque-joueurs
+Full Clip = Bloque-tout
+Full Clip Face = Face de bloque-tout
+Permanent Fire = Feu permanent
+Fake Fire = Faux feu
+Igniter = Incendieur
+Pusher: %s = Pousseur : %s
+
+Unbreakable Stone = Pierre incassable
+Unbreakable Sand = Sable incassable
+Unbreakable Desert Stone = Pierre de désert incassable
+Unbreakable Desert Sand = Sable de désert incassable
+Unbreakable Gravel = Gravier incassable
+Unbreakable Dirt = Terre incassable
+Unbreakable Dirt with Grass = Herbe incassable
+Unbreakable Full Grass= Bloc d'herbe incassable
+Unbreakable Brick = Briques incassables
+Unbreakable Wooden Planks = Planches de bois incassables
+Unbreakable Tree = Tronc d'arbre incassable
+Unbreakable Glass = Verre incassable
+Unbreakable Sandstone = Grès incassable
+Unbreakable Leaves = Feuillage incassable
+Unbreakable Cobblestone = Pierre taillée incassable
+Unbreakable Mossy Cobblestone = Pierre taillée mousseusse incassable
diff --git a/maptools/nodes.lua b/maptools/nodes.lua
new file mode 100644
index 0000000..8ceef64
--- /dev/null
+++ b/maptools/nodes.lua
@@ -0,0 +1,429 @@
+--[[
+Map Tools: node definitions
+
+Copyright (c) 2012-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = maptools.intllib
+
+maptools.creative = maptools.config["hide_from_creative_inventory"]
+
+-- Redefine cloud so that the admin pickaxe can mine it:
+minetest.register_node(":default:cloud", {
+ description = S("Cloud"),
+ tiles = {"default_cloud.png"},
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_defaults(),
+})
+
+-- Nodes
+-- =====
+
+minetest.register_node("maptools:black", {
+ description = S("Black"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"black.png"},
+ drop = "",
+ post_effect_color = {a=255, r=0, g=0, b=0},
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:white", {
+ description = S("White"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"white.png"},
+ drop = "",
+ post_effect_color = {a=255, r=128, g=128, b=128},
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_stone_defaults(),
+})
+
+minetest.register_node("maptools:playerclip", {
+ description = S("Player Clip"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_green.png",
+ drawtype = "airlike",
+ paramtype = "light",
+ pointable = false,
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:fake_walkable", {
+ description = S("Player Clip"),
+ drawtype = "nodebox",
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_green.png",
+ drawtype = "airlike",
+ paramtype = "light",
+ pointable = false,
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0, 0, 0, 0, 0, 0},
+ },
+ },
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:fullclip", {
+ description = S("Full Clip"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_blue.png",
+ drawtype = "airlike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:fake_walkable_pointable", {
+ description = S("Player Clip"),
+ drawtype = "nodebox",
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_green.png",
+ drawtype = "airlike",
+ paramtype = "light",
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {
+ {0, 0, 0, 0, 0, 0},
+ },
+ },
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:ignore_like", {
+ description = S("Ignore-like"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_pink.png",
+ tiles = {"invisible.png"},
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:ignore_like_no_clip", {
+ description = S("Ignore-like (no clip)"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_purple.png",
+ tiles = {"invisible.png"},
+ paramtype = "light",
+ walkable = false,
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+
+minetest.register_node("maptools:ignore_like_no_point", {
+ description = S("Ignore-like (no point)"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_purple.png",
+ tiles = {"invisible.png"},
+ paramtype = "light",
+ pointable = false,
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:ignore_like_no_clip_no_point", {
+ description = S("Ignore-like (no clip, no point)"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_pink.png",
+ tiles = {"invisible.png"},
+ paramtype = "light",
+ walkable = false,
+ pointable = false,
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:fullclip_face", {
+ description = S("Full Clip Face"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_white.png",
+ drawtype = "nodebox",
+ tiles = {"invisible.png"},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
+ },
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
+})
+
+minetest.register_node("maptools:playerclip_bottom", {
+ description = S("Player Clip Bottom Face"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_orange.png",
+ drawtype = "nodebox",
+ tiles = {"invisible.png"},
+ pointable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
+ },
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
+})
+
+minetest.register_node("maptools:playerclip_top", {
+ description = S("Player Clip Top Face"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_yellow.png",
+ drawtype = "nodebox",
+ tiles = {"invisible.png"},
+ pointable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, 0.4999, -0.5, 0.5, 0.5, 0.5},
+ },
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
+})
+
+for pusher_num=1,10,1 do
+minetest.register_node("maptools:pusher_" .. pusher_num, {
+ description = S("Pusher (%s)"):format(pusher_num),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^default_apple.png",
+ drawtype = "nodebox",
+ tiles = {"invisible.png"},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ sunlight_propagates = true,
+ node_box = {
+ type = "fixed",
+ fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
+ },
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100, bouncy=pusher_num*100},
+})
+end
+
+minetest.register_node("maptools:lightbulb", {
+ description = S("Light Bulb"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^default_mese_crystal_fragment.png",
+ drawtype = "airlike",
+ walkable = false,
+ pointable = false,
+ light_source = 15,
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:nobuild", {
+ description = S("Build Prevention"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^bones_bones.png",
+ drawtype = "airlike",
+ walkable = false,
+ pointable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:nointeract", {
+ description = S("Interact Prevention"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^default_scorched_stuff.png",
+ drawtype = "airlike",
+ walkable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:climb", {
+ description = S("Climb Block"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^default_ladder.png",
+ drawtype = "airlike",
+ walkable = false,
+ climbable = true,
+ pointable = false,
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+for damage_num=1,5,1 do
+minetest.register_node("maptools:damage_" .. damage_num, {
+ description = S("Damaging Block (%s)"):format(damage_num),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^farming_cotton_" .. damage_num .. ".png",
+ drawtype = "airlike",
+ walkable = false,
+ pointable = false,
+ damage_per_second = damage_num,
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+end
+
+minetest.register_node("maptools:kill", {
+ description = S("Kill Block"),
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^dye_black.png",
+ drawtype = "airlike",
+ walkable = false,
+ pointable = false,
+ damage_per_second = 20,
+ paramtype = "light",
+ sunlight_propagates = true,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+})
+
+minetest.register_node("maptools:smoke", {
+ description = S("Smoke Block"),
+ range = 12,
+ stack_max = 10000,
+ tiles = {"maptools_smoke.png"},
+ drawtype = "allfaces_optional",
+ walkable = false,
+ paramtype = "light",
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ post_effect_color = {a=192, r=96, g=96, b=96},
+})
+
+minetest.register_node("maptools:ladder", {
+ description = S("Fake Ladder"),
+ range = 12,
+ stack_max = 10000,
+ drawtype = "signlike",
+ tiles = {"default_ladder.png"},
+ inventory_image = "default_ladder.png",
+ wield_image = "default_ladder.png",
+ paramtype = "light",
+ paramtype2 = "wallmounted",
+ walkable = false,
+ sunlight_propagates = true,
+ selection_box = {
+ type = "wallmounted",
+ },
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sounds = default.node_sound_wood_defaults(),
+})
+
+minetest.register_node("maptools:permanent_fire", {
+ description = S("Permanent Fire"),
+ range = 12,
+ stack_max = 10000,
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {{
+ name="fire_basic_flame_animated.png",
+ animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1},
+ }},
+ inventory_image = "fire_basic_flame.png",
+ light_source = 14,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sunlight_propagates = true,
+ walkable = false,
+ damage_per_second = 4,
+})
+
+minetest.register_node("maptools:fake_fire", {
+ description = S("Fake Fire"),
+ range = 12,
+ stack_max = 10000,
+ drawtype = "plantlike",
+ paramtype = "light",
+ tiles = {{
+ name="fire_basic_flame_animated.png",
+ animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1},
+ }},
+ inventory_image = "fire_basic_flame.png",
+ light_source = 14,
+ drop = "",
+ groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sunlight_propagates = true,
+ walkable = false,
+})
+
+minetest.register_node("maptools:igniter", {
+ drawtype = "airlike",
+ range = 12,
+ stack_max = 10000,
+ inventory_image = "default_steel_block.png^crosshair.png",
+ description = S("Igniter"),
+ paramtype = "light",
+ inventory_image = "fire_basic_flame.png",
+ drop = "",
+ groups = {igniter=2, unbreakable = 1, not_in_creative_inventory = maptools.creative},
+ sunlight_propagates = true,
+ pointable = false,
+ walkable = false,
+})
+
+minetest.register_node("maptools:superapple", {
+ description = S("Super Apple"),
+ range = 12,
+ stack_max = 10000,
+ drawtype = "plantlike",
+ visual_scale = 1.0,
+ tiles = {"maptools_superapple.png"},
+ inventory_image = "maptools_superapple.png",
+ paramtype = "light",
+ sunlight_propagates = true,
+ selection_box = {
+ type = "fixed",
+ fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
+ },
+ walkable = false,
+ groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = maptools.creative},
+ on_use = minetest.item_eat(20),
+ sounds = default.node_sound_defaults(),
+})
diff --git a/maptools/textures/black.png b/maptools/textures/black.png
new file mode 100644
index 0000000..aac403d
--- /dev/null
+++ b/maptools/textures/black.png
Binary files differ
diff --git a/maptools/textures/fire_basic_flame.png b/maptools/textures/fire_basic_flame.png
new file mode 100644
index 0000000..e3c52b0
--- /dev/null
+++ b/maptools/textures/fire_basic_flame.png
Binary files differ
diff --git a/maptools/textures/fire_basic_flame_animated.png b/maptools/textures/fire_basic_flame_animated.png
new file mode 100644
index 0000000..6f5f8ac
--- /dev/null
+++ b/maptools/textures/fire_basic_flame_animated.png
Binary files differ
diff --git a/maptools/textures/invisible.png b/maptools/textures/invisible.png
new file mode 100644
index 0000000..4b5b302
--- /dev/null
+++ b/maptools/textures/invisible.png
Binary files differ
diff --git a/maptools/textures/maptools_adminpick.png b/maptools/textures/maptools_adminpick.png
new file mode 100644
index 0000000..04824eb
--- /dev/null
+++ b/maptools/textures/maptools_adminpick.png
Binary files differ
diff --git a/maptools/textures/maptools_adminpick_with_drops.png b/maptools/textures/maptools_adminpick_with_drops.png
new file mode 100644
index 0000000..8f7cf7b
--- /dev/null
+++ b/maptools/textures/maptools_adminpick_with_drops.png
Binary files differ
diff --git a/maptools/textures/maptools_copper_coin.png b/maptools/textures/maptools_copper_coin.png
new file mode 100644
index 0000000..26d22a8
--- /dev/null
+++ b/maptools/textures/maptools_copper_coin.png
Binary files differ
diff --git a/maptools/textures/maptools_gold_coin.png b/maptools/textures/maptools_gold_coin.png
new file mode 100644
index 0000000..40f14a9
--- /dev/null
+++ b/maptools/textures/maptools_gold_coin.png
Binary files differ
diff --git a/maptools/textures/maptools_grass_side_12.png b/maptools/textures/maptools_grass_side_12.png
new file mode 100644
index 0000000..6b26435
--- /dev/null
+++ b/maptools/textures/maptools_grass_side_12.png
Binary files differ
diff --git a/maptools/textures/maptools_grass_side_4.png b/maptools/textures/maptools_grass_side_4.png
new file mode 100644
index 0000000..ea87a38
--- /dev/null
+++ b/maptools/textures/maptools_grass_side_4.png
Binary files differ
diff --git a/maptools/textures/maptools_grass_side_8.png b/maptools/textures/maptools_grass_side_8.png
new file mode 100644
index 0000000..6db2502
--- /dev/null
+++ b/maptools/textures/maptools_grass_side_8.png
Binary files differ
diff --git a/maptools/textures/maptools_infinitefuel.png b/maptools/textures/maptools_infinitefuel.png
new file mode 100644
index 0000000..163f171
--- /dev/null
+++ b/maptools/textures/maptools_infinitefuel.png
Binary files differ
diff --git a/maptools/textures/maptools_silver_coin.png b/maptools/textures/maptools_silver_coin.png
new file mode 100644
index 0000000..284c671
--- /dev/null
+++ b/maptools/textures/maptools_silver_coin.png
Binary files differ
diff --git a/maptools/textures/maptools_smoke.png b/maptools/textures/maptools_smoke.png
new file mode 100644
index 0000000..c50b7e3
--- /dev/null
+++ b/maptools/textures/maptools_smoke.png
Binary files differ
diff --git a/maptools/textures/maptools_superapple.png b/maptools/textures/maptools_superapple.png
new file mode 100644
index 0000000..6833827
--- /dev/null
+++ b/maptools/textures/maptools_superapple.png
Binary files differ
diff --git a/maptools/textures/white.png b/maptools/textures/white.png
new file mode 100644
index 0000000..2d8d70f
--- /dev/null
+++ b/maptools/textures/white.png
Binary files differ
diff --git a/maptools/tools.lua b/maptools/tools.lua
new file mode 100644
index 0000000..6ce8b6c
--- /dev/null
+++ b/maptools/tools.lua
@@ -0,0 +1,61 @@
+--[[
+Map Tools: tool definitions
+
+Copyright (c) 2012-2015 Calinou and contributors.
+Licensed under the zlib license. See LICENSE.md for more information.
+--]]
+
+local S = maptools.intllib
+
+maptools.creative = maptools.config["hide_from_creative_inventory"]
+
+minetest.register_tool("maptools:pick_admin", {
+ description = S("Admin Pickaxe"),
+ range = 12,
+ inventory_image = "maptools_adminpick.png",
+ groups = {not_in_creative_inventory = maptools.creative},
+ tool_capabilities = {
+ full_punch_interval = 0.1,
+ max_drop_level = 3,
+ groupcaps= {
+ unbreakable = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ fleshy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ choppy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ bendy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ snappy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ },
+ damage_groups = {fleshy = 1000},
+ },
+})
+
+minetest.register_tool("maptools:pick_admin_with_drops", {
+ description = S("Admin Pickaxe with Drops"),
+ range = 12,
+ inventory_image = "maptools_adminpick_with_drops.png",
+ groups = {not_in_creative_inventory = maptools.creative},
+ tool_capabilities = {
+ full_punch_interval = 0.35,
+ max_drop_level = 3,
+ groupcaps = {
+ unbreakable = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ fleshy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ choppy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ bendy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ snappy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
+ },
+ damage_groups = {fleshy = 1000},
+ },
+})
+
+minetest.register_on_punchnode(function(pos, node, puncher)
+ if puncher:get_wielded_item():get_name() == "maptools:pick_admin"
+ and minetest.get_node(pos).name ~= "air" then
+ minetest.log("action", puncher:get_player_name() .. " digs " .. minetest.get_node(pos).name .. " at " .. minetest.pos_to_string(pos) .. " using an Admin Pickaxe.")
+ minetest.remove_node(pos) -- The node is removed directly, which means it even works on non-empty containers and group-less nodes.
+ nodeupdate(pos) -- Run node update actions like falling nodes.
+ end
+end)