Compare commits
119 Commits
stable-5.2
...
stable-4.0
Author | SHA1 | Date | |
---|---|---|---|
|
a1ab186c6e | ||
451b2994fe | |||
60ac7cccc9 | |||
77484db3a4 | |||
10e85eb910 | |||
46ce26ded2 | |||
99e163dd82 | |||
b2b66a6fa7 | |||
6ed6ce1317 | |||
d0edf57d46 | |||
55189a57f8 | |||
da0cad8af7 | |||
4901df3c95 | |||
c2c28d5e2a | |||
ddfec19a2b | |||
a3a271b21f | |||
a110849017 | |||
23eb8437f4 | |||
d77ba194d4 | |||
a6073f034d | |||
2de5aaeeff | |||
a3f7816526 | |||
918bb6e8bb | |||
|
b4c29033c9 | ||
fd5ca024e6 | |||
336ce1c8db | |||
8196401ab8 | |||
c624fef6f3 | |||
9836d04755 | |||
ee13c9f46a | |||
ea2069d30e | |||
1624147edc | |||
f208b6312d | |||
ae8c3f8eba | |||
729e344fc8 | |||
8e59006dc8 | |||
284eb28d6c | |||
901fb492c1 | |||
13a6891758 | |||
dab09dfd32 | |||
ebdf4427d3 | |||
4a9e24b2f2 | |||
aa9f63cb3f | |||
115c85ce40 | |||
00bad47eed | |||
c23219729c | |||
07d4778ffb | |||
d82008a256 | |||
e02a31343a | |||
36427dada6 | |||
b6d93e76d3 | |||
812bb323f6 | |||
d18f9b4251 | |||
574d6cc65c | |||
b1440d887d | |||
2f97407591 | |||
c7cb79422b | |||
c23bd322f7 | |||
18aed0219b | |||
f1e7172fe1 | |||
|
74702c6ada | ||
|
d37c1d2312 | ||
be96530e20 | |||
|
535204298e | ||
657f7cee6e | |||
95e70da3a6 | |||
e07ad71d11 | |||
|
9cf3c953f1 | ||
|
4a1fc02e82 | ||
2b6de659cb | |||
|
aa7f6cd060 | ||
|
fb610ffa59 | ||
|
fea78bdf54 | ||
|
d6a66860af | ||
|
6d850f23a5 | ||
|
2c1af0861f | ||
|
d2ae721235 | ||
|
01db55cee5 | ||
|
4ba2b5179e | ||
|
a5092c0df6 | ||
|
575c098bae | ||
|
cddd59b578 | ||
|
7a4b1e0ce1 | ||
|
0216fa08ec | ||
|
ca3e807d35 | ||
|
ca38bb2390 | ||
|
7d07c52d09 | ||
|
532013a032 | ||
|
a52622669f | ||
|
ce5e668681 | ||
|
6530fa914b | ||
|
86eb0e1617 | ||
|
93fb9b36ce | ||
|
09e3505ea1 | ||
|
cecbfc1676 | ||
|
fba6f6a4cf | ||
|
6053456af1 | ||
|
cc2f75b2f9 | ||
|
b6ef71c92e | ||
|
876da2fbc6 | ||
|
ea45ca57a5 | ||
|
6fa3ebfa75 | ||
|
efe6fb6dfb | ||
|
1aeb2baa91 | ||
|
e4d6425846 | ||
|
81f885795d | ||
|
f3e29bc2cc | ||
|
3a72f7b84b | ||
|
20bd4560f8 | ||
|
8991b9fe54 | ||
|
aea6c5dd1d | ||
|
da41caca66 | ||
|
103af98864 | ||
|
26606b0520 | ||
|
706844e8bf | ||
|
a56274c230 | ||
|
3512226867 | ||
|
d5b9fee6fe | ||
|
437860feff |
14
.luacheckrc
@ -3,25 +3,19 @@ allow_defined_top = true
|
|||||||
|
|
||||||
read_globals = {
|
read_globals = {
|
||||||
"DIR_DELIM",
|
"DIR_DELIM",
|
||||||
"minetest",
|
"minetest", "core",
|
||||||
"dump",
|
"dump",
|
||||||
"vector",
|
"vector",
|
||||||
"VoxelManip", "VoxelArea",
|
"VoxelManip", "VoxelArea",
|
||||||
"PseudoRandom", "PcgRandom",
|
"PseudoRandom", "ItemStack",
|
||||||
"ItemStack",
|
|
||||||
"Settings",
|
"Settings",
|
||||||
"unpack",
|
"unpack",
|
||||||
-- Silence errors about custom table methods.
|
-- Silence "accessing undefined field copy of global table".
|
||||||
table = { fields = { "copy", "indexof" } },
|
table = { fields = { "copy" } }
|
||||||
-- Silence warnings about accessing undefined fields of global 'math'
|
|
||||||
math = { fields = { "sign" } }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Overwrites minetest.handle_node_drops
|
-- Overwrites minetest.handle_node_drops
|
||||||
files["mods/creative/init.lua"].globals = { "minetest" }
|
files["mods/creative/init.lua"].globals = { "minetest" }
|
||||||
|
|
||||||
-- Overwrites minetest.calculate_knockback
|
|
||||||
files["mods/player_api/api.lua"].globals = { "minetest" }
|
|
||||||
|
|
||||||
-- Don't report on legacy definitions of globals.
|
-- Don't report on legacy definitions of globals.
|
||||||
files["mods/default/legacy.lua"].global = false
|
files["mods/default/legacy.lua"].global = false
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
language: generic
|
language: generic
|
||||||
|
sudo: false
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- luarocks
|
- luarocks
|
||||||
before_install:
|
before_install:
|
||||||
- luarocks install --local luacheck
|
- luarocks install --local luacheck
|
||||||
script:
|
script:
|
||||||
- $HOME/.luarocks/bin/luacheck ./mods
|
- $HOME/.luarocks/bin/luacheck --no-color ./mods
|
||||||
notifications:
|
notifications:
|
||||||
email: false
|
email: false
|
||||||
|
32
README.md
@ -1,20 +1,20 @@
|
|||||||
Minetest5 Game
|
Minetest4 Game
|
||||||
==============
|
==============
|
||||||
|
|
||||||
The default game for the Minetest5 engine.
|
The default game for the Minetest4 engine.
|
||||||
|
|
||||||
This is a fork from minetest default game, this
|
This is a fork from minetest default game, this
|
||||||
are made from minenux project https://codeberg.org/minenux
|
are made from minenux project https://codeberg.org/minenux
|
||||||
for minetest v5 and minetest v4 or 0.4.
|
for minetest v4 and minetest v5 or 5.X releases.
|
||||||
|
|
||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
This is the branch `stable-5.2` of minetest game for minetest5 a version
|
This is the branch `stable-4.0` of minetest game for minetest4 a version
|
||||||
that is focused in v5 of minetest but mainly in 5.2 release. There's
|
that is focused in v4 of minetest but mainly in 0.4 release. There's
|
||||||
also a minetest4 game version too in `stable-4.0` branch.
|
also a minetest5 game version too in `stable-5.2` branch.
|
||||||
|
|
||||||
This are focused to provide minimal default game featured for minetest5
|
This are focused to provide minimal default game featured for minetest4
|
||||||
to be playable, with an [api](game_api.md) for more aditions (in the form of mods)
|
to be playable, with an [api](game_api.md) for more aditions (in the form of mods)
|
||||||
|
|
||||||
For further information, check the [Minetest Wiki](https://wiki.minetest.org/index.php?title=Games/Minetest_Game)
|
For further information, check the [Minetest Wiki](https://wiki.minetest.org/index.php?title=Games/Minetest_Game)
|
||||||
@ -22,25 +22,25 @@ For further information, check the [Minetest Wiki](https://wiki.minetest.org/ind
|
|||||||
## Download
|
## Download
|
||||||
|
|
||||||
Can be obtained from https://codeberg.org/minenux/minetest-game-minetest/tags
|
Can be obtained from https://codeberg.org/minenux/minetest-game-minetest/tags
|
||||||
those like 5.2.X by example https://codeberg.org/minenux/minetest-game-minetest/releases/tag/5.2.1
|
those like 4.0.17 by example https://codeberg.org/minenux/minetest-game-minetest/releases/tag/4.0.17
|
||||||
|
|
||||||
It will download a tar.gz file, uncompress the content and a directory will be created,
|
It will download a tar.gz file, uncompress the content and a directory will be created,
|
||||||
the name of the directory does not matter, the contents will be used later to install.
|
the name of the directory does not matter, the contents will be used later to install.
|
||||||
|
|
||||||
When stable releases are made, Minetest Game and the Minetest engine is packaged
|
When stable releases are made, Minetest Game and the Minetest engine is packaged
|
||||||
and made available at https://codeberg.org/minenux/minetest-engine/archive/stable-5.2.tar.gz
|
and made available at https://codeberg.org/minenux/minetest-engine/archive/stable-4.0.tar.gz
|
||||||
or generally at https://codeberg.org/minenux/minetest-engine/releases/tag/5.2.1 by example.
|
or generally at https://codeberg.org/minenux/minetest-engine/releases/tag/4.0.17 by example.
|
||||||
|
|
||||||
This have a mirror at https://git.minetest.org/minenux/minetest-game-minetest/releases
|
This have a mirror at https://git.minetest.org/minenux/minetest-game-minetest/releases
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
This game can be used in any version from 5.0 to 5.2, it may work with recents versions
|
This game can be used in any version from 0.4.15 to 5.1, it may work with recent version but with issues
|
||||||
|
|
||||||
After download, rename the directory decompressed to `minetest_game` and put to the "games" directory:
|
After download, rename the directory decompressed to `minetest_game` and put to the "games" directory:
|
||||||
|
|
||||||
- GNU/Linux: If you use a system-wide installation place
|
- GNU/Linux: If you use a system-wide installation place
|
||||||
it in ~/.minetest5/games/.
|
it in ~/.minetest4/games/.
|
||||||
- Others: `minetest/games/` or `games` directory from the path were the binary are.
|
- Others: `minetest/games/` or `games` directory from the path were the binary are.
|
||||||
|
|
||||||
For further information or help, see: https://wiki.minetest.net/Installing_Mods
|
For further information or help, see: https://wiki.minetest.net/Installing_Mods
|
||||||
@ -52,12 +52,12 @@ For more information check [mods/README.md](mods/README.md)
|
|||||||
|
|
||||||
## Compatibility
|
## Compatibility
|
||||||
|
|
||||||
This source code and files are focused in most newer minetest5 engine
|
This source code and files are focused in most olders minetest4 engine or 0.4.X ones
|
||||||
from https://codeberg.org/minenux/minetest-engine/src/branch/stable-5.2
|
from https://codeberg.org/minenux/minetest-engine/src/branch/stable-4.0
|
||||||
|
|
||||||
For minetest4 check https://codeberg.org/minenux/minetest-engine/src/branch/stable-4.0
|
For minetest5 check https://codeberg.org/minenux/minetest-engine/src/branch/stable-5.2
|
||||||
|
|
||||||
## Licensing
|
## Licensing
|
||||||
|
|
||||||
See `LICENSE.txt` original autor fo first set of mods game was Blockmen
|
See `LICENSE.txt`, Blockmen was the original and fisrt person to provide this set game.
|
||||||
|
|
||||||
|
85
README.txt
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
Minetest4 Game
|
||||||
|
==============
|
||||||
|
|
||||||
|
The default game for the Minetest4 engine.
|
||||||
|
|
||||||
|
This is a fork from minetest default game, this
|
||||||
|
are made from minenux project https://codeberg.org/minenux
|
||||||
|
for minetest v5 and minetest v4 or 0.4.
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
This is the branch `stable-4.0` of minetest game for minetest4 a version
|
||||||
|
that is focused in v5 of minetest but mainly in 4.0 release. There's
|
||||||
|
also a minetest4 game version too in `stable-4.0` branch.
|
||||||
|
|
||||||
|
This are focused to provide minimal default game featured for minetest4
|
||||||
|
to be playable, with an [api](game_api.md) for more aditions (in the form of mods)
|
||||||
|
|
||||||
|
For further information, check the [Minetest Wiki](https://wiki.minetest.net/Subgames/Minetest_Game)
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
Can be obtained from https://codeberg.org/minenux/minetest-game-minetest/tags
|
||||||
|
those like 4.0.X by example https://codeberg.org/minenux/minetest-game-minetest/releases/tag/4.0.17
|
||||||
|
|
||||||
|
It will download a tar.gz file, uncompress the content and a directory will be created,
|
||||||
|
the name of the directory does not matter, the contents will be used later to install.
|
||||||
|
|
||||||
|
When stable releases are made, Minetest Game and the Minetest engine is packaged
|
||||||
|
and made available at https://codeberg.org/minenux/minetest-engine/archive/stable-4.0.tar.gz
|
||||||
|
or generally at https://codeberg.org/minenux/minetest-engine/releases/tag/4.0.17 by example.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This game can be used in any version from 5.0 to 4.0, it may work with 5.3 but not with 5.5
|
||||||
|
|
||||||
|
After download, rename the directory decompressed to `minetest_game` and put to the "games" directory:
|
||||||
|
|
||||||
|
- GNU/Linux: If you use a system-wide installation place
|
||||||
|
it in ~/.minetest4/games/.
|
||||||
|
- Others: `minetest/games/` or `games` directory from the path were the binary are.
|
||||||
|
|
||||||
|
For further information or help, see: https://wiki.minetest.net/Installing_Mods
|
||||||
|
|
||||||
|
## Content
|
||||||
|
|
||||||
|
* api
|
||||||
|
* beds
|
||||||
|
* bucket
|
||||||
|
* bones
|
||||||
|
* boats
|
||||||
|
* creative
|
||||||
|
* default
|
||||||
|
* doors
|
||||||
|
* farming
|
||||||
|
* fire
|
||||||
|
* give_initial_stuff
|
||||||
|
* stairs
|
||||||
|
* carts
|
||||||
|
* dye
|
||||||
|
* flowers
|
||||||
|
* screwdriver
|
||||||
|
* tnt
|
||||||
|
* xpanes
|
||||||
|
* sfinv
|
||||||
|
* vessels
|
||||||
|
* walls
|
||||||
|
* wool
|
||||||
|
|
||||||
|
The default mod provides sethome and player_api call ones, binoculars from v5 are
|
||||||
|
just separate privilegies for zoom, butterflies and fireflies from v5 can be set
|
||||||
|
by dmobs or mobs_doomed mod, the spawn mod is just minimal spawn management
|
||||||
|
pooly provided and better managed by mods like rspawn and spawnrandom.
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
|
||||||
|
This source code and files are only compatible with matched minetest4 engine
|
||||||
|
from https://codeberg.org/minenux/minetest-engine/src/branch/stable-4.0
|
||||||
|
Additionally, when the Minetest4 engine is tagged to be a certain version (e.g.
|
||||||
|
4.0.17), Minetest Game is tagged with the version 4.0.17 too.
|
||||||
|
|
||||||
|
## Licensing
|
||||||
|
|
||||||
|
See `LICENSE.txt`
|
11
game.conf
@ -1,5 +1,6 @@
|
|||||||
title = Minetest5
|
name = Minetest4
|
||||||
name = Minetest5
|
title = Minetest4
|
||||||
author = Minetest
|
author = Blockmen
|
||||||
description = GAME set for MinenuX Bundled by default with Minetest5
|
description = MinenuX game bundled default with Minetest4
|
||||||
min_minetest_version = 5.0
|
min_minetest_version = 0.4.15
|
||||||
|
max_minetest_version = 5.1
|
744
game_api.md
744
game_api.txt
@ -1,21 +1,18 @@
|
|||||||
# This file contains settings of Minetest Game that can be changed in
|
# This file contains settings of Minetest Game that can be changed in minetest.conf
|
||||||
# minetest.conf.
|
|
||||||
# By default, all the settings are commented and not functional.
|
# By default, all the settings are commented and not functional.
|
||||||
# Uncomment settings by removing the preceding #.
|
# Uncomment settings by removing the preceding #.
|
||||||
|
|
||||||
# Whether creative mode (fast digging of all blocks, unlimited resources) should
|
# Whether creative mode (fast digging of all blocks, unlimited resources) should be enabled
|
||||||
# be enabled.
|
|
||||||
#creative_mode = false
|
#creative_mode = false
|
||||||
|
|
||||||
# Sets the behaviour of the inventory items when a player dies.
|
# Sets the behaviour of the inventory items when a player dies.
|
||||||
# bones: Store items in a bone node but drop items if inside protected area.
|
# "bones": Store all items inside a bone node but drop items if inside protected area
|
||||||
# drop: Drop items on the ground.
|
# "drop": Drop all items on the ground
|
||||||
# keep: Player keeps items.
|
# "keep": Player keeps all items
|
||||||
#bones_mode = bones
|
#bones_mode = "bones"
|
||||||
|
|
||||||
# The time in seconds after which the bones of a dead player can be looted by
|
# The time in seconds after which the bones of a dead player can be looted by everyone
|
||||||
# everyone.
|
# 0 to disable
|
||||||
# 0 to disable.
|
|
||||||
#share_bones_time = 1200
|
#share_bones_time = 1200
|
||||||
|
|
||||||
# How much earlier the bones of a dead player can be looted by
|
# How much earlier the bones of a dead player can be looted by
|
||||||
@ -23,12 +20,8 @@
|
|||||||
# 0 to disable. By default it is "share_bones_time" divide by four.
|
# 0 to disable. By default it is "share_bones_time" divide by four.
|
||||||
#share_bones_time_early = 300
|
#share_bones_time_early = 300
|
||||||
|
|
||||||
# Inform player of condition and location of new bones.
|
# Whether fire should be enabled. If disabled, 'basic flame' nodes will disappear.
|
||||||
#bones_position_message = false
|
# 'permanent flame' nodes will remain with either setting.
|
||||||
|
|
||||||
# Whether fire should be enabled. If disabled, 'basic_flame' nodes will
|
|
||||||
# disappear.
|
|
||||||
# 'permanent_flame' nodes will remain with either setting.
|
|
||||||
#enable_fire = true
|
#enable_fire = true
|
||||||
|
|
||||||
# Enable flame sound.
|
# Enable flame sound.
|
||||||
@ -37,43 +30,27 @@
|
|||||||
# Whether lavacooling should be enabled.
|
# Whether lavacooling should be enabled.
|
||||||
#enable_lavacooling = true
|
#enable_lavacooling = true
|
||||||
|
|
||||||
# Whether the stuff in initial_stuff should be given to new players.
|
# Whether the stuff in initial_stuff should be given to new players
|
||||||
# its depends of the configured at the initital_stuff_mod
|
# its depends of the configured at the initital_stuff_mod
|
||||||
#give_initial_stuff = true
|
#give_initial_stuff = true
|
||||||
|
|
||||||
# What initial stuff will be given to player if initial stuff are set to true
|
# What initial stuff will be given to player if initial stuff are set to true
|
||||||
#initial_stuff = default:wood,farming:bread,default:furnace,default:torch
|
#initial_stuff = default:wood,farming:bread,default:furnace,default:torch
|
||||||
|
|
||||||
# Whether the TNT mod should be enabled.
|
# Whether the TNT mod should be enabled
|
||||||
#enable_tnt = <true in singleplayer, false in multiplayer>
|
#enable_tnt = <true in singleplayer, false in multiplayer>
|
||||||
|
|
||||||
# The radius of a TNT explosion.
|
# The radius of a TNT explosion
|
||||||
#tnt_radius = 3
|
#tnt_radius = 3
|
||||||
|
|
||||||
# Enable the stairs mod ABM that replaces the old 'upside down'
|
# Enable the stairs mod ABM that replaces the old 'upside down'
|
||||||
# stair and slab nodes in old maps with the new param2 versions.
|
# stair and slab nodes in old maps with the new param2 versions.
|
||||||
#enable_stairs_replace_abm = false
|
#enable_stairs_replace_abm = false
|
||||||
|
|
||||||
# Whether to allow respawning in beds.
|
# Whether you allow respawning in beds
|
||||||
# Default value is true.
|
# Default value is true
|
||||||
#enable_bed_respawn = true
|
#enable_bed_respawn = true
|
||||||
|
|
||||||
# Whether players can skip night by sleeping.
|
# Whether players can skip night by sleeping
|
||||||
# Default value is true.
|
# Default value is true
|
||||||
#enable_bed_night_skip = true
|
#enable_bed_night_skip = true
|
||||||
|
|
||||||
# If enabled, fences and walls cannot be jumped over.
|
|
||||||
#enable_fence_tall = false
|
|
||||||
|
|
||||||
# Whether the engine's spawn search, which does not check for a suitable
|
|
||||||
# starting biome, is used.
|
|
||||||
# Default value is false.
|
|
||||||
#engine_spawn = false
|
|
||||||
|
|
||||||
# Whether river water source nodes create flowing sounds.
|
|
||||||
# Helps rivers create more sound, especially on level sections.
|
|
||||||
#river_source_sounds = false
|
|
||||||
|
|
||||||
# Enable cloud variation by the 'weather' mod.
|
|
||||||
# Non-functional in V6 or Singlenode mapgens.
|
|
||||||
#enable_weather = true
|
|
||||||
|
@ -5,56 +5,50 @@ For information check [../README.md](../README.md)
|
|||||||
|
|
||||||
## Content
|
## Content
|
||||||
|
|
||||||
|
Most of those mods have mirror at http://git.mirror.org
|
||||||
|
|
||||||
| mod name | origin or work | version | info |
|
| mod name | origin or work | version | info |
|
||||||
| ------------------ | --------------------------------------------------- | -------- | --- |
|
| ------------------ | --------------------------------------------------- | -------- | --- |
|
||||||
| api | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | [api](../game_api.md) |
|
| api | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | [api](../game_api.md) |
|
||||||
| beds | https://codeberg.org/minenux/minetest-mod-beds | https://codeberg.org/minenux/minetest-mod-beds/commit/a1aac5940c88106b901c00409d7dac942720dd5b | [beds/README.md](beds/README.md) |
|
| beds | https://codeberg.org/minenux/minetest-mod-beds | https://codeberg.org/minenux/minetest-mod-beds/commit/7b6fae96d5e273dad9a373e63eb958145c9bfbef | [beds/README.md](beds/README.md) |
|
||||||
| boats | https://codeberg.org/minenux/minetest-mod-boats | https://codeberg.org/minenux/minetest-mod-boats/commit/e412ae84db3c443618b117fb35ae69e3c9bbae10 | [boats/README.md](boats/README.md) |
|
| boats | https://codeberg.org/minenux/minetest-mod-boats | https://codeberg.org/minenux/minetest-mod-boats/commit/3832de08f705d5d2e7b5a971760e5fad1653305f | [boats/README.md](boats/README.md) |
|
||||||
| bucket | https://codeberg.org/minenux/minetest-mod-bucket.git | https://codeberg.org/minenux/minetest-mod-bucket/commit/1d9f32295aba3ef2a86be302050f34c1766e93d5 | [bucket/README.md](bucket/README.md) |
|
| bucket | https://codeberg.org/minenux/minetest-mod-bucket.git | https://codeberg.org/minenux/minetest-mod-bucket/commit/1d9f32295aba3ef2a86be302050f34c1766e93d5 | [bucket/README.md](bucket/README.md) |
|
||||||
| butterflies | https://codeberg.org/minenux/minetest-mod-bucket.git | https://codeberg.org/minenux/minetest-mod-bucket/commit/1d9f32295aba3ef2a86be302050f34c1766e93d5 | [bucket/README.md](bucket/README.md) |
|
| bones | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| bones | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| binoculars | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| carts | https://codeberg.org/minenux/minetest-mod-carts | https://codeberg.org/minenux/minetest-mod-carts/commit/dcbca916cffdcec281f0129ef350db2686bda933 | [carts/README.md](carts/README.md) |
|
| carts | https://codeberg.org/minenux/minetest-mod-carts | https://codeberg.org/minenux/minetest-mod-carts/commit/dcbca916cffdcec281f0129ef350db2686bda933 | [carts/README.md](carts/README.md) |
|
||||||
| creative | https://codeberg.org/minenux/minetest-mod-creative | https://codeberg.org/minenux/minetest-mod-creative/commit/ca09e773701f834fec7de18bf13598b3323778db | [creative/README.md](creative/README.md) |
|
| creative | https://codeberg.org/minenux/minetest-mod-creative | https://codeberg.org/minenux/minetest-mod-creative/commit/ca09e773701f834fec7de18bf13598b3323778db | [creative/README.md](creative/README.md) |
|
||||||
| default | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| default | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| player_api | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| env_sounds | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| game_commands | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| spawn | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| doors | https://codeberg.org/minenux/minetest-mod-doors | https://codeberg.org/minenux/minetest-mod-doors/commit/a89ab0454deb4933b6e4971c57055c40b7938e5b | [doors/README.md](doors/README.md) |
|
| doors | https://codeberg.org/minenux/minetest-mod-doors | https://codeberg.org/minenux/minetest-mod-doors/commit/a89ab0454deb4933b6e4971c57055c40b7938e5b | [doors/README.md](doors/README.md) |
|
||||||
| dungeon_loot | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| dye | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| dye | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| farming | https://codeberg.org/minenux/minetest-mod-farming | https://codeberg.org/minenux/minetest-mod-farming/commit/08c3a9b37bab5d8a0f5971b168aef412db5fc424 | [farming/README.md](farming/README.md) |
|
| farming | https://codeberg.org/minenux/minetest-mod-farming | https://codeberg.org/minenux/minetest-mod-farming/commit/08c3a9b37bab5d8a0f5971b168aef412db5fc424 | [farming/README.md](farming/README.md) |
|
||||||
| fire | https://codeberg.org/minenux/minetest-mod-fire | https://codeberg.org/minenux/minetest-mod-fire/commit/4e5f7ad55314bd9b126fb133cfc5a32fa58b20d2 | [fire/README.md](fire/README.md) |
|
| fire | https://codeberg.org/minenux/minetest-mod-fire | https://codeberg.org/minenux/minetest-mod-fire/commit/4e5f7ad55314bd9b126fb133cfc5a32fa58b20d2 | [fire/README.md](fire/README.md) |
|
||||||
| fireflies | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/fc4ab2538d432a20978ee3bbd1b69a42446e9132 | [fireflies/README.md](fireflies/README.md) |
|
| fireflies | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/ee13c9f46ad23972dfd52e74104b265d81bd50b8 | [fireflies/README.md](fireflies/README.md) |
|
||||||
| flowers | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| flowers | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| hudbars | https://codeberg.org/minenux/minetest-mod-hudbars | https://codeberg.org/minenux/minetest-mod-hudbars/commit/e3db263828cb96f06d848e6dc80d90f21c7f92a0 | [hudbars/README.md](hudbars/README.md) |
|
| hudbars | https://codeberg.org/minenux/minetest-mod-hudbars | https://codeberg.org/minenux/minetest-mod-hudbars/commit/1a86b2a773030bd26d6fac2c3b9f6df6d23916ed | [hudbars/README.md](hudbars/README.md) |
|
||||||
| give_initial_stuff | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/ee86fb1c41e7d8d2a1d94764dd64808bc8ff5999 | [give_initial_stuff/README.md](give_initial_stuff/README.md) |
|
| give_initial_stuff | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| killme | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| killme | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| sfinv | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| sfinv | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| stairs | https://codeberg.org/minenux/minetest-mod-stairs | https://codeberg.org/minenux/minetest-mod-stairs/commit/c3a5af6c452daca599d226df694df1b75f15c110 | [stairs/README.md](stairs/README.md) |
|
| stairs | https://codeberg.org/minenux/minetest-mod-stairs | https://codeberg.org/minenux/minetest-mod-stairs/commit/c3a5af6c452daca599d226df694df1b75f15c110 | [stairs/README.md](stairs/README.md) |
|
||||||
| screwdriver | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| screwdriver | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| sethome | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/8e59006dc81ebe6785380158e57ba126cb3a4163 | |
|
| sethome | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/8e59006dc81ebe6785380158e57ba126cb3a4163 | |
|
||||||
| tnt | https://codeberg.org/minenux/minetest-mod-tnt | https://codeberg.org/minenux/minetest-mod-tnt/commit/8195861f905a90b53cd52348deb34df41a053027 | [tnt/README.md](tnt/README.md) |
|
| tnt | https://codeberg.org/minenux/minetest-mod-tnt | https://codeberg.org/minenux/minetest-mod-tnt/commit/8195861f905a90b53cd52348deb34df41a053027 | [tnt/README.md](tnt/README.md) |
|
||||||
| toolranks | https://codeberg.org/minenux/minetest-mod-toolranks | https://codeberg.org/minenux/minetest-mod-toolranks/commit/5c9553e5ac6cc7ae375033b76ef7771a6935c771 | [toolranks/README.md](toolranks/README.md) |
|
| toolranks | https://codeberg.org/minenux/minetest-mod-toolranks | https://codeberg.org/minenux/minetest-mod-toolranks/commit/5c9553e5ac6cc7ae375033b76ef7771a6935c771 | [toolranks/README.md](toolranks/README.md) |
|
||||||
| vessels | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| vessels | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| walls | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| walls | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| weather | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
|
||||||
| wool | https://codeberg.org/minenux/minetest-mod-wool | https://codeberg.org/minenux/minetest-mod-wool/commit/de642a08e80bfd7a4a1e5629e50458a609dbda3a | [wool/README.md](wool/README.md) |
|
| wool | https://codeberg.org/minenux/minetest-mod-wool | https://codeberg.org/minenux/minetest-mod-wool/commit/de642a08e80bfd7a4a1e5629e50458a609dbda3a | [wool/README.md](wool/README.md) |
|
||||||
| xpanes | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/eb64ff94f82d726e4a55b20fa7ce30e4a7470cc5 | |
|
| xpanes | https://codeberg.org/minenux/minetest-game-minetest | https://codeberg.org/minenux/minetest-game-minetest/commit/c7cb79422ba19c696966472942db6177c934838d | |
|
||||||
| xdecor | https://codeberg.org/minenux/minetest-game-xdecor | https://codeberg.org/minenux/minetest-game-xdecor/commit/cd0c35b8c58153f7c353b5dbfac35e524fa0ea18 | [xdecor/README.md](xdecor/README.md) |
|
| xdecor | https://codeberg.org/minenux/minetest-game-xdecor | https://codeberg.org/minenux/minetest-game-xdecor/commit/cd0c35b8c58153f7c353b5dbfac35e524fa0ea18 | [xdecor/README.md](xdecor/README.md) |
|
||||||
|
|
||||||
The default mod was splitted now sethome and player_api are mods, binoculars from v5 are
|
The default mod provides sethome and player_api call ones, binoculars from v5 are
|
||||||
just separate privilegies for zoom, butterflies and fireflies from v5 can be set
|
just separate privilegies for zoom, butterflies and fireflies from v5 can be set
|
||||||
by dmobs or mobs_doomed mod, the spawn mod is just minimal spawn management
|
by dmobs or mobs_doomed mod, the spawn mod is just minimal spawn management
|
||||||
pooly provided and better managed by mods like rspawn and spawnrandom.
|
pooly provided and better managed by mods like rspawn and spawnrandom.
|
||||||
|
|
||||||
## Compatibility
|
## Compatibility
|
||||||
|
|
||||||
This source code and files are focused in most newer minetest5 engine
|
This source code and files are focused in most olders minetest4 engine or 0.4.X ones
|
||||||
from https://codeberg.org/minenux/minetest-engine/src/branch/stable-5.2
|
from https://codeberg.org/minenux/minetest-engine/src/branch/stable-4.0
|
||||||
|
|
||||||
For minetest4 check https://codeberg.org/minenux/minetest-engine/src/branch/stable-4.0
|
For minetest5 check https://codeberg.org/minenux/minetest-engine/src/branch/stable-5.2
|
||||||
|
|
||||||
## Licensing
|
## Licensing
|
||||||
|
|
||||||
|
@ -1,10 +1,3 @@
|
|||||||
NEXT
|
|
||||||
----
|
|
||||||
|
|
||||||
- add more beds as fuel, add mini-game respawn flag.
|
|
||||||
- add new white simple bed, change red bed recipes to use red wool, add my own screenshot
|
|
||||||
- older engine detection and intlib
|
|
||||||
|
|
||||||
1.0.1 beta
|
1.0.1 beta
|
||||||
----------
|
----------
|
||||||
- Add backwards compatibility with PilzAdam's beds mod
|
- Add backwards compatibility with PilzAdam's beds mod
|
||||||
|
@ -6,37 +6,37 @@ This mod improves beds which allows sleep, featured to (auto) skip the night.
|
|||||||
Information
|
Information
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
This mod is named `beds` to sleep, by rightclick the bed. It featured
|
This mod is named `beds` to sleep, by rightclick the bed. It featured
|
||||||
in singleplayer mode that the night gets skipped immediately. If playing
|
in singleplayer mode that the night gets skipped immediately. If playing
|
||||||
in multiplayer you get shown how many other players are in bed too,
|
in multiplayer you get shown how many other players are in bed too,
|
||||||
if all players are sleeping the night gets skipped.
|
if all players are sleeping the night gets skipped.
|
||||||
|
|
||||||
![screenshot.jpg](screenshot.jpg)
|
![screenshot.jpg](screenshot.jpg)
|
||||||
|
|
||||||
Tech information
|
Tech information
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
This mod sustitute default one, you must disable the default of minetest
|
This mod sustitute default one, you must disable the default of minetest
|
||||||
game if present or override it.
|
game if present or override it.
|
||||||
|
|
||||||
#### Features
|
#### Features
|
||||||
|
|
||||||
* Night Skypping:
|
* Night Skypping:
|
||||||
|
|
||||||
This mod auto featured night skip in singleplayer, in multiplayer it skipped
|
This mod auto featured night skip in singleplayer, in multiplayer it skipped
|
||||||
if more than a set percentage (default 50%) of the players are lying
|
if more than a set percentage (default 50%) of the players are lying
|
||||||
in bed and use this option. Check configuration section for more info.
|
in bed and use this option. Check configuration section for more info.
|
||||||
|
|
||||||
* Controlled respawning:
|
* Controlled respawning:
|
||||||
|
|
||||||
If you have slept in bed (not just lying in it) your respawn point
|
If you have slept in bed (not just lying in it) your respawn point
|
||||||
is set to the beds location and you will respawn there after
|
is set to the beds location and you will respawn there after
|
||||||
death. Check configuration section for more info.
|
death. Check configuration section for more info.
|
||||||
|
|
||||||
* More beds:
|
* More beds:
|
||||||
|
|
||||||
It features more beds, so along with the Red simple bed we now have White and
|
It features two more beds, the "Blue Simple Bed" like the "Simple Bed"
|
||||||
Blue, and the fance beds has the original Red and now Pink.
|
but in blue, and the "Pink Fancy Bed" like the "Fancy Bed" but in pink.
|
||||||
|
|
||||||
#### Dependencies
|
#### Dependencies
|
||||||
|
|
||||||
@ -48,13 +48,13 @@ Optional dependences:
|
|||||||
* intllib (only for older engines)
|
* intllib (only for older engines)
|
||||||
* pova (optional)
|
* pova (optional)
|
||||||
|
|
||||||
The pova mod are not xplicit set as optional depends, due the circular depends bug,
|
The pova mod are not xplicit set as optional depends, due the circular depends bug,
|
||||||
its detected and used.
|
its detected and used.
|
||||||
|
|
||||||
#### Configuration
|
#### Configuration
|
||||||
|
|
||||||
| Configuration | type | default | place file | Notes about |
|
| Configuration | type | default | place file | Notes about |
|
||||||
| --------------------- | ----- | ------- | ------------ | ----------------------------------------- |
|
| --------------------- | ----- | ------- | ------------ | ----------------------------------------- |
|
||||||
| enable_bed_respawn | bool | true | minetest.conf | Enable respawn point set to last sleep bed |
|
| enable_bed_respawn | bool | true | minetest.conf | Enable respawn point set to last sleep bed |
|
||||||
| enable_bed_night_skip | bool | false | minetest.conf | You can disable the night skip feature |
|
| enable_bed_night_skip | bool | false | minetest.conf | You can disable the night skip feature |
|
||||||
| bed_sleep_divide | int | 2 | minetest.conf | Division of players needed to skip night |
|
| bed_sleep_divide | int | 2 | minetest.conf | Division of players needed to skip night |
|
||||||
@ -77,14 +77,6 @@ Crafting are same as original default mod, but colored uses a white plus the oth
|
|||||||
| beds:bed_top_red | beds:bed_top |
|
| beds:bed_top_red | beds:bed_top |
|
||||||
| beds:bed_bottom_red | beds:bed_bottom |
|
| beds:bed_bottom_red | beds:bed_bottom |
|
||||||
|
|
||||||
#### Mini-Game Support
|
|
||||||
|
|
||||||
If enable_bed_respawn is set to true and a player dies when playing a mini-game then this
|
|
||||||
can interrupt the game, so a special beds.respawn[player_name] flag has been added which
|
|
||||||
is set to 'true' by default to always respawn player at their bed, but can be set to
|
|
||||||
'false' during a mini-game to stop this behaviour.
|
|
||||||
|
|
||||||
|
|
||||||
License
|
License
|
||||||
------
|
------
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ local S = beds.get_translator
|
|||||||
-- Fancy shaped bed
|
-- Fancy shaped bed
|
||||||
|
|
||||||
beds.register_bed("beds:fancy_bed", {
|
beds.register_bed("beds:fancy_bed", {
|
||||||
description = S("Red Fancy Bed"),
|
description = S("Fancy Bed"),
|
||||||
inventory_image = "beds_bed_fancy.png",
|
inventory_image = "beds_bed_fancy.png",
|
||||||
wield_image = "beds_bed_fancy.png",
|
wield_image = "beds_bed_fancy.png",
|
||||||
tiles = {"beds_fancy_bed.png", "default_wood.png"},
|
tiles = {"beds_fancy_bed.png", "default_wood.png"},
|
||||||
@ -12,7 +12,7 @@ beds.register_bed("beds:fancy_bed", {
|
|||||||
collisionbox = {-0.5, -0.5, -0.5, 0.5, -0.06, 1.5},
|
collisionbox = {-0.5, -0.5, -0.5, 0.5, -0.06, 1.5},
|
||||||
recipe = {
|
recipe = {
|
||||||
{"", "", "group:stick"},
|
{"", "", "group:stick"},
|
||||||
{"wool:red", "wool:red", "wool:white"},
|
{"wool:white", "wool:white", "wool:white"},
|
||||||
{"group:wood", "group:wood", "group:wood"}
|
{"group:wood", "group:wood", "group:wood"}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -34,22 +34,8 @@ beds.register_bed("beds:fancy_bed_pink", {
|
|||||||
|
|
||||||
-- Simple shaped bed
|
-- Simple shaped bed
|
||||||
|
|
||||||
beds.register_bed("beds:bed_white", {
|
|
||||||
description = S("White Simple Bed"),
|
|
||||||
inventory_image = "beds_bed_white.png",
|
|
||||||
wield_image = "beds_bed_white.png",
|
|
||||||
tiles = {"beds_simple_bed_white.png"},
|
|
||||||
mesh = "beds_simple_bed.obj",
|
|
||||||
selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
|
|
||||||
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
|
|
||||||
recipe = {
|
|
||||||
{"wool:white", "wool:white", "wool:white"},
|
|
||||||
{"group:wood", "group:wood", "group:wood"}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
beds.register_bed("beds:bed", {
|
beds.register_bed("beds:bed", {
|
||||||
description = S("Red Simple Bed"),
|
description = S("Simple Bed"),
|
||||||
inventory_image = "beds_bed.png",
|
inventory_image = "beds_bed.png",
|
||||||
wield_image = "beds_bed.png",
|
wield_image = "beds_bed.png",
|
||||||
tiles = {"beds_simple_bed.png"},
|
tiles = {"beds_simple_bed.png"},
|
||||||
@ -57,7 +43,7 @@ beds.register_bed("beds:bed", {
|
|||||||
selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
|
selectionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
|
||||||
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
|
collisionbox = {-0.5, -0.5, -0.5, 0.5, 0.06, 1.5},
|
||||||
recipe = {
|
recipe = {
|
||||||
{"wool:red", "wool:red", "wool:white"},
|
{"wool:white", "wool:white", "wool:white"},
|
||||||
{"group:wood", "group:wood", "group:wood"}
|
{"group:wood", "group:wood", "group:wood"}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -89,26 +75,8 @@ minetest.register_craft({
|
|||||||
burntime = 13
|
burntime = 13
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "beds:fancy_bed_pink",
|
|
||||||
burntime = 13
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "fuel",
|
type = "fuel",
|
||||||
recipe = "beds:bed",
|
recipe = "beds:bed",
|
||||||
burntime = 12
|
burntime = 12
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "beds:bed_blue",
|
|
||||||
burntime = 12
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "beds:bed_white",
|
|
||||||
burntime = 12
|
|
||||||
})
|
|
||||||
|
@ -319,15 +319,6 @@ end
|
|||||||
-- Only register respawn callback if respawn enabled
|
-- Only register respawn callback if respawn enabled
|
||||||
if enable_respawn then
|
if enable_respawn then
|
||||||
|
|
||||||
-- set respawn flag to true by default
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
|
||||||
|
|
||||||
if not player then return end
|
|
||||||
|
|
||||||
local name = player:get_player_name()
|
|
||||||
beds.respawn[name] = true
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- respawn player at bed if enabled and valid position is found
|
-- respawn player at bed if enabled and valid position is found
|
||||||
minetest.register_on_respawnplayer(function(player)
|
minetest.register_on_respawnplayer(function(player)
|
||||||
|
|
||||||
@ -336,8 +327,7 @@ if enable_respawn then
|
|||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local pos = beds.spawn[name]
|
local pos = beds.spawn[name]
|
||||||
|
|
||||||
-- check if respawn flag is true (for mini-game support, can be set to false)
|
if pos then
|
||||||
if pos and beds.respawn[name] then
|
|
||||||
player:set_pos(pos)
|
player:set_pos(pos)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
@ -27,12 +27,10 @@ else
|
|||||||
end
|
end
|
||||||
|
|
||||||
beds = {
|
beds = {
|
||||||
mod = "redo",
|
|
||||||
player = {},
|
player = {},
|
||||||
bed_position = {},
|
bed_position = {},
|
||||||
pos = {},
|
pos = {},
|
||||||
spawn = {},
|
spawn = {},
|
||||||
respawn = {},
|
|
||||||
get_translator = S,
|
get_translator = S,
|
||||||
formspec = "size[8,11;true]"
|
formspec = "size[8,11;true]"
|
||||||
.. "no_prepend[]"
|
.. "no_prepend[]"
|
||||||
|
@ -59,7 +59,3 @@ rights may limit how you use the material.
|
|||||||
|
|
||||||
For more details:
|
For more details:
|
||||||
http://creativecommons.org/licenses/by-sa/3.0/
|
http://creativecommons.org/licenses/by-sa/3.0/
|
||||||
|
|
||||||
|
|
||||||
WTFPL license applies to bed .obj files by jp from mesh beds mod:
|
|
||||||
https://forum.minetest.net/viewtopic.php?t=11817
|
|
||||||
|
Before Width: | Height: | Size: 164 KiB After Width: | Height: | Size: 215 KiB |
@ -50,7 +50,6 @@ function beds.read_spawns()
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
-- load player spawn positions
|
|
||||||
beds.read_spawns()
|
beds.read_spawns()
|
||||||
|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 424 B |
Before Width: | Height: | Size: 1.0 KiB |
@ -1,37 +0,0 @@
|
|||||||
Minetest Game mod: binoculars
|
|
||||||
=============================
|
|
||||||
See license.txt for license information.
|
|
||||||
|
|
||||||
Authors of source code
|
|
||||||
----------------------
|
|
||||||
paramat (MIT)
|
|
||||||
|
|
||||||
Authors of media (textures)
|
|
||||||
---------------------------
|
|
||||||
paramat (CC BY-SA 3.0):
|
|
||||||
binoculars_binoculars.png
|
|
||||||
|
|
||||||
Crafting
|
|
||||||
--------
|
|
||||||
binoculars:binoculars
|
|
||||||
|
|
||||||
default:obsidian_glass O
|
|
||||||
default:bronze_ingot B
|
|
||||||
|
|
||||||
O_O
|
|
||||||
BBB
|
|
||||||
O_O
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
In survival mode, use of zoom requires the binoculars item in your inventory,
|
|
||||||
they will allow a 10 degree field of view.
|
|
||||||
It can take up to 5 seconds for adding to or removal from inventory to have an
|
|
||||||
effect, however to instantly allow the use of this zoom 'use' (leftclick) the
|
|
||||||
item.
|
|
||||||
|
|
||||||
Zoom with a field of view of 15 degrees is automatically allowed in creative
|
|
||||||
mode and for any player with the 'creative' privilege.
|
|
||||||
|
|
||||||
The 'binoculars.update_player_property()' function is global so can be
|
|
||||||
redefined by a mod for alternative behaviour.
|
|
@ -1,81 +0,0 @@
|
|||||||
-- binoculars/init.lua
|
|
||||||
|
|
||||||
-- Mod global namespace
|
|
||||||
|
|
||||||
binoculars = {}
|
|
||||||
|
|
||||||
-- Load support for MT game translation.
|
|
||||||
local S = minetest.get_translator("binoculars")
|
|
||||||
|
|
||||||
|
|
||||||
-- Detect creative mod
|
|
||||||
local creative_mod = minetest.get_modpath("creative")
|
|
||||||
-- Cache creative mode setting as fallback if creative mod not present
|
|
||||||
local creative_mode_cache = minetest.settings:get_bool("creative_mode")
|
|
||||||
|
|
||||||
|
|
||||||
-- Update player property
|
|
||||||
-- Global to allow overriding
|
|
||||||
|
|
||||||
function binoculars.update_player_property(player)
|
|
||||||
local creative_enabled =
|
|
||||||
(creative_mod and creative.is_enabled_for(player:get_player_name())) or
|
|
||||||
creative_mode_cache
|
|
||||||
local new_zoom_fov = 0
|
|
||||||
|
|
||||||
if player:get_inventory():contains_item(
|
|
||||||
"main", "binoculars:binoculars") then
|
|
||||||
new_zoom_fov = 10
|
|
||||||
elseif creative_enabled then
|
|
||||||
new_zoom_fov = 15
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Only set property if necessary to avoid player mesh reload
|
|
||||||
if player:get_properties().zoom_fov ~= new_zoom_fov then
|
|
||||||
player:set_properties({zoom_fov = new_zoom_fov})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
-- Set player property 'on joinplayer'
|
|
||||||
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
|
||||||
binoculars.update_player_property(player)
|
|
||||||
end)
|
|
||||||
|
|
||||||
|
|
||||||
-- Cyclic update of player property
|
|
||||||
|
|
||||||
local function cyclic_update()
|
|
||||||
for _, player in ipairs(minetest.get_connected_players()) do
|
|
||||||
binoculars.update_player_property(player)
|
|
||||||
end
|
|
||||||
minetest.after(4.7, cyclic_update)
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.after(4.7, cyclic_update)
|
|
||||||
|
|
||||||
|
|
||||||
-- Binoculars item
|
|
||||||
|
|
||||||
minetest.register_craftitem("binoculars:binoculars", {
|
|
||||||
description = S("Binoculars") .. "\n" .. S("Use with 'Zoom' key"),
|
|
||||||
inventory_image = "binoculars_binoculars.png",
|
|
||||||
stack_max = 1,
|
|
||||||
|
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
|
||||||
binoculars.update_player_property(user)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
-- Crafting
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "binoculars:binoculars",
|
|
||||||
recipe = {
|
|
||||||
{"default:obsidian_glass", "", "default:obsidian_glass"},
|
|
||||||
{"default:bronze_ingot", "default:bronze_ingot", "default:bronze_ingot"},
|
|
||||||
{"default:obsidian_glass", "", "default:obsidian_glass"},
|
|
||||||
}
|
|
||||||
})
|
|
@ -1,59 +0,0 @@
|
|||||||
License of source code
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
The MIT License (MIT)
|
|
||||||
Copyright (C) 2017 paramat
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
|
||||||
software and associated documentation files (the "Software"), to deal in the Software
|
|
||||||
without restriction, including without limitation the rights to use, copy, modify, merge,
|
|
||||||
publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
||||||
persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or
|
|
||||||
substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
|
||||||
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
For more details:
|
|
||||||
https://opensource.org/licenses/MIT
|
|
||||||
|
|
||||||
|
|
||||||
Licenses of media (textures)
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
|
||||||
Copyright (C) 2017 paramat
|
|
||||||
|
|
||||||
You are free to:
|
|
||||||
Share — copy and redistribute the material in any medium or format.
|
|
||||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
|
||||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
|
||||||
|
|
||||||
Under the following terms:
|
|
||||||
|
|
||||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
|
||||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
|
||||||
that suggests the licensor endorses you or your use.
|
|
||||||
|
|
||||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
|
||||||
your contributions under the same license as the original.
|
|
||||||
|
|
||||||
No additional restrictions — You may not apply legal terms or technological measures that
|
|
||||||
legally restrict others from doing anything the license permits.
|
|
||||||
|
|
||||||
Notices:
|
|
||||||
|
|
||||||
You do not have to comply with the license for elements of the material in the public
|
|
||||||
domain or where your use is permitted by an applicable exception or limitation.
|
|
||||||
No warranties are given. The license may not give you all of the permissions necessary
|
|
||||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
|
||||||
rights may limit how you use the material.
|
|
||||||
|
|
||||||
For more details:
|
|
||||||
http://creativecommons.org/licenses/by-sa/3.0/
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=Fernglas
|
|
||||||
Use with 'Zoom' key=Mit „Zoom“-Taste benutzen
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=Prismáticos
|
|
||||||
Use with 'Zoom' key=Usar con la tecla 'Zoom'
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=Jumelles
|
|
||||||
Use with 'Zoom' key=Utiliser avec le bouton « Zoom »
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=Binocolo
|
|
||||||
Use with 'Zoom' key=Usalo col tasto 'Ingrandimento'
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=Binokular
|
|
||||||
Use with 'Zoom' key=Guna dengan kekunci 'Zum'
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=Бинокль
|
|
||||||
Use with 'Zoom' key=Используется с привилегией 'Zoom'
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=Kikare
|
|
||||||
Use with 'Zoom' key=Används med 'Zoom' knappen
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=望远镜
|
|
||||||
Use with 'Zoom' key=与“缩放”键一起使用
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=望遠鏡
|
|
||||||
Use with 'Zoom' key=與“縮放”鍵一起使用
|
|
@ -1,3 +0,0 @@
|
|||||||
# textdomain: binoculars
|
|
||||||
Binoculars=
|
|
||||||
Use with 'Zoom' key=
|
|
@ -1,4 +0,0 @@
|
|||||||
name = binoculars
|
|
||||||
description = Minetest Game mod: binoculars
|
|
||||||
depends = default
|
|
||||||
optional_depends = creative
|
|
Before Width: | Height: | Size: 219 B |
@ -1,2 +1,3 @@
|
|||||||
name = boats
|
name = boats
|
||||||
depends = default, player_api, creative
|
depends = default, creative
|
||||||
|
optional_depends = player_api
|
||||||
|
1
mods/bones/depends.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
default
|
@ -1,13 +1,6 @@
|
|||||||
-- bones/init.lua
|
|
||||||
|
|
||||||
-- Minetest 0.4 mod: bones
|
-- Minetest 0.4 mod: bones
|
||||||
-- See README.txt for licensing and other information.
|
-- See README.txt for licensing and other information.
|
||||||
|
|
||||||
-- Load support for MT game translation.
|
|
||||||
local S = minetest.get_translator("bones")
|
|
||||||
|
|
||||||
bones = {}
|
|
||||||
|
|
||||||
local function is_owner(pos, name)
|
local function is_owner(pos, name)
|
||||||
local owner = minetest.get_meta(pos):get_string("owner")
|
local owner = minetest.get_meta(pos):get_string("owner")
|
||||||
if owner == "" or owner == name or minetest.check_player_privs(name, "protection_bypass") then
|
if owner == "" or owner == name or minetest.check_player_privs(name, "protection_bypass") then
|
||||||
@ -18,6 +11,9 @@ end
|
|||||||
|
|
||||||
local bones_formspec =
|
local bones_formspec =
|
||||||
"size[8,9]" ..
|
"size[8,9]" ..
|
||||||
|
default.gui_bg ..
|
||||||
|
default.gui_bg_img ..
|
||||||
|
default.gui_slots ..
|
||||||
"list[current_name;main;0,0.3;8,4;]" ..
|
"list[current_name;main;0,0.3;8,4;]" ..
|
||||||
"list[current_player;main;0,4.85;8,1;]" ..
|
"list[current_player;main;0,4.85;8,1;]" ..
|
||||||
"list[current_player;main;0,6.08;8,3;8]" ..
|
"list[current_player;main;0,6.08;8,3;8]" ..
|
||||||
@ -29,7 +25,7 @@ local share_bones_time = tonumber(minetest.settings:get("share_bones_time")) or
|
|||||||
local share_bones_time_early = tonumber(minetest.settings:get("share_bones_time_early")) or share_bones_time / 4
|
local share_bones_time_early = tonumber(minetest.settings:get("share_bones_time_early")) or share_bones_time / 4
|
||||||
|
|
||||||
minetest.register_node("bones:bones", {
|
minetest.register_node("bones:bones", {
|
||||||
description = S("Bones"),
|
description = "Bones",
|
||||||
tiles = {
|
tiles = {
|
||||||
"bones_top.png^[transform2",
|
"bones_top.png^[transform2",
|
||||||
"bones_bottom.png",
|
"bones_bottom.png",
|
||||||
@ -121,7 +117,7 @@ minetest.register_node("bones:bones", {
|
|||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local time = meta:get_int("time") + elapsed
|
local time = meta:get_int("time") + elapsed
|
||||||
if time >= share_bones_time then
|
if time >= share_bones_time then
|
||||||
meta:set_string("infotext", S("@1's old bones", meta:get_string("owner")))
|
meta:set_string("infotext", meta:get_string("owner") .. "'s old bones")
|
||||||
meta:set_string("owner", "")
|
meta:set_string("owner", "")
|
||||||
else
|
else
|
||||||
meta:set_int("time", time)
|
meta:set_int("time", time)
|
||||||
@ -161,7 +157,7 @@ end
|
|||||||
local drop = function(pos, itemstack)
|
local drop = function(pos, itemstack)
|
||||||
local obj = minetest.add_item(pos, itemstack:take_item(itemstack:get_count()))
|
local obj = minetest.add_item(pos, itemstack:take_item(itemstack:get_count()))
|
||||||
if obj then
|
if obj then
|
||||||
obj:set_velocity({
|
obj:setvelocity({
|
||||||
x = math.random(-10, 10) / 9,
|
x = math.random(-10, 10) / 9,
|
||||||
y = 5,
|
y = 5,
|
||||||
z = math.random(-10, 10) / 9,
|
z = math.random(-10, 10) / 9,
|
||||||
@ -169,18 +165,6 @@ local drop = function(pos, itemstack)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local player_inventory_lists = { "main", "craft" }
|
|
||||||
bones.player_inventory_lists = player_inventory_lists
|
|
||||||
|
|
||||||
local function is_all_empty(player_inv)
|
|
||||||
for _, list_name in ipairs(player_inventory_lists) do
|
|
||||||
if not player_inv:is_empty(list_name) then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.register_on_dieplayer(function(player)
|
minetest.register_on_dieplayer(function(player)
|
||||||
|
|
||||||
local bones_mode = minetest.settings:get("bones_mode") or "bones"
|
local bones_mode = minetest.settings:get("bones_mode") or "bones"
|
||||||
@ -188,32 +172,21 @@ minetest.register_on_dieplayer(function(player)
|
|||||||
bones_mode = "bones"
|
bones_mode = "bones"
|
||||||
end
|
end
|
||||||
|
|
||||||
local bones_position_message = minetest.settings:get_bool("bones_position_message") == true
|
|
||||||
local player_name = player:get_player_name()
|
|
||||||
local pos = vector.round(player:get_pos())
|
|
||||||
local pos_string = minetest.pos_to_string(pos)
|
|
||||||
|
|
||||||
-- return if keep inventory set or in creative mode
|
-- return if keep inventory set or in creative mode
|
||||||
if bones_mode == "keep" or (creative and creative.is_enabled_for
|
if bones_mode == "keep" or (creative and creative.is_enabled_for
|
||||||
and creative.is_enabled_for(player:get_player_name())) then
|
and creative.is_enabled_for(player:get_player_name())) then
|
||||||
minetest.log("action", player_name .. " dies at " .. pos_string ..
|
|
||||||
". No bones placed")
|
|
||||||
if bones_position_message then
|
|
||||||
minetest.chat_send_player(player_name, S("@1 died at @2.", player_name, pos_string))
|
|
||||||
end
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local player_inv = player:get_inventory()
|
local player_inv = player:get_inventory()
|
||||||
if is_all_empty(player_inv) then
|
if player_inv:is_empty("main") and
|
||||||
minetest.log("action", player_name .. " dies at " .. pos_string ..
|
player_inv:is_empty("craft") then
|
||||||
". No bones placed")
|
|
||||||
if bones_position_message then
|
|
||||||
minetest.chat_send_player(player_name, S("@1 died at @2.", player_name, pos_string))
|
|
||||||
end
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local pos = vector.round(player:getpos())
|
||||||
|
local player_name = player:get_player_name()
|
||||||
|
|
||||||
-- check if it's possible to place bones, if not find space near player
|
-- check if it's possible to place bones, if not find space near player
|
||||||
if bones_mode == "bones" and not may_replace(pos, player) then
|
if bones_mode == "bones" and not may_replace(pos, player) then
|
||||||
local air = minetest.find_node_near(pos, 1, {"air"})
|
local air = minetest.find_node_near(pos, 1, {"air"})
|
||||||
@ -225,51 +198,49 @@ minetest.register_on_dieplayer(function(player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if bones_mode == "drop" then
|
if bones_mode == "drop" then
|
||||||
for _, list_name in ipairs(player_inventory_lists) do
|
|
||||||
for i = 1, player_inv:get_size(list_name) do
|
-- drop inventory items
|
||||||
drop(pos, player_inv:get_stack(list_name, i))
|
for i = 1, player_inv:get_size("main") do
|
||||||
end
|
drop(pos, player_inv:get_stack("main", i))
|
||||||
player_inv:set_list(list_name, {})
|
|
||||||
end
|
end
|
||||||
|
player_inv:set_list("main", {})
|
||||||
|
|
||||||
|
-- drop crafting grid items
|
||||||
|
for i = 1, player_inv:get_size("craft") do
|
||||||
|
drop(pos, player_inv:get_stack("craft", i))
|
||||||
|
end
|
||||||
|
player_inv:set_list("craft", {})
|
||||||
|
|
||||||
drop(pos, ItemStack("bones:bones"))
|
drop(pos, ItemStack("bones:bones"))
|
||||||
minetest.log("action", player_name .. " dies at " .. pos_string ..
|
|
||||||
". Inventory dropped")
|
|
||||||
if bones_position_message then
|
|
||||||
minetest.chat_send_player(player_name, S("@1 died at @2, and dropped their inventory.", player_name, pos_string))
|
|
||||||
end
|
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local param2 = minetest.dir_to_facedir(player:get_look_dir())
|
local param2 = minetest.dir_to_facedir(player:get_look_dir())
|
||||||
minetest.set_node(pos, {name = "bones:bones", param2 = param2})
|
minetest.set_node(pos, {name = "bones:bones", param2 = param2})
|
||||||
|
|
||||||
minetest.log("action", player_name .. " dies at " .. pos_string ..
|
|
||||||
". Bones placed")
|
|
||||||
if bones_position_message then
|
|
||||||
minetest.chat_send_player(player_name, S("@1 died at @2, and bones were placed.", player_name, pos_string))
|
|
||||||
end
|
|
||||||
|
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size("main", 8 * 4)
|
inv:set_size("main", 8 * 4)
|
||||||
|
inv:set_list("main", player_inv:get_list("main"))
|
||||||
|
|
||||||
for _, list_name in ipairs(player_inventory_lists) do
|
for i = 1, player_inv:get_size("craft") do
|
||||||
for i = 1, player_inv:get_size(list_name) do
|
local stack = player_inv:get_stack("craft", i)
|
||||||
local stack = player_inv:get_stack(list_name, i)
|
if inv:room_for_item("main", stack) then
|
||||||
if inv:room_for_item("main", stack) then
|
inv:add_item("main", stack)
|
||||||
inv:add_item("main", stack)
|
else
|
||||||
else -- no space left
|
--drop if no space left
|
||||||
drop(pos, stack)
|
drop(pos, stack)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
player_inv:set_list(list_name, {})
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
player_inv:set_list("main", {})
|
||||||
|
player_inv:set_list("craft", {})
|
||||||
|
|
||||||
meta:set_string("formspec", bones_formspec)
|
meta:set_string("formspec", bones_formspec)
|
||||||
meta:set_string("owner", player_name)
|
meta:set_string("owner", player_name)
|
||||||
|
|
||||||
if share_bones_time ~= 0 then
|
if share_bones_time ~= 0 then
|
||||||
meta:set_string("infotext", S("@1's fresh bones", player_name))
|
meta:set_string("infotext", player_name .. "'s fresh bones")
|
||||||
|
|
||||||
if share_bones_time_early == 0 or not minetest.is_protected(pos, player_name) then
|
if share_bones_time_early == 0 or not minetest.is_protected(pos, player_name) then
|
||||||
meta:set_int("time", 0)
|
meta:set_int("time", 0)
|
||||||
@ -279,6 +250,6 @@ minetest.register_on_dieplayer(function(player)
|
|||||||
|
|
||||||
minetest.get_node_timer(pos):start(10)
|
minetest.get_node_timer(pos):start(10)
|
||||||
else
|
else
|
||||||
meta:set_string("infotext", S("@1's bones", player_name))
|
meta:set_string("infotext", player_name.."'s bones")
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=Knochen
|
|
||||||
@1's old bones=Alte Knochen von @1
|
|
||||||
@1 died at @2.=@1 starb bei @2.
|
|
||||||
@1 died at @2, and dropped their inventory.=@1 starb bei @2 und ließ das Inventar fallen.
|
|
||||||
@1 died at @2, and bones were placed.=@1 starb bei @2 und Knochen wurden platziert.
|
|
||||||
@1's fresh bones=Frische Knochen von @1
|
|
||||||
@1's bones=Knochen von @1
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=Huesos
|
|
||||||
@1's old bones=Huesos antiguos de @1
|
|
||||||
@1 died at @2.=@1 murió en @2.
|
|
||||||
@1 died at @2, and dropped their inventory.=@1 murió en @2, y su inventario se desprendió.
|
|
||||||
@1 died at @2, and bones were placed.=@1 murió en @2, y sus huesos fueron depositados.
|
|
||||||
@1's fresh bones=Huesos recientes de @1
|
|
||||||
@1's bones=Huesos de @1
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=Os
|
|
||||||
@1's old bones=Vieux os de @1
|
|
||||||
@1 died at @2.=@1 est mort à @2.
|
|
||||||
@1 died at @2, and dropped their inventory.=@1 est mort à @2 et a laissé tomber son inventaire.
|
|
||||||
@1 died at @2, and bones were placed.=@1 est mort à @2 et ses os ont été placés.
|
|
||||||
@1's fresh bones=Os frais de @1
|
|
||||||
@1's bones=Os de @1
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=Ossa
|
|
||||||
@1's old bones=Ossa vecchie di @1
|
|
||||||
@1 died at @2.=@1 è morto alla posizione @2.
|
|
||||||
@1 died at @2, and dropped their inventory.=@1 è morto alla posizione @2, e ha lasciato a terra il contenuto del suo inventario.
|
|
||||||
@1 died at @2, and bones were placed.=@1 è morto alla posizione @2, e vi sono state posizionate delle ossa.
|
|
||||||
@1's fresh bones=Ossa fresche di @1
|
|
||||||
@1's bones=Ossa di @1
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=Tulang
|
|
||||||
@1's old bones=Tulang lama @1
|
|
||||||
@1 died at @2.=@1 mati di @2.
|
|
||||||
@1 died at @2, and dropped their inventory.=@1 mati di @2, dan menjatuhkan inventorinya.
|
|
||||||
@1 died at @2, and bones were placed.=@1 mati di @2, dan tulang diletakkan.
|
|
||||||
@1's fresh bones=Tulang segar @1
|
|
||||||
@1's bones=Tulang @1
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=Кости
|
|
||||||
@1's old bones=Старые кости @1
|
|
||||||
@1 died at @2.=@1 умер в @2.
|
|
||||||
@1 died at @2, and dropped their inventory.=@1 умер в @2 и потерял содержимое своего инвентаря.
|
|
||||||
@1 died at @2, and bones were placed.=@1 умер в @2, помещены кости.
|
|
||||||
@1's fresh bones=новые кости @1
|
|
||||||
@1's bones=кости @1
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=Ben
|
|
||||||
@1's old bones=@1s Gamla ben
|
|
||||||
@1 died at @2.=@1 dog på @a.
|
|
||||||
@1 died at @2, and dropped their inventory.=@1 dog på @a, och tappade deras saker.
|
|
||||||
@1 died at @2, and bones were placed.=@1 dog på @2, och deras ben var placerade.
|
|
||||||
@1's fresh bones=@1s färska ben
|
|
||||||
@1's bones=@1s ben
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=骨骸
|
|
||||||
@1's old bones=@1的旧骨骸
|
|
||||||
@1 died at @2.=@1在@2死亡。
|
|
||||||
@1 died at @2, and dropped their inventory.=@1在@2死亡,丢掉了物品栏。
|
|
||||||
@1 died at @2, and bones were placed.=@1在@2死亡,骨骸被放置。
|
|
||||||
@1's fresh bones=@1的新鲜骨骸
|
|
||||||
@1's bones=@1的骨骸
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=骨骸
|
|
||||||
@1's old bones=@1的舊骨骸
|
|
||||||
@1 died at @2.=@1在@2死亡。
|
|
||||||
@1 died at @2, and dropped their inventory.=@1在@2死亡,丟掉了物品欄。
|
|
||||||
@1 died at @2, and bones were placed.=@1在@2死亡,骨骸被放置。
|
|
||||||
@1's fresh bones=@1的新鮮骨骸
|
|
||||||
@1's bones=@1的骨骸
|
|
@ -1,8 +0,0 @@
|
|||||||
# textdomain: bones
|
|
||||||
Bones=
|
|
||||||
@1's old bones=
|
|
||||||
@1 died at @2.=
|
|
||||||
@1 died at @2, and dropped their inventory.=
|
|
||||||
@1 died at @2, and bones were placed.=
|
|
||||||
@1's fresh bones=
|
|
||||||
@1's bones=
|
|
@ -1,3 +0,0 @@
|
|||||||
name = bones
|
|
||||||
description = Minetest Game mod: bones
|
|
||||||
depends = default
|
|
@ -1,14 +0,0 @@
|
|||||||
Minetest Game mod: Butterflies
|
|
||||||
==============================
|
|
||||||
Adds butterflies to the world on mapgen, which can be caught in a net if the
|
|
||||||
fireflies mod is also enabled.
|
|
||||||
|
|
||||||
Authors of source code
|
|
||||||
----------------------
|
|
||||||
Shara RedCat (MIT)
|
|
||||||
|
|
||||||
Authors of media (textures)
|
|
||||||
---------------------------
|
|
||||||
Shara RedCat (CC BY-SA 3.0):
|
|
||||||
butterflies_butterfly_*.png
|
|
||||||
butterflies_butterfly_*_animated.png
|
|
@ -1,142 +0,0 @@
|
|||||||
-- butterflies/init.lua
|
|
||||||
|
|
||||||
-- Load support for MT game translation.
|
|
||||||
local S = minetest.get_translator("butterflies")
|
|
||||||
-- Legacy compatibility, when pointabilities don't exist, pointable is set to true.
|
|
||||||
local pointable_compat = not minetest.features.item_specific_pointabilities
|
|
||||||
|
|
||||||
-- register butterflies
|
|
||||||
local butter_list = {
|
|
||||||
{"white", S("White Butterfly")},
|
|
||||||
{"red", S("Red Butterfly")},
|
|
||||||
{"violet", S("Violet Butterfly")}
|
|
||||||
}
|
|
||||||
|
|
||||||
for i in ipairs (butter_list) do
|
|
||||||
local name = butter_list[i][1]
|
|
||||||
local desc = butter_list[i][2]
|
|
||||||
|
|
||||||
minetest.register_node("butterflies:butterfly_"..name, {
|
|
||||||
description = desc,
|
|
||||||
drawtype = "plantlike",
|
|
||||||
tiles = {{
|
|
||||||
name = "butterflies_butterfly_"..name.."_animated.png",
|
|
||||||
animation = {
|
|
||||||
type = "vertical_frames",
|
|
||||||
aspect_w = 16,
|
|
||||||
aspect_h = 16,
|
|
||||||
length = 3
|
|
||||||
},
|
|
||||||
}},
|
|
||||||
inventory_image = "butterflies_butterfly_"..name..".png",
|
|
||||||
wield_image = "butterflies_butterfly_"..name..".png",
|
|
||||||
waving = 1,
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
buildable_to = true,
|
|
||||||
walkable = false,
|
|
||||||
pointable = pointable_compat,
|
|
||||||
groups = {catchable = 1},
|
|
||||||
selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = {-0.1, -0.1, -0.1, 0.1, 0.1, 0.1},
|
|
||||||
},
|
|
||||||
floodable = true,
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
if not placer or not placer:is_player() then return itemstack end
|
|
||||||
local player_name = placer and placer:get_player_name() or ""
|
|
||||||
local pos = pointed_thing.above
|
|
||||||
|
|
||||||
if not minetest.is_protected(pos, player_name) and
|
|
||||||
not minetest.is_protected(pointed_thing.under, player_name) and
|
|
||||||
minetest.get_node(pos).name == "air" then
|
|
||||||
minetest.set_node(pos, {name = "butterflies:butterfly_"..name})
|
|
||||||
minetest.get_node_timer(pos):start(1)
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
on_timer = function(pos, elapsed)
|
|
||||||
if minetest.get_node_light(pos) < 11 then
|
|
||||||
minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name})
|
|
||||||
end
|
|
||||||
minetest.get_node_timer(pos):start(30)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_node("butterflies:hidden_butterfly_"..name, {
|
|
||||||
drawtype = "airlike",
|
|
||||||
inventory_image = "butterflies_butterfly_"..name..".png",
|
|
||||||
wield_image = "butterflies_butterfly_"..name..".png",
|
|
||||||
paramtype = "light",
|
|
||||||
sunlight_propagates = true,
|
|
||||||
walkable = false,
|
|
||||||
pointable = false,
|
|
||||||
diggable = false,
|
|
||||||
drop = "",
|
|
||||||
groups = {not_in_creative_inventory = 1},
|
|
||||||
floodable = true,
|
|
||||||
on_place = function(itemstack, placer, pointed_thing)
|
|
||||||
if not placer or not placer:is_player() then return itemstack end
|
|
||||||
local player_name = placer and placer:get_player_name() or ""
|
|
||||||
local pos = pointed_thing.above
|
|
||||||
|
|
||||||
if not minetest.is_protected(pos, player_name) and
|
|
||||||
not minetest.is_protected(pointed_thing.under, player_name) and
|
|
||||||
minetest.get_node(pos).name == "air" then
|
|
||||||
minetest.set_node(pos, {name = "butterflies:hidden_butterfly_"..name})
|
|
||||||
minetest.get_node_timer(pos):start(1)
|
|
||||||
itemstack:take_item()
|
|
||||||
end
|
|
||||||
return itemstack
|
|
||||||
end,
|
|
||||||
on_timer = function(pos, elapsed)
|
|
||||||
if minetest.get_node_light(pos) >= 11 then
|
|
||||||
minetest.set_node(pos, {name = "butterflies:butterfly_"..name})
|
|
||||||
end
|
|
||||||
minetest.get_node_timer(pos):start(30)
|
|
||||||
end
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- register decoration
|
|
||||||
minetest.register_decoration({
|
|
||||||
name = "butterflies:butterfly",
|
|
||||||
deco_type = "simple",
|
|
||||||
place_on = {"default:dirt_with_grass"},
|
|
||||||
place_offset_y = 2,
|
|
||||||
sidelen = 80,
|
|
||||||
fill_ratio = 0.005,
|
|
||||||
biomes = {"grassland", "deciduous_forest"},
|
|
||||||
y_max = 31000,
|
|
||||||
y_min = 1,
|
|
||||||
decoration = {
|
|
||||||
"butterflies:butterfly_white",
|
|
||||||
"butterflies:butterfly_red",
|
|
||||||
"butterflies:butterfly_violet"
|
|
||||||
},
|
|
||||||
spawn_by = "group:flower",
|
|
||||||
num_spawn_by = 1
|
|
||||||
})
|
|
||||||
|
|
||||||
-- get decoration ID
|
|
||||||
local butterflies = minetest.get_decoration_id("butterflies:butterfly")
|
|
||||||
minetest.set_gen_notify({decoration = true}, {butterflies})
|
|
||||||
|
|
||||||
-- start nodetimers
|
|
||||||
minetest.register_on_generated(function(minp, maxp, blockseed)
|
|
||||||
local gennotify = minetest.get_mapgen_object("gennotify")
|
|
||||||
local poslist = {}
|
|
||||||
|
|
||||||
for _, pos in ipairs(gennotify["decoration#"..butterflies] or {}) do
|
|
||||||
local deco_pos = {x = pos.x, y = pos.y + 3, z = pos.z}
|
|
||||||
table.insert(poslist, deco_pos)
|
|
||||||
end
|
|
||||||
|
|
||||||
if #poslist ~= 0 then
|
|
||||||
for i = 1, #poslist do
|
|
||||||
local pos = poslist[i]
|
|
||||||
minetest.get_node_timer(pos):start(1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end)
|
|
@ -1,58 +0,0 @@
|
|||||||
License of source code
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
The MIT License (MIT)
|
|
||||||
Copyright (c) 2018 Shara RedCat
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this
|
|
||||||
software and associated documentation files (the "Software"), to deal in the Software
|
|
||||||
without restriction, including without limitation the rights to use, copy, modify, merge,
|
|
||||||
publish, distribute, sublicense, and/or sell copies of the Software, and to permit
|
|
||||||
persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or
|
|
||||||
substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
|
||||||
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
||||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
For more details:
|
|
||||||
https://opensource.org/licenses/MIT
|
|
||||||
|
|
||||||
Licenses of media (textures)
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
|
||||||
Copyright (C) 2018 Shara RedCat
|
|
||||||
|
|
||||||
You are free to:
|
|
||||||
Share — copy and redistribute the material in any medium or format.
|
|
||||||
Adapt — remix, transform, and build upon the material for any purpose, even commercially.
|
|
||||||
The licensor cannot revoke these freedoms as long as you follow the license terms.
|
|
||||||
|
|
||||||
Under the following terms:
|
|
||||||
|
|
||||||
Attribution — You must give appropriate credit, provide a link to the license, and
|
|
||||||
indicate if changes were made. You may do so in any reasonable manner, but not in any way
|
|
||||||
that suggests the licensor endorses you or your use.
|
|
||||||
|
|
||||||
ShareAlike — If you remix, transform, or build upon the material, you must distribute
|
|
||||||
your contributions under the same license as the original.
|
|
||||||
|
|
||||||
No additional restrictions — You may not apply legal terms or technological measures that
|
|
||||||
legally restrict others from doing anything the license permits.
|
|
||||||
|
|
||||||
Notices:
|
|
||||||
|
|
||||||
You do not have to comply with the license for elements of the material in the public
|
|
||||||
domain or where your use is permitted by an applicable exception or limitation.
|
|
||||||
No warranties are given. The license may not give you all of the permissions necessary
|
|
||||||
for your intended use. For example, other rights such as publicity, privacy, or moral
|
|
||||||
rights may limit how you use the material.
|
|
||||||
|
|
||||||
For more details:
|
|
||||||
http://creativecommons.org/licenses/by-sa/3.0/
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=Weißer Schmetterling
|
|
||||||
Red Butterfly=Roter Schmetterling
|
|
||||||
Violet Butterfly=Violetter Schmetterling
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=Mariposa blanca
|
|
||||||
Red Butterfly=Mariposa roja
|
|
||||||
Violet Butterfly=Mariposa violeta
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=Papillon blanc
|
|
||||||
Red Butterfly=Papillon rouge
|
|
||||||
Violet Butterfly=Papillon violet
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=Farfalla bianca
|
|
||||||
Red Butterfly=Farfalla rossa
|
|
||||||
Violet Butterfly=Farfalla viola
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=Rama-Rama Putih
|
|
||||||
Red Butterfly=Rama-Rama Merah
|
|
||||||
Violet Butterfly=Rama-Rama Ungu
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=Белая Бабочка
|
|
||||||
Red Butterfly=Красная Бабочка
|
|
||||||
Violet Butterfly=Фиолетовая Бабочка
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=Vit fjäril
|
|
||||||
Red Butterfly=Röd fjäril
|
|
||||||
Violet Butterfly=Violett fjäril
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=白蝴蝶
|
|
||||||
Red Butterfly=红蝴蝶
|
|
||||||
Violet Butterfly=紫蝴蝶
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=白蝴蝶
|
|
||||||
Red Butterfly=紅蝴蝶
|
|
||||||
Violet Butterfly=紫蝴蝶
|
|
@ -1,4 +0,0 @@
|
|||||||
# textdomain: butterflies
|
|
||||||
White Butterfly=
|
|
||||||
Red Butterfly=
|
|
||||||
Violet Butterfly=
|
|
@ -1,4 +0,0 @@
|
|||||||
name = butterflies
|
|
||||||
description = Minetest Game mod: Butterflies
|
|
||||||
depends = default, flowers
|
|
||||||
optional_depends = fireflies
|
|
Before Width: | Height: | Size: 110 B |
Before Width: | Height: | Size: 125 B |
Before Width: | Height: | Size: 110 B |
Before Width: | Height: | Size: 125 B |
Before Width: | Height: | Size: 110 B |
Before Width: | Height: | Size: 125 B |
@ -33,7 +33,7 @@ function cart_entity:on_rightclick(clicker)
|
|||||||
if not clicker or not clicker:is_player() then
|
if not clicker or not clicker:is_player() then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
local player_name = clicker and clicker:get_player_name() or ""
|
local player_name = clicker:get_player_name()
|
||||||
if self.driver and player_name == self.driver then
|
if self.driver and player_name == self.driver then
|
||||||
carts:manage_attachment(clicker, nil)
|
carts:manage_attachment(clicker, nil)
|
||||||
elseif not self.driver then
|
elseif not self.driver then
|
||||||
@ -67,8 +67,7 @@ end
|
|||||||
|
|
||||||
-- 0.5.x and later: When the driver leaves
|
-- 0.5.x and later: When the driver leaves
|
||||||
function cart_entity:on_detach_child(child)
|
function cart_entity:on_detach_child(child)
|
||||||
if not child or not child:is_player() then return end
|
if child and child:get_player_name() == self.driver then
|
||||||
if child:get_player_name() == self.driver then
|
|
||||||
-- Clean up eye height
|
-- Clean up eye height
|
||||||
carts:manage_attachment(child, nil)
|
carts:manage_attachment(child, nil)
|
||||||
self.driver = nil
|
self.driver = nil
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
name = carts
|
name = carts
|
||||||
description = Carts (formerly boost_cart)
|
description = Carts (formerly boost_cart)
|
||||||
depends = default, player_api
|
depends = default
|
||||||
optional_depends = dungeon_loot, mesecons
|
optional_depends = dungeon_loot, mesecons, player_api
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
-- creative/init.lua
|
|
||||||
|
|
||||||
-- Load support for MT game translation.
|
-- Load support for MT game translation.
|
||||||
local S
|
local S
|
||||||
@ -91,7 +90,280 @@ function creative.is_enabled_for(name)
|
|||||||
return creative.is_creative(name)
|
return creative.is_creative(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
dofile(minetest.get_modpath("creative") .. "/inventory.lua")
|
local player_inventory = {}
|
||||||
|
local inventory_cache = {}
|
||||||
|
|
||||||
|
local function init_creative_cache(items)
|
||||||
|
inventory_cache[items] = {}
|
||||||
|
local i_cache = inventory_cache[items]
|
||||||
|
|
||||||
|
for name, def in pairs(items) do
|
||||||
|
if def.groups and def.groups.not_in_creative_inventory ~= 1 and
|
||||||
|
def.description and def.description ~= "" then
|
||||||
|
i_cache[name] = def
|
||||||
|
end
|
||||||
|
end
|
||||||
|
table.sort(i_cache)
|
||||||
|
return i_cache
|
||||||
|
end
|
||||||
|
|
||||||
|
function creative.init_creative_inventory(player)
|
||||||
|
local player_name = player:get_player_name()
|
||||||
|
player_inventory[player_name] = {
|
||||||
|
size = 0,
|
||||||
|
filter = "",
|
||||||
|
start_i = 0,
|
||||||
|
old_filter = nil, -- use only for caching in update_creative_inventory
|
||||||
|
old_content = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
minetest.create_detached_inventory("creative_" .. player_name, {
|
||||||
|
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2)
|
||||||
|
local name = player2 and player2:get_player_name() or ""
|
||||||
|
if not creative.is_enabled_for(name) or
|
||||||
|
to_list == "main" then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return count
|
||||||
|
end,
|
||||||
|
allow_put = function(inv, listname, index, stack, player2)
|
||||||
|
return 0
|
||||||
|
end,
|
||||||
|
allow_take = function(inv, listname, index, stack, player2)
|
||||||
|
local name = player2 and player2:get_player_name() or ""
|
||||||
|
if not creative.is_enabled_for(name) then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
return -1
|
||||||
|
end,
|
||||||
|
on_move = function(inv, from_list, from_index, to_list, to_index, count, player2)
|
||||||
|
end,
|
||||||
|
on_take = function(inv, listname, index, stack, player2)
|
||||||
|
if stack and stack:get_count() > 0 then
|
||||||
|
minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory")
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}, player_name)
|
||||||
|
|
||||||
|
return player_inventory[player_name]
|
||||||
|
end
|
||||||
|
|
||||||
|
local NO_MATCH = 999
|
||||||
|
local function match(s, filter)
|
||||||
|
if filter == "" then
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
if s:lower():find(filter, 1, true) then
|
||||||
|
return #s - #filter
|
||||||
|
end
|
||||||
|
return NO_MATCH
|
||||||
|
end
|
||||||
|
|
||||||
|
local function description(def, lang_code)
|
||||||
|
local s = def.description
|
||||||
|
if creative.is_53 then
|
||||||
|
if lang_code then
|
||||||
|
s = minetest.get_translated_string(lang_code, s)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return s:gsub("\n.*", "") -- First line only
|
||||||
|
end
|
||||||
|
|
||||||
|
function creative.update_creative_inventory(player_name, tab_content)
|
||||||
|
local inv = player_inventory[player_name] or
|
||||||
|
creative.init_creative_inventory(minetest.get_player_by_name(player_name))
|
||||||
|
local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name})
|
||||||
|
|
||||||
|
if inv.filter == inv.old_filter and tab_content == inv.old_content then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
inv.old_filter = inv.filter
|
||||||
|
inv.old_content = tab_content
|
||||||
|
|
||||||
|
local items = inventory_cache[tab_content] or init_creative_cache(tab_content)
|
||||||
|
|
||||||
|
local lang = minetest.settings:get("language") or "en"
|
||||||
|
local player_info = minetest.get_player_information(player_name)
|
||||||
|
|
||||||
|
if creative.is_53 then
|
||||||
|
if player_info and player_info.lang_code ~= "" then
|
||||||
|
lang = player_info.lang_code
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local creative_list = {}
|
||||||
|
local order = {}
|
||||||
|
for name, def in pairs(items) do
|
||||||
|
local m = match(description(def), inv.filter)
|
||||||
|
if m > 0 then
|
||||||
|
m = math.min(m, match(description(def, lang), inv.filter))
|
||||||
|
end
|
||||||
|
if m > 0 then
|
||||||
|
m = math.min(m, match(name, inv.filter))
|
||||||
|
end
|
||||||
|
|
||||||
|
if m < NO_MATCH then
|
||||||
|
creative_list[#creative_list+1] = name
|
||||||
|
-- Sort by match value first so closer matches appear earlier
|
||||||
|
order[name] = string.format("%02d", m) .. name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.sort(creative_list, function(a, b) return order[a] < order[b] end)
|
||||||
|
|
||||||
|
player_inv:set_size("main", #creative_list)
|
||||||
|
player_inv:set_list("main", creative_list)
|
||||||
|
inv.size = #creative_list
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Create the trash field
|
||||||
|
local trash = minetest.create_detached_inventory("trash", {
|
||||||
|
-- Allow the stack to be placed and remove it in on_put()
|
||||||
|
-- This allows the creative inventory to restore the stack
|
||||||
|
allow_put = function(inv, listname, index, stack, player)
|
||||||
|
return stack:get_count()
|
||||||
|
end,
|
||||||
|
on_put = function(inv, listname)
|
||||||
|
inv:set_list(listname, {})
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
trash:set_size("main", 1)
|
||||||
|
|
||||||
|
creative.formspec_add = ""
|
||||||
|
|
||||||
|
function creative.register_tab(name, title, items)
|
||||||
|
sfinv.register_page("creative:" .. name, {
|
||||||
|
title = title,
|
||||||
|
is_in_nav = function(self, player, context)
|
||||||
|
return creative.is_enabled_for(player:get_player_name())
|
||||||
|
end,
|
||||||
|
get = function(self, player, context)
|
||||||
|
local player_name = player:get_player_name()
|
||||||
|
creative.update_creative_inventory(player_name, items)
|
||||||
|
local inv = player_inventory[player_name]
|
||||||
|
local start_i = inv.start_i or 0
|
||||||
|
local pagenum = math.floor(inv.start_i / (4*8) + 1)
|
||||||
|
local pagemax = math.max(math.ceil(inv.size / (4*8)), 1)
|
||||||
|
local esc = minetest.formspec_escape
|
||||||
|
return sfinv.make_formspec(player, context,
|
||||||
|
(inv.size == 0 and ("label[3,2;>_<]") or "") ..
|
||||||
|
"label[5.8,4.15;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" ..
|
||||||
|
[[
|
||||||
|
image[4,3.9;0.8,0.8;creative_trash_icon.png]
|
||||||
|
listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]
|
||||||
|
list[current_player;main;0,4.7;8,1;]
|
||||||
|
list[current_player;main;0,5.85;8,3;8]
|
||||||
|
list[detached:trash;main;4,3.9;1,1;]
|
||||||
|
listring[]
|
||||||
|
button[5,4.05;0.8,0.8;creative_prev;<]
|
||||||
|
button[7.25,4.05;0.8,0.8;creative_next;>]
|
||||||
|
button[2.63,4.05;0.8,0.8;creative_search;?]
|
||||||
|
button[3.25,4.05;0.8,0.8;creative_clear;X]
|
||||||
|
]] ..
|
||||||
|
"tooltip[creative_search;" .. esc(S("Search")) .. "]" ..
|
||||||
|
"tooltip[creative_clear;" .. esc(S("Reset")) .. "]" ..
|
||||||
|
"tooltip[creative_prev;" .. esc(S("Previous page")) .. "]" ..
|
||||||
|
"tooltip[creative_next;" .. esc(S("Next page")) .. "]" ..
|
||||||
|
"listring[current_player;main]" ..
|
||||||
|
"field_close_on_enter[creative_filter;false]" ..
|
||||||
|
"field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" ..
|
||||||
|
"listring[detached:creative_" .. player_name .. ";main]" ..
|
||||||
|
"list[detached:creative_" .. player_name .. ";main;0,0;8,4;" .. tostring(inv.start_i) .. "]" ..
|
||||||
|
default.get_hotbar_bg(0,4.7) ..
|
||||||
|
default.gui_bg .. default.gui_bg_img .. default.gui_slots
|
||||||
|
.. creative.formspec_add, false)
|
||||||
|
end,
|
||||||
|
on_enter = function(self, player, context)
|
||||||
|
local player_name = player:get_player_name()
|
||||||
|
local inv = player_inventory[player_name]
|
||||||
|
if inv then
|
||||||
|
inv.start_i = 0
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
on_player_receive_fields = function(self, player, context, fields)
|
||||||
|
local player_name = player:get_player_name()
|
||||||
|
local inv = player_inventory[player_name]
|
||||||
|
assert(inv)
|
||||||
|
|
||||||
|
if fields.creative_clear then
|
||||||
|
inv.start_i = 0
|
||||||
|
inv.filter = ""
|
||||||
|
--creative.update_creative_inventory(player_name, items)
|
||||||
|
sfinv.set_player_inventory_formspec(player, context)
|
||||||
|
elseif (fields.creative_search or
|
||||||
|
fields.key_enter_field == "creative_filter")
|
||||||
|
and fields.creative_filter then
|
||||||
|
inv.start_i = 0
|
||||||
|
inv.filter = fields.creative_filter:sub(1, 128) -- truncate to a sane length
|
||||||
|
:gsub("[%z\1-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n)
|
||||||
|
:lower() -- search is case insensitive
|
||||||
|
--creative.update_creative_inventory(player_name, items)
|
||||||
|
sfinv.set_player_inventory_formspec(player, context)
|
||||||
|
elseif not fields.quit then
|
||||||
|
local start_i = inv.start_i or 0
|
||||||
|
|
||||||
|
if fields.creative_prev then
|
||||||
|
start_i = start_i - 4*8
|
||||||
|
if start_i < 0 then
|
||||||
|
start_i = inv.size - (inv.size % (4*8))
|
||||||
|
if inv.size == start_i then
|
||||||
|
start_i = math.max(0, inv.size - (4*8))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif fields.creative_next then
|
||||||
|
start_i = start_i + 4*8
|
||||||
|
if start_i >= inv.size then
|
||||||
|
start_i = 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
inv.start_i = start_i
|
||||||
|
sfinv.set_player_inventory_formspec(player, context)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Sort registered items
|
||||||
|
local registered_nodes = {}
|
||||||
|
local registered_tools = {}
|
||||||
|
local registered_craftitems = {}
|
||||||
|
|
||||||
|
local tab_items = function()
|
||||||
|
for name, def in pairs(minetest.registered_items) do
|
||||||
|
local group = def.groups or {}
|
||||||
|
|
||||||
|
local nogroup = not (group.node or group.tool or group.craftitem)
|
||||||
|
if group.node or (nogroup and minetest.registered_nodes[name]) then
|
||||||
|
registered_nodes[name] = def
|
||||||
|
elseif group.tool or (nogroup and minetest.registered_tools[name]) then
|
||||||
|
registered_tools[name] = def
|
||||||
|
elseif group.craftitem or (nogroup and minetest.registered_craftitems[name]) then
|
||||||
|
registered_craftitems[name] = def
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if minetest.register_on_mods_loaded then
|
||||||
|
minetest.register_on_mods_loaded(tab_items)
|
||||||
|
else
|
||||||
|
minetest.after(0.1, tab_items)
|
||||||
|
end
|
||||||
|
|
||||||
|
creative.register_tab("all", S("All"), minetest.registered_items)
|
||||||
|
creative.register_tab("nodes", S("Nodes"), minetest.registered_nodes)
|
||||||
|
creative.register_tab("tools", S("Tools"), minetest.registered_tools)
|
||||||
|
creative.register_tab("craftitems", S("Items"), minetest.registered_craftitems)
|
||||||
|
|
||||||
|
local old_homepage_name = sfinv.get_homepage_name
|
||||||
|
function sfinv.get_homepage_name(player)
|
||||||
|
if creative.is_enabled_for(player:get_player_name()) then
|
||||||
|
return "creative:all"
|
||||||
|
else
|
||||||
|
return old_homepage_name(player)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
if minetest.is_creative_enabled("") then
|
if minetest.is_creative_enabled("") then
|
||||||
local hand_hack = function()
|
local hand_hack = function()
|
||||||
|
@ -1,272 +0,0 @@
|
|||||||
-- creative/inventory.lua
|
|
||||||
|
|
||||||
-- Load support for MT game translation.
|
|
||||||
local S = creative.get_translator
|
|
||||||
|
|
||||||
local player_inventory = {}
|
|
||||||
local inventory_cache = {}
|
|
||||||
|
|
||||||
local function init_creative_cache(items)
|
|
||||||
inventory_cache[items] = {}
|
|
||||||
local i_cache = inventory_cache[items]
|
|
||||||
|
|
||||||
for name, def in pairs(items) do
|
|
||||||
if def.groups.not_in_creative_inventory ~= 1 and
|
|
||||||
def.description and def.description ~= "" then
|
|
||||||
i_cache[name] = def
|
|
||||||
end
|
|
||||||
end
|
|
||||||
table.sort(i_cache)
|
|
||||||
return i_cache
|
|
||||||
end
|
|
||||||
|
|
||||||
function creative.init_creative_inventory(player)
|
|
||||||
local player_name = player:get_player_name()
|
|
||||||
player_inventory[player_name] = {
|
|
||||||
size = 0,
|
|
||||||
filter = "",
|
|
||||||
start_i = 0,
|
|
||||||
old_filter = nil, -- use only for caching in update_creative_inventory
|
|
||||||
old_content = nil
|
|
||||||
}
|
|
||||||
|
|
||||||
minetest.create_detached_inventory("creative_" .. player_name, {
|
|
||||||
allow_move = function(inv, from_list, from_index, to_list, to_index, count, player2)
|
|
||||||
local name = player2 and player2:get_player_name() or ""
|
|
||||||
if not creative.is_enabled_for(name) or
|
|
||||||
to_list == "main" then
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
return count
|
|
||||||
end,
|
|
||||||
allow_put = function(inv, listname, index, stack, player2)
|
|
||||||
return 0
|
|
||||||
end,
|
|
||||||
allow_take = function(inv, listname, index, stack, player2)
|
|
||||||
local name = player2 and player2:get_player_name() or ""
|
|
||||||
if not creative.is_enabled_for(name) then
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
return -1
|
|
||||||
end,
|
|
||||||
on_move = function(inv, from_list, from_index, to_list, to_index, count, player2)
|
|
||||||
end,
|
|
||||||
on_take = function(inv, listname, index, stack, player2)
|
|
||||||
if stack and stack:get_count() > 0 then
|
|
||||||
minetest.log("action", player_name .. " takes " .. stack:get_name().. " from creative inventory")
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
}, player_name)
|
|
||||||
|
|
||||||
return player_inventory[player_name]
|
|
||||||
end
|
|
||||||
|
|
||||||
local NO_MATCH = 999
|
|
||||||
local function match(s, filter)
|
|
||||||
if filter == "" then
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
if s:lower():find(filter, 1, true) then
|
|
||||||
return #s - #filter
|
|
||||||
end
|
|
||||||
return NO_MATCH
|
|
||||||
end
|
|
||||||
|
|
||||||
local function description(def, lang_code)
|
|
||||||
local s = def.description
|
|
||||||
if creative.is_53 then
|
|
||||||
if lang_code then
|
|
||||||
s = minetest.get_translated_string(lang_code, s)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return s:gsub("\n.*", "") -- First line only
|
|
||||||
end
|
|
||||||
|
|
||||||
function creative.update_creative_inventory(player_name, tab_content)
|
|
||||||
local inv = player_inventory[player_name] or
|
|
||||||
creative.init_creative_inventory(minetest.get_player_by_name(player_name))
|
|
||||||
local player_inv = minetest.get_inventory({type = "detached", name = "creative_" .. player_name})
|
|
||||||
|
|
||||||
if inv.filter == inv.old_filter and tab_content == inv.old_content then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
inv.old_filter = inv.filter
|
|
||||||
inv.old_content = tab_content
|
|
||||||
|
|
||||||
local items = inventory_cache[tab_content] or init_creative_cache(tab_content)
|
|
||||||
|
|
||||||
local lang = minetest.settings:get("language") or "en"
|
|
||||||
local player_info = minetest.get_player_information(player_name)
|
|
||||||
|
|
||||||
if creative.is_53 then
|
|
||||||
if player_info and player_info.lang_code ~= "" then
|
|
||||||
lang = player_info.lang_code
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local creative_list = {}
|
|
||||||
local order = {}
|
|
||||||
for name, def in pairs(items) do
|
|
||||||
local m = match(description(def), inv.filter)
|
|
||||||
if m > 0 then
|
|
||||||
m = math.min(m, match(description(def, lang), inv.filter))
|
|
||||||
end
|
|
||||||
if m > 0 then
|
|
||||||
m = math.min(m, match(name, inv.filter))
|
|
||||||
end
|
|
||||||
|
|
||||||
if m < NO_MATCH then
|
|
||||||
creative_list[#creative_list+1] = name
|
|
||||||
-- Sort by match value first so closer matches appear earlier
|
|
||||||
order[name] = string.format("%02d", m) .. name
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
table.sort(creative_list, function(a, b) return order[a] < order[b] end)
|
|
||||||
|
|
||||||
player_inv:set_size("main", #creative_list)
|
|
||||||
player_inv:set_list("main", creative_list)
|
|
||||||
inv.size = #creative_list
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Create the trash field
|
|
||||||
local trash = minetest.create_detached_inventory("trash", {
|
|
||||||
-- Allow the stack to be placed and remove it in on_put()
|
|
||||||
-- This allows the creative inventory to restore the stack
|
|
||||||
allow_put = function(inv, listname, index, stack, player)
|
|
||||||
return stack:get_count()
|
|
||||||
end,
|
|
||||||
on_put = function(inv, listname)
|
|
||||||
inv:set_list(listname, {})
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
trash:set_size("main", 1)
|
|
||||||
|
|
||||||
creative.formspec_add = ""
|
|
||||||
|
|
||||||
function creative.register_tab(name, title, items)
|
|
||||||
sfinv.register_page("creative:" .. name, {
|
|
||||||
title = title,
|
|
||||||
is_in_nav = function(self, player, context)
|
|
||||||
return creative.is_enabled_for(player:get_player_name())
|
|
||||||
end,
|
|
||||||
get = function(self, player, context)
|
|
||||||
local player_name = player:get_player_name()
|
|
||||||
creative.update_creative_inventory(player_name, items)
|
|
||||||
local inv = player_inventory[player_name]
|
|
||||||
local start_i = inv.start_i or 0
|
|
||||||
local pagenum = math.floor(inv.start_i / (4*8) + 1)
|
|
||||||
local pagemax = math.max(math.ceil(inv.size / (4*8)), 1)
|
|
||||||
local esc = minetest.formspec_escape
|
|
||||||
return sfinv.make_formspec(player, context,
|
|
||||||
(inv.size == 0 and ("label[3,2;"..esc(S("No items to show.")).."]") or "") ..
|
|
||||||
"label[5.8,4.15;" .. minetest.colorize("#FFFF00", tostring(pagenum)) .. " / " .. tostring(pagemax) .. "]" ..
|
|
||||||
[[
|
|
||||||
image[4,4;0.8,0.8;creative_trash_icon.png]
|
|
||||||
listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]
|
|
||||||
list[detached:trash;main;4,4;1,1;]
|
|
||||||
listring[]
|
|
||||||
button[5,4.05;0.8,0.8;creative_prev;<]
|
|
||||||
button[7.25,4.05;0.8,0.8;creative_next;>]
|
|
||||||
button[2.63,4.05;0.8,0.8;creative_search;?]
|
|
||||||
button[3.25,4.05;0.8,0.8;creative_clear;X]
|
|
||||||
]] ..
|
|
||||||
"tooltip[creative_search;" .. esc(S("Search")) .. "]" ..
|
|
||||||
"tooltip[creative_clear;" .. esc(S("Reset")) .. "]" ..
|
|
||||||
"tooltip[creative_prev;" .. esc(S("Previous page")) .. "]" ..
|
|
||||||
"tooltip[creative_next;" .. esc(S("Next page")) .. "]" ..
|
|
||||||
"listring[current_player;main]" ..
|
|
||||||
"field_close_on_enter[creative_filter;false]" ..
|
|
||||||
"field[0.3,4.2;2.8,1.2;creative_filter;;" .. esc(inv.filter) .. "]" ..
|
|
||||||
"listring[detached:creative_" .. player_name .. ";main]" ..
|
|
||||||
"list[detached:creative_" .. player_name .. ";main;0,0;8,4;" .. tostring(inv.start_i) .. "]" ..
|
|
||||||
creative.formspec_add, true)
|
|
||||||
end,
|
|
||||||
on_enter = function(self, player, context)
|
|
||||||
local player_name = player:get_player_name()
|
|
||||||
local inv = player_inventory[player_name]
|
|
||||||
if inv then
|
|
||||||
inv.start_i = 0
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
on_player_receive_fields = function(self, player, context, fields)
|
|
||||||
local player_name = player:get_player_name()
|
|
||||||
local inv = player_inventory[player_name]
|
|
||||||
assert(inv)
|
|
||||||
|
|
||||||
if fields.creative_clear then
|
|
||||||
inv.start_i = 0
|
|
||||||
inv.filter = ""
|
|
||||||
sfinv.set_player_inventory_formspec(player, context)
|
|
||||||
elseif (fields.creative_search or
|
|
||||||
fields.key_enter_field == "creative_filter")
|
|
||||||
and fields.creative_filter then
|
|
||||||
inv.start_i = 0
|
|
||||||
inv.filter = fields.creative_filter:sub(1, 128) -- truncate to a sane length
|
|
||||||
:gsub("[%z\1-\8\11-\31\127]", "") -- strip naughty control characters (keeps \t and \n)
|
|
||||||
:lower() -- search is case insensitive
|
|
||||||
sfinv.set_player_inventory_formspec(player, context)
|
|
||||||
elseif not fields.quit then
|
|
||||||
local start_i = inv.start_i or 0
|
|
||||||
|
|
||||||
if fields.creative_prev then
|
|
||||||
start_i = start_i - 4*8
|
|
||||||
if start_i < 0 then
|
|
||||||
start_i = inv.size - (inv.size % (4*8))
|
|
||||||
if inv.size == start_i then
|
|
||||||
start_i = math.max(0, inv.size - (4*8))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif fields.creative_next then
|
|
||||||
start_i = start_i + 4*8
|
|
||||||
if start_i >= inv.size then
|
|
||||||
start_i = 0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
inv.start_i = start_i
|
|
||||||
sfinv.set_player_inventory_formspec(player, context)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Sort registered items
|
|
||||||
local registered_nodes = {}
|
|
||||||
local registered_tools = {}
|
|
||||||
local registered_craftitems = {}
|
|
||||||
|
|
||||||
local tab_items = function()
|
|
||||||
for name, def in pairs(minetest.registered_items) do
|
|
||||||
local group = def.groups or {}
|
|
||||||
|
|
||||||
local nogroup = not (group.node or group.tool or group.craftitem)
|
|
||||||
if group.node or (nogroup and minetest.registered_nodes[name]) then
|
|
||||||
registered_nodes[name] = def
|
|
||||||
elseif group.tool or (nogroup and minetest.registered_tools[name]) then
|
|
||||||
registered_tools[name] = def
|
|
||||||
elseif group.craftitem or (nogroup and minetest.registered_craftitems[name]) then
|
|
||||||
registered_craftitems[name] = def
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if minetest.register_on_mods_loaded then
|
|
||||||
minetest.register_on_mods_loaded(tab_items)
|
|
||||||
else
|
|
||||||
minetest.after(0.1, tab_items)
|
|
||||||
end
|
|
||||||
|
|
||||||
creative.register_tab("all", S("Creative"), minetest.registered_items)
|
|
||||||
--creative.register_tab("nodes", S("Nodes"), minetest.registered_nodes)
|
|
||||||
--creative.register_tab("tools", S("Tools"), minetest.registered_tools)
|
|
||||||
--creative.register_tab("craftitems", S("Items"), minetest.registered_craftitems)
|
|
||||||
|
|
||||||
local old_homepage_name = sfinv.get_homepage_name
|
|
||||||
function sfinv.get_homepage_name(player)
|
|
||||||
if creative.is_enabled_for(player:get_player_name()) then
|
|
||||||
return "creative:all"
|
|
||||||
else
|
|
||||||
return old_homepage_name(player)
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Spieler erlauben, das Kreativinventar zu benutzen
|
|
||||||
Search=Suchen
|
|
||||||
Reset=Zurücksetzen
|
|
||||||
Previous page=Vorherige Seite
|
|
||||||
Next page=Nächste Seite
|
|
||||||
All=Alles
|
|
||||||
Nodes=Blöcke
|
|
||||||
Tools=Werkzeuge
|
|
||||||
Items=Gegenstände
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Permesi ke la ludanto uzu la kreeman stokon
|
|
||||||
Search=Serĉi
|
|
||||||
Reset=Rekomencigi
|
|
||||||
Previous page=Antaŭa paĝo
|
|
||||||
Next page=Sekva paĝo
|
|
||||||
All=Ĉio
|
|
||||||
Nodes=Nodoj
|
|
||||||
Tools=Iloj
|
|
||||||
Items=Objektoj
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Permitir al jugador usar el inventario creativo
|
|
||||||
Search=Buscar
|
|
||||||
Reset=Resetear
|
|
||||||
Previous page=Pág. siguiente
|
|
||||||
Next page=Pág. anterior
|
|
||||||
All=Todos
|
|
||||||
Nodes=Nodos
|
|
||||||
Tools=Herramientas
|
|
||||||
Items=Objetos
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Permettre aux joueurs d'utiliser l'inventaire du mode créatif
|
|
||||||
Search=Rechercher
|
|
||||||
Reset=Réinitialiser
|
|
||||||
Previous page=Page précédente
|
|
||||||
Next page=Page suivante
|
|
||||||
All=Tout
|
|
||||||
Nodes=Nœuds
|
|
||||||
Tools=Outils
|
|
||||||
Items=Article
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Bolehkan pemain memakai inventaris kreatif
|
|
||||||
Search=Cari
|
|
||||||
Reset=Atur ulang
|
|
||||||
Previous page=Halaman sebelumnya
|
|
||||||
Next page=Halaman selanjutnya
|
|
||||||
All=Semua
|
|
||||||
Nodes=Nodus
|
|
||||||
Tools=Perkakas
|
|
||||||
Items=Barang
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Permette al giocatore di usare l'inventario creativo
|
|
||||||
Search=Cerca
|
|
||||||
Reset=Azzera
|
|
||||||
Previous page=Pagina precedente
|
|
||||||
Next page=Pagina successiva
|
|
||||||
All=Tutto
|
|
||||||
Nodes=Nodi
|
|
||||||
Tools=Strumenti
|
|
||||||
Items=Oggetti
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=プレーヤーにクリエイティブ インベントリーの使用を許可する
|
|
||||||
Search=検索
|
|
||||||
Reset=リセット
|
|
||||||
Previous page=前のページ
|
|
||||||
Next page=次のページ
|
|
||||||
All=すべて
|
|
||||||
Nodes=ブロック
|
|
||||||
Tools=道具
|
|
||||||
Items=アイテム
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=zifre le ka pilno le finti ke dacti liste
|
|
||||||
Search=sisku
|
|
||||||
Reset=kraga'igau
|
|
||||||
Previous page=lidne
|
|
||||||
Next page=selyli'e
|
|
||||||
All=ro dacti
|
|
||||||
Nodes=bliku
|
|
||||||
Tools=tutci
|
|
||||||
Items=dacti
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Benarkan pemain menggunakan inventori kreatif
|
|
||||||
Search=Cari
|
|
||||||
Reset=Set semula
|
|
||||||
Previous page=Halaman sebelumnya
|
|
||||||
Next page=Halaman seterusnya
|
|
||||||
All=Semua
|
|
||||||
Nodes=Nod
|
|
||||||
Tools=Alatan
|
|
||||||
Items=Item
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Zezwól graczom na używanie kreatywnego ekwipunku
|
|
||||||
Search=Wyszukaj
|
|
||||||
Reset=Zresetuj
|
|
||||||
Previous page=Poprzednia strona
|
|
||||||
Next page=Następna strona
|
|
||||||
All=Wszystko
|
|
||||||
Nodes=Bloki
|
|
||||||
Tools=Narzędzia
|
|
||||||
Items=Przedmioty
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Permitir o jogador usar o inventário criativo
|
|
||||||
Search=Pesquisar
|
|
||||||
Reset=Redefinir
|
|
||||||
Previous page=Página anterior
|
|
||||||
Next page=Próxima página
|
|
||||||
All=Todos
|
|
||||||
Nodes=Blocos
|
|
||||||
Tools=Ferramentas
|
|
||||||
Items=Itens
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Разрешить игроку использовать творческий инвентарь
|
|
||||||
Search=Поиск
|
|
||||||
Reset=Сброс
|
|
||||||
Previous page=Предыдущая страница
|
|
||||||
Next page=Следующая страница
|
|
||||||
All=Всё
|
|
||||||
Nodes=Ноды
|
|
||||||
Tools=Инструменты
|
|
||||||
Items=Предметы
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Povolí hráčovi použivať kreatívny inventár
|
|
||||||
Search=Hľadaj
|
|
||||||
Reset=Vrátiť späť
|
|
||||||
Previous page=Predchádzajúca stránka
|
|
||||||
Next page=Nasledujúca stránka
|
|
||||||
All=Všetko
|
|
||||||
Nodes=Kocky
|
|
||||||
Tools=Nástroje
|
|
||||||
Items=Veci
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Tillåt spelare att använda kreativa saker
|
|
||||||
Search=Sök
|
|
||||||
Reset=Återställ
|
|
||||||
Previous page=Förra sida
|
|
||||||
Next page=Nästa sida
|
|
||||||
All=Alla
|
|
||||||
Nodes=Noder
|
|
||||||
Tools=Verktyg
|
|
||||||
Items=Saker
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=Дозволити гравцеві використати творчий інвентар
|
|
||||||
Search=Пошук
|
|
||||||
Reset=Скинути
|
|
||||||
Previous page=Попередня сторінка
|
|
||||||
Next page=Наступна сторінка
|
|
||||||
All=Все
|
|
||||||
Nodes=Ноди
|
|
||||||
Tools=Інструменти
|
|
||||||
Items=Предмети
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=允许玩家使用创造模式物品栏
|
|
||||||
Search=搜索
|
|
||||||
Reset=重置
|
|
||||||
Previous page=上一页
|
|
||||||
Next page=下一页
|
|
||||||
All=所有
|
|
||||||
Nodes=节点
|
|
||||||
Tools=工具
|
|
||||||
Items=物品
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=允許玩家使用創造模式物品欄
|
|
||||||
Search=搜索
|
|
||||||
Reset=重置
|
|
||||||
Previous page=上一頁
|
|
||||||
Next page=下一頁
|
|
||||||
All=所有
|
|
||||||
Nodes=節點
|
|
||||||
Tools=工具
|
|
||||||
Items=物品
|
|
@ -1,10 +0,0 @@
|
|||||||
# textdomain: creative
|
|
||||||
Allow player to use creative inventory=
|
|
||||||
Search=
|
|
||||||
Reset=
|
|
||||||
Previous page=
|
|
||||||
Next page=
|
|
||||||
All=
|
|
||||||
Nodes=
|
|
||||||
Tools=
|
|
||||||
Items=
|
|
@ -3,8 +3,6 @@ Minetest Game mod: default
|
|||||||
|
|
||||||
This mod is a base mod for almost any minetest game, it provide default nodes, blocks and biomes configuration.
|
This mod is a base mod for almost any minetest game, it provide default nodes, blocks and biomes configuration.
|
||||||
|
|
||||||
This mod integrates player_api and autodetect older or newer model set for any protocol, integration code is CC-BY-SA-NC by mckaygerhard
|
|
||||||
|
|
||||||
This mod integrates sunglasses and code is CC-BY-SA-NC by mckaygerhard cos original sources are not found!
|
This mod integrates sunglasses and code is CC-BY-SA-NC by mckaygerhard cos original sources are not found!
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
@ -3,8 +3,6 @@ Minetest Game mod: default
|
|||||||
|
|
||||||
This mod is a base mod for almost any minetest game, it provide default nodes, blocks and biomes configuration.
|
This mod is a base mod for almost any minetest game, it provide default nodes, blocks and biomes configuration.
|
||||||
|
|
||||||
This mod integrates player_api and autodetect older or newer model set for any protocol, integration code is CC-BY-SA-NC by mckaygerhard
|
|
||||||
|
|
||||||
This mod integrates sunglasses and code is CC-BY-SA-NC by mckaygerhard cos original sources are not found!
|
This mod integrates sunglasses and code is CC-BY-SA-NC by mckaygerhard cos original sources are not found!
|
||||||
|
|
||||||
# License
|
# License
|
||||||
|
@ -1,357 +0,0 @@
|
|||||||
default.chest = {}
|
|
||||||
|
|
||||||
-- support for MT game translation.
|
|
||||||
local S = default.get_translator
|
|
||||||
|
|
||||||
function default.chest.get_chest_formspec(pos)
|
|
||||||
local spos = pos.x .. "," .. pos.y .. "," .. pos.z
|
|
||||||
local formspec =
|
|
||||||
"size[8,9]" ..
|
|
||||||
"list[nodemeta:" .. spos .. ";main;0,0.3;8,4;]" ..
|
|
||||||
"list[current_player;main;0,4.85;8,1;]" ..
|
|
||||||
"list[current_player;main;0,6.08;8,3;8]" ..
|
|
||||||
"listring[nodemeta:" .. spos .. ";main]" ..
|
|
||||||
"listring[current_player;main]" ..
|
|
||||||
default.get_hotbar_bg(0,4.85)
|
|
||||||
return formspec
|
|
||||||
end
|
|
||||||
|
|
||||||
function default.chest.chest_lid_obstructed(pos)
|
|
||||||
local above = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
||||||
local def = minetest.registered_nodes[minetest.get_node(above).name]
|
|
||||||
-- allow ladders, signs, wallmounted things and torches to not obstruct
|
|
||||||
if def and
|
|
||||||
(def.drawtype == "airlike" or
|
|
||||||
def.drawtype == "signlike" or
|
|
||||||
def.drawtype == "torchlike" or
|
|
||||||
(def.drawtype == "nodebox" and def.paramtype2 == "wallmounted")) then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
function default.chest.chest_lid_close(pn)
|
|
||||||
local chest_open_info = default.chest.open_chests[pn]
|
|
||||||
local pos = chest_open_info.pos
|
|
||||||
local sound = chest_open_info.sound
|
|
||||||
local swap = chest_open_info.swap
|
|
||||||
|
|
||||||
default.chest.open_chests[pn] = nil
|
|
||||||
for k, v in pairs(default.chest.open_chests) do
|
|
||||||
if v.pos.x == pos.x and v.pos.y == pos.y and v.pos.z == pos.z then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
minetest.after(0.2, minetest.swap_node, pos, { name = "default:" .. swap,
|
|
||||||
param2 = node.param2 })
|
|
||||||
minetest.sound_play(sound, {gain = 0.3, pos = pos,
|
|
||||||
max_hear_distance = 10}, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
default.chest.open_chests = {}
|
|
||||||
|
|
||||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|
||||||
if formname ~= "default:chest" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if not player or not fields.quit then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local pn = player:get_player_name()
|
|
||||||
|
|
||||||
if not default.chest.open_chests[pn] then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
default.chest.chest_lid_close(pn)
|
|
||||||
return true
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function(player)
|
|
||||||
local pn = player:get_player_name()
|
|
||||||
if default.chest.open_chests[pn] then
|
|
||||||
default.chest.chest_lid_close(pn)
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
|
|
||||||
function default.chest.register_chest(name, d)
|
|
||||||
local def = table.copy(d)
|
|
||||||
def.drawtype = "mesh"
|
|
||||||
def.visual = "mesh"
|
|
||||||
def.paramtype = "light"
|
|
||||||
def.paramtype2 = "facedir"
|
|
||||||
def.legacy_facedir_simple = true
|
|
||||||
def.is_ground_content = false
|
|
||||||
|
|
||||||
if def.protected then
|
|
||||||
def.on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Locked Chest"))
|
|
||||||
meta:set_string("owner", "")
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("main", 8*4)
|
|
||||||
end
|
|
||||||
def.after_place_node = function(pos, placer)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("owner", placer:get_player_name() or "")
|
|
||||||
meta:set_string("infotext", S("Locked Chest (owned by @1)", meta:get_string("owner")))
|
|
||||||
end
|
|
||||||
def.can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
return inv:is_empty("main") and
|
|
||||||
default.can_interact_with_node(player, pos)
|
|
||||||
end
|
|
||||||
def.allow_metadata_inventory_move = function(pos, from_list, from_index,
|
|
||||||
to_list, to_index, count, player)
|
|
||||||
if not default.can_interact_with_node(player, pos) then
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
return count
|
|
||||||
end
|
|
||||||
def.allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
||||||
if not default.can_interact_with_node(player, pos) then
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
return stack:get_count()
|
|
||||||
end
|
|
||||||
def.allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
|
||||||
if not default.can_interact_with_node(player, pos) then
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
return stack:get_count()
|
|
||||||
end
|
|
||||||
def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
|
||||||
if not default.can_interact_with_node(clicker, pos) then
|
|
||||||
return itemstack
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.sound_play(def.sound_open, {gain = 0.3,
|
|
||||||
pos = pos, max_hear_distance = 10}, true)
|
|
||||||
if not default.chest.chest_lid_obstructed(pos) then
|
|
||||||
minetest.swap_node(pos,
|
|
||||||
{ name = "default:" .. name .. "_open",
|
|
||||||
param2 = node.param2 })
|
|
||||||
end
|
|
||||||
minetest.after(0.2, minetest.show_formspec,
|
|
||||||
clicker:get_player_name(),
|
|
||||||
"default:chest", default.chest.get_chest_formspec(pos))
|
|
||||||
default.chest.open_chests[clicker:get_player_name()] = { pos = pos,
|
|
||||||
sound = def.sound_close, swap = name }
|
|
||||||
end
|
|
||||||
def.on_blast = function() end
|
|
||||||
def.on_key_use = function(pos, player)
|
|
||||||
local secret = minetest.get_meta(pos):get_string("key_lock_secret")
|
|
||||||
local itemstack = player:get_wielded_item()
|
|
||||||
local key_meta = itemstack:get_meta()
|
|
||||||
|
|
||||||
if itemstack:get_metadata() == "" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
if key_meta:get_string("secret") == "" then
|
|
||||||
key_meta:set_string("secret", minetest.parse_json(itemstack:get_metadata()).secret)
|
|
||||||
itemstack:set_metadata("")
|
|
||||||
end
|
|
||||||
|
|
||||||
if secret ~= key_meta:get_string("secret") then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
minetest.show_formspec(
|
|
||||||
player:get_player_name(),
|
|
||||||
"default:chest_locked",
|
|
||||||
default.chest.get_chest_formspec(pos)
|
|
||||||
)
|
|
||||||
end
|
|
||||||
def.on_skeleton_key_use = function(pos, player, newsecret)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
local owner = meta:get_string("owner")
|
|
||||||
local pn = player:get_player_name()
|
|
||||||
|
|
||||||
-- verify placer is owner of lockable chest
|
|
||||||
if owner ~= pn then
|
|
||||||
minetest.record_protection_violation(pos, pn)
|
|
||||||
minetest.chat_send_player(pn, S("You do not own this chest."))
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local secret = meta:get_string("key_lock_secret")
|
|
||||||
if secret == "" then
|
|
||||||
secret = newsecret
|
|
||||||
meta:set_string("key_lock_secret", secret)
|
|
||||||
end
|
|
||||||
|
|
||||||
return secret, S("a locked chest"), owner
|
|
||||||
end
|
|
||||||
else
|
|
||||||
def.on_construct = function(pos)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("infotext", S("Chest"))
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
inv:set_size("main", 8*4)
|
|
||||||
end
|
|
||||||
def.can_dig = function(pos,player)
|
|
||||||
local meta = minetest.get_meta(pos);
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
return inv:is_empty("main")
|
|
||||||
end
|
|
||||||
def.on_rightclick = function(pos, node, clicker)
|
|
||||||
minetest.sound_play(def.sound_open, {gain = 0.3, pos = pos,
|
|
||||||
max_hear_distance = 10}, true)
|
|
||||||
if not default.chest.chest_lid_obstructed(pos) then
|
|
||||||
minetest.swap_node(pos, {
|
|
||||||
name = "default:" .. name .. "_open",
|
|
||||||
param2 = node.param2 })
|
|
||||||
end
|
|
||||||
minetest.after(0.2, minetest.show_formspec,
|
|
||||||
clicker:get_player_name(),
|
|
||||||
"default:chest", default.chest.get_chest_formspec(pos))
|
|
||||||
default.chest.open_chests[clicker:get_player_name()] = { pos = pos,
|
|
||||||
sound = def.sound_close, swap = name }
|
|
||||||
end
|
|
||||||
def.on_blast = function(pos)
|
|
||||||
local drops = {}
|
|
||||||
default.get_inventory_drops(pos, "main", drops)
|
|
||||||
drops[#drops+1] = "default:" .. name
|
|
||||||
minetest.remove_node(pos)
|
|
||||||
return drops
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def.on_metadata_inventory_move = function(pos, from_list, from_index,
|
|
||||||
to_list, to_index, count, player)
|
|
||||||
minetest.log("action", player:get_player_name() ..
|
|
||||||
" moves stuff in chest at " .. minetest.pos_to_string(pos))
|
|
||||||
end
|
|
||||||
def.on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
|
||||||
minetest.log("action", player:get_player_name() ..
|
|
||||||
" moves " .. stack:get_name() ..
|
|
||||||
" to chest at " .. minetest.pos_to_string(pos))
|
|
||||||
end
|
|
||||||
def.on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
|
||||||
minetest.log("action", player:get_player_name() ..
|
|
||||||
" takes " .. stack:get_name() ..
|
|
||||||
" from chest at " .. minetest.pos_to_string(pos))
|
|
||||||
end
|
|
||||||
|
|
||||||
local def_opened = table.copy(def)
|
|
||||||
local def_closed = table.copy(def)
|
|
||||||
|
|
||||||
def_opened.mesh = "chest_open.obj"
|
|
||||||
for i = 1, #def_opened.tiles do
|
|
||||||
if type(def_opened.tiles[i]) == "string" then
|
|
||||||
def_opened.tiles[i] = {name = def_opened.tiles[i], backface_culling = true}
|
|
||||||
elseif def_opened.tiles[i].backface_culling == nil then
|
|
||||||
def_opened.tiles[i].backface_culling = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
def_opened.drop = "default:" .. name
|
|
||||||
def_opened.groups.not_in_creative_inventory = 1
|
|
||||||
def_opened.selection_box = {
|
|
||||||
type = "fixed",
|
|
||||||
fixed = { -1/2, -1/2, -1/2, 1/2, 3/16, 1/2 },
|
|
||||||
}
|
|
||||||
def_opened.can_dig = function()
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
def_opened.on_blast = function() end
|
|
||||||
|
|
||||||
def_closed.mesh = nil
|
|
||||||
def_closed.drawtype = nil
|
|
||||||
def_closed.tiles[6] = def.tiles[5] -- swap textures around for "normal"
|
|
||||||
def_closed.tiles[5] = def.tiles[3] -- drawtype to make them match the mesh
|
|
||||||
def_closed.tiles[3] = def.tiles[3].."^[transformFX"
|
|
||||||
|
|
||||||
minetest.register_node("default:" .. name, def_closed)
|
|
||||||
minetest.register_node("default:" .. name .. "_open", def_opened)
|
|
||||||
|
|
||||||
-- convert old chests to this new variant
|
|
||||||
minetest.register_lbm({
|
|
||||||
label = "update chests to opening chests",
|
|
||||||
name = "default:upgrade_" .. name .. "_v2",
|
|
||||||
nodenames = {"default:" .. name},
|
|
||||||
action = function(pos, node)
|
|
||||||
local meta = minetest.get_meta(pos)
|
|
||||||
meta:set_string("formspec", nil)
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local list = inv:get_list("default:chest")
|
|
||||||
if list then
|
|
||||||
inv:set_size("main", 8*4)
|
|
||||||
inv:set_list("main", list)
|
|
||||||
inv:set_list("default:chest", nil)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
default.chest.register_chest("chest", {
|
|
||||||
description = S("Chest"),
|
|
||||||
tiles = {
|
|
||||||
"default_chest_top.png",
|
|
||||||
"default_chest_top.png",
|
|
||||||
"default_chest_side.png",
|
|
||||||
"default_chest_side.png",
|
|
||||||
"default_chest_front.png",
|
|
||||||
"default_chest_inside.png"
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
sound_open = "default_chest_open",
|
|
||||||
sound_close = "default_chest_close",
|
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2},
|
|
||||||
})
|
|
||||||
|
|
||||||
default.chest.register_chest("chest_locked", {
|
|
||||||
description = S("Locked Chest"),
|
|
||||||
tiles = {
|
|
||||||
"default_chest_top.png",
|
|
||||||
"default_chest_top.png",
|
|
||||||
"default_chest_side.png",
|
|
||||||
"default_chest_side.png",
|
|
||||||
"default_chest_lock.png",
|
|
||||||
"default_chest_inside.png"
|
|
||||||
},
|
|
||||||
sounds = default.node_sound_wood_defaults(),
|
|
||||||
sound_open = "default_chest_open",
|
|
||||||
sound_close = "default_chest_close",
|
|
||||||
groups = {choppy = 2, oddly_breakable_by_hand = 2},
|
|
||||||
protected = true,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:chest",
|
|
||||||
recipe = {
|
|
||||||
{"group:wood", "group:wood", "group:wood"},
|
|
||||||
{"group:wood", "", "group:wood"},
|
|
||||||
{"group:wood", "group:wood", "group:wood"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:chest_locked",
|
|
||||||
recipe = {
|
|
||||||
{"group:wood", "group:wood", "group:wood"},
|
|
||||||
{"group:wood", "default:steel_ingot", "group:wood"},
|
|
||||||
{"group:wood", "group:wood", "group:wood"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft( {
|
|
||||||
type = "shapeless",
|
|
||||||
output = "default:chest_locked",
|
|
||||||
recipe = {"default:chest", "default:steel_ingot"},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "default:chest",
|
|
||||||
burntime = 30,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "default:chest_locked",
|
|
||||||
burntime = 30,
|
|
||||||
})
|
|
@ -1,7 +1,17 @@
|
|||||||
-- mods/default/craftitems.lua
|
-- mods/default/craftitems.lua
|
||||||
|
|
||||||
-- support for MT game translation.
|
minetest.register_craftitem("default:stick", {
|
||||||
local S = default.get_translator
|
description = "Stick",
|
||||||
|
inventory_image = "default_stick.png",
|
||||||
|
groups = {stick = 1, flammable = 2},
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("default:paper", {
|
||||||
|
description = "Paper",
|
||||||
|
inventory_image = "default_paper.png",
|
||||||
|
groups = {flammable = 3},
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
local lpp = 14 -- Lines per book's page
|
local lpp = 14 -- Lines per book's page
|
||||||
local function book_on_use(itemstack, user)
|
local function book_on_use(itemstack, user)
|
||||||
@ -39,24 +49,25 @@ local function book_on_use(itemstack, user)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local formspec
|
local formspec
|
||||||
local esc = minetest.formspec_escape
|
|
||||||
if owner == player_name then
|
if owner == player_name then
|
||||||
formspec = "size[8,8]" ..
|
formspec = "size[8,8]" .. default.gui_bg ..
|
||||||
"field[0.5,1;7.5,0;title;" .. esc(S("Title:")) .. ";" ..
|
default.gui_bg_img ..
|
||||||
esc(title) .. "]" ..
|
"field[0.5,1;7.5,0;title;Title:;" ..
|
||||||
"textarea[0.5,1.5;7.5,7;text;" .. esc(S("Contents:")) .. ";" ..
|
minetest.formspec_escape(title) .. "]" ..
|
||||||
esc(text) .. "]" ..
|
"textarea[0.5,1.5;7.5,7;text;Contents:;" ..
|
||||||
"button_exit[2.5,7.5;3,1;save;" .. esc(S("Save")) .. "]"
|
minetest.formspec_escape(text) .. "]" ..
|
||||||
|
"button_exit[2.5,7.5;3,1;save;Save]"
|
||||||
else
|
else
|
||||||
formspec = "size[8,8]" ..
|
formspec = "size[8,8]" .. default.gui_bg ..
|
||||||
"label[0.5,0.5;" .. esc(S("by @1", owner)) .. "]" ..
|
default.gui_bg_img ..
|
||||||
|
"label[0.5,0.5;by " .. owner .. "]" ..
|
||||||
"tablecolumns[color;text]" ..
|
"tablecolumns[color;text]" ..
|
||||||
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
|
"tableoptions[background=#00000000;highlight=#00000000;border=false]" ..
|
||||||
"table[0.4,0;7,0.5;title;#FFFF00," .. esc(title) .. "]" ..
|
"table[0.4,0;7,0.5;title;#FFFF00," .. minetest.formspec_escape(title) .. "]" ..
|
||||||
"textarea[0.5,1.5;7.5,7;;" ..
|
"textarea[0.5,1.5;7.5,7;;" ..
|
||||||
minetest.formspec_escape(string ~= "" and string or text) .. ";]" ..
|
minetest.formspec_escape(string ~= "" and string or text) .. ";]" ..
|
||||||
"button[2.4,7.6;0.8,0.8;book_prev;<]" ..
|
"button[2.4,7.6;0.8,0.8;book_prev;<]" ..
|
||||||
"label[3.2,7.7;" .. esc(S("Page @1 of @2", page, page_max)) .. "]" ..
|
"label[3.2,7.7;Page " .. page .. " of " .. page_max .. "]" ..
|
||||||
"button[4.9,7.6;0.8,0.8;book_next;>]"
|
"button[4.9,7.6;0.8,0.8;book_next;>]"
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -99,7 +110,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
if #short_title > short_title_size + 3 then
|
if #short_title > short_title_size + 3 then
|
||||||
short_title = short_title:sub(1, short_title_size) .. "..."
|
short_title = short_title:sub(1, short_title_size) .. "..."
|
||||||
end
|
end
|
||||||
data.description = S("\"@1\" by @2", short_title, data.owner)
|
data.description = "\""..short_title.."\" by "..data.owner
|
||||||
data.text = fields.text:sub(1, max_text_size)
|
data.text = fields.text:sub(1, max_text_size)
|
||||||
data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n")
|
data.text = data.text:gsub("\r\n", "\n"):gsub("\r", "\n")
|
||||||
data.page = 1
|
data.page = 1
|
||||||
@ -110,7 +121,7 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
if inv:room_for_item("main", new_stack) then
|
if inv:room_for_item("main", new_stack) then
|
||||||
inv:add_item("main", new_stack)
|
inv:add_item("main", new_stack)
|
||||||
else
|
else
|
||||||
minetest.add_item(player:get_pos(), new_stack)
|
minetest.add_item(player:getpos(), new_stack)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
stack:get_meta():from_table({ fields = data })
|
stack:get_meta():from_table({ fields = data })
|
||||||
@ -145,9 +156,54 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
|||||||
player:set_wielded_item(stack)
|
player:set_wielded_item(stack)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_craftitem("default:book", {
|
||||||
|
description = "Book",
|
||||||
|
inventory_image = "default_book.png",
|
||||||
|
groups = {book = 1, flammable = 3},
|
||||||
|
on_use = book_on_use,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craftitem("default:book_written", {
|
||||||
|
description = "Book With Text",
|
||||||
|
inventory_image = "default_book_written.png",
|
||||||
|
groups = {book = 1, not_in_creative_inventory = 1, flammable = 3},
|
||||||
|
stack_max = 1,
|
||||||
|
on_use = book_on_use,
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
type = "shapeless",
|
||||||
|
output = "default:book_written",
|
||||||
|
recipe = {"default:book", "default:book_written"}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
||||||
|
if itemstack:get_name() ~= "default:book_written" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local original
|
||||||
|
local index
|
||||||
|
for i = 1, player:get_inventory():get_size("craft") do
|
||||||
|
if old_craft_grid[i]:get_name() == "default:book_written" then
|
||||||
|
original = old_craft_grid[i]
|
||||||
|
index = i
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if not original then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local copymeta = original:get_meta():to_table()
|
||||||
|
-- copy of the book held by player's mouse cursor
|
||||||
|
itemstack:get_meta():from_table(copymeta)
|
||||||
|
-- put the book with metadata back in the craft grid
|
||||||
|
craft_inv:set_stack("craft", index, original)
|
||||||
|
end)
|
||||||
|
|
||||||
minetest.register_craftitem("default:skeleton_key", {
|
minetest.register_craftitem("default:skeleton_key", {
|
||||||
description = S("Skeleton Key"),
|
description = "Skeleton Key",
|
||||||
inventory_image = "default_key_skeleton.png",
|
inventory_image = "default_key_skeleton.png",
|
||||||
|
groups = {key = 1},
|
||||||
on_use = function(itemstack, user, pointed_thing)
|
on_use = function(itemstack, user, pointed_thing)
|
||||||
if pointed_thing.type ~= "node" then
|
if pointed_thing.type ~= "node" then
|
||||||
return itemstack
|
return itemstack
|
||||||
@ -185,14 +241,14 @@ minetest.register_craftitem("default:skeleton_key", {
|
|||||||
local new_stack = ItemStack("default:key")
|
local new_stack = ItemStack("default:key")
|
||||||
local meta = new_stack:get_meta()
|
local meta = new_stack:get_meta()
|
||||||
meta:set_string("secret", secret)
|
meta:set_string("secret", secret)
|
||||||
meta:set_string("description", S("Key to @1's @2", user:get_player_name(),
|
meta:set_string("description", "Key to "..user:get_player_name().."'s "
|
||||||
minetest.registered_nodes[node.name].description))
|
..minetest.registered_nodes[node.name].description)
|
||||||
|
|
||||||
if itemstack:get_count() == 0 then
|
if itemstack:get_count() == 0 then
|
||||||
itemstack = new_stack
|
itemstack = new_stack
|
||||||
else
|
else
|
||||||
if inv:add_item("main", new_stack):get_count() > 0 then
|
if inv:add_item("main", new_stack):get_count() > 0 then
|
||||||
minetest.add_item(user:get_pos(), new_stack)
|
minetest.add_item(user:getpos(), new_stack)
|
||||||
end -- else: added to inventory successfully
|
end -- else: added to inventory successfully
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -201,339 +257,88 @@ minetest.register_craftitem("default:skeleton_key", {
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
--
|
|
||||||
-- Craftitem registry
|
|
||||||
--
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:blueberries", {
|
|
||||||
description = S("Blueberries"),
|
|
||||||
inventory_image = "default_blueberries.png",
|
|
||||||
groups = {food_blueberries = 1, food_berry = 1},
|
|
||||||
on_use = minetest.item_eat(2),
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:book", {
|
|
||||||
description = S("Book"),
|
|
||||||
inventory_image = "default_book.png",
|
|
||||||
groups = {book = 1, flammable = 3},
|
|
||||||
on_use = book_on_use,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:book_written", {
|
|
||||||
description = S("Book with Text"),
|
|
||||||
inventory_image = "default_book_written.png",
|
|
||||||
groups = {book = 1, not_in_creative_inventory = 1, flammable = 3},
|
|
||||||
stack_max = 1,
|
|
||||||
on_use = book_on_use,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:bronze_ingot", {
|
|
||||||
description = S("Bronze Ingot"),
|
|
||||||
inventory_image = "default_bronze_ingot.png"
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:clay_brick", {
|
|
||||||
description = S("Clay Brick"),
|
|
||||||
inventory_image = "default_clay_brick.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:clay_lump", {
|
|
||||||
description = S("Clay Lump"),
|
|
||||||
inventory_image = "default_clay_lump.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:coal_lump", {
|
minetest.register_craftitem("default:coal_lump", {
|
||||||
description = S("Coal Lump"),
|
description = "Coal Lump",
|
||||||
inventory_image = "default_coal_lump.png",
|
inventory_image = "default_coal_lump.png",
|
||||||
groups = {coal = 1, flammable = 1}
|
groups = {coal = 1, flammable = 1}
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("default:copper_ingot", {
|
minetest.register_craftitem("default:iron_lump", {
|
||||||
description = S("Copper Ingot"),
|
description = "Iron Lump",
|
||||||
inventory_image = "default_copper_ingot.png"
|
inventory_image = "default_iron_lump.png",
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("default:copper_lump", {
|
minetest.register_craftitem("default:copper_lump", {
|
||||||
description = S("Copper Lump"),
|
description = "Copper Lump",
|
||||||
inventory_image = "default_copper_lump.png"
|
inventory_image = "default_copper_lump.png",
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:diamond", {
|
|
||||||
description = S("Diamond"),
|
|
||||||
inventory_image = "default_diamond.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:flint", {
|
|
||||||
description = S("Flint"),
|
|
||||||
inventory_image = "default_flint.png"
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:gold_ingot", {
|
|
||||||
description = S("Gold Ingot"),
|
|
||||||
inventory_image = "default_gold_ingot.png"
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:gold_lump", {
|
|
||||||
description = S("Gold Lump"),
|
|
||||||
inventory_image = "default_gold_lump.png"
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:iron_lump", {
|
|
||||||
description = S("Iron Lump"),
|
|
||||||
inventory_image = "default_iron_lump.png"
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:mese_crystal", {
|
|
||||||
description = S("Mese Crystal"),
|
|
||||||
inventory_image = "default_mese_crystal.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:mese_crystal_fragment", {
|
|
||||||
description = S("Mese Crystal Fragment"),
|
|
||||||
inventory_image = "default_mese_crystal_fragment.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:obsidian_shard", {
|
|
||||||
description = S("Obsidian Shard"),
|
|
||||||
inventory_image = "default_obsidian_shard.png",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:paper", {
|
|
||||||
description = S("Paper"),
|
|
||||||
inventory_image = "default_paper.png",
|
|
||||||
groups = {flammable = 3},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:steel_ingot", {
|
|
||||||
description = S("Steel Ingot"),
|
|
||||||
inventory_image = "default_steel_ingot.png"
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:stick", {
|
|
||||||
description = S("Stick"),
|
|
||||||
inventory_image = "default_stick.png",
|
|
||||||
groups = {stick = 1, flammable = 2},
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("default:tin_ingot", {
|
|
||||||
description = S("Tin Ingot"),
|
|
||||||
inventory_image = "default_tin_ingot.png"
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craftitem("default:tin_lump", {
|
minetest.register_craftitem("default:tin_lump", {
|
||||||
description = S("Tin Lump"),
|
description = "Tin Lump",
|
||||||
inventory_image = "default_tin_lump.png"
|
inventory_image = "default_tin_lump.png",
|
||||||
})
|
})
|
||||||
|
|
||||||
--
|
minetest.register_craftitem("default:mese_crystal", {
|
||||||
-- Crafting recipes
|
description = "Mese Crystal",
|
||||||
--
|
inventory_image = "default_mese_crystal.png",
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:book",
|
|
||||||
recipe = {
|
|
||||||
{"default:paper"},
|
|
||||||
{"default:paper"},
|
|
||||||
{"default:paper"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
default.register_craft_metadata_copy("default:book", "default:book_written")
|
minetest.register_craftitem("default:gold_lump", {
|
||||||
|
description = "Gold Lump",
|
||||||
minetest.register_craft({
|
inventory_image = "default_gold_lump.png",
|
||||||
output = "default:bronze_ingot 9",
|
|
||||||
recipe = {
|
|
||||||
{"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"},
|
|
||||||
{"default:copper_ingot", "default:tin_ingot", "default:copper_ingot"},
|
|
||||||
{"default:copper_ingot", "default:copper_ingot", "default:copper_ingot"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:diamond", {
|
||||||
output = "default:clay_brick 4",
|
description = "Diamond",
|
||||||
recipe = {
|
inventory_image = "default_diamond.png",
|
||||||
{"default:brick"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:clay_lump", {
|
||||||
output = "default:clay_lump 4",
|
description = "Clay Lump",
|
||||||
recipe = {
|
inventory_image = "default_clay_lump.png",
|
||||||
{"default:clay"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:steel_ingot", {
|
||||||
output = "default:coal_lump 9",
|
description = "Steel Ingot",
|
||||||
recipe = {
|
inventory_image = "default_steel_ingot.png",
|
||||||
{"default:coalblock"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:copper_ingot", {
|
||||||
output = "default:copper_ingot 9",
|
description = "Copper Ingot",
|
||||||
recipe = {
|
inventory_image = "default_copper_ingot.png",
|
||||||
{"default:copperblock"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:tin_ingot", {
|
||||||
output = "default:diamond 9",
|
description = "Tin Ingot",
|
||||||
recipe = {
|
inventory_image = "default_tin_ingot.png",
|
||||||
{"default:diamondblock"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:bronze_ingot", {
|
||||||
output = "default:gold_ingot 9",
|
description = "Bronze Ingot",
|
||||||
recipe = {
|
inventory_image = "default_bronze_ingot.png",
|
||||||
{"default:goldblock"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:gold_ingot", {
|
||||||
output = "default:mese_crystal",
|
description = "Gold Ingot",
|
||||||
recipe = {
|
inventory_image = "default_gold_ingot.png"
|
||||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
|
||||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
|
||||||
{"default:mese_crystal_fragment", "default:mese_crystal_fragment", "default:mese_crystal_fragment"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:mese_crystal_fragment", {
|
||||||
output = "default:mese_crystal 9",
|
description = "Mese Crystal Fragment",
|
||||||
recipe = {
|
inventory_image = "default_mese_crystal_fragment.png",
|
||||||
{"default:mese"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:clay_brick", {
|
||||||
output = "default:mese_crystal_fragment 9",
|
description = "Clay Brick",
|
||||||
recipe = {
|
inventory_image = "default_clay_brick.png",
|
||||||
{"default:mese_crystal"},
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:obsidian_shard", {
|
||||||
output = "default:obsidian_shard 9",
|
description = "Obsidian Shard",
|
||||||
recipe = {
|
inventory_image = "default_obsidian_shard.png",
|
||||||
{"default:obsidian"}
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craftitem("default:flint", {
|
||||||
output = "default:paper",
|
description = "Flint",
|
||||||
recipe = {
|
inventory_image = "default_flint.png"
|
||||||
{"default:papyrus", "default:papyrus", "default:papyrus"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:skeleton_key",
|
|
||||||
recipe = {
|
|
||||||
{"default:gold_ingot"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:steel_ingot 9",
|
|
||||||
recipe = {
|
|
||||||
{"default:steelblock"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:stick 4",
|
|
||||||
recipe = {
|
|
||||||
{"group:wood"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:tin_ingot 9",
|
|
||||||
recipe = {
|
|
||||||
{"default:tinblock"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Cooking recipes
|
|
||||||
--
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "default:clay_brick",
|
|
||||||
recipe = "default:clay_lump",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "default:copper_ingot",
|
|
||||||
recipe = "default:copper_lump",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "default:gold_ingot",
|
|
||||||
recipe = "default:gold_lump",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "default:gold_ingot",
|
|
||||||
recipe = "default:key",
|
|
||||||
cooktime = 5,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "default:gold_ingot",
|
|
||||||
recipe = "default:skeleton_key",
|
|
||||||
cooktime = 5,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "default:steel_ingot",
|
|
||||||
recipe = "default:iron_lump",
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "cooking",
|
|
||||||
output = "default:tin_ingot",
|
|
||||||
recipe = "default:tin_lump",
|
|
||||||
})
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Fuels
|
|
||||||
--
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "default:book",
|
|
||||||
burntime = 3,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "default:book_written",
|
|
||||||
burntime = 3,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "default:coal_lump",
|
|
||||||
burntime = 40,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "default:paper",
|
|
||||||
burntime = 1,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
type = "fuel",
|
|
||||||
recipe = "group:stick",
|
|
||||||
burntime = 1,
|
|
||||||
})
|
})
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
-- mods/default/functions.lua
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Sounds
|
-- Sounds
|
||||||
--
|
--
|
||||||
@ -115,21 +117,6 @@ function default.node_sound_water_defaults(table)
|
|||||||
return table
|
return table
|
||||||
end
|
end
|
||||||
|
|
||||||
function default.node_sound_snow_defaults(table)
|
|
||||||
table = table or {}
|
|
||||||
table.footstep = table.footstep or
|
|
||||||
{name = "default_snow_footstep", gain = 0.2}
|
|
||||||
table.dig = table.dig or
|
|
||||||
{name = "default_snow_footstep", gain = 0.3}
|
|
||||||
table.dug = table.dug or
|
|
||||||
{name = "default_snow_footstep", gain = 0.3}
|
|
||||||
table.place = table.place or
|
|
||||||
{name = "default_place_node", gain = 1.0}
|
|
||||||
default.node_sound_defaults(table)
|
|
||||||
return table
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Lavacooling
|
-- Lavacooling
|
||||||
--
|
--
|
||||||
@ -141,7 +128,7 @@ default.cool_lava = function(pos, node)
|
|||||||
minetest.set_node(pos, {name = "default:stone"})
|
minetest.set_node(pos, {name = "default:stone"})
|
||||||
end
|
end
|
||||||
minetest.sound_play("default_cool_lava",
|
minetest.sound_play("default_cool_lava",
|
||||||
{pos = pos, max_hear_distance = 16, gain = 0.25}, true)
|
{pos = pos, max_hear_distance = 16, gain = 0.25})
|
||||||
end
|
end
|
||||||
|
|
||||||
if minetest.settings:get_bool("enable_lavacooling") ~= false then
|
if minetest.settings:get_bool("enable_lavacooling") ~= false then
|
||||||
@ -158,9 +145,8 @@ if minetest.settings:get_bool("enable_lavacooling") ~= false then
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Optimized helper to put all items in an inventory into a drops list
|
-- optimized helper to put all items in an inventory into a drops list
|
||||||
--
|
--
|
||||||
|
|
||||||
function default.get_inventory_drops(pos, inventory, drops)
|
function default.get_inventory_drops(pos, inventory, drops)
|
||||||
@ -175,12 +161,11 @@ function default.get_inventory_drops(pos, inventory, drops)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Papyrus and cactus growing
|
-- Papyrus and cactus growing
|
||||||
--
|
--
|
||||||
|
|
||||||
-- Wrapping the functions in ABM action is necessary to make overriding them possible
|
-- wrapping the functions in abm action is necessary to make overriding them possible
|
||||||
|
|
||||||
function default.grow_cactus(pos, node)
|
function default.grow_cactus(pos, node)
|
||||||
if node.param2 >= 4 then
|
if node.param2 >= 4 then
|
||||||
@ -257,7 +242,7 @@ minetest.register_abm({
|
|||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Dig upwards
|
-- dig upwards
|
||||||
--
|
--
|
||||||
|
|
||||||
function default.dig_up(pos, node, digger)
|
function default.dig_up(pos, node, digger)
|
||||||
@ -273,7 +258,6 @@ end
|
|||||||
--
|
--
|
||||||
-- Fence registration helper
|
-- Fence registration helper
|
||||||
--
|
--
|
||||||
local fence_collision_extra = minetest.settings:get_bool("enable_fence_tall") and 3/8 or 0
|
|
||||||
|
|
||||||
function default.register_fence(name, def)
|
function default.register_fence(name, def)
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
@ -292,29 +276,19 @@ function default.register_fence(name, def)
|
|||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "connected",
|
type = "connected",
|
||||||
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2, 1/8},
|
fixed = {{-1/8, -1/2, -1/8, 1/8, 1/2, 1/8}},
|
||||||
-- connect_top =
|
-- connect_top =
|
||||||
-- connect_bottom =
|
-- connect_bottom =
|
||||||
connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/8 },
|
connect_front = {{-1/16,3/16,-1/2,1/16,5/16,-1/8},
|
||||||
{-1/16, -5/16, -1/2, 1/16, -3/16, -1/8 }},
|
{-1/16,-5/16,-1/2,1/16,-3/16,-1/8}},
|
||||||
connect_left = {{-1/2, 3/16, -1/16, -1/8, 5/16, 1/16},
|
connect_left = {{-1/2,3/16,-1/16,-1/8,5/16,1/16},
|
||||||
{-1/2, -5/16, -1/16, -1/8, -3/16, 1/16}},
|
{-1/2,-5/16,-1/16,-1/8,-3/16,1/16}},
|
||||||
connect_back = {{-1/16, 3/16, 1/8, 1/16, 5/16, 1/2 },
|
connect_back = {{-1/16,3/16,1/8,1/16,5/16,1/2},
|
||||||
{-1/16, -5/16, 1/8, 1/16, -3/16, 1/2 }},
|
{-1/16,-5/16,1/8,1/16,-3/16,1/2}},
|
||||||
connect_right = {{ 1/8, 3/16, -1/16, 1/2, 5/16, 1/16},
|
connect_right = {{1/8,3/16,-1/16,1/2,5/16,1/16},
|
||||||
{ 1/8, -5/16, -1/16, 1/2, -3/16, 1/16}}
|
{1/8,-5/16,-1/16,1/2,-3/16,1/16}},
|
||||||
},
|
},
|
||||||
collision_box = {
|
connects_to = {"group:fence", "group:wood", "group:tree"},
|
||||||
type = "connected",
|
|
||||||
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
|
|
||||||
-- connect_top =
|
|
||||||
-- connect_bottom =
|
|
||||||
connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
|
|
||||||
connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
|
|
||||||
connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
|
|
||||||
connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
|
|
||||||
},
|
|
||||||
connects_to = {"group:fence", "group:wood", "group:tree", "group:wall"},
|
|
||||||
inventory_image = fence_texture,
|
inventory_image = fence_texture,
|
||||||
wield_image = fence_texture,
|
wield_image = fence_texture,
|
||||||
tiles = {def.texture},
|
tiles = {def.texture},
|
||||||
@ -338,75 +312,6 @@ function default.register_fence(name, def)
|
|||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
-- Fence rail registration helper
|
|
||||||
--
|
|
||||||
|
|
||||||
function default.register_fence_rail(name, def)
|
|
||||||
minetest.register_craft({
|
|
||||||
output = name .. " 16",
|
|
||||||
recipe = {
|
|
||||||
{ def.material, def.material },
|
|
||||||
{ "", ""},
|
|
||||||
{ def.material, def.material },
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
local fence_rail_texture = "default_fence_rail_overlay.png^" .. def.texture ..
|
|
||||||
"^default_fence_rail_overlay.png^[makealpha:255,126,126"
|
|
||||||
-- Allow almost everything to be overridden
|
|
||||||
local default_fields = {
|
|
||||||
paramtype = "light",
|
|
||||||
drawtype = "nodebox",
|
|
||||||
node_box = {
|
|
||||||
type = "connected",
|
|
||||||
fixed = {{-1/16, 3/16, -1/16, 1/16, 5/16, 1/16},
|
|
||||||
{-1/16, -3/16, -1/16, 1/16, -5/16, 1/16}},
|
|
||||||
-- connect_top =
|
|
||||||
-- connect_bottom =
|
|
||||||
connect_front = {{-1/16, 3/16, -1/2, 1/16, 5/16, -1/16},
|
|
||||||
{-1/16, -5/16, -1/2, 1/16, -3/16, -1/16}},
|
|
||||||
connect_left = {{-1/2, 3/16, -1/16, -1/16, 5/16, 1/16},
|
|
||||||
{-1/2, -5/16, -1/16, -1/16, -3/16, 1/16}},
|
|
||||||
connect_back = {{-1/16, 3/16, 1/16, 1/16, 5/16, 1/2 },
|
|
||||||
{-1/16, -5/16, 1/16, 1/16, -3/16, 1/2 }},
|
|
||||||
connect_right = {{ 1/16, 3/16, -1/16, 1/2, 5/16, 1/16},
|
|
||||||
{ 1/16, -5/16, -1/16, 1/2, -3/16, 1/16}}
|
|
||||||
},
|
|
||||||
collision_box = {
|
|
||||||
type = "connected",
|
|
||||||
fixed = {-1/8, -1/2, -1/8, 1/8, 1/2 + fence_collision_extra, 1/8},
|
|
||||||
-- connect_top =
|
|
||||||
-- connect_bottom =
|
|
||||||
connect_front = {-1/8, -1/2, -1/2, 1/8, 1/2 + fence_collision_extra, -1/8},
|
|
||||||
connect_left = {-1/2, -1/2, -1/8, -1/8, 1/2 + fence_collision_extra, 1/8},
|
|
||||||
connect_back = {-1/8, -1/2, 1/8, 1/8, 1/2 + fence_collision_extra, 1/2},
|
|
||||||
connect_right = { 1/8, -1/2, -1/8, 1/2, 1/2 + fence_collision_extra, 1/8}
|
|
||||||
},
|
|
||||||
connects_to = {"group:fence", "group:wall"},
|
|
||||||
inventory_image = fence_rail_texture,
|
|
||||||
wield_image = fence_rail_texture,
|
|
||||||
tiles = {def.texture},
|
|
||||||
sunlight_propagates = true,
|
|
||||||
is_ground_content = false,
|
|
||||||
groups = {},
|
|
||||||
}
|
|
||||||
for k, v in pairs(default_fields) do
|
|
||||||
if def[k] == nil then
|
|
||||||
def[k] = v
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Always add to the fence group, even if no group provided
|
|
||||||
def.groups.fence = 1
|
|
||||||
|
|
||||||
def.texture = nil
|
|
||||||
def.material = nil
|
|
||||||
|
|
||||||
minetest.register_node(name, def)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Leafdecay
|
-- Leafdecay
|
||||||
--
|
--
|
||||||
@ -414,7 +319,7 @@ end
|
|||||||
-- Prevent decay of placed leaves
|
-- Prevent decay of placed leaves
|
||||||
|
|
||||||
default.after_place_leaves = function(pos, placer, itemstack, pointed_thing)
|
default.after_place_leaves = function(pos, placer, itemstack, pointed_thing)
|
||||||
if placer and placer:is_player() then
|
if placer and placer:is_player() and not placer:get_player_control().sneak then
|
||||||
local node = minetest.get_node(pos)
|
local node = minetest.get_node(pos)
|
||||||
node.param2 = 1
|
node.param2 = 1
|
||||||
minetest.set_node(pos, node)
|
minetest.set_node(pos, node)
|
||||||
@ -427,7 +332,7 @@ local function leafdecay_after_destruct(pos, oldnode, def)
|
|||||||
vector.add(pos, def.radius), def.leaves)) do
|
vector.add(pos, def.radius), def.leaves)) do
|
||||||
local node = minetest.get_node(v)
|
local node = minetest.get_node(v)
|
||||||
local timer = minetest.get_node_timer(v)
|
local timer = minetest.get_node_timer(v)
|
||||||
if node.param2 ~= 1 and not timer:is_started() then
|
if node.param2 == 0 and not timer:is_started() then
|
||||||
timer:start(math.random(20, 120) / 10)
|
timer:start(math.random(20, 120) / 10)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -481,7 +386,6 @@ function default.register_leafdecay(def)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Convert dirt to something that fits the environment
|
-- Convert dirt to something that fits the environment
|
||||||
--
|
--
|
||||||
@ -492,6 +396,7 @@ minetest.register_abm({
|
|||||||
neighbors = {
|
neighbors = {
|
||||||
"air",
|
"air",
|
||||||
"group:grass",
|
"group:grass",
|
||||||
|
"group:dry_grass",
|
||||||
"default:snow",
|
"default:snow",
|
||||||
},
|
},
|
||||||
interval = 6,
|
interval = 6,
|
||||||
@ -518,8 +423,11 @@ minetest.register_abm({
|
|||||||
-- Snow check is cheapest, so comes first
|
-- Snow check is cheapest, so comes first
|
||||||
if name == "default:snow" then
|
if name == "default:snow" then
|
||||||
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
minetest.set_node(pos, {name = "default:dirt_with_snow"})
|
||||||
|
-- Most likely case first
|
||||||
elseif minetest.get_item_group(name, "grass") ~= 0 then
|
elseif minetest.get_item_group(name, "grass") ~= 0 then
|
||||||
minetest.set_node(pos, {name = "default:dirt_with_grass"})
|
minetest.set_node(pos, {name = "default:dirt_with_grass"})
|
||||||
|
elseif minetest.get_item_group(name, "dry_grass") ~= 0 then
|
||||||
|
minetest.set_node(pos, {name = "default:dirt_with_dry_grass"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
@ -531,7 +439,7 @@ minetest.register_abm({
|
|||||||
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Grass covered",
|
label = "Grass covered",
|
||||||
nodenames = {"group:spreading_dirt_type", "default:dry_dirt_with_dry_grass"},
|
nodenames = {"group:spreading_dirt_type"},
|
||||||
interval = 8,
|
interval = 8,
|
||||||
chance = 50,
|
chance = 50,
|
||||||
catch_up = false,
|
catch_up = false,
|
||||||
@ -542,11 +450,7 @@ minetest.register_abm({
|
|||||||
if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or
|
if name ~= "ignore" and nodedef and not ((nodedef.sunlight_propagates or
|
||||||
nodedef.paramtype == "light") and
|
nodedef.paramtype == "light") and
|
||||||
nodedef.liquidtype == "none") then
|
nodedef.liquidtype == "none") then
|
||||||
if node.name == "default:dry_dirt_with_dry_grass" then
|
minetest.set_node(pos, {name = "default:dirt"})
|
||||||
minetest.set_node(pos, {name = "default:dry_dirt"})
|
|
||||||
else
|
|
||||||
minetest.set_node(pos, {name = "default:dirt"})
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
@ -556,72 +460,90 @@ minetest.register_abm({
|
|||||||
-- Moss growth on cobble near water
|
-- Moss growth on cobble near water
|
||||||
--
|
--
|
||||||
|
|
||||||
local moss_correspondences = {
|
|
||||||
["default:cobble"] = "default:mossycobble",
|
|
||||||
["stairs:slab_cobble"] = "stairs:slab_mossycobble",
|
|
||||||
["stairs:stair_cobble"] = "stairs:stair_mossycobble",
|
|
||||||
["stairs:stair_inner_cobble"] = "stairs:stair_inner_mossycobble",
|
|
||||||
["stairs:stair_outer_cobble"] = "stairs:stair_outer_mossycobble",
|
|
||||||
["walls:cobble"] = "walls:mossycobble",
|
|
||||||
}
|
|
||||||
minetest.register_abm({
|
minetest.register_abm({
|
||||||
label = "Moss growth",
|
label = "Moss growth",
|
||||||
nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble",
|
nodenames = {"default:cobble", "stairs:slab_cobble", "stairs:stair_cobble", "walls:cobble"},
|
||||||
"stairs:stair_inner_cobble", "stairs:stair_outer_cobble",
|
|
||||||
"walls:cobble"},
|
|
||||||
neighbors = {"group:water"},
|
neighbors = {"group:water"},
|
||||||
interval = 16,
|
interval = 16,
|
||||||
chance = 200,
|
chance = 200,
|
||||||
catch_up = false,
|
catch_up = false,
|
||||||
action = function(pos, node)
|
action = function(pos, node)
|
||||||
node.name = moss_correspondences[node.name]
|
if node.name == "default:cobble" then
|
||||||
if node.name then
|
minetest.set_node(pos, {name = "default:mossycobble"})
|
||||||
minetest.set_node(pos, node)
|
elseif node.name == "stairs:slab_cobble" then
|
||||||
|
minetest.set_node(pos, {name = "stairs:slab_mossycobble", param2 = node.param2})
|
||||||
|
elseif node.name == "stairs:stair_cobble" then
|
||||||
|
minetest.set_node(pos, {name = "stairs:stair_mossycobble", param2 = node.param2})
|
||||||
|
elseif node.name == "walls:cobble" then
|
||||||
|
minetest.set_node(pos, {name = "walls:mossycobble", param2 = node.param2})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Register a craft to copy the metadata of items
|
-- Checks if specified volume intersects a protected volume
|
||||||
--
|
--
|
||||||
|
|
||||||
function default.register_craft_metadata_copy(ingredient, result)
|
function default.intersects_protection(minp, maxp, player_name, interval)
|
||||||
minetest.register_craft({
|
-- 'interval' is the largest allowed interval for the 3D lattice of checks
|
||||||
type = "shapeless",
|
|
||||||
output = result,
|
|
||||||
recipe = {ingredient, result}
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
|
-- Compute the optimal float step 'd' for each axis so that all corners and
|
||||||
if itemstack:get_name() ~= result then
|
-- borders are checked. 'd' will be smaller or equal to 'interval'.
|
||||||
return
|
-- Subtracting 1e-4 ensures that the max co-ordinate will be reached by the
|
||||||
|
-- for loop (which might otherwise not be the case due to rounding errors).
|
||||||
|
local d = {}
|
||||||
|
for _, c in pairs({"x", "y", "z"}) do
|
||||||
|
if maxp[c] > minp[c] then
|
||||||
|
d[c] = (maxp[c] - minp[c]) / math.ceil((maxp[c] - minp[c]) / interval) - 1e-4
|
||||||
|
elseif maxp[c] == minp[c] then
|
||||||
|
d[c] = 1 -- Any value larger than 0 to avoid division by zero
|
||||||
|
else -- maxp[c] < minp[c], print error and treat as protection intersected
|
||||||
|
minetest.log("error", "maxp < minp in 'default.intersects_protection()'")
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local original
|
for zf = minp.z, maxp.z, d.z do
|
||||||
local index
|
local z = math.floor(zf + 0.5)
|
||||||
for i = 1, #old_craft_grid do
|
for yf = minp.y, maxp.y, d.y do
|
||||||
if old_craft_grid[i]:get_name() == result then
|
local y = math.floor(yf + 0.5)
|
||||||
original = old_craft_grid[i]
|
for xf = minp.x, maxp.x, d.x do
|
||||||
index = i
|
local x = math.floor(xf + 0.5)
|
||||||
|
if minetest.is_protected({x = x, y = y, z = z}, player_name) then
|
||||||
|
return true
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if not original then
|
end
|
||||||
return
|
|
||||||
end
|
return false
|
||||||
local copymeta = original:get_meta():to_table()
|
|
||||||
itemstack:get_meta():from_table(copymeta)
|
|
||||||
-- put the book with metadata back in the craft grid
|
|
||||||
craft_inv:set_stack("craft", index, original)
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- NOTICE: This method is not an official part of the API yet.
|
-- Coral death near air
|
||||||
|
--
|
||||||
|
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = {"default:coral_brown", "default:coral_orange"},
|
||||||
|
neighbors = {"air"},
|
||||||
|
interval = 17,
|
||||||
|
chance = 5,
|
||||||
|
catch_up = false,
|
||||||
|
action = function(pos, node)
|
||||||
|
minetest.set_node(pos, {name = "default:coral_skeleton"})
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- NOTICE: This method is not an official part of the API yet!
|
||||||
-- This method may change in future.
|
-- This method may change in future.
|
||||||
--
|
--
|
||||||
|
|
||||||
function default.can_interact_with_node(player, pos)
|
function default.can_interact_with_node(player, pos)
|
||||||
|
if player == nil then return false end
|
||||||
if player and player:is_player() then
|
if player and player:is_player() then
|
||||||
if minetest.check_player_privs(player, "protection_bypass") then
|
if minetest.check_player_privs(player, "protection_bypass") then
|
||||||
return true
|
return true
|
||||||
@ -637,9 +559,9 @@ function default.can_interact_with_node(player, pos)
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Is player wielding the right key?
|
-- is player wielding the right key?
|
||||||
local item = player:get_wielded_item()
|
local item = player:get_wielded_item()
|
||||||
if minetest.get_item_group(item:get_name(), "key") == 1 then
|
if item:get_name() == "default:key" then
|
||||||
local key_meta = item:get_meta()
|
local key_meta = item:get_meta()
|
||||||
|
|
||||||
if key_meta:get_string("secret") == "" then
|
if key_meta:get_string("secret") == "" then
|
||||||
|
@ -1,49 +1,52 @@
|
|||||||
-- default/furnace.lua
|
|
||||||
|
|
||||||
-- support for MT game translation.
|
|
||||||
local S = default.get_translator
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Formspecs
|
-- Formspecs
|
||||||
--
|
--
|
||||||
|
|
||||||
function default.get_furnace_active_formspec(fuel_percent, item_percent)
|
local function active_formspec(fuel_percent, item_percent)
|
||||||
return "size[8,8.5]"..
|
local formspec =
|
||||||
"list[context;src;2.75,0.5;1,1;]"..
|
"size[8,8.5]"..
|
||||||
"list[context;fuel;2.75,2.5;1,1;]"..
|
default.gui_bg..
|
||||||
|
default.gui_bg_img..
|
||||||
|
default.gui_slots..
|
||||||
|
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||||
|
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
"image[2.75,1.5;1,1;default_furnace_fire_bg.png^[lowpart:"..
|
||||||
(fuel_percent)..":default_furnace_fire_fg.png]"..
|
(100-fuel_percent)..":default_furnace_fire_fg.png]"..
|
||||||
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:"..
|
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[lowpart:"..
|
||||||
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
|
(item_percent)..":gui_furnace_arrow_fg.png^[transformR270]"..
|
||||||
"list[context;dst;4.75,0.96;2,2;]"..
|
"list[current_name;dst;4.75,0.96;2,2;]"..
|
||||||
"list[current_player;main;0,4.25;8,1;]"..
|
"list[current_player;main;0,4.25;8,1;]"..
|
||||||
"list[current_player;main;0,5.5;8,3;8]"..
|
"list[current_player;main;0,5.5;8,3;8]"..
|
||||||
"listring[context;dst]"..
|
"listring[current_name;dst]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[context;src]"..
|
"listring[current_name;src]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
"listring[context;fuel]"..
|
"listring[current_name;fuel]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_player;main]"..
|
||||||
default.get_hotbar_bg(0, 4.25)
|
default.get_hotbar_bg(0, 4.25)
|
||||||
|
return formspec
|
||||||
end
|
end
|
||||||
|
|
||||||
function default.get_furnace_inactive_formspec()
|
local inactive_formspec =
|
||||||
return "size[8,8.5]"..
|
"size[8,8.5]"..
|
||||||
"list[context;src;2.75,0.5;1,1;]"..
|
default.gui_bg..
|
||||||
"list[context;fuel;2.75,2.5;1,1;]"..
|
default.gui_bg_img..
|
||||||
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
|
default.gui_slots..
|
||||||
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
|
"list[current_name;src;2.75,0.5;1,1;]"..
|
||||||
"list[context;dst;4.75,0.96;2,2;]"..
|
"list[current_name;fuel;2.75,2.5;1,1;]"..
|
||||||
"list[current_player;main;0,4.25;8,1;]"..
|
"image[2.75,1.5;1,1;default_furnace_fire_bg.png]"..
|
||||||
"list[current_player;main;0,5.5;8,3;8]"..
|
"image[3.75,1.5;1,1;gui_furnace_arrow_bg.png^[transformR270]"..
|
||||||
"listring[context;dst]"..
|
"list[current_name;dst;4.75,0.96;2,2;]"..
|
||||||
"listring[current_player;main]"..
|
"list[current_player;main;0,4.25;8,1;]"..
|
||||||
"listring[context;src]"..
|
"list[current_player;main;0,5.5;8,3;8]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_name;dst]"..
|
||||||
"listring[context;fuel]"..
|
"listring[current_player;main]"..
|
||||||
"listring[current_player;main]"..
|
"listring[current_name;src]"..
|
||||||
default.get_hotbar_bg(0, 4.25)
|
"listring[current_player;main]"..
|
||||||
end
|
"listring[current_name;fuel]"..
|
||||||
|
"listring[current_player;main]"..
|
||||||
|
default.get_hotbar_bg(0, 4.25)
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Node callback functions that are the same for active and inactive furnace
|
-- Node callback functions that are the same for active and inactive furnace
|
||||||
@ -64,7 +67,7 @@ local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
|||||||
if listname == "fuel" then
|
if listname == "fuel" then
|
||||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||||
if inv:is_empty("src") then
|
if inv:is_empty("src") then
|
||||||
meta:set_string("infotext", S("Furnace is empty"))
|
meta:set_string("infotext", "Furnace is empty")
|
||||||
end
|
end
|
||||||
return stack:get_count()
|
return stack:get_count()
|
||||||
else
|
else
|
||||||
@ -102,7 +105,7 @@ end
|
|||||||
|
|
||||||
local function furnace_node_timer(pos, elapsed)
|
local function furnace_node_timer(pos, elapsed)
|
||||||
--
|
--
|
||||||
-- Initialize metadata
|
-- Inizialize metadata
|
||||||
--
|
--
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local fuel_time = meta:get_float("fuel_time") or 0
|
local fuel_time = meta:get_float("fuel_time") or 0
|
||||||
@ -111,7 +114,6 @@ local function furnace_node_timer(pos, elapsed)
|
|||||||
|
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
local srclist, fuellist
|
local srclist, fuellist
|
||||||
local dst_full = false
|
|
||||||
|
|
||||||
local cookable, cooked
|
local cookable, cooked
|
||||||
local fuel
|
local fuel
|
||||||
@ -151,8 +153,6 @@ local function furnace_node_timer(pos, elapsed)
|
|||||||
inv:set_stack("src", 1, aftercooked.items[1])
|
inv:set_stack("src", 1, aftercooked.items[1])
|
||||||
src_time = src_time - cooked.time
|
src_time = src_time - cooked.time
|
||||||
update = true
|
update = true
|
||||||
else
|
|
||||||
dst_full = true
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- Item could not be cooked: probably missing fuel
|
-- Item could not be cooked: probably missing fuel
|
||||||
@ -173,16 +173,6 @@ local function furnace_node_timer(pos, elapsed)
|
|||||||
else
|
else
|
||||||
-- Take fuel from fuel list
|
-- Take fuel from fuel list
|
||||||
inv:set_stack("fuel", 1, afterfuel.items[1])
|
inv:set_stack("fuel", 1, afterfuel.items[1])
|
||||||
-- Put replacements in dst list or drop them on the furnace.
|
|
||||||
local replacements = fuel.replacements
|
|
||||||
if replacements[1] then
|
|
||||||
local leftover = inv:add_item("dst", replacements[1])
|
|
||||||
if not leftover:is_empty() then
|
|
||||||
local above = vector.new(pos.x, pos.y + 1, pos.z)
|
|
||||||
local drop_pos = minetest.find_node_near(above, 1, {"air"}) or above
|
|
||||||
minetest.item_drop(replacements[1], nil, drop_pos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
update = true
|
update = true
|
||||||
fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time)
|
fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time)
|
||||||
end
|
end
|
||||||
@ -200,61 +190,53 @@ local function furnace_node_timer(pos, elapsed)
|
|||||||
if fuel and fuel_totaltime > fuel.time then
|
if fuel and fuel_totaltime > fuel.time then
|
||||||
fuel_totaltime = fuel.time
|
fuel_totaltime = fuel.time
|
||||||
end
|
end
|
||||||
if srclist and srclist[1]:is_empty() then
|
if srclist[1]:is_empty() then
|
||||||
src_time = 0
|
src_time = 0
|
||||||
end
|
end
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Update formspec, infotext and node
|
-- Update formspec, infotext and node
|
||||||
--
|
--
|
||||||
local formspec
|
local formspec = inactive_formspec
|
||||||
local item_state
|
local item_state
|
||||||
local item_percent = 0
|
local item_percent = 0
|
||||||
if cookable then
|
if cookable then
|
||||||
item_percent = math.floor(src_time / cooked.time * 100)
|
item_percent = math.floor(src_time / cooked.time * 100)
|
||||||
if dst_full then
|
if item_percent > 100 then
|
||||||
item_state = S("100% (output full)")
|
item_state = "100% (output full)"
|
||||||
else
|
else
|
||||||
item_state = S("@1%", item_percent)
|
item_state = item_percent .. "%"
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if srclist and not srclist[1]:is_empty() then
|
if srclist[1]:is_empty() then
|
||||||
item_state = S("Not cookable")
|
item_state = "Empty"
|
||||||
else
|
else
|
||||||
item_state = S("Empty")
|
item_state = "Not cookable"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local fuel_state = S("Empty")
|
local fuel_state = "Empty"
|
||||||
local active = false
|
local active = "inactive "
|
||||||
local result = false
|
local result = false
|
||||||
|
|
||||||
if fuel_totaltime ~= 0 then
|
if fuel_totaltime ~= 0 then
|
||||||
active = true
|
active = "active "
|
||||||
local fuel_percent = 100 - math.floor(fuel_time / fuel_totaltime * 100)
|
local fuel_percent = math.floor(fuel_time / fuel_totaltime * 100)
|
||||||
fuel_state = S("@1%", fuel_percent)
|
fuel_state = fuel_percent .. "%"
|
||||||
formspec = default.get_furnace_active_formspec(fuel_percent, item_percent)
|
formspec = active_formspec(fuel_percent, item_percent)
|
||||||
swap_node(pos, "default:furnace_active")
|
swap_node(pos, "default:furnace_active")
|
||||||
-- make sure timer restarts automatically
|
-- make sure timer restarts automatically
|
||||||
result = true
|
result = true
|
||||||
else
|
else
|
||||||
if fuellist and not fuellist[1]:is_empty() then
|
if not fuellist[1]:is_empty() then
|
||||||
fuel_state = S("@1%", 0)
|
fuel_state = "0%"
|
||||||
end
|
end
|
||||||
formspec = default.get_furnace_inactive_formspec()
|
|
||||||
swap_node(pos, "default:furnace")
|
swap_node(pos, "default:furnace")
|
||||||
-- stop timer on the inactive furnace
|
-- stop timer on the inactive furnace
|
||||||
minetest.get_node_timer(pos):stop()
|
minetest.get_node_timer(pos):stop()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local infotext = "Furnace " .. active .. "(Item: " .. item_state .. "; Fuel: " .. fuel_state .. ")"
|
||||||
local infotext
|
|
||||||
if active then
|
|
||||||
infotext = S("Furnace active")
|
|
||||||
else
|
|
||||||
infotext = S("Furnace inactive")
|
|
||||||
end
|
|
||||||
infotext = infotext .. "\n" .. S("(Item: @1; Fuel: @2)", item_state, fuel_state)
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Set meta values
|
-- Set meta values
|
||||||
@ -273,7 +255,7 @@ end
|
|||||||
--
|
--
|
||||||
|
|
||||||
minetest.register_node("default:furnace", {
|
minetest.register_node("default:furnace", {
|
||||||
description = S("Furnace"),
|
description = "Furnace",
|
||||||
tiles = {
|
tiles = {
|
||||||
"default_furnace_top.png", "default_furnace_bottom.png",
|
"default_furnace_top.png", "default_furnace_bottom.png",
|
||||||
"default_furnace_side.png", "default_furnace_side.png",
|
"default_furnace_side.png", "default_furnace_side.png",
|
||||||
@ -291,11 +273,11 @@ minetest.register_node("default:furnace", {
|
|||||||
|
|
||||||
on_construct = function(pos)
|
on_construct = function(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
|
meta:set_string("formspec", inactive_formspec)
|
||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
inv:set_size('src', 1)
|
inv:set_size('src', 1)
|
||||||
inv:set_size('fuel', 1)
|
inv:set_size('fuel', 1)
|
||||||
inv:set_size('dst', 4)
|
inv:set_size('dst', 4)
|
||||||
furnace_node_timer(pos, 0)
|
|
||||||
end,
|
end,
|
||||||
|
|
||||||
on_metadata_inventory_move = function(pos)
|
on_metadata_inventory_move = function(pos)
|
||||||
@ -321,7 +303,7 @@ minetest.register_node("default:furnace", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("default:furnace_active", {
|
minetest.register_node("default:furnace_active", {
|
||||||
description = S("Furnace"),
|
description = "Furnace",
|
||||||
tiles = {
|
tiles = {
|
||||||
"default_furnace_top.png", "default_furnace_bottom.png",
|
"default_furnace_top.png", "default_furnace_bottom.png",
|
||||||
"default_furnace_side.png", "default_furnace_side.png",
|
"default_furnace_side.png", "default_furnace_side.png",
|
||||||
@ -353,11 +335,3 @@ minetest.register_node("default:furnace_active", {
|
|||||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
|
||||||
output = "default:furnace",
|
|
||||||
recipe = {
|
|
||||||
{"group:stone", "group:stone", "group:stone"},
|
|
||||||
{"group:stone", "", "group:stone"},
|
|
||||||
{"group:stone", "group:stone", "group:stone"},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
@ -3,34 +3,15 @@
|
|||||||
|
|
||||||
-- The API documentation in here was moved into game_api.txt
|
-- The API documentation in here was moved into game_api.txt
|
||||||
|
|
||||||
-- Load support for MT game translation.
|
|
||||||
local S = minetest.get_translator("default")
|
|
||||||
|
|
||||||
-- Definitions made by this mod that other mods can use too
|
-- Definitions made by this mod that other mods can use too
|
||||||
default = {}
|
default = {}
|
||||||
|
|
||||||
default.LIGHT_MAX = 14
|
default.LIGHT_MAX = 14
|
||||||
default.get_translator = S
|
|
||||||
|
|
||||||
-- GUI related stuff
|
-- GUI related stuff
|
||||||
minetest.register_on_joinplayer(function(player)
|
default.gui_bg = "bgcolor[#080808BB;true]"
|
||||||
-- Set formspec prepend
|
default.gui_bg_img = "background[5,5;1,1;gui_formbg.png;true]"
|
||||||
local formspec = [[
|
default.gui_slots = "listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF]"
|
||||||
bgcolor[#080808BB;true]
|
|
||||||
listcolors[#00000069;#5A5A5A;#141318;#30434C;#FFF] ]]
|
|
||||||
local name = player:get_player_name()
|
|
||||||
local info = minetest.get_player_information(name)
|
|
||||||
if info.formspec_version > 1 then
|
|
||||||
formspec = formspec .. "background9[5,5;1,1;gui_formbg.png;true;10]"
|
|
||||||
else
|
|
||||||
formspec = formspec .. "background[5,5;1,1;gui_formbg.png;true]"
|
|
||||||
end
|
|
||||||
player:set_formspec_prepend(formspec)
|
|
||||||
|
|
||||||
-- Set hotbar textures
|
|
||||||
player:hud_set_hotbar_image("gui_hotbar.png")
|
|
||||||
player:hud_set_hotbar_selected_image("gui_hotbar_selected.png")
|
|
||||||
end)
|
|
||||||
|
|
||||||
function default.get_hotbar_bg(x,y)
|
function default.get_hotbar_bg(x,y)
|
||||||
local out = ""
|
local out = ""
|
||||||
@ -41,6 +22,9 @@ function default.get_hotbar_bg(x,y)
|
|||||||
end
|
end
|
||||||
|
|
||||||
default.gui_survival_form = "size[8,8.5]"..
|
default.gui_survival_form = "size[8,8.5]"..
|
||||||
|
default.gui_bg..
|
||||||
|
default.gui_bg_img..
|
||||||
|
default.gui_slots..
|
||||||
"list[current_player;main;0,4.25;8,1;]"..
|
"list[current_player;main;0,4.25;8,1;]"..
|
||||||
"list[current_player;main;0,5.5;8,3;8]"..
|
"list[current_player;main;0,5.5;8,3;8]"..
|
||||||
"list[current_player;craft;1.75,0.5;3,3;]"..
|
"list[current_player;craft;1.75,0.5;3,3;]"..
|
||||||
@ -56,7 +40,6 @@ local default_path = minetest.get_modpath("default")
|
|||||||
dofile(default_path.."/functions.lua")
|
dofile(default_path.."/functions.lua")
|
||||||
dofile(default_path.."/trees.lua")
|
dofile(default_path.."/trees.lua")
|
||||||
dofile(default_path.."/nodes.lua")
|
dofile(default_path.."/nodes.lua")
|
||||||
dofile(default_path.."/chests.lua")
|
|
||||||
dofile(default_path.."/furnace.lua")
|
dofile(default_path.."/furnace.lua")
|
||||||
dofile(default_path.."/torch.lua")
|
dofile(default_path.."/torch.lua")
|
||||||
dofile(default_path.."/tools.lua")
|
dofile(default_path.."/tools.lua")
|
||||||
@ -64,5 +47,6 @@ dofile(default_path.."/item_entity.lua")
|
|||||||
dofile(default_path.."/craftitems.lua")
|
dofile(default_path.."/craftitems.lua")
|
||||||
dofile(default_path.."/crafting.lua")
|
dofile(default_path.."/crafting.lua")
|
||||||
dofile(default_path.."/mapgen.lua")
|
dofile(default_path.."/mapgen.lua")
|
||||||
|
dofile(default_path.."/player.lua")
|
||||||
dofile(default_path.."/aliases.lua")
|
dofile(default_path.."/aliases.lua")
|
||||||
dofile(default_path.."/legacy.lua")
|
dofile(default_path.."/legacy.lua")
|
||||||
|
@ -15,12 +15,12 @@ local item = {
|
|||||||
|
|
||||||
burn_up = function(self)
|
burn_up = function(self)
|
||||||
-- disappear in a smoke puff
|
-- disappear in a smoke puff
|
||||||
local p = self.object:get_pos()
|
local p = self.object:getpos()
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
minetest.sound_play("default_item_smoke", {
|
minetest.sound_play("default_item_smoke", {
|
||||||
pos = p,
|
pos = p,
|
||||||
max_hear_distance = 8,
|
max_hear_distance = 8,
|
||||||
}, true)
|
})
|
||||||
minetest.add_particlespawner({
|
minetest.add_particlespawner({
|
||||||
amount = 3,
|
amount = 3,
|
||||||
time = 0.1,
|
time = 0.1,
|
||||||
@ -74,5 +74,5 @@ local item = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
-- set defined item as new __builtin:item, with the old one as fallback table
|
-- set defined item as new __builtin:item, with the old one as fallback table
|
||||||
setmetatable(item, { __index = builtin_item })
|
setmetatable(item, builtin_item)
|
||||||
minetest.register_entity(":__builtin:item", item)
|
minetest.register_entity(":__builtin:item", item)
|
||||||
|
@ -23,27 +23,22 @@ LIGHT_MAX = default.LIGHT_MAX
|
|||||||
|
|
||||||
-- Formspecs
|
-- Formspecs
|
||||||
default.gui_suvival_form = default.gui_survival_form
|
default.gui_suvival_form = default.gui_survival_form
|
||||||
default.gui_bg = ""
|
|
||||||
default.gui_bg_img = ""
|
|
||||||
default.gui_slots = ""
|
|
||||||
|
|
||||||
-- Players
|
-- Players
|
||||||
if minetest.get_modpath("player_api") then
|
if minetest.get_modpath("player_api") then
|
||||||
default.registered_player_models = player_api.registered_models
|
default.registered_player_models = player_api.registered_models
|
||||||
default.player_register_model = player_api.register_model
|
default.player_register_model = player_api.register_model
|
||||||
default.player_attached = player_api.player_attached
|
default.player_attached = player_api.player_attached
|
||||||
default.player_get_animation = player_api.get_animation
|
default.player_get_animation = player_api.get_animation
|
||||||
default.player_set_model = player_api.set_model
|
default.player_set_model = player_api.set_model
|
||||||
default.player_set_textures = player_api.set_textures
|
default.player_set_textures = player_api.set_textures
|
||||||
default.player_set_animation = player_api.set_animation
|
default.player_set_animation = player_api.set_animation
|
||||||
end
|
--else
|
||||||
|
-- player_api.registered_models = default.registered_player_models
|
||||||
-- Chests
|
-- player_api.register_model= default.player_register_model
|
||||||
default.register_chest = default.chest.register_chest
|
-- player_api.player_attached = default.player_attached
|
||||||
|
-- player_api.get_animation = default.player_get_animation
|
||||||
-- Check for a volume intersecting protection
|
-- player_api.set_model = default.player_set_mode
|
||||||
function default.intersects_protection(minp, maxp, player_name, interval)
|
-- player_api.set_textures = default.player_set_textures
|
||||||
minetest.log("warning", "default.intersects_protection() is " ..
|
-- player_api.set_animation = default.player_set_animation
|
||||||
"deprecated, use minetest.is_area_protected() instead.")
|
|
||||||
return minetest.is_area_protected(minp, maxp, player_name, interval)
|
|
||||||
end
|
end
|
||||||
|