10 Commits

Author SHA1 Message Date
e3ca31cdb9 Bump to version 2.2.0 2021-06-29 00:33:43 +02:00
9915ec1852 Disable crafting recipes for coins by default
Crafting recipes for coins can be enabled again by setting
`maptools.enable_coin_crafting = true` in `minetest.conf`.
2021-06-29 00:31:32 +02:00
fd9476c173 Fix node name for light-bulb in docs (#26)
Co-authored-by: BuckarooBanzay <BuckarooBanzay@users.noreply.github.com>
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
2020-12-20 21:36:53 +01:00
d11b3a1caf Update pre-commit hooks to version 3.3.0 2020-10-28 16:43:45 +01:00
800e07ee02 Fix incorrect node name for smoke in the documentation
See #24.
2020-09-27 13:00:53 +02:00
3e29d8a156 Align the Description table heading to the left on GitHub 2020-08-10 22:54:56 +02:00
c76256b805 Fix link to nodes/items documentation in the README 2020-08-10 22:54:18 +02:00
e2099cf9ea Update the changelog to mention recent changes 2020-08-10 22:53:32 +02:00
911ad7b156 Prevent TNT from blowing up Map Tools nodes (#23)
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
2020-08-10 22:52:22 +02:00
409cca2699 Switch from Travis CI to GitHub Actions (#20) 2020-07-18 19:43:43 +02:00
37 changed files with 160 additions and 526 deletions

11
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,11 @@
on: [push, pull_request]
name: build
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: lint
uses: Roang-zero1/factorio-mod-luacheck@master
with:
luacheckrc_url: ""

View File

@ -1,7 +1,8 @@
repos: repos:
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0 rev: v3.3.0
hooks: hooks:
- id: fix-byte-order-marker
- id: end-of-file-fixer - id: end-of-file-fixer
- id: trailing-whitespace - id: trailing-whitespace

View File

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

3
LICENSE.md Executable file → Normal file
View File

@ -1,5 +1,4 @@
zlib license # zlib license
============
Copyright © 2012-2020 Hugo Locurcio and contributors Copyright © 2012-2020 Hugo Locurcio and contributors

4
README.md Executable file → Normal file
View File

@ -1,4 +1,4 @@
# Map Tools # Map Tools [![](https://github.com/minetest-mods/maptools/workflows/build/badge.svg)](https://github.com/minetest-mods/maptools/actions)
Map Tools for [Minetest](https://www.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.
@ -6,7 +6,7 @@ world block sandbox game.
## Resources ## Resources
- [Forum topic](https://forum.minetest.net/viewtopic.php?f=11&t=1882) - [Forum topic](https://forum.minetest.net/viewtopic.php?f=11&t=1882)
- [List of nodes and items available](NODES_ITEMS.md) - [List of nodes and items available](docs/NODES_ITEMS.md)
## Installation ## Installation

0
aliases.lua Executable file → Normal file
View File

4
config.lua Executable file → Normal file
View File

@ -26,4 +26,6 @@ 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", 0) setting("integer", "hide_from_creative_inventory", 1)
-- Enable crafting recipes for coins (true or false):
setting("bool", "enable_coin_crafting", false)

26
craftitems.lua Executable file → Normal file
View File

@ -16,6 +16,14 @@ minetest.register_craftitem("maptools:copper_coin", {
stack_max = 10000, stack_max = 10000,
}) })
if maptools.config and maptools.config.enable_coin_crafting then
minetest.register_craft({
output = "maptools:copper_coin 10",
type = "shapeless",
recipe = { "default:copper_ingot", "default:copper_ingot" }
})
end
minetest.register_craftitem("maptools:silver_coin", { minetest.register_craftitem("maptools:silver_coin", {
description = S("Silver Coin"), description = S("Silver Coin"),
inventory_image = "maptools_silver_coin.png", inventory_image = "maptools_silver_coin.png",
@ -23,6 +31,16 @@ minetest.register_craftitem("maptools:silver_coin", {
stack_max = 10000, stack_max = 10000,
}) })
if maptools.config and maptools.config.enable_coin_crafting then
if minetest.get_modpath("moreores") then
minetest.register_craft({
output = "maptools:silver_coin 10",
type = "shapeless",
recipe = { "moreores:silver_ingot", "moreores:silver_ingot" }
})
end
end
minetest.register_craftitem("maptools:gold_coin", { minetest.register_craftitem("maptools:gold_coin", {
description = S("Gold Coin"), description = S("Gold Coin"),
inventory_image = "maptools_gold_coin.png", inventory_image = "maptools_gold_coin.png",
@ -30,6 +48,14 @@ minetest.register_craftitem("maptools:gold_coin", {
stack_max = 10000, stack_max = 10000,
}) })
if maptools.config and maptools.config.enable_coin_crafting then
minetest.register_craft({
output = "maptools:gold_coin 10",
type = "shapeless",
recipe = { "default:gold_ingot", "default:gold_ingot" }
})
end
minetest.register_craftitem("maptools:infinitefuel", { minetest.register_craftitem("maptools:infinitefuel", {
description = S("Infinite Fuel"), description = S("Infinite Fuel"),
inventory_image = "maptools_infinitefuel.png", inventory_image = "maptools_infinitefuel.png",

566
default_nodes.lua Executable file → Normal file
View File

@ -9,311 +9,192 @@ local S = maptools.S
maptools.creative = maptools.config["hide_from_creative_inventory"] maptools.creative = maptools.config["hide_from_creative_inventory"]
minetest.register_node("maptools:stone", { local function register_node(name, def)
-- Increase the interaction range when holding Map Tools nodes to make building easier.
def.range = 12
def.stack_max = 10000
def.drop = ""
if def.groups then
def.groups.unbreakable = 1
def.groups.not_in_creative_inventory = maptools.creative
else
def.groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}
end
def.on_drop = maptools.drop_msg
-- Prevent Map Tools nodes from being exploded by TNT.
def.on_blast = function() end
minetest.register_node(name, def)
end
register_node("maptools:stone", {
description = S("Unbreakable Stone"), description = S("Unbreakable Stone"),
range = 12,
stack_max = 10000,
tiles = {"default_stone.png"}, tiles = {"default_stone.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:stonebrick", { register_node("maptools:stonebrick", {
description = S("Unbreakable Stone Brick"), description = S("Unbreakable Stone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_stone_brick.png"}, tiles = {"default_stone_brick.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:tree", { register_node("maptools:tree", {
description = S("Unbreakable Tree"), description = S("Unbreakable Tree"),
range = 12,
stack_max = 10000,
tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"}, tiles = {"default_tree_top.png", "default_tree_top.png", "default_tree.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(), 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", { register_node("maptools:jungletree", {
description = S("Unbreakable Jungle Tree"), description = S("Unbreakable Jungle Tree"),
range = 12,
stack_max = 10000,
tiles = { tiles = {
"default_jungletree_top.png", "default_jungletree_top.png",
"default_jungletree_top.png", "default_jungletree_top.png",
"default_jungletree.png", "default_jungletree.png",
}, },
drop = "",
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", { register_node("maptools:cactus", {
description = S("Unbreakable Cactus"), description = S("Unbreakable Cactus"),
range = 12,
stack_max = 10000,
tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"}, tiles = {"default_cactus_top.png", "default_cactus_top.png", "default_cactus_side.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(), 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", { register_node("maptools:papyrus", {
description = S("Unbreakable Papyrus"), description = S("Unbreakable Papyrus"),
drawtype = "plantlike", drawtype = "plantlike",
range = 12,
stack_max = 10000,
tiles = {"default_papyrus.png"}, tiles = {"default_papyrus.png"},
inventory_image = "default_papyrus.png", inventory_image = "default_papyrus.png",
wield_image = "default_papyrus.png", wield_image = "default_papyrus.png",
walkable = false, walkable = false,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
drop = "",
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-0.375, -0.5, -0.375, 0.375, 0.5, 0.375} fixed = {-0.375, -0.5, -0.375, 0.375, 0.5, 0.375}
}, },
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative}, sounds = default.node_sound_leaves_defaults()
sounds = default.node_sound_leaves_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:dirt", { register_node("maptools:dirt", {
description = S("Unbreakable Dirt"), description = S("Unbreakable Dirt"),
range = 12,
stack_max = 10000,
tiles = {"default_dirt.png"}, tiles = {"default_dirt.png"},
drop = "", sounds = default.node_sound_dirt_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:wood", { register_node("maptools:wood", {
description = S("Unbreakable Wooden Planks"), description = S("Unbreakable Wooden Planks"),
range = 12,
stack_max = 10000,
tiles = {"default_wood.png"}, tiles = {"default_wood.png"},
drop = "", sounds = default.node_sound_wood_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:junglewood", { register_node("maptools:junglewood", {
description = S("Unbreakable Junglewood Planks"), description = S("Unbreakable Junglewood Planks"),
range = 12,
stack_max = 10000,
tiles = {"default_junglewood.png"}, tiles = {"default_junglewood.png"},
drop = "", sounds = default.node_sound_wood_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_wood_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:glass", { register_node("maptools:glass", {
description = S("Unbreakable Glass"), description = S("Unbreakable Glass"),
range = 12,
stack_max = 10000,
drawtype = "glasslike", drawtype = "glasslike",
tiles = {"default_glass.png"}, tiles = {"default_glass.png"},
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
drop = "", sounds = default.node_sound_glass_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_glass_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:leaves", { register_node("maptools:leaves", {
description = S("Unbreakable Leaves"), description = S("Unbreakable Leaves"),
range = 12,
stack_max = 10000,
drawtype = "allfaces_optional", drawtype = "allfaces_optional",
tiles = {"default_leaves.png"}, tiles = {"default_leaves.png"},
paramtype = "light", paramtype = "light",
drop = "", sounds = default.node_sound_leaves_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_leaves_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:sand", { register_node("maptools:sand", {
description = S("Unbreakable Sand"), description = S("Unbreakable Sand"),
range = 12,
stack_max = 10000,
tiles = {"default_sand.png"}, tiles = {"default_sand.png"},
drop = "", sounds = default.node_sound_sand_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:gravel", { register_node("maptools:gravel", {
description = S("Unbreakable Gravel"), description = S("Unbreakable Gravel"),
range = 12,
stack_max = 10000,
tiles = {"default_gravel.png"}, tiles = {"default_gravel.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults({ sounds = default.node_sound_dirt_defaults({
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", { register_node("maptools:clay", {
description = S("Unbreakable Clay"), description = S("Unbreakable Clay"),
range = 12,
stack_max = 10000,
tiles = {"default_clay.png"}, tiles = {"default_clay.png"},
drop = "", sounds = default.node_sound_dirt_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_dirt_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:desert_sand", { register_node("maptools:desert_sand", {
description = S("Unbreakable Desert Sand"), description = S("Unbreakable Desert Sand"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_sand.png"}, tiles = {"default_desert_sand.png"},
drop = "", sounds = default.node_sound_sand_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_sand_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:sandstone", { register_node("maptools:sandstone", {
description = S("Unbreakable Sandstone"), description = S("Unbreakable Sandstone"),
range = 12,
stack_max = 10000,
tiles = {"default_sandstone.png"}, tiles = {"default_sandstone.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:sandstone_brick", { register_node("maptools:sandstone_brick", {
description = S("Unbreakable Sandstone Brick"), description = S("Unbreakable Sandstone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_sandstone_brick.png"}, tiles = {"default_sandstone_brick.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
-- Compatibility for change made there ^
minetest.register_alias("maptools:sandstonebrick","maptools:sandstone_brick")
minetest.register_node("maptools:desert_sandstone_brick", {
description = S("Unbreakable Desert Sandstone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_sandstone_brick.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:silver_sandstone_brick", { register_node("maptools:desert_stone", {
description = S("Unbreakable Silver Sandstone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_silver_sandstone_brick.png"},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:desert_stone", {
description = S("Unbreakable Desert Stone"), description = S("Unbreakable Desert Stone"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_stone.png"}, tiles = {"default_desert_stone.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:desert_cobble", { register_node("maptools:desert_cobble", {
description = S("Unbreakable Desert Cobble"), description = S("Unbreakable Desert Cobble"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_cobble.png"}, tiles = {"default_desert_cobble.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:desert_stonebrick", { register_node("maptools:desert_stonebrick", {
description = S("Unbreakable Desert Stone Brick"), description = S("Unbreakable Desert Stone Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_desert_stone_brick.png"}, tiles = {"default_desert_stone_brick.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:grass", { register_node("maptools:grass", {
description = S("Unbreakable Dirt with Grass"), description = S("Unbreakable Dirt with Grass"),
range = 12,
stack_max = 10000,
tiles = { tiles = {
"default_grass.png", "default_grass.png",
"default_dirt.png", "default_dirt.png",
"default_dirt.png^default_grass_side.png", "default_dirt.png^default_grass_side.png",
}, },
paramtype2 = "facedir", paramtype2 = "facedir",
drop = "",
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", { register_node("maptools:fullgrass", {
description = S("Unbreakable Full Grass"), description = S("Unbreakable Full Grass"),
range = 12,
stack_max = 10000,
tiles = {"default_grass.png"}, tiles = {"default_grass.png"},
drop = "",
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
}) })
for slab_num = 1,3,1 do for slab_num = 1,3,1 do
minetest.register_node("maptools:slab_grass_" .. slab_num * 4, { register_node("maptools:slab_grass_" .. slab_num * 4, {
description = S("Grass Slab"), description = S("Grass Slab"),
range = 12,
stack_max = 10000,
tiles = { tiles = {
"default_grass.png", "default_grass.png",
"default_dirt.png", "default_dirt.png",
@ -327,367 +208,90 @@ for slab_num = 1,3,1 do
sunlight_propagates = true, sunlight_propagates = true,
paramtype = "light", paramtype = "light",
paramtype2 = "facedir", paramtype2 = "facedir",
drop = "",
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
minetest.register_node("maptools:cobble", { register_node("maptools:cobble", {
description = S("Unbreakable Cobblestone"), description = S("Unbreakable Cobblestone"),
range = 12,
stack_max = 10000,
tiles = {"default_cobble.png"}, tiles = {"default_cobble.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:mossycobble", { register_node("maptools:mossycobble", {
description = S("Unbreakable Mossy Cobblestone"), description = S("Unbreakable Mossy Cobblestone"),
range = 12,
stack_max = 10000,
tiles = {"default_mossycobble.png"}, tiles = {"default_mossycobble.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:brick", { register_node("maptools:brick", {
description = S("Unbreakable Brick"), description = S("Unbreakable Brick"),
range = 12,
stack_max = 10000,
tiles = {"default_brick.png"}, tiles = {"default_brick.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:coalblock", { register_node("maptools:coalblock", {
description = S("Unbreakable Coal Block"), description = S("Unbreakable Coal Block"),
range = 12,
stack_max = 10000,
tiles = {"default_coal_block.png"}, tiles = {"default_coal_block.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:steelblock", { register_node("maptools:steelblock", {
description = S("Unbreakable Steel Block"), description = S("Unbreakable Steel Block"),
range = 12,
stack_max = 10000,
tiles = {"default_steel_block.png"}, tiles = {"default_steel_block.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:goldblock", { register_node("maptools:goldblock", {
description = S("Unbreakable Gold Block"), description = S("Unbreakable Gold Block"),
range = 12,
stack_max = 10000,
tiles = {"default_gold_block.png"}, tiles = {"default_gold_block.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:copperblock", { register_node("maptools:copperblock", {
description = S("Unbreakable Copper Block"), description = S("Unbreakable Copper Block"),
range = 12,
stack_max = 10000,
tiles = {"default_copper_block.png"}, tiles = {"default_copper_block.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:bronzeblock", { register_node("maptools:bronzeblock", {
description = S("Unbreakable Bronze Block"), description = S("Unbreakable Bronze Block"),
range = 12,
stack_max = 10000,
tiles = {"default_bronze_block.png"}, tiles = {"default_bronze_block.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
minetest.register_node("maptools:diamondblock", { register_node("maptools:diamondblock", {
description = S("Unbreakable Diamond Block"), description = S("Unbreakable Diamond Block"),
range = 12,
stack_max = 10000,
tiles = {"default_diamond_block.png"}, tiles = {"default_diamond_block.png"},
drop = "", sounds = default.node_sound_stone_defaults()
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative},
sounds = default.node_sound_stone_defaults(),
on_drop = maptools.drop_msg
}) })
-- Farming: -- Farming:
minetest.register_node("maptools:soil_wet", { register_node("maptools:soil_wet", {
description = "Wet Soil", description = "Wet Soil",
range = 12,
stack_max = 10000,
tiles = { tiles = {
"default_dirt.png^farming_soil_wet.png", "default_dirt.png^farming_soil_wet.png",
"default_dirt.png^farming_soil_wet_side.png", "default_dirt.png^farming_soil_wet_side.png",
}, },
drop = "",
groups = { groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
soil = 3, soil = 3,
wet = 1, wet = 1,
grassland = 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", { register_node("maptools:desert_sand_soil_wet", {
description = "Wet Desert Sand Soil", description = "Wet Desert Sand Soil",
range = 12,
stack_max = 10000,
drop = "",
tiles = {"farming_desert_sand_soil_wet.png", "farming_desert_sand_soil_wet_side.png"}, 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, soil = 3,
wet = 1, wet = 1,
desert = 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 = {"carts_rail_straight.png", "carts_rail_curved.png", "carts_rail_t_junction.png", "carts_rail_crossing.png"},
inventory_image = "carts_rail_straight.png",
wield_image = "carts_rail_straight.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_straight_cp.png", "carts_rail_curved_cp.png", "carts_rail_t_junction_cp.png", "carts_rail_crossing_cp.png"},
inventory_image = "carts_rail_straight_cp.png",
wield_image = "carts_rail_straight_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_straight_pwr.png", "carts_rail_curved_pwr.png", "carts_rail_t_junction_pwr.png", "carts_rail_crossing_pwr.png"},
inventory_image = "carts_rail_straight_pwr.png",
wield_image = "carts_rail_straight_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},
})

View File

@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased] ## [Unreleased]
## [2.2.0] - 2021-06-28
### Changed
- Disabled crafting recipes for coins by default.
- They can be enabled again by setting `maptools.enable_coin_crafting = true`
in `minetest.conf`.
- Map Tools nodes can no longer be exploded by TNT.
- Switched from Travis CI to GitHub Actions for continuous integration.
## [2.1.0] - 2020-06-08 ## [2.1.0] - 2020-06-08
### Changed ### Changed
@ -43,7 +53,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
- Initial versioned release. - Initial versioned release.
[Unreleased]: https://github.com/minetest-mods/maptools/compare/v2.1.0...HEAD [Unreleased]: https://github.com/minetest-mods/maptools/compare/v2.2.0...HEAD
[2.2.0]: https://github.com/minetest-mods/maptools/compare/v2.1.0...v2.2.0
[2.1.0]: https://github.com/minetest-mods/maptools/compare/v2.0.0...v2.1.0 [2.1.0]: https://github.com/minetest-mods/maptools/compare/v2.0.0...v2.1.0
[2.0.0]: https://github.com/minetest-mods/maptools/compare/v1.1.0...v2.0.0 [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 [1.1.0]: https://github.com/minetest-mods/maptools/compare/v1.0.0...v1.1.0

View File

@ -13,24 +13,24 @@ as they cannot be removed by hand (they can only be removed with
[WorldEdit](https://github.com/Uberi/Minetest-WorldEdit) or similar). [WorldEdit](https://github.com/Uberi/Minetest-WorldEdit) or similar).
| Item code | Description | | 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:{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: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: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: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:smoke` | Some smoke. Decreases visibility, but doesn't damage players or entities). |
| `maptools:no_build` | :warning: Very basic building prevention. | | `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: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: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:kill` | :warning: Instant kill blocks (damages players by 20 HP per second). |
| `maptools:drowning` | :warning: Simulates drowning in water. | | `maptools:drowning` | :warning: Simulates drowning in water. |
| `maptools:light_block` | :warning: Invisible non-solid block, prevents light from passing through. | | `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. | | `maptools:lightbulb` | :warning: Invisible non-solid block, emitting the maximum amount of light. |
## Items ## Items
| Item code | Description | | 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` | 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: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:infinite_fuel` | Fuel lasting for a near-infinite time (about 50 real-life years). |

0
init.lua Executable file → Normal file
View File

View File

@ -1,4 +1,5 @@
name = maptools name = maptools
description = Adds various special versions of normal blocks, tools, and other map maintainer tools. description = Adds various special versions of normal blocks, tools, and other map maintainer tools.
depends = default depends = default
optional_depends = moreores
min_minetest_version = 5.0.0 min_minetest_version = 5.0.0

27
nodes.lua Executable file → Normal file
View File

@ -271,7 +271,7 @@ minetest.register_node("maptools:lightbulb", {
drawtype = "airlike", drawtype = "airlike",
walkable = false, walkable = false,
pointable = false, pointable = false,
light_source = default.LIGHT_MAX, light_source = 14,
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
drop = "", drop = "",
@ -450,31 +450,22 @@ minetest.register_node("maptools:igniter", {
minetest.register_node("maptools:superapple", { minetest.register_node("maptools:superapple", {
description = S("Super Apple"), description = S("Super Apple"),
range = 12, range = 12,
stack_max = 99, stack_max = 10000,
drawtype = "nodebox", drawtype = "plantlike",
visual_scale = 1.0, visual_scale = 1.0,
tiles = {"maptools_super_apple_top.png","maptools_super_apple_bottom.png","maptools_super_apple_side.png"}, tiles = {"maptools_superapple.png"},
inventory_image = "maptools_superapple.png", inventory_image = "maptools_superapple.png",
paramtype = "light", paramtype = "light",
sunlight_propagates = true, sunlight_propagates = true,
walkable = false, selection_box = {
node_box = {
type = "fixed", type = "fixed",
fixed = { fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
{-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, walkable = false,
groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = 0, flammable = 2, leafdecay = 3, leafdecay_drop = 1}, 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
}) })
minetest.register_node("maptools:drowning", { minetest.register_node("maptools:drowning", {

3
settingtypes.txt Normal file
View File

@ -0,0 +1,3 @@
# If `true`, enables coin crafting recipes. If `false`, disables coin crafting recipes.
# Takes effect only at load-time; runtime changes to this setting are ignored.
maptools.enable_coin_crafting (Enable crafting recipes for coins) bool false

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

Before

Width:  |  Height:  |  Size: 67 B

After

Width:  |  Height:  |  Size: 67 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

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

Before

Width:  |  Height:  |  Size: 695 B

After

Width:  |  Height:  |  Size: 695 B

BIN
textures/fire_basic_flame_animated.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

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

Before

Width:  |  Height:  |  Size: 68 B

After

Width:  |  Height:  |  Size: 68 B

BIN
textures/maptools_adminpick.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

After

Width:  |  Height:  |  Size: 279 B

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

Before

Width:  |  Height:  |  Size: 276 B

After

Width:  |  Height:  |  Size: 276 B

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

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 213 B

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

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 213 B

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

Before

Width:  |  Height:  |  Size: 549 B

After

Width:  |  Height:  |  Size: 549 B

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

Before

Width:  |  Height:  |  Size: 294 B

After

Width:  |  Height:  |  Size: 294 B

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

Before

Width:  |  Height:  |  Size: 442 B

After

Width:  |  Height:  |  Size: 442 B

BIN
textures/maptools_infinitefuel.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 387 B

After

Width:  |  Height:  |  Size: 380 B

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

Before

Width:  |  Height:  |  Size: 213 B

After

Width:  |  Height:  |  Size: 213 B

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

Before

Width:  |  Height:  |  Size: 296 B

After

Width:  |  Height:  |  Size: 296 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 B

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

Before

Width:  |  Height:  |  Size: 230 B

After

Width:  |  Height:  |  Size: 230 B

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

Before

Width:  |  Height:  |  Size: 67 B

After

Width:  |  Height:  |  Size: 67 B

0
tools.lua Executable file → Normal file
View File