1 Commits

Author SHA1 Message Date
48b8f8a726 Version MFF. 2018-09-08 00:31:40 +02:00
43 changed files with 464 additions and 529 deletions

View File

@ -1,13 +0,0 @@
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

View File

@ -1,29 +0,0 @@
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",
}

View File

@ -1,9 +0,0 @@
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]

View File

@ -1,15 +0,0 @@
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

@ -1,22 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file.
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/spec/v2.0.0.html).
## [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
- Initial versioned release.
[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,10 +0,0 @@
# 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.

5
LICENSE.md Normal file → Executable file
View File

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

61
NODES.md Normal file → Executable file
View File

@ -1,26 +1,45 @@
# Item names for spawning the items using /give or /giveme Item names for spawning the items using /give or /giveme
========================================================
## Items 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:` 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 * `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). **[!]** 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. * `(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_clip`: invisible block, pointable. Also available as a thin face: full_clip_face.
- `smoke_block`: some smoke (does not harm players or entities). * `full_grass:` unbreakable block with the grass texture on all sides.
- `no_build`: **[!]** very basic building prevention.
- `no_interact`: prevents interacting through the block (opening chests, furnaces, attacking entities, …). * `player_clip:` **[!]** invisible block, not pointable.
- `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. * `full_clip:` invisible block, pointable. Also available as a thin face: full_clip_face.
- `light_block`: **[!]** invisible non-solid block, prevents light from passing through.
- `light_bulb`: **[!]** invisible non-solid block, emitting a good amount of light. * `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.

75
README.md Normal file → Executable file
View File

@ -1,74 +1,11 @@
# Map Tools Map Tools
=========
Map Tools for [Minetest](https://www.minetest.net/), a free and open source infinite Map Tools for Minetest <http://minetest.net>, a free/libre infinite
world block sandbox game. world block sandbox game.
[**Forum topic**](https://forum.minetest.net/viewtopic.php?f=11&t=1882) To install, just clone this repository into your "mods" directory.
## Installation Map Tools code is licensed under the zlib license, textures are by Calinou and are licensed under CC BY-SA 3.0 Unported.
### Download the mod **Forum topic:** <https://forum.minetest.net/viewtopic.php?f=11&t=1882>
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 0.4.17.
It may or may not work with newer or older versions. Issues arising in older
versions than 0.4.17 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/).

2
aliases.lua Normal file → Executable file
View File

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

4
config.lua Normal file → Executable file
View File

@ -1,7 +1,7 @@
--[[ --[[
Map Tools: configuration handling Map Tools: configuration handling
Copyright © 2012-2019 Hugo Locurcio and contributors. Copyright (c) 2012-2015 Calinou and contributors.
Licensed under the zlib license. See LICENSE.md for more information. Licensed under the zlib license. See LICENSE.md for more information.
--]] --]]
@ -26,4 +26,4 @@ local function setting(settingtype, name, default)
end end
-- Show Map Tools stuff in creative inventory (1 or 0): -- Show Map Tools stuff in creative inventory (1 or 0):
setting("integer", "hide_from_creative_inventory", 1) setting("integer", "hide_from_creative_inventory", 0)

50
craftitems.lua Normal file → Executable file
View File

@ -1,11 +1,11 @@
--[[ --[[
Map Tools: item definitions Map Tools: item definitions
Copyright © 2012-2019 Hugo Locurcio and contributors. Copyright (c) 2012-2015 Calinou 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.S local S = maptools.intllib
maptools.creative = maptools.config["hide_from_creative_inventory"] maptools.creative = maptools.config["hide_from_creative_inventory"]
@ -45,3 +45,49 @@ minetest.register_craft({
recipe = "maptools:infinitefuel", recipe = "maptools:infinitefuel",
burntime = 1000000000, 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)
--]]

305
default_nodes.lua Normal file → Executable file
View File

@ -1,11 +1,11 @@
--[[ --[[
Map Tools: unbreakable default nodes Map Tools: unbreakable default nodes
Copyright © 2012-2019 Hugo Locurcio and contributors. Copyright (c) 2012-2015 Calinou 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.S local S = maptools.intllib
maptools.creative = maptools.config["hide_from_creative_inventory"] maptools.creative = maptools.config["hide_from_creative_inventory"]
@ -17,7 +17,6 @@ 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", {
@ -28,7 +27,6 @@ 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", {
@ -39,24 +37,18 @@ 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 = { tiles = {"default_jungletree_top.png", "default_jungletree_top.png", "default_jungletree.png"},
"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", {
@ -67,8 +59,7 @@ 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", {
@ -89,7 +80,6 @@ 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", {
@ -100,7 +90,6 @@ 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", {
@ -111,7 +100,6 @@ 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", {
@ -122,7 +110,6 @@ 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", {
@ -136,7 +123,6 @@ 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", {
@ -149,7 +135,6 @@ 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", {
@ -160,7 +145,6 @@ 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", {
@ -174,7 +158,6 @@ 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", {
@ -185,7 +168,6 @@ 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", {
@ -196,7 +178,6 @@ 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", {
@ -207,7 +188,6 @@ 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", {
@ -218,8 +198,9 @@ 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
}) })
-- Compatibility for change made there ^
minetest.register_alias("maptools:sandstone_brick","maptools:sandstonebrick")
minetest.register_node("maptools:desert_stone", { minetest.register_node("maptools:desert_stone", {
description = S("Unbreakable Desert Stone"), description = S("Unbreakable Desert Stone"),
@ -229,7 +210,6 @@ 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", {
@ -240,7 +220,6 @@ 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", {
@ -251,25 +230,19 @@ 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 = { tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
"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", {
@ -282,7 +255,6 @@ 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
@ -290,11 +262,7 @@ 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 = { tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^maptools_grass_side_" .. slab_num * 4 .. ".png"},
"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",
@ -305,10 +273,7 @@ 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( 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
}) })
end end
@ -320,7 +285,6 @@ 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", {
@ -331,7 +295,6 @@ 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", {
@ -342,7 +305,6 @@ 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", {
@ -353,7 +315,6 @@ 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
}) })
@ -365,7 +326,6 @@ 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", {
@ -376,7 +336,6 @@ 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", {
@ -387,7 +346,6 @@ 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", {
@ -398,7 +356,6 @@ 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", {
@ -409,7 +366,6 @@ 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:
@ -418,20 +374,10 @@ minetest.register_node("maptools:soil_wet", {
description = "Wet Soil", description = "Wet Soil",
range = 12, range = 12,
stack_max = 10000, stack_max = 10000,
tiles = { tiles = {"farming_soil_wet.png", "farming_soil_wet_side.png"},
"default_dirt.png^farming_soil_wet.png",
"default_dirt.png^farming_soil_wet_side.png",
},
drop = "", drop = "",
groups = { groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, soil = 3, wet = 1, grassland = 1},
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", {
@ -440,13 +386,222 @@ 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 = { groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, soil = 3, wet = 1, desert = 1},
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 })
-- 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
end
local function find_dock(pos, second)
if pos == nil then
return false
end
local h1 = minetest.get_node({x=pos.x+1, y=pos.y, z=pos.z})
local v1 = minetest.get_node({x=pos.x-1, y=pos.y, z=pos.z})
local r1 = minetest.get_node({x=pos.x, y=pos.y, z=pos.z+1})
local l1 = minetest.get_node({x=pos.x, y=pos.y, z=pos.z-1})
local code = 0
if dockable(l1.name) then
code = code+1
if second < 2 then
minetest.punch_node({x=pos.x, y=pos.y, z=pos.z-1})
end
end
if dockable(r1.name) then
code = code+2
if second < 2 then
minetest.punch_node({x=pos.x, y=pos.y, z=pos.z+1})
end
end
if dockable(v1.name) then
code = code+11
if second < 2 then
minetest.punch_node({x=pos.x-1, y=pos.y, z=pos.z})
end
end
if dockable(h1.name) then
code = code+21
if second < 2 then
minetest.punch_node({x=pos.x+1, y=pos.y, z=pos.z})
end
end
local me = minetest.get_node(pos)
if code > 0 then
local tmp_name = "fences:fence_wood_"..code
--minetest.chat_send_all(tmp_name)
local tmp_node = {name=tmp_name, param1=me.param1, param2=me.param2}
if second > 0 then
local tmp_node = {name=tmp_name, param1=me.param1, param2=me.param2}
minetest.set_node(pos, tmp_node)
end
elseif code == 0 then
if second == 2 then
local tmp_node = {name="fences:fence_wood", param1=me.param1, param2=me.param2}
minetest.set_node(pos, tmp_node)
end
end
end
local p0 = {-2/16, -1/2, -2/16, 2/16, 1/2, 2/16}
local p1 = {-2/16, 1/2, -2/16, -2/16, 1/2+8/16, -2/16}
local p2 = {-2/16, 1/2, 2/16, -2/16, 1/2+8/16, 2/16}
local p3 = {0, 0, 0, 0, 0, 0}
local p4 = {2/16, 1/2, -2/16, 2/16, 1/2+8/16, -2/16}
local p5 = {2/16, 1/2, 2/16, 2/16, 1/2+8/16, 2/16}
minetest.register_node(":fences:fence_wood", {
description = S("Unbreakable Wooden Fence"),
range = 12,
stack_max = 10000,
tiles = {"default_wood.png"},
inventory_image = "default_wood.png",
wield_image = "default_wood.png",
paramtype = "light",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
drop = "",
sunlight_propagates = true,
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {p0,p1,p2,p3,p4,p5,}
},
selection_box = {
type = "fixed",
fixed = {-2/16, -1/2, -2/16, 2/16, 1/2, 2/16},
},
on_construct = function(pos)
find_dock(pos, 1)
end,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
find_dock(pos, -1)
end
})
-- carts:
minetest.register_node(":maptools:unbreakable_rail", {
description = "Unbreakable Rail",
drawtype = "raillike",
tiles = {"default_rail.png", "default_rail_curved.png", "default_rail_t_junction.png", "default_rail_crossing.png"},
inventory_image = "default_rail.png",
wield_image = "default_rail.png",
paramtype = "light",
stack_max = 10000,
sunlight_propagates = true,
is_ground_content = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
groups = {snappy = 1, rail = 1, connect_to_raillike = 1, unbreakable = 1, not_in_creative_inventory = maptools.creative},
mesecons = {
effector = {
action_off = function(pos, node)
minetest.get_meta(pos):set_string("cart_acceleration", "0.5")
end,
action_on = function(pos, node)
minetest.get_meta(pos):set_string("cart_acceleration", "0")
end,
},
},
})
minetest.register_node(":maptools:unbreakable_rail_copper", {
description = "Unbreakable Copper Rail",
drawtype = "raillike",
tiles = {"carts_rail_cp.png", "carts_rail_curved_cp.png", "carts_rail_t_junction_cp.png", "carts_rail_crossing_cp.png"},
inventory_image = "carts_rail_cp.png",
wield_image = "carts_rail_cp.png",
paramtype = "light",
stack_max = 10000,
sunlight_propagates = true,
is_ground_content = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
groups = {rail = 1, connect_to_raillike = 1, unbreakable = 1, not_in_creative_inventory = maptools.creative},
after_place_node = function(pos, placer, itemstack)
if not mesecon then
minetest.get_meta(pos):set_string("cart_acceleration", "0.5")
end
end,
mesecons = {
effector = {
action_off = function(pos, node)
minetest.get_meta(pos):set_string("cart_acceleration", "0.5")
end,
action_on = function(pos, node)
minetest.get_meta(pos):set_string("cart_acceleration", "0")
end,
},
},
})
minetest.register_node("maptools:unbreakable_rail_power", {
description = "Unbreakable Powered Rail",
drawtype = "raillike",
tiles = {"carts_rail_pwr.png", "carts_rail_curved_pwr.png", "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"},
inventory_image = "carts_rail_pwr.png",
wield_image = "carts_rail_pwr.png",
paramtype = "light",
stack_max = 10000,
sunlight_propagates = true,
is_ground_content = true,
walkable = false,
selection_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
groups = {rail = 1, connect_to_raillike = 1, unbreakable = 1, not_in_creative_inventory = maptools.creative},
after_place_node = function(pos, placer, itemstack)
if not mesecon then
minetest.get_meta(pos):set_string("cart_acceleration", "0.5")
end
end,
mesecons = {
effector = {
action_off = function(pos, node)
minetest.get_meta(pos):set_string("cart_acceleration", "0.5")
end,
action_on = function(pos, node)
minetest.get_meta(pos):set_string("cart_acceleration", "0")
end,
},
},
})
local chestdef = minetest.registered_nodes["default:chest"]
minetest.register_node("maptools:chest",{
description = "Chest",
tiles = chestdef.tiles,
stack_max = 1000,
paramtype2 = "facedir",
on_construct = chestdef.on_construct,
on_metadata_inventory_move = chestdef.on_metadata_inventory_move,
on_metadata_inventory_put = chestdef.on_metadata_inventory_put,
on_metadata_inventory_take = chestdef.on_metadata_inventory_take,
groups = {unbreakable = 1, not_in_creative_inventory = 1},
}) })

1
depends.txt Normal file → Executable file
View File

@ -1 +1,2 @@
default default
fire

View File

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

70
init.lua Normal file → Executable file
View File

@ -1,33 +1,37 @@
--[[ --[[
===================================================================== =====================================================================
** Map Tools ** ** Map Tools **
By Calinou. By Calinou.
Copyright © 2012-2019 Hugo Locurcio and contributors. Copyright (c) 2012-2015 Calinou 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 modpath = minetest.get_modpath("maptools") local S
if minetest.get_modpath("intllib") then
local S, NS = dofile(modpath .. "/intllib.lua") S = intllib.Getter()
maptools.S = S else
maptools.NS = NS S = function(s) return s end
end
dofile(modpath .. "/config.lua") maptools.intllib = S
dofile(modpath .. "/aliases.lua")
dofile(modpath .. "/craftitems.lua") local modpath = minetest.get_modpath("maptools")
dofile(modpath .. "/default_nodes.lua")
dofile(modpath .. "/nodes.lua") dofile(modpath .. "/config.lua")
dofile(modpath .. "/tools.lua") dofile(modpath .. "/aliases.lua")
dofile(modpath .. "/craftitems.lua")
maptools.drop_msg = function(itemstack, player) dofile(modpath .. "/default_nodes.lua")
local name = player:get_player_name() dofile(modpath .. "/nodes.lua")
minetest.chat_send_player(name, S("[maptools] tools/nodes do not drop!")) dofile(modpath .. "/tools.lua")
end
--[[
if minetest.setting_getbool("log_mods") then Map Tools by Calinou
minetest.log("action", S("[maptools] loaded.")) Licensed under the zlib license for code and CC BY-SA 3.0 for textures, see LICENSE.txt for info.
end --]]
if minetest.setting_getbool("log_mods") then
minetest.log("action", S("[maptools] loaded."))
end

View File

@ -1,44 +0,0 @@
-- 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

0
locale/es.txt Normal file → Executable file
View File

0
locale/fr.txt Normal file → Executable file
View File

View File

@ -1,47 +0,0 @@
# Translation by Emon
[maptools] loaded. = [maptools] caricato.
Cloud = Nuvola
Infinite Fuel = Combustibile infinito
Admin Pickaxe = Piccone della amministrazione
Admin Pickaxe With Drops = Piccone della amministrazione che lascia cadere a terra
Copper Coin = Moneta di rame
Silver Coin = Moneta di argento
Gold Coin = Moneta di oro
Super Apple = Super mela
Fake Ladder = Finta scala a pioli
Smoke Block = Blocco di fumo
Damaging Block: %s = Blocco che danneggia : %s
Kill Block = Blocco che uccide
Build Prevention = Impedimento alla costruzione
Interact Prevention = Impedimento alla interazione
Climb Block = Blocco su cui ci si può arrampicare
Light Block = Blocco di luce
Light Bulb = Lampadina
Player Clip = Blocca giocatori
Player Clip Bottom Face = Blocca giocatori - faccia inferiore
Player Clip Top Face = Glocca giocatori - faccia superiore
Full Clip = Blocca tutti
Full Clip Face = Faccia del blocca tutti
Permanent Fire = Fuoco eterno
Fake Fire = Fuoco finto
Igniter = Accendino
Pusher: %s = Che ha spinto : %s
Unbreakable Stone = Pietra infrangibile
Unbreakable Sand = Sabbia infrangibile
Unbreakable Desert Stone = Pietra del deserto infrangibile
Unbreakable Desert Sand = Sabbia del deserto infrangibile
Unbreakable Gravel = Ghiaia infrangibile
Unbreakable Dirt = Terra infrangibile
Unbreakable Dirt with Grass = Erba infrangibile
Unbreakable Full Grass= Blocco d'erba infrangibile
Unbreakable Brick = Mattoni infrangibile
Unbreakable Wooden Planks = Assi in legno infrangibili
Unbreakable Tree = Albero infrangibile
Unbreakable Glass = Vetro infrangibile
Unbreakable Sandstone = Arenaria infrangibile
Unbreakable Leaves = Foglie infrangibili
Unbreakable Cobblestone = Ciottolo infrangibile
Unbreakable Mossy Cobblestone = Ciottolo muschioso infrangibile

View File

@ -1 +0,0 @@
name = maptools

157
nodes.lua Normal file → Executable file
View File

@ -1,25 +1,25 @@
--[[ --[[
Map Tools: node definitions Map Tools: node definitions
Copyright © 2012-2019 Hugo Locurcio and contributors. Copyright (c) 2012-2015 Calinou 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.S local S = maptools.intllib
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,7 +30,6 @@ 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", {
@ -42,7 +41,6 @@ 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", {
@ -56,11 +54,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",
@ -76,7 +74,6 @@ 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", {
@ -89,11 +86,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",
@ -108,7 +105,6 @@ 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", {
@ -121,21 +117,19 @@ 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
}) })
@ -143,14 +137,13 @@ 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", {
@ -165,7 +158,6 @@ 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", {
@ -183,12 +175,7 @@ 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 = { groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
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", {
@ -206,12 +193,7 @@ 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 = { groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
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", {
@ -229,38 +211,27 @@ 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 = { groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
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,
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 = { groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100, bouncy=pusher_num*100},
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", {
@ -271,12 +242,11 @@ minetest.register_node("maptools:lightbulb", {
drawtype = "airlike", drawtype = "airlike",
walkable = false, walkable = false,
pointable = false, pointable = false,
light_source = 14, light_source = default.LIGHT_MAX,
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:nobuild", { minetest.register_node("maptools:nobuild", {
@ -291,7 +261,6 @@ 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", {
@ -305,7 +274,6 @@ minetest.register_node("maptools:nointeract", {
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", {
@ -321,7 +289,6 @@ 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
@ -338,7 +305,6 @@ 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
@ -355,7 +321,6 @@ 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", {
@ -369,7 +334,6 @@ 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", {
@ -390,28 +354,16 @@ 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", { local permafire = table.copy(minetest.registered_nodes["fire:basic_flame"])
description = S("Permanent Fire"), permafire.damage_per_second = 4
range = 12, permafire.stack_max = 10000
stack_max = 10000, permafire.range = 12
drawtype = "plantlike", permafire.description = S("Permanent Fire")
paramtype = "light", permafire.groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}
tiles = {{
name="fire_basic_flame_animated.png", minetest.register_node("maptools:permanent_fire", permafire)
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=1},
}},
inventory_image = "fire_basic_flame.png",
light_source = 14,
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sunlight_propagates = true,
walkable = false,
damage_per_second = 4,
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:fake_fire", { minetest.register_node("maptools:fake_fire", {
description = S("Fake Fire"), description = S("Fake Fire"),
@ -429,13 +381,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",
@ -444,26 +396,39 @@ 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", {
description = S("Super Apple"), description = S("Super Apple"),
range = 12, range = 12,
stack_max = 10000, stack_max = 99,
drawtype = "plantlike", drawtype = "nodebox",
visual_scale = 1.0, visual_scale = 1.0,
tiles = {"maptools_superapple.png"}, tiles = {"maptools_super_apple_top.png","maptools_super_apple_bottom.png","maptools_super_apple_side.png"},
inventory_image = "maptools_superapple.png", inventory_image = "maptools_superapple.png",
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
selection_box = {
type = "fixed",
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
},
walkable = false, walkable = false,
groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = maptools.creative}, node_box = {
type = "fixed",
fixed = {
{-3/16, -7/16, -3/16, 3/16, 1/16, 3/16},
{-4/16, -6/16, -3/16, 4/16, 0, 3/16},
{-3/16, -6/16, -4/16, 3/16, 0, 4/16},
{-1/32, 1/16, -1/32, 1/32, 4/16, 1/32},
{-1/16, 1.6/16, 0, 1/16, 1.8/16, 1/16},
{-2/16, 1.4/16, 1/16, 1/16, 1.6/16, 2/16},
{-2/16, 1.2/16, 2/16, 0, 1.4/16, 3/16},
{-1.5/16, 1/16, .5/16, 0.5/16, 1.2/16, 2.5/16},
}
},
is_ground_content = true,
groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = 0, flammable = 2, leafdecay = 3, leafdecay_drop = 1},
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 after_place_node = function(pos, placer, itemstack)
if placer:is_player() then
minetest.set_node(pos, {name = "maptools:superapple", param2= 1})
end
end,
}) })

0
textures/black.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 67 B

After

Width:  |  Height:  |  Size: 67 B

BIN
textures/bones_bones.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 B

0
textures/fire_basic_flame.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 794 B

After

Width:  |  Height:  |  Size: 794 B

BIN
textures/fire_basic_flame_animated.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

0
textures/invisible.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 68 B

BIN
textures/maptools_adminpick.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 281 B

0
textures/maptools_adminpick_with_drops.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 278 B

BIN
textures/maptools_copper_coin.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 214 B

BIN
textures/maptools_gold_coin.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 215 B

0
textures/maptools_grass_side_12.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 561 B

After

Width:  |  Height:  |  Size: 561 B

0
textures/maptools_grass_side_4.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 294 B

After

Width:  |  Height:  |  Size: 294 B

0
textures/maptools_grass_side_8.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 466 B

After

Width:  |  Height:  |  Size: 466 B

BIN
textures/maptools_infinitefuel.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 381 B

After

Width:  |  Height:  |  Size: 387 B

BIN
textures/maptools_silver_coin.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 215 B

BIN
textures/maptools_smoke.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 296 B

After

Width:  |  Height:  |  Size: 303 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

BIN
textures/maptools_superapple.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

After

Width:  |  Height:  |  Size: 231 B

0
textures/white.png Normal file → Executable file
View File

Before

Width:  |  Height:  |  Size: 67 B

After

Width:  |  Height:  |  Size: 67 B

72
tools.lua Normal file → Executable file
View File

@ -1,63 +1,61 @@
--[[ --[[
Map Tools: tool definitions Map Tools: tool definitions
Copyright © 2012-2019 Hugo Locurcio and contributors. Copyright (c) 2012-2015 Calinou 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.S local S = maptools.intllib
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 = 20, range = 12,
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 = pick_admin_toolcaps, tool_capabilities = {
on_drop = maptools.drop_msg, full_punch_interval = 0.1,
max_drop_level = 3,
groupcaps= {
unbreakable = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
fleshy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
choppy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
bendy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
snappy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
},
damage_groups = {fleshy = 1000},
},
}) })
minetest.register_tool("maptools:pick_admin_with_drops", { minetest.register_tool("maptools:pick_admin_with_drops", {
description = S("Admin Pickaxe with Drops"), description = S("Admin Pickaxe with Drops"),
range = 20, range = 12,
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 = pick_admin_toolcaps, tool_capabilities = {
on_drop = maptools.drop_msg, full_punch_interval = 0.35,
max_drop_level = 3,
groupcaps = {
unbreakable = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
fleshy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
choppy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
bendy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
cracky = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
crumbly = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
snappy = {times={[1] = 0, [2] = 0, [3] = 0}, uses = 0, maxlevel = 3},
},
damage_groups = {fleshy = 1000},
},
}) })
minetest.register_on_punchnode(function(pos, node, puncher) 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( minetest.log("action", puncher:get_player_name() .. " digs " .. minetest.get_node(pos).name .. " at " .. minetest.pos_to_string(pos) .. " using an Admin Pickaxe.")
"action", minetest.remove_node(pos) -- The node is removed directly, which means it even works on non-empty containers and group-less nodes.
puncher:get_player_name() .. nodeupdate(pos) -- Run node update actions like falling nodes.
" 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)