diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..a41c697 --- /dev/null +++ b/.editorconfig @@ -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 diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..4bfca2a --- /dev/null +++ b/.luacheckrc @@ -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", +} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..9c72498 --- /dev/null +++ b/.pre-commit-config.yaml @@ -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] diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..1c4c0d8 --- /dev/null +++ b/.travis.yml @@ -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 . diff --git a/CHANGELOG.md b/CHANGELOG.md index 0830e62..900458e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,20 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Changed + +- The minimum supported Minetest version is now 5.0.0. + +## [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 - 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 diff --git a/LICENSE.md b/LICENSE.md index ca48e3a..c33a141 100755 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,7 +1,7 @@ zlib license ============ -Copyright (c) 2012-2015 Calinou 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.** diff --git a/NODES.md b/NODES.md deleted file mode 100755 index 5e0c079..0000000 --- a/NODES.md +++ /dev/null @@ -1,26 +0,0 @@ -# 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/NODES_ITEMS.md b/NODES_ITEMS.md new file mode 100644 index 0000000..3e0f1f0 --- /dev/null +++ b/NODES_ITEMS.md @@ -0,0 +1,39 @@ +# List of nodes/items + +To use an item, make sure you have the `give` privilege, then use +`/give [amount]` or `/giveme [amount]`. + +**Tip:** To give yourself a large amount of items quickly (65535 as of writing), +use `-1` as the amount. + +## Nodes + +:warning: denotes an unpointable, unbreakable block; be very careful with them, +as they cannot be removed by hand (they can only be removed with WorldEdit or +similar). + +| Item code | Description | +| ----------------------: | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `maptools:{block}_u` | Unbreakable, non-flammable, non-falling, non-decaying blocks. Most common default blocks have an unbreakable form available (`maptools:stone_u`, `maptools:wood_u`, …) | +| `maptools:full_grass` | Unbreakable block with the grass texture on all sides. | +| `maptools:player_clip` | :warning: Invisible, non-pointable block that blocks players and entities. | +| `maptools:full_clip` | Invisible, pointable block that blocks players and entities. Also available as a thin face (`maptools:full_clip_face`). | +| `maptools:smoke_block` | Some smoke (doesn't damage players or entities). | +| `maptools:no_build` | :warning: Very basic building prevention. | +| `maptools:no_interact` | Prevents interacting through the block (opening chests, furnaces, attacking entities, …), but can still be walked through. | +| `maptools:damage_{1…5}` | :warning: Damaging blocks which damage players by 1 to 5 HP per second. | +| `maptools:kill` | :warning: Instant kill blocks (damages players by 20 HP per second). | +| `maptools:light_block` | :warning: Invisible non-solid block, prevents light from passing through. | +| `maptools:light_bulb` | :warning: Invisible non-solid block, emitting the maximum amount of light. | + +## Items + +| Item code | Description | +| -------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| `maptools:admin_pick` | A bright magenta pickaxe with infinite durability, digs everything including unbreakable blocks instantly. No drops are given when digging nodes. | +| `maptools:admin_pick_with_drops` | Same as the admin pickaxe, but drops are given when digging nodes. | +| `maptools:infinite_fuel` | Fuel lasting for a near-infinite time (about 50 real-life years). | +| `maptools:super_apple` | A yellow apple which heals the player by 20 HP when used. | +| `maptools:copper_coin` | Decorative item (can be used in mini-games). | +| `maptools:silver_coin` | Decorative item (can be used in mini-games). | +| `maptools:gold_coin` | Decorative item (can be used in mini-games). | diff --git a/README.md b/README.md index 7a14122..3f89750 100755 --- a/README.md +++ b/README.md @@ -3,7 +3,10 @@ Map Tools for [Minetest](https://www.minetest.net/), a free and open source infinite world block sandbox game. -[**Forum topic**](https://forum.minetest.net/viewtopic.php?f=11&t=1882) +## Resources + +- [Forum topic](https://forum.minetest.net/viewtopic.php?f=11&t=1882) +- [List of nodes and items available](NODES_ITEMS.md) ## Installation @@ -12,15 +15,15 @@ world block sandbox game. To install Map Tools, clone this Git repository into your Minetest's `mods/` directory: -``` +```bash git clone https://github.com/minetest-mods/maptools.git ``` You can also [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 -**absolutely** necessary to do, else, it won't work! +**absolutely** required, as the mod won't work otherwise. ### Enable the mod @@ -43,29 +46,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. -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). 2. Open the world's `world.mt` file using a text editor. 3. Add the following line at the end of the file: -``` +```text 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. 5. Map Tools should now be running on your world. ## 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 -versions than 0.4.16 will generally not be fixed. +versions than 0.4.17 will generally not be fixed. ## 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 [`LICENSE.md`](LICENSE.md) for details. diff --git a/aliases.lua b/aliases.lua index f1f0cc5..13ec59f 100755 --- a/aliases.lua +++ b/aliases.lua @@ -1,7 +1,7 @@ --[[ Map Tools: alias definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright © 2012-2019 Hugo Locurcio and contributors. Licensed under the zlib license. See LICENSE.md for more information. --]] diff --git a/config.lua b/config.lua index 3cd502e..6d21b6c 100755 --- a/config.lua +++ b/config.lua @@ -1,14 +1,14 @@ --[[ Map Tools: configuration handling -Copyright (c) 2012-2015 Calinou and contributors. +Copyright © 2012-2019 Hugo Locurcio 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) + local value = minetest.settings:get_bool(setting) if value == nil then value = default end @@ -21,7 +21,7 @@ local function setting(settingtype, name, default) getbool_default("maptools." .. name, default) else maptools.config[name] = - minetest.setting_get("maptools." .. name) or default + minetest.settings:get("maptools." .. name) or default end end diff --git a/craftitems.lua b/craftitems.lua index 0756141..00f09f2 100755 --- a/craftitems.lua +++ b/craftitems.lua @@ -1,11 +1,11 @@ --[[ Map Tools: item definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright © 2012-2019 Hugo Locurcio and contributors. 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"] @@ -45,49 +45,3 @@ minetest.register_craft({ recipe = "maptools:infinitefuel", burntime = 1000000000, }) - --- Coin based craft recipes --- //MFF_BEG(Mg|07/24/15) --- //MFF_BEG(Darcidride|07/06/16) - ---[[ --- 9CC -> 1SC -minetest.register_craft({ - output = "maptools:silver_coin", - recipe = { - {"maptools:copper_coin", "maptools:copper_coin", "maptools:copper_coin"}, - {"maptools:copper_coin", "maptools:copper_coin", "maptools:copper_coin"}, - {"maptools:copper_coin", "maptools:copper_coin", "maptools:copper_coin"}, - } -}) - --- 9SC -> 1GC -minetest.register_craft({ - output = "maptools:gold_coin", - recipe = { - {"maptools:silver_coin", "maptools:silver_coin", "maptools:silver_coin"}, - {"maptools:silver_coin", "maptools:silver_coin", "maptools:silver_coin"}, - {"maptools:silver_coin", "maptools:silver_coin", "maptools:silver_coin"}, - } -}) - --- 1GC -> 9SC -minetest.register_craft({ - output = "maptools:silver_coin 9", - recipe = { - {"maptools:gold_coin"} - } -}) - --- 1SC -> 9CC -minetest.register_craft({ - output = "maptools:copper_coin 9", - recipe = { - {"maptools:silver_coin"} - } -}) - --- --- //MFF_END(Mg|07/24/15) --- //MFF_END(Darcidride|07/06/16) ---]] diff --git a/default_nodes.lua b/default_nodes.lua index 24e8476..f70e45e 100755 --- a/default_nodes.lua +++ b/default_nodes.lua @@ -1,11 +1,11 @@ --[[ Map Tools: unbreakable default nodes -Copyright (c) 2012-2015 Calinou and contributors. +Copyright © 2012-2019 Hugo Locurcio and contributors. 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"] @@ -47,7 +47,11 @@ 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"}, + 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(), @@ -278,7 +282,11 @@ 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"}, + 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}, @@ -306,7 +314,11 @@ for slab_num = 1,3,1 do 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"}, + tiles = { + "default_grass.png", + "default_dirt.png", + "default_dirt.png^maptools_grass_side_" .. slab_num * 4 .. ".png", + }, drawtype = "nodebox", node_box = { type = "fixed", @@ -317,7 +329,9 @@ for slab_num = 1,3,1 do 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}}), + sounds = default.node_sound_dirt_defaults( + {footstep = {name="default_grass_footstep", gain = 0.4}} + ), on_drop = maptools.drop_msg }) end @@ -428,9 +442,18 @@ minetest.register_node("maptools:soil_wet", { description = "Wet Soil", range = 12, stack_max = 10000, - tiles = {"farming_soil_wet.png", "farming_soil_wet_side.png"}, + tiles = { + "default_dirt.png^farming_soil_wet.png", + "default_dirt.png^farming_soil_wet_side.png", + }, 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(), on_drop = maptools.drop_msg }) @@ -441,7 +464,13 @@ minetest.register_node("maptools:desert_sand_soil_wet", { 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}, + groups = { + unbreakable = 1, + not_in_creative_inventory = maptools.creative, + soil = 3, + wet = 1, + desert = 1, + }, sounds = default.node_sound_sand_defaults(), on_drop = maptools.drop_msg }) @@ -449,9 +478,9 @@ minetest.register_node("maptools:desert_sand_soil_wet", { -- Fence: local function dockable(nodename) - if nodename == "default:wood" or nodename == "default:brick" or nodename == "default:cobble" or nodename == "default:dirt" or nodename == "default:sandstone" or nodename == "default:stone" or string.find(nodename, "fences:fence_wood") or string.find(nodename, "fences:fencegate") then - return true - end + if nodename == "default:wood" or nodename == "default:brick" or nodename == "default:cobble" or nodename == "default:dirt" or nodename == "default:sandstone" or nodename == "default:stone" or string.find(nodename, "fences:fence_wood") or string.find(nodename, "fences:fencegate") then + return true + end end local function find_dock(pos, second) if pos == nil then diff --git a/depends.txt b/depends.txt deleted file mode 100755 index 70715c7..0000000 --- a/depends.txt +++ /dev/null @@ -1,2 +0,0 @@ -default -fire diff --git a/init.lua b/init.lua index e9ecdd8..c8d5336 100755 --- a/init.lua +++ b/init.lua @@ -1,42 +1,29 @@ ---[[ -===================================================================== -** 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") - -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 - -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") - ---[[ -Map Tools by Calinou -Licensed under the zlib license for code and CC BY-SA 3.0 for textures, see LICENSE.txt for info. ---]] - -if minetest.setting_getbool("log_mods") then - minetest.log("action", S("[maptools] loaded.")) -end +--[[ +===================================================================== +** Map Tools ** +By Calinou. + +Copyright © 2012-2019 Hugo Locurcio and contributors. +Licensed under the zlib license. See LICENSE.md for more information. +===================================================================== +--]] + +maptools = {} + +local modpath = minetest.get_modpath("maptools") + +local S, NS = dofile(modpath .. "/intllib.lua") +maptools.S = S +maptools.NS = NS + +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") + +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 diff --git a/intllib.lua b/intllib.lua new file mode 100644 index 0000000..c7af2c2 --- /dev/null +++ b/intllib.lua @@ -0,0 +1,44 @@ +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- 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 diff --git a/mod.conf b/mod.conf new file mode 100644 index 0000000..363f651 --- /dev/null +++ b/mod.conf @@ -0,0 +1,4 @@ +name = maptools +description = Adds various special versions of normal blocks, tools, and other map maintainer tools. +depends = default +optional_depends = intllib diff --git a/nodes.lua b/nodes.lua index 6f0104f..60b6ac0 100755 --- a/nodes.lua +++ b/nodes.lua @@ -1,15 +1,15 @@ --[[ Map Tools: node definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright © 2012-2019 Hugo Locurcio and contributors. 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"] --- 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", { description = S("Cloud"), tiles = {"default_cloud.png"}, @@ -20,7 +20,6 @@ minetest.register_node(":default:cloud", { }) -- Nodes --- ===== minetest.register_node("maptools:black", { description = S("Black"), @@ -62,7 +61,6 @@ minetest.register_node("maptools:playerclip", { 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", @@ -96,7 +94,6 @@ minetest.register_node("maptools:fullclip", { 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", @@ -186,7 +183,11 @@ minetest.register_node("maptools:fullclip_face", { 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}, + groups = { + unbreakable = 1, + not_in_creative_inventory = maptools.creative, + fall_damage_add_percent = -100, + }, 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}, }, 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 }) @@ -224,29 +229,38 @@ minetest.register_node("maptools:playerclip_top", { 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}, + groups = { + unbreakable = 1, + not_in_creative_inventory = maptools.creative, + fall_damage_add_percent = -100, + }, on_drop = maptools.drop_msg }) 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}, - on_drop = maptools.drop_msg -}) + 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, + }, + on_drop = maptools.drop_msg + }) end minetest.register_node("maptools:lightbulb", { @@ -422,7 +436,6 @@ 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", diff --git a/textures/maptools_copper_coin.png b/textures/maptools_copper_coin.png index 26d22a8..bac8870 100755 Binary files a/textures/maptools_copper_coin.png and b/textures/maptools_copper_coin.png differ diff --git a/textures/maptools_gold_coin.png b/textures/maptools_gold_coin.png index 40f14a9..1866881 100755 Binary files a/textures/maptools_gold_coin.png and b/textures/maptools_gold_coin.png differ diff --git a/textures/maptools_silver_coin.png b/textures/maptools_silver_coin.png index 284c671..7e909d6 100755 Binary files a/textures/maptools_silver_coin.png and b/textures/maptools_silver_coin.png differ diff --git a/textures/maptools_smoke.png b/textures/maptools_smoke.png index c50b7e3..192a7ce 100755 Binary files a/textures/maptools_smoke.png and b/textures/maptools_smoke.png differ diff --git a/textures/maptools_superapple.png b/textures/maptools_superapple.png index 6833827..060ee80 100755 Binary files a/textures/maptools_superapple.png and b/textures/maptools_superapple.png differ diff --git a/tools.lua b/tools.lua index 1e898ad..550ab6b 100755 --- a/tools.lua +++ b/tools.lua @@ -1,63 +1,63 @@ --[[ Map Tools: tool definitions -Copyright (c) 2012-2015 Calinou and contributors. +Copyright © 2012-2019 Hugo Locurcio and contributors. 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"] +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", { description = S("Admin Pickaxe"), - range = 12, + range = 20, 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}, - }, - on_drop = maptools.drop_msg + tool_capabilities = pick_admin_toolcaps, + on_drop = maptools.drop_msg, }) minetest.register_tool("maptools:pick_admin_with_drops", { description = S("Admin Pickaxe with Drops"), - range = 12, + range = 20, 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}, - }, - on_drop = maptools.drop_msg + tool_capabilities = pick_admin_toolcaps, + on_drop = maptools.drop_msg, }) 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. - minetest.check_for_falling(pos) -- Run node update actions like falling nodes. + minetest.log( + "action", + 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)