12 Commits

42 changed files with 345 additions and 442 deletions

13
.editorconfig Normal file
View File

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

29
.luacheckrc Normal file
View File

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

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

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

15
.travis.yml Normal file
View File

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

View File

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

5
LICENSE.md Executable file → Normal file
View File

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

0
NODES.md Executable file → Normal file
View File

19
README.md Executable file → Normal file
View File

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

2
aliases.lua Executable file → Normal file
View File

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

4
config.lua Executable file → Normal file
View File

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

50
craftitems.lua Executable file → Normal file
View File

@ -1,11 +1,11 @@
--[[
Map Tools: item definitions
Copyright (c) 2012-2015 Calinou and contributors.
Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]
local S = maptools.intllib
local S = maptools.S
maptools.creative = maptools.config["hide_from_creative_inventory"]
@ -45,49 +45,3 @@ minetest.register_craft({
recipe = "maptools:infinitefuel",
burntime = 1000000000,
})
-- Coin based craft recipes
-- //MFF_BEG(Mg|07/24/15)
-- //MFF_BEG(Darcidride|07/06/16)
--[[
-- 9CC -> 1SC
minetest.register_craft({
output = "maptools:silver_coin",
recipe = {
{"maptools:copper_coin", "maptools:copper_coin", "maptools:copper_coin"},
{"maptools:copper_coin", "maptools:copper_coin", "maptools:copper_coin"},
{"maptools:copper_coin", "maptools:copper_coin", "maptools:copper_coin"},
}
})
-- 9SC -> 1GC
minetest.register_craft({
output = "maptools:gold_coin",
recipe = {
{"maptools:silver_coin", "maptools:silver_coin", "maptools:silver_coin"},
{"maptools:silver_coin", "maptools:silver_coin", "maptools:silver_coin"},
{"maptools:silver_coin", "maptools:silver_coin", "maptools:silver_coin"},
}
})
-- 1GC -> 9SC
minetest.register_craft({
output = "maptools:silver_coin 9",
recipe = {
{"maptools:gold_coin"}
}
})
-- 1SC -> 9CC
minetest.register_craft({
output = "maptools:copper_coin 9",
recipe = {
{"maptools:silver_coin"}
}
})
--
-- //MFF_END(Mg|07/24/15)
-- //MFF_END(Darcidride|07/06/16)
--]]

288
default_nodes.lua Executable file → Normal file
View File

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

1
depends.txt Executable file → Normal file
View File

@ -1,2 +1 @@
default
fire

1
description.txt Normal file
View File

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

25
init.lua Executable file → Normal file
View File

@ -3,27 +3,18 @@
** Map Tools **
By Calinou.
Copyright (c) 2012-2015 Calinou and contributors.
Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
=====================================================================
--]]
maptools = {}
local S
if minetest.get_modpath("intllib") then
S = intllib.Getter()
else
S = function(s) return s end
end
maptools.intllib = S
local modpath = minetest.get_modpath("maptools")
maptools.drop_msg = function(itemstack, player)
local name = player:get_player_name()
minetest.chat_send_player(name, S("[maptools] tools/nodes do not drop!"))
end
local S, NS = dofile(modpath .. "/intllib.lua")
maptools.S = S
maptools.NS = NS
dofile(modpath .. "/config.lua")
dofile(modpath .. "/aliases.lua")
@ -32,10 +23,10 @@ dofile(modpath .. "/default_nodes.lua")
dofile(modpath .. "/nodes.lua")
dofile(modpath .. "/tools.lua")
--[[
Map Tools by Calinou
Licensed under the zlib license for code and CC BY-SA 3.0 for textures, see LICENSE.txt for info.
--]]
maptools.drop_msg = function(itemstack, player)
local name = player:get_player_name()
minetest.chat_send_player(name, S("[maptools] tools/nodes do not drop!"))
end
if minetest.setting_getbool("log_mods") then
minetest.log("action", S("[maptools] loaded."))

44
intllib.lua Normal file
View File

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

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

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

47
locale/it.txt Normal file
View File

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

1
mod.conf Normal file
View File

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

100
nodes.lua Executable file → Normal file
View File

@ -1,15 +1,15 @@
--[[
Map Tools: node definitions
Copyright (c) 2012-2015 Calinou and contributors.
Copyright © 2012-2019 Hugo Locurcio and contributors.
Licensed under the zlib license. See LICENSE.md for more information.
--]]
local S = maptools.intllib
local S = maptools.S
maptools.creative = maptools.config["hide_from_creative_inventory"]
-- Redefine cloud so that the admin pickaxe can mine it:
-- Redefine cloud so that the admin pickaxe can mine it
minetest.register_node(":default:cloud", {
description = S("Cloud"),
tiles = {"default_cloud.png"},
@ -20,7 +20,6 @@ minetest.register_node(":default:cloud", {
})
-- Nodes
-- =====
minetest.register_node("maptools:black", {
description = S("Black"),
@ -62,7 +61,6 @@ minetest.register_node("maptools:playerclip", {
minetest.register_node("maptools:fake_walkable", {
description = S("Player Clip"),
drawtype = "nodebox",
range = 12,
stack_max = 10000,
inventory_image = "default_steel_block.png^dye_green.png",
@ -96,7 +94,6 @@ minetest.register_node("maptools:fullclip", {
minetest.register_node("maptools:fake_walkable_pointable", {
description = S("Player Clip"),
drawtype = "nodebox",
range = 12,
stack_max = 10000,
inventory_image = "default_steel_block.png^dye_green.png",
@ -131,7 +128,7 @@ minetest.register_node("maptools:ignore_like_no_clip", {
description = S("Ignore-like (no clip)"),
range = 12,
stack_max = 10000,
inventory_image = "default_steel_block.png^dye_violet.png",
inventory_image = "default_steel_block.png^dye_purple.png",
tiles = {"invisible.png"},
paramtype = "light",
walkable = false,
@ -146,7 +143,7 @@ minetest.register_node("maptools:ignore_like_no_point", {
description = S("Ignore-like (no point)"),
range = 12,
stack_max = 10000,
inventory_image = "default_steel_block.png^dye_violet.png",
inventory_image = "default_steel_block.png^dye_purple.png",
tiles = {"invisible.png"},
paramtype = "light",
pointable = false,
@ -186,7 +183,11 @@ minetest.register_node("maptools:fullclip_face", {
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
},
on_drop = maptools.drop_msg
})
@ -205,7 +206,11 @@ minetest.register_node("maptools:playerclip_bottom", {
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
},
on_drop = maptools.drop_msg
})
@ -224,29 +229,38 @@ minetest.register_node("maptools:playerclip_top", {
fixed = {-0.5, 0.4999, -0.5, 0.5, 0.5, 0.5},
},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100},
groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
},
on_drop = maptools.drop_msg
})
for pusher_num=1,10,1 do
minetest.register_node("maptools:pusher_" .. pusher_num, {
description = S("Pusher (%s)"):format(pusher_num),
range = 12,
stack_max = 10000,
inventory_image = "default_steel_block.png^default_apple.png",
drawtype = "nodebox",
tiles = {"invisible.png"},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
},
drop = "",
groups = {unbreakable = 1, not_in_creative_inventory = maptools.creative, fall_damage_add_percent=-100, bouncy=pusher_num*100},
on_drop = maptools.drop_msg
})
minetest.register_node("maptools:pusher_" .. pusher_num, {
description = S("Pusher (%s)"):format(pusher_num),
range = 12,
stack_max = 10000,
inventory_image = "default_steel_block.png^default_apple.png",
drawtype = "nodebox",
tiles = {"invisible.png"},
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, -0.4999, 0.5},
},
drop = "",
groups = {
unbreakable = 1,
not_in_creative_inventory = maptools.creative,
fall_damage_add_percent = -100,
bouncy = pusher_num * 100,
},
on_drop = maptools.drop_msg
})
end
minetest.register_node("maptools:lightbulb", {
@ -257,7 +271,7 @@ minetest.register_node("maptools:lightbulb", {
drawtype = "airlike",
walkable = false,
pointable = false,
light_source = default.LIGHT_MAX,
light_source = 14,
paramtype = "light",
sunlight_propagates = true,
drop = "",
@ -422,7 +436,6 @@ minetest.register_node("maptools:igniter", {
drawtype = "airlike",
range = 12,
stack_max = 10000,
inventory_image = "default_steel_block.png^crosshair.png",
description = S("Igniter"),
paramtype = "light",
inventory_image = "fire_basic_flame.png",
@ -437,29 +450,20 @@ minetest.register_node("maptools:igniter", {
minetest.register_node("maptools:superapple", {
description = S("Super Apple"),
range = 12,
stack_max = 99,
drawtype = "nodebox",
stack_max = 10000,
drawtype = "plantlike",
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",
paramtype = "light",
sunlight_propagates = true,
walkable = false,
node_box = {
selection_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},
}
fixed = {-0.2, -0.5, -0.2, 0.2, 0, 0.2}
},
is_ground_content = true,
groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = 0, flammable = 2, leafdecay = 3, leafdecay_drop = 1},
walkable = false,
groups = {fleshy=3, dig_immediate=3, not_in_creative_inventory = maptools.creative},
on_use = minetest.item_eat(20),
sounds = default.node_sound_defaults(),
on_drop = maptools.drop_msg
})

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

After

Width:  |  Height:  |  Size: 794 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: 283 B

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

Before

Width:  |  Height:  |  Size: 278 B

After

Width:  |  Height:  |  Size: 278 B

BIN
textures/maptools_copper_coin.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 B

After

Width:  |  Height:  |  Size: 213 B

BIN
textures/maptools_gold_coin.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

After

Width:  |  Height:  |  Size: 213 B

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

Before

Width:  |  Height:  |  Size: 561 B

After

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

After

Width:  |  Height:  |  Size: 466 B

BIN
textures/maptools_infinitefuel.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 387 B

After

Width:  |  Height:  |  Size: 381 B

BIN
textures/maptools_silver_coin.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 215 B

After

Width:  |  Height:  |  Size: 213 B

BIN
textures/maptools_smoke.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 303 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

BIN
textures/maptools_superapple.png Executable file → Normal file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 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

74
tools.lua Executable file → Normal file
View File

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