12 Commits

23 changed files with 283 additions and 126 deletions

13
.editorconfig Normal file
View File

@ -0,0 +1,13 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.{lua,luacheckrc}]
indent_style = tab
indent_size = 4

29
.luacheckrc Normal file
View File

@ -0,0 +1,29 @@
std = "lua51+minetest"
unused_args = false
allow_defined_top = true
max_line_length = 90
stds.minetest = {
read_globals = {
"DIR_DELIM",
"minetest",
"core",
"dump",
"vector",
"nodeupdate",
"VoxelManip",
"VoxelArea",
"PseudoRandom",
"ItemStack",
"default",
table = {
fields = {
"copy",
},
},
}
}
read_globals = {
"intllib",
}

9
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,9 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.1.0
hooks:
- id: end-of-file-fixer
- id: trailing-whitespace
- id: mixed-line-ending
args: [--fix=lf]

15
.travis.yml Normal file
View File

@ -0,0 +1,15 @@
language: generic
addons:
apt:
packages:
- luarocks
install:
- pyenv global 3.6.3
- pip3 install --user pre-commit
- luarocks install --local luacheck
script:
- $HOME/.local/bin/pre-commit run --all-files
- $HOME/.luarocks/bin/luacheck .

View File

@ -7,8 +7,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased] ## [Unreleased]
## [1.1.0] - 2019-03-23
### Changed
- Increased the range of the Admin Pickaxe from 12 to 20 nodes.
- Updated intllib support to avoid using deprecated functions.
## 1.0.0 - 2017-02-19 ## 1.0.0 - 2017-02-19
- Initial versioned release. - Initial versioned release.
[Unreleased]: https://github.com/minetest-mods/maptools/compare/v1.0.0...HEAD [Unreleased]: https://github.com/minetest-mods/maptools/compare/v1.1.0...HEAD
[1.1.0]: https://github.com/minetest-mods/maptools/compare/v1.0.0...v1.1.0

View File

@ -1,6 +1,6 @@
# zlib license # zlib license
Copyright (c) 2012-2017 Hugo Locurcio and contributors Copyright © 2012-2019 Hugo Locurcio and contributors
**This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.** **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.**

View File

@ -12,15 +12,15 @@ world block sandbox game.
To install Map Tools, clone this Git repository into your Minetest's `mods/` To install Map Tools, clone this Git repository into your Minetest's `mods/`
directory: directory:
``` ```bash
git clone https://github.com/minetest-mods/maptools.git git clone https://github.com/minetest-mods/maptools.git
``` ```
You can also You can also
[download a ZIP archive](https://github.com/minetest-mods/maptools/archive/master.zip) [download a ZIP archive](https://github.com/minetest-mods/maptools/archive/master.zip)
of Map Tools. If you do so, you will need to extract the archive, then rename of Map Tools. If you do so, you will need to extract the archive then rename
the resulting folder from `maptools-master` to `maptools` this is the resulting folder from `maptools-master` to `maptools` this is
**absolutely** necessary to do, else, it won't work! **absolutely** required, as the mod won't work otherwise.
### Enable the mod ### Enable the mod
@ -43,29 +43,30 @@ This is the easiest way to enable Map Tools when playing in singleplayer
This is the recommended way to enable the mod on a server without using a GUI. This is the recommended way to enable the mod on a server without using a GUI.
1. Make sure Minetest is not currently running (else, it will overwrite 1. Make sure Minetest is not currently running (otherwise, it will overwrite
the changes when exiting). the changes when exiting).
2. Open the world's `world.mt` file using a text editor. 2. Open the world's `world.mt` file using a text editor.
3. Add the following line at the end of the file: 3. Add the following line at the end of the file:
``` ```text
load_mod_maptools = true load_mod_maptools = true
``` ```
If the line is already present in the file, then replace `false` with `true` on that line. If the line is already present in the file, then replace `false` with `true`
on that line.
4. Save the file, then start a game on the world you enabled Map Tools on. 4. Save the file, then start a game on the world you enabled Map Tools on.
5. Map Tools should now be running on your world. 5. Map Tools should now be running on your world.
## Version compatibility ## Version compatibility
Map Tools is currently primarily tested with Minetest 0.4.16. Map Tools is currently primarily tested with Minetest 0.4.17.
It may or may not work with newer or older versions. Issues arising in older It may or may not work with newer or older versions. Issues arising in older
versions than 0.4.16 will generally not be fixed. versions than 0.4.17 will generally not be fixed.
## License ## License
Copyright © 2012-2017 Hugo Locurcio and contributors Copyright © 2012-2019 Hugo Locurcio and contributors
- Map Tools code is licensed under the zlib license, see - Map Tools code is licensed under the zlib license, see
[`LICENSE.md`](LICENSE.md) for details. [`LICENSE.md`](LICENSE.md) for details.

View File

@ -1,7 +1,7 @@
--[[ --[[
Map Tools: alias definitions Map Tools: alias definitions
Copyright (c) 2012-2017 Hugo Locurcio and contributors. Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
--]] --]]

View File

@ -1,7 +1,7 @@
--[[ --[[
Map Tools: configuration handling Map Tools: configuration handling
Copyright (c) 2012-2017 Hugo Locurcio and contributors. Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
--]] --]]

View File

@ -1,11 +1,11 @@
--[[ --[[
Map Tools: item definitions Map Tools: item definitions
Copyright (c) 2012-2017 Hugo Locurcio and contributors. Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
--]] --]]
local S = maptools.intllib local S = maptools.S
maptools.creative = maptools.config["hide_from_creative_inventory"] maptools.creative = maptools.config["hide_from_creative_inventory"]

View File

@ -1,11 +1,11 @@
--[[ --[[
Map Tools: unbreakable default nodes Map Tools: unbreakable default nodes
Copyright (c) 2012-2017 Hugo Locurcio and contributors. Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
--]] --]]
local S = maptools.intllib local S = maptools.S
maptools.creative = maptools.config["hide_from_creative_inventory"] maptools.creative = maptools.config["hide_from_creative_inventory"]
@ -47,7 +47,11 @@ minetest.register_node("maptools:jungletree", {
description = S("Unbreakable Jungle Tree"), description = S("Unbreakable Jungle Tree"),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"}, tiles = {
"default_jungletree_top.png",
"default_jungletree_top.png",
"default_jungletree.png",
},
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(), sounds = default.node_sound_wood_defaults(),
@ -254,7 +258,11 @@ minetest.register_node("maptools:grass", {
description = S("Unbreakable Dirt with Grass"), description = S("Unbreakable Dirt with Grass"),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"}, tiles = {
"default_grass.png",
"default_dirt.png",
"default_dirt.png^default_grass_side.png",
},
paramtype2 = "facedir", paramtype2 = "facedir",
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
@ -282,7 +290,11 @@ for slab_num = 1,3,1 do
description = S("Grass Slab"), description = S("Grass Slab"),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^maptools_grass_side_" .. slab_num * 4 .. ".png"}, tiles = {
"default_grass.png",
"default_dirt.png",
"default_dirt.png^maptools_grass_side_" .. slab_num * 4 .. ".png",
},
drawtype = "nodebox", drawtype = "nodebox",
node_box = { node_box = {
type = "fixed", type = "fixed",
@ -293,7 +305,9 @@ for slab_num = 1,3,1 do
paramtype2 = "facedir", paramtype2 = "facedir",
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults({footstep = {name="default_grass_footstep", gain = 0.4}}), sounds = default.node_sound_dirt_defaults(
{footstep = {name="default_grass_footstep", gain = 0.4}}
),
on_drop = maptools.drop_msg on_drop = maptools.drop_msg
}) })
end end
@ -404,9 +418,18 @@ minetest.register_node("maptools:soil_wet", {
description = "Wet Soil", description = "Wet Soil",
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
tiles = {"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet_side.png"}, tiles = {
"default_dirt.png^farming_soil_wet.png",
"default_dirt.png^farming_soil_wet_side.png",
},
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, soil = 3, wet = 1, grassland = 1}, groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
soil = 3,
wet = 1,
grassland = 1,
},
sounds = default.node_sound_dirt_defaults(), sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg on_drop = maptools.drop_msg
}) })
@ -417,7 +440,13 @@ minetest.register_node("maptools:desert_sand_soil_wet", {
stack_max = 10000, stack_max = 10000,
drop = "", drop = "",
tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"}, 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}, groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
soil = 3,
wet = 1,
desert = 1,
},
sounds = default.node_sound_sand_defaults(), sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg on_drop = maptools.drop_msg
}) })

View File

@ -3,27 +3,18 @@
** Map Tools ** ** Map Tools **
By Calinou. By Calinou.
Copyright (c) 2012-2017 Hugo Locurcio and contributors. Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
===================================================================== =====================================================================
--]] --]]
maptools = {} 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") local modpath = minetest.get_modpath("maptools")
maptools.drop_msg = function(itemstack, player) local S, NS = dofile(modpath .. "/intllib.lua")
local name = player:get_player_name() maptools.S = S
minetest.chat_send_player(name, S("[maptools] tools/nodes do not drop!")) maptools.NS = NS
end
dofile(modpath .. "/config.lua") dofile(modpath .. "/config.lua")
dofile(modpath .. "/aliases.lua") dofile(modpath .. "/aliases.lua")
@ -32,6 +23,11 @@ dofile(modpath .. "/default_nodes.lua")
dofile(modpath .. "/nodes.lua") dofile(modpath .. "/nodes.lua")
dofile(modpath .. "/tools.lua") dofile(modpath .. "/tools.lua")
maptools.drop_msg = function(itemstack, player)
local name = player:get_player_name()
minetest.chat_send_player(name, S("[maptools] tools/nodes do not drop!"))
end
if minetest.setting_getbool("log_mods") then if minetest.setting_getbool("log_mods") then
minetest.log("action", S("[maptools] loaded.")) minetest.log("action", S("[maptools] loaded."))
end end

44
intllib.lua Normal file
View File

@ -0,0 +1,44 @@
-- Fallback functions for when `intllib` is not installed.
-- Code released under Unlicense <http://unlicense.org>.
-- Get the latest version of this file at:
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
local function format(str, ...)
local args = { ... }
local function repl(escape, open, num, close)
if escape == "" then
local replacement = tostring(args[tonumber(num)])
if open == "" then
replacement = replacement..close
end
return replacement
else
return "@"..open..num..close
end
end
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
end
local gettext, ngettext
if minetest.get_modpath("intllib") then
if intllib.make_gettext_pair then
-- New method using gettext.
gettext, ngettext = intllib.make_gettext_pair()
else
-- Old method using text files.
gettext = intllib.Getter()
end
end
-- Fill in missing functions.
gettext = gettext or function(msgid, ...)
return format(msgid, ...)
end
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
return format(n==1 and msgid or msgid_plural, ...)
end
return gettext, ngettext

View File

@ -1,15 +1,15 @@
--[[ --[[
Map Tools: node definitions Map Tools: node definitions
Copyright (c) 2012-2017 Hugo Locurcio and contributors. Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
--]] --]]
local S = maptools.intllib local S = maptools.S
maptools.creative = maptools.config["hide_from_creative_inventory"] maptools.creative = maptools.config["hide_from_creative_inventory"]
-- Redefine cloud so that the admin pickaxe can mine it: -- Redefine cloud so that the admin pickaxe can mine it
minetest.register_node(":default:cloud", { minetest.register_node(":default:cloud", {
description = S("Cloud"), description = S("Cloud"),
tiles = {"default_cloud.png"}, tiles = {"default_cloud.png"},
@ -20,7 +20,6 @@ minetest.register_node(":default:cloud", {
}) })
-- Nodes -- Nodes
-- =====
minetest.register_node("maptools:black", { minetest.register_node("maptools:black", {
description = S("Black"), description = S("Black"),
@ -62,7 +61,6 @@ minetest.register_node("maptools:playerclip", {
minetest.register_node("maptools:fake_walkable", { minetest.register_node("maptools:fake_walkable", {
description = S("Player Clip"), description = S("Player Clip"),
drawtype = "nodebox",
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^dye_green.png", inventory_image = "default_steel_block.png^dye_green.png",
@ -96,7 +94,6 @@ minetest.register_node("maptools:fullclip", {
minetest.register_node("maptools:fake_walkable_pointable", { minetest.register_node("maptools:fake_walkable_pointable", {
description = S("Player Clip"), description = S("Player Clip"),
drawtype = "nodebox",
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^dye_green.png", inventory_image = "default_steel_block.png^dye_green.png",
@ -186,7 +183,11 @@ minetest.register_node("maptools:fullclip_face", {
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5}, fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
}, },
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100}, groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
},
on_drop = maptools.drop_msg on_drop = maptools.drop_msg
}) })
@ -205,7 +206,11 @@ minetest.register_node("maptools:playerclip_bottom", {
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5}, fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
}, },
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100}, groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
},
on_drop = maptools.drop_msg on_drop = maptools.drop_msg
}) })
@ -224,29 +229,38 @@ minetest.register_node("maptools:playerclip_top", {
fixed = {-0.5, 0.4999, -0.5, 0.5, 0.5, 0.5}, fixed = {-0.5, 0.4999, -0.5, 0.5, 0.5, 0.5},
}, },
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100}, groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
},
on_drop = maptools.drop_msg on_drop = maptools.drop_msg
}) })
for pusher_num=1,10,1 do for pusher_num=1,10,1 do
minetest.register_node("maptools:pusher_" .. pusher_num, { minetest.register_node("maptools:pusher_" .. pusher_num, {
description = S("Pusher (%s)"):format(pusher_num), description = S("Pusher (%s)"):format(pusher_num),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^default_apple.png", inventory_image = "default_steel_block.png^default_apple.png",
drawtype = "nodebox", drawtype = "nodebox",
tiles = {"invisible.png"}, tiles = {"invisible.png"},
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
sunlight_propagates = true, sunlight_propagates = true,
node_box = { node_box = {
type = "fixed", type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5}, fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
}, },
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100, bouncy=pusher_num*100}, groups = {
on_drop = maptools.drop_msg unbreakable = 1,
}) not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
bouncy = pusher_num * 100,
},
on_drop = maptools.drop_msg
})
end end
minetest.register_node("maptools:lightbulb", { minetest.register_node("maptools:lightbulb", {
@ -422,7 +436,6 @@ minetest.register_node("maptools:igniter", {
drawtype = "airlike", drawtype = "airlike",
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^crosshair.png",
description = S("Igniter"), description = S("Igniter"),
paramtype = "light", paramtype = "light",
inventory_image = "fire_basic_flame.png", inventory_image = "fire_basic_flame.png",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 B

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 388 B

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

After

Width:  |  Height:  |  Size: 213 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 303 B

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 B

After

Width:  |  Height:  |  Size: 230 B

View File

@ -1,63 +1,63 @@
--[[ --[[
Map Tools: tool definitions Map Tools: tool definitions
Copyright (c) 2012-2017 Hugo Locurcio and contributors. Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
--]] --]]
local S = maptools.intllib local S = maptools.S
maptools.creative = maptools.config["hide_from_creative_inventory"] maptools.creative = maptools.config["hide_from_creative_inventory"]
local pick_admin_toolcaps = {
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", { minetest.register_tool("maptools:pick_admin", {
description = S("Admin Pickaxe"), description = S("Admin Pickaxe"),
range = 12, range = 20,
inventory_image = "maptools_adminpick.png", inventory_image = "maptools_adminpick.png",
groups = {not_in_creative_inventory = maptools.creative}, groups = {not_in_creative_inventory = maptools.creative},
tool_capabilities = { tool_capabilities = pick_admin_toolcaps,
full_punch_interval = 0.1, on_drop = maptools.drop_msg,
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},
},
on_drop = maptools.drop_msg
}) })
minetest.register_tool("maptools:pick_admin_with_drops", { minetest.register_tool("maptools:pick_admin_with_drops", {
description = S("Admin Pickaxe with Drops"), description = S("Admin Pickaxe with Drops"),
range = 12, range = 20,
inventory_image = "maptools_adminpick_with_drops.png", inventory_image = "maptools_adminpick_with_drops.png",
groups = {not_in_creative_inventory = maptools.creative}, groups = {not_in_creative_inventory = maptools.creative},
tool_capabilities = { tool_capabilities = pick_admin_toolcaps,
full_punch_interval = 0.35, on_drop = maptools.drop_msg,
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},
},
on_drop = maptools.drop_msg
}) })
minetest.register_on_punchnode(function(pos, node, puncher) minetest.register_on_punchnode(function(pos, node, puncher)
if puncher:get_wielded_item():get_name() == "maptools:pick_admin" if puncher:get_wielded_item():get_name() == "maptools:pick_admin"
and minetest.get_node(pos).name ~= "air" then 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.log(
minetest.remove_node(pos) -- The node is removed directly, which means it even works on non-empty containers and group-less nodes. "action",
minetest.check_for_falling(pos) -- Run node update actions like falling nodes. puncher:get_player_name() ..
" digs " ..
minetest.get_node(pos).name ..
" at " ..
minetest.pos_to_string(pos) ..
" using an Admin Pickaxe."
)
-- The node is removed directly, which means it even works
-- on non-empty containers and group-less nodes
minetest.remove_node(pos)
-- Run node update actions like falling nodes
minetest.check_for_falling(pos)
end end
end) end)