32 Commits

Author SHA1 Message Date
1b7be03956 Bump to version 2.0.0 2019-11-25 13:51:18 +01:00
0e30357190 Link to the WorldEdit mod in NODES_ITEMS.md 2019-10-13 14:15:25 +02:00
ccf94fb78b Make inventory images use textures available in Minetest Game 5.0.0
This closes #9.
2019-10-13 14:13:10 +02:00
f0a3d58a99 Update changelog to mention nodes/items not being droppable anymore 2019-10-04 00:23:02 +02:00
ea85b3e073 Move maptools.drop_msg above dofiles
Maptools tools/items have become droppable again, the function to prevent this is loaded after nodes.lua, leading the on_drop function to be nil.
2019-10-04 00:21:18 +02:00
fa62966bbe Update pre-commit hooks to 2.3.0 2019-09-25 23:06:20 +02:00
65cb89a261 Document the Minetest 5.0.0 version requirement 2019-09-08 22:57:15 +02:00
cb4888a2bb Travis CI: Use the bionic distribution 2019-07-29 00:49:03 +02:00
ae83eea882 Optimize PNG images losslessly
Commands used:

- `parallel optipng -o7 -zm1-9 -strip all ::: **/*.png`
- `parallel advpng -z4 -i5000 ::: **/*.png`
2019-06-19 21:22:29 +02:00
2f34184047 Add description and dependencies to mod.conf
The legacy `depends.txt` and `description.txt` files are no longer
needed since Minetest 5.0.0 or later will read everything from
`mod.conf`.

This raises the minimum supported Minetest version to 5.0.0.
2019-04-23 21:54:27 +02:00
0dfadcf43a Remove the optional mod loading message 2019-04-03 00:16:03 +02:00
e6723e516b Fix minetest.setting_getbool() deprecation warning 2019-04-03 00:14:44 +02:00
1ff1b355bc Improve writing style and formatting in the nodes and items list
This closes #12.
2019-03-30 19:35:54 +01:00
a2a54396bb Add intllib as an optional dependency 2019-03-30 00:56:56 +01:00
81b988d631 Bump to version 1.1.0 2019-03-23 15:19:47 +01:00
83083dc98d Set up Travis CI 2019-03-06 10:28:16 +01:00
cca390e9ea Increase the range of the Admin Pickaxe from 12 to 20 nodes 2019-03-03 23:22:33 +01:00
199180ee80 Update intllib support to avoid using deprecated functions 2019-03-03 20:11:10 +01:00
8bb6f0fece Improve wording in README 2019-03-02 18:18:12 +01:00
8f5f661387 Enforce LF line endings in pre-commit
- Update pre-commit hooks to 2.1.0
2019-03-01 15:29:31 +01:00
14f9397a4e Update copyright statements to 2019 2019-02-25 12:16:01 +01:00
905ecb0038 Set EditorConfig to use tabs in .luacheckrc 2019-02-22 00:49:15 +01:00
fd361016bd Add an EditorConfig file
See https://editorconfig.org/ for more information.
2019-02-21 23:12:35 +01:00
aeafa56b89 Add pre-commit hooks
See https://pre-commit.com/ for more information.
2019-02-21 23:11:06 +01:00
74da77fb8c Add a Luacheck configuration file and tweak code style 2019-02-20 23:56:20 +01:00
aa1b2f1b08 Optimize all images using oxipng -Zs 2019-02-20 19:53:06 +01:00
106bba39b9 Prevent tools & nodes from being dropped (#11)
Adds a function to message a player that they cannot drop tools/nodes registered by maptools
2018-07-27 12:10:09 +02:00
7459fc3389 Replace old nodeupdate() with new minetest.check_for_falling() (#7) 2018-07-22 13:22:41 +02:00
7bb6ff48e4 Remove brackets around the initial version number in the changelog 2018-04-22 00:15:52 +02:00
fcb4dc5875 Fix the URL of 1.0.0...HEAD version comparison 2017-10-08 00:35:53 +02:00
7c45f1d53c Update the README, CHANGELOG, NODES and CONTRIBUTING documents 2017-10-08 00:33:42 +02:00
dafff87655 Add a contribution guide 2017-02-20 18:37:09 +01:00
33 changed files with 485 additions and 175 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.3.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 @@
dist: bionic
language: python
python:
- 3.7.1
install:
- sudo apt-get update -qq
- sudo apt-get install -qqq luarocks
- pip3 install pre-commit
- luarocks install --local luacheck
script:
- pre-commit run --all-files
- $HOME/.luarocks/bin/luacheck .

View File

@ -1,10 +1,37 @@
# Change Log # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/) The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/). and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [1.0.0] - 2017-02-19 ## [Unreleased]
## [2.0.0] - 2019-11-25
### Changed
- The minimum supported Minetest version is now 5.0.0.
- Map Tools nodes/items can no longer be dropped to prevent them from falling
into bad hands.
### Fixed
- The inventory images of `no_interact`, `no_build`, `ignore_like_no_clip`
and `ignore_like_no_point` now use textures that are available in
Minetest Game 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. - Initial versioned release.
[Unreleased]: https://github.com/minetest-mods/maptools/compare/v2.0.0...HEAD
[2.0.0]: https://github.com/minetest-mods/maptools/compare/v1.1.0...v2.0.0
[1.1.0]: https://github.com/minetest-mods/maptools/compare/v1.0.0...v1.1.0

10
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,10 @@
# Contributing to Map Tools
Thank you for your interest in Map Tools! Before contributing,
be sure to know about these few guidelines:
- Contributions have to be licensed under the zlib license (or compatible)
for code, and CC BY-SA 3.0 (or compatible) for assets.
- Make sure to update the changelog, keeping the
[changelog format](http://keepachangelog.com/en/1.0.0/) we use.
- Don't bump the version yourself. Maintainers will do this when necessary.

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

@ -1,45 +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.

39
NODES_ITEMS.md Normal file
View File

@ -0,0 +1,39 @@
# List of nodes/items
To use an item, make sure you have the `give` privilege, then use
`/give <player> <item code> [amount]` or `/giveme <item code> [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](https://github.com/Uberi/Minetest-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). |

View File

@ -1,11 +1,77 @@
Map Tools # Map Tools
=========
Map Tools for [Minetest](http://minetest.net), a free and open source infinite Map Tools for [Minetest](https://www.minetest.net/), a free and open source infinite
world block sandbox game. world block sandbox game.
To install, just clone this repository into your "mods" directory. ## Resources
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)
- [List of nodes and items available](NODES_ITEMS.md)
**Forum topic:** <https://forum.minetest.net/viewtopic.php?f=11&t=1882> ## Installation
### Download the mod
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
the resulting folder from `maptools-master` to `maptools` this is
**absolutely** required, as the mod won't work otherwise.
### Enable the mod
Once you have installed Map Tools, you need to enable it in Minetest.
The procedure is as follows:
#### Using the client's main menu
This is the easiest way to enable Map Tools when playing in singleplayer
(or on a server hosted from a client).
1. Start Minetest and switch to the **Local Game** tab.
2. Select the world you want to enable Map Tools in.
3. Click **Configure**, then enable `maptools` by double-clicking it
(or ticking the **Enabled** checkbox).
4. Save the changes, then start a game on the world you enabled Map Tools on.
5. Map Tools should now be running on your world.
#### Using a text editor
This is the recommended way to enable the mod on a server without using a GUI.
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.
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 5.1.0.
It may or may not work with newer or older versions. Issues arising in older
versions than 5.0.0 will generally not be fixed.
## License
Copyright © 2012-2019 Hugo Locurcio and contributors
- Map Tools code is licensed under the zlib license, see
[`LICENSE.md`](LICENSE.md) for details.
- Unless otherwise specified, Map Tools textures are licensed under
[CC BY-SA 3.0 Unported](https://creativecommons.org/licenses/by-sa/3.0/).

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,14 +1,14 @@
--[[ --[[
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.
--]] --]]
maptools.config = {} maptools.config = {}
local function getbool_default(setting, default) local function getbool_default(setting, default)
local value = minetest.setting_getbool(setting) local value = minetest.settings:get_bool(setting)
if value == nil then if value == nil then
value = default value = default
end end
@ -21,7 +21,7 @@ local function setting(settingtype, name, default)
getbool_default("maptools." .. name, default) getbool_default("maptools." .. name, default)
else else
maptools.config[name] = maptools.config[name] =
minetest.setting_get("maptools." .. name) or default minetest.settings:get("maptools." .. name) or default
end end
end end

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"]
@ -17,6 +17,7 @@ minetest.register_node("maptools:stone", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:stonebrick", { minetest.register_node("maptools:stonebrick", {
@ -27,6 +28,7 @@ minetest.register_node("maptools:stonebrick", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:tree", { minetest.register_node("maptools:tree", {
@ -37,18 +39,24 @@ minetest.register_node("maptools:tree", {
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(),
on_place = minetest.rotate_node on_place = minetest.rotate_node,
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:jungletree", { 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(),
on_place = minetest.rotate_node on_place = minetest.rotate_node,
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:cactus", { minetest.register_node("maptools:cactus", {
@ -59,7 +67,8 @@ minetest.register_node("maptools:cactus", {
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(),
on_place = minetest.rotate_node on_place = minetest.rotate_node,
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:papyrus", { minetest.register_node("maptools:papyrus", {
@ -80,6 +89,7 @@ minetest.register_node("maptools:papyrus", {
}, },
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:dirt", { minetest.register_node("maptools:dirt", {
@ -90,6 +100,7 @@ minetest.register_node("maptools:dirt", {
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(), sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:wood", { minetest.register_node("maptools:wood", {
@ -100,6 +111,7 @@ minetest.register_node("maptools:wood", {
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(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:junglewood", { minetest.register_node("maptools:junglewood", {
@ -110,6 +122,7 @@ minetest.register_node("maptools:junglewood", {
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(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:glass", { minetest.register_node("maptools:glass", {
@ -123,6 +136,7 @@ minetest.register_node("maptools:glass", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_glass_defaults(), sounds = default.node_sound_glass_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:leaves", { minetest.register_node("maptools:leaves", {
@ -135,6 +149,7 @@ minetest.register_node("maptools:leaves", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_leaves_defaults(), sounds = default.node_sound_leaves_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:sand", { minetest.register_node("maptools:sand", {
@ -145,6 +160,7 @@ minetest.register_node("maptools:sand", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_sand_defaults(), sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:gravel", { minetest.register_node("maptools:gravel", {
@ -158,6 +174,7 @@ minetest.register_node("maptools:gravel", {
footstep = {name="default_gravel_footstep", gain=0.35}, footstep = {name="default_gravel_footstep", gain=0.35},
dug = {name="default_gravel_footstep", gain=0.6}, dug = {name="default_gravel_footstep", gain=0.6},
}), }),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:clay", { minetest.register_node("maptools:clay", {
@ -168,6 +185,7 @@ minetest.register_node("maptools:clay", {
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(), sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:desert_sand", { minetest.register_node("maptools:desert_sand", {
@ -178,6 +196,7 @@ minetest.register_node("maptools:desert_sand", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_sand_defaults(), sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:sandstone", { minetest.register_node("maptools:sandstone", {
@ -188,6 +207,7 @@ minetest.register_node("maptools:sandstone", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:sandstone_brick", { minetest.register_node("maptools:sandstone_brick", {
@ -198,6 +218,7 @@ minetest.register_node("maptools:sandstone_brick", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:desert_stone", { minetest.register_node("maptools:desert_stone", {
@ -208,6 +229,7 @@ minetest.register_node("maptools:desert_stone", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:desert_cobble", { minetest.register_node("maptools:desert_cobble", {
@ -218,6 +240,7 @@ minetest.register_node("maptools:desert_cobble", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:desert_stonebrick", { minetest.register_node("maptools:desert_stonebrick", {
@ -228,19 +251,25 @@ minetest.register_node("maptools:desert_stonebrick", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:grass", { 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},
sounds = default.node_sound_dirt_defaults({ sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain = 0.4}, footstep = {name="default_grass_footstep", gain = 0.4},
}), }),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:fullgrass", { minetest.register_node("maptools:fullgrass", {
@ -253,6 +282,7 @@ minetest.register_node("maptools:fullgrass", {
sounds = default.node_sound_dirt_defaults({ sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4}, footstep = {name="default_grass_footstep", gain=0.4},
}), }),
on_drop = maptools.drop_msg
}) })
for slab_num = 1,3,1 do for slab_num = 1,3,1 do
@ -260,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",
@ -271,7 +305,10 @@ 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
}) })
end end
@ -283,6 +320,7 @@ minetest.register_node("maptools:cobble", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:mossycobble", { minetest.register_node("maptools:mossycobble", {
@ -293,6 +331,7 @@ minetest.register_node("maptools:mossycobble", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:brick", { minetest.register_node("maptools:brick", {
@ -303,6 +342,7 @@ minetest.register_node("maptools:brick", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:coalblock", { minetest.register_node("maptools:coalblock", {
@ -313,6 +353,7 @@ minetest.register_node("maptools:coalblock", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
@ -324,6 +365,7 @@ minetest.register_node("maptools:steelblock", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:goldblock", { minetest.register_node("maptools:goldblock", {
@ -334,6 +376,7 @@ minetest.register_node("maptools:goldblock", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:copperblock", { minetest.register_node("maptools:copperblock", {
@ -344,6 +387,7 @@ minetest.register_node("maptools:copperblock", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:bronzeblock", { minetest.register_node("maptools:bronzeblock", {
@ -354,6 +398,7 @@ minetest.register_node("maptools:bronzeblock", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:diamondblock", { minetest.register_node("maptools:diamondblock", {
@ -364,6 +409,7 @@ minetest.register_node("maptools:diamondblock", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
-- Farming: -- Farming:
@ -372,10 +418,20 @@ 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
}) })
minetest.register_node("maptools:desert_sand_soil_wet", { minetest.register_node("maptools:desert_sand_soil_wet", {
@ -384,6 +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
}) })

View File

@ -1 +0,0 @@
default

View File

@ -1 +0,0 @@
Adds various special versions of normal blocks, tools, and other map maintainer tools.

View File

@ -3,30 +3,27 @@
** 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")
local S, NS = dofile(modpath .. "/intllib.lua")
maptools.S = S
maptools.NS = NS
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 .. "/config.lua")
dofile(modpath .. "/aliases.lua") dofile(modpath .. "/aliases.lua")
dofile(modpath .. "/craftitems.lua") dofile(modpath .. "/craftitems.lua")
dofile(modpath .. "/default_nodes.lua") dofile(modpath .. "/default_nodes.lua")
dofile(modpath .. "/nodes.lua") dofile(modpath .. "/nodes.lua")
dofile(modpath .. "/tools.lua") dofile(modpath .. "/tools.lua")
if minetest.setting_getbool("log_mods") then
minetest.log("action", S("[maptools] loaded."))
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 +1,4 @@
name = maptools name = maptools
description = Adds various special versions of normal blocks, tools, and other map maintainer tools.
depends = default
optional_depends = intllib

View File

@ -1,25 +1,25 @@
--[[ --[[
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"},
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_defaults(), sounds = default.node_sound_defaults(),
on_drop = maptools.drop_msg
}) })
-- Nodes -- Nodes
-- =====
minetest.register_node("maptools:black", { minetest.register_node("maptools:black", {
description = S("Black"), description = S("Black"),
@ -30,6 +30,7 @@ minetest.register_node("maptools:black", {
post_effect_color = {a=255, r=0, g=0, b=0}, post_effect_color = {a=255, r=0, g=0, b=0},
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:white", { minetest.register_node("maptools:white", {
@ -41,6 +42,7 @@ minetest.register_node("maptools:white", {
post_effect_color = {a=255, r=128, g=128, b=128}, post_effect_color = {a=255, r=128, g=128, b=128},
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(), sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:playerclip", { minetest.register_node("maptools:playerclip", {
@ -54,11 +56,11 @@ minetest.register_node("maptools:playerclip", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
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",
@ -74,6 +76,7 @@ minetest.register_node("maptools:fake_walkable", {
}, },
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:fullclip", { minetest.register_node("maptools:fullclip", {
@ -86,11 +89,11 @@ minetest.register_node("maptools:fullclip", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
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",
@ -105,6 +108,7 @@ minetest.register_node("maptools:fake_walkable_pointable", {
}, },
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:ignore_like", { minetest.register_node("maptools:ignore_like", {
@ -117,19 +121,21 @@ minetest.register_node("maptools:ignore_like", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:ignore_like_no_clip", { minetest.register_node("maptools:ignore_like_no_clip", {
description = S("Ignore-like (no clip)"), description = S("Ignore-like (no clip)"),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^dye_purple.png", inventory_image = "default_steel_block.png^dye_violet.png",
tiles = {"invisible.png"}, tiles = {"invisible.png"},
paramtype = "light", paramtype = "light",
walkable = false, walkable = false,
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
@ -137,13 +143,14 @@ minetest.register_node("maptools:ignore_like_no_point", {
description = S("Ignore-like (no point)"), description = S("Ignore-like (no point)"),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^dye_purple.png", inventory_image = "default_steel_block.png^dye_violet.png",
tiles = {"invisible.png"}, tiles = {"invisible.png"},
paramtype = "light", paramtype = "light",
pointable = false, pointable = false,
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:ignore_like_no_clip_no_point", { minetest.register_node("maptools:ignore_like_no_clip_no_point", {
@ -158,6 +165,7 @@ minetest.register_node("maptools:ignore_like_no_clip_no_point", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:fullclip_face", { minetest.register_node("maptools:fullclip_face", {
@ -175,7 +183,12 @@ 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
}) })
minetest.register_node("maptools:playerclip_bottom", { minetest.register_node("maptools:playerclip_bottom", {
@ -193,7 +206,12 @@ 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
}) })
minetest.register_node("maptools:playerclip_top", { minetest.register_node("maptools:playerclip_top", {
@ -211,11 +229,16 @@ 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
}) })
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,
@ -230,8 +253,14 @@ minetest.register_node("maptools:pusher_" .. pusher_num, {
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 = {
}) 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", {
@ -247,13 +276,14 @@ minetest.register_node("maptools:lightbulb", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:nobuild", { minetest.register_node("maptools:nobuild", {
description = S("Build Prevention"), description = S("Build Prevention"),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^bones_bones.png", inventory_image = "default_steel_block.png^default_flint.png",
drawtype = "airlike", drawtype = "airlike",
walkable = false, walkable = false,
pointable = false, pointable = false,
@ -261,19 +291,21 @@ minetest.register_node("maptools:nobuild", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:nointeract", { minetest.register_node("maptools:nointeract", {
description = S("Interact Prevention"), description = S("Interact Prevention"),
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
inventory_image = "default_steel_block.png^default_scorched_stuff.png", inventory_image = "default_steel_block.png^default_bush_stem.png",
drawtype = "airlike", drawtype = "airlike",
walkable = false, walkable = false,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:climb", { minetest.register_node("maptools:climb", {
@ -289,6 +321,7 @@ minetest.register_node("maptools:climb", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
for damage_num=1,5,1 do for damage_num=1,5,1 do
@ -305,6 +338,7 @@ minetest.register_node("maptools:damage_" .. damage_num, {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
end end
@ -321,6 +355,7 @@ minetest.register_node("maptools:kill", {
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:smoke", { minetest.register_node("maptools:smoke", {
@ -334,6 +369,7 @@ minetest.register_node("maptools:smoke", {
drop = "", drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
post_effect_color = {a=192, r=96, g=96, b=96}, post_effect_color = {a=192, r=96, g=96, b=96},
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:ladder", { minetest.register_node("maptools:ladder", {
@ -354,6 +390,7 @@ minetest.register_node("maptools:ladder", {
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(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:permanent_fire", { minetest.register_node("maptools:permanent_fire", {
@ -373,6 +410,7 @@ minetest.register_node("maptools:permanent_fire", {
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
damage_per_second = 4, damage_per_second = 4,
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:fake_fire", { minetest.register_node("maptools:fake_fire", {
@ -391,13 +429,13 @@ minetest.register_node("maptools:fake_fire", {
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, walkable = false,
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:igniter", { 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",
@ -406,6 +444,7 @@ minetest.register_node("maptools:igniter", {
sunlight_propagates = true, sunlight_propagates = true,
pointable = false, pointable = false,
walkable = false, walkable = false,
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:superapple", { minetest.register_node("maptools:superapple", {
@ -426,4 +465,5 @@ minetest.register_node("maptools:superapple", {
groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = maptools.creative}, groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = maptools.creative},
on_use = minetest.item_eat(20), on_use = minetest.item_eat(20),
sounds = default.node_sound_defaults(), sounds = default.node_sound_defaults(),
on_drop = maptools.drop_msg
}) })

Binary file not shown.

Before

Width:  |  Height:  |  Size: 794 B

After

Width:  |  Height:  |  Size: 695 B

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: 279 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 276 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: 561 B

After

Width:  |  Height:  |  Size: 549 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 466 B

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 388 B

After

Width:  |  Height:  |  Size: 380 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,61 +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"]
minetest.register_tool("maptools:pick_admin", { local pick_admin_toolcaps = {
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, full_punch_interval = 0.1,
max_drop_level = 3, max_drop_level = 3,
groupcaps= { groupcaps = {
unbreakable = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3}, unbreakable = {times = {[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
fleshy = {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}, choppy = {times = {[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
bendy = {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}, cracky = {times = {[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
crumbly = {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}, snappy = {times = {[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
}, },
damage_groups = {fleshy = 1000}, damage_groups = {fleshy = 1000},
}, }
minetest.register_tool("maptools:pick_admin", {
description = S("Admin Pickaxe"),
range = 20,
inventory_image = "maptools_adminpick.png",
groups = {not_in_creative_inventory = maptools.creative},
tool_capabilities = pick_admin_toolcaps,
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},
},
}) })
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",
nodeupdate(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)