Compare commits

..

119 Commits

Author SHA1 Message Date
Lars
a1ab186c6e Fix possible invalid object reference in TNT mod 2024-06-05 00:47:29 -04:00
451b2994fe mod - firefly - fix wrong check for object on place 2024-04-26 17:33:24 -04:00
60ac7cccc9 mods doors - fix error on sounds that xpected table on new engines
* backported commit 201cf5f for newer engines mostly 5.3
2024-04-26 17:30:03 -04:00
77484db3a4 mod - torch - Fix Warning spam about use_texture_alpha 2024-04-24 15:40:24 -04:00
10e85eb910 mod creative - fix check for newer lang on engine, commit f757878 2024-04-24 15:13:43 -04:00
46ce26ded2 Fix Warning spam about use_texture_alpha
* Previously the alpha value in the nodedef indicated the transparency
  the water was actually rendered with. Now only the alpha in the texture
  is respected.
* Closes and fixes https://github.com/minetest/minetest_game/issues/2819
* Backported https://github.com/minetest/minetest_game/pull/2822
* this is the same as https://github.com/minetest/minetest_game/pull/2729
2024-04-24 13:01:57 -04:00
99e163dd82 mods boats/carts - fix player api compatibility with older api 2024-04-23 13:20:19 -04:00
b2b66a6fa7 mods - fix miscpelled line of conditional on nodes 2024-04-23 13:15:29 -04:00
6ed6ce1317 improve warning message definition about old api vs newer one of 3d_armor
* backported commit 94de1bf2bc75071526d1a68d29bc9c4ed9da5dd0 from upstream
2024-04-23 13:03:41 -04:00
d0edf57d46 Beds: Replace hardcoded values of day interval with constants
* backported https://github.com/minetest/minetest_game/pull/2990
* backported commit 2e8ac46120
2024-04-18 16:54:53 -04:00
55189a57f8 Fix some placer nil checks
* backported upstream 70cf7a26fd
2024-04-18 14:22:36 -04:00
da0cad8af7 Fix flammable item entities crashing
* https://github.com/minetest/minetest_game/issues/2657
* https://github.com/minetest/minetest_game/pull/2659
* partial fix from upstream
2024-04-18 13:37:49 -04:00
4901df3c95 mods - default - backported Override builtin item entity the portable way
* closes https://codeberg.org/minenux/minetest-game-minetest/issues/16
2024-04-17 22:19:22 -04:00
c2c28d5e2a mods - default - crafting : fix bad commit, miscpelled - in line 42 2024-04-17 22:18:46 -04:00
ddfec19a2b mods - default - ingtegrated sunglasses with CC-BY-SA-NC over source code and art
* original author not found and minietest developers are so petty to respond
* closes https://codeberg.org/minenux/minetest-game-minetest/issues/14
2024-03-31 22:54:33 -04:00
a3a271b21f stairs - fix multiengine protocol loading of sound table 2023-08-13 19:32:15 -04:00
a110849017 default/player_Api dinamically set the model player on client conection
* improves previous commit 13cd243a031ca6c52457032e0bffc8576b549b3a ,
  the problem is that both server and client must be equal protocol, so
  this ugly hack check if this was loaded into FinalMinetest or Multicraft
  to dinamically check client nature and re-registering the model when
  server and client do not have same player models due the colisionbox check
* NOTE: the check already need to check if the engine is old and the server not,
  so the conditional just try to do exact check agains TRUE boolean.
* Closed https://codeberg.org/minenux/minetest-game-minetest/issues/12
  fixed the problem of collisionbox for the lufix player in ugly way but
  much more effectivelly due can be mixed in FinalMinetest and Multicraft
2023-08-13 19:31:31 -04:00
23eb8437f4 default - revent knockback for attached players
* backported from default game
  fbbc7fc996
2023-08-06 13:21:45 -04:00
d77ba194d4 update player model remove vertial 1 node offset on newer engines only
* Player model: Remove vertical 1 node offset for new engines, but
  Required due to the settable player collision box engine feature
  change for MT/MTG v0.5.0 that breaks compatibility with old client
  so due that this commit will added backguard compatibility
* Autodetec minetest versoin engine and provide right model
  character, update player code to provide compatibility with player_api
2023-08-06 12:36:03 -04:00
a6073f034d mods hudbars+hbarmor+hbhunger - make check for max_hp witout segfault old engines
* optimize checks, only set once, upgrade upstream
* use right supported check for version string
* do not make redundant checks and set of hp_max
* property set log warning notification when parts of mod are not used
* autodetect armor mod and able to work without it
2023-07-26 01:20:32 -04:00
2de5aaeeff mods - hudbars+hbhunger+hbarmor - featured upgrade
* fix workaroun about ssettings not configurable
* do not hardcoded hp_max from other mods, unless configured here
* provide settings for hbhunger steps
* provide settings for auto hide or not hbarmor
* document those missing features
* mark mod with version 2.3.5.0 and using redo flag
* detection of original mods and bypass build-in own features
* optimize loading of hubar for armor, bad initialization
* real check player becouse of wrong implementation at engine
2023-07-24 15:27:25 -04:00
a3f7816526 backguard compatibility of hp_max in older clients, (missing breath_max)
* honoring customizations of hp_max its not so valid in older
  clients becouse of a bug in older clients of hardcoded healt player
  long time ago user requested https://github.com/minetest/minetest/issues/2246
  the value was hardcoded into engine and do not allow to be
  customized by mods until the commit above, this patch
  takes that into consideration and set the value to 20.
* NOTE: as side effect if you started a server that support
  hp_max modification and try to connect using a older client,
  client will perfectly supports the already configured healt
  from client, but will start at 20 initialy, of course with
  max_hp supported over the value of 20
2023-07-19 00:44:11 -04:00
918bb6e8bb mods - hudbars : not hardcoded the hb.init_hudbar max values
* real fix for missing format_string_config.textdomain
  backpoted from c219b708f8
* fix the backguard compatibility for format_string_config.format_string
* add configuration settings for hp_max of player and breath_max
* do not hardcoded hp_max neither breath_max and honor customizations
* real fix of get_properties when join players
* set alternate honored max values before get_properties when join players
* increase default ticks of updates for hud bar, to avoid performance
  issues in low end devices
* optimize and fix texture images
2023-07-17 01:16:50 -04:00
mckayshirou
b4c29033c9 fix creative mode mod backguard compatibility for all engines
* dont follow the creative upstream mod,
  its just wrapper around get_bool(creative) setting, so create a check privilegie
  function and provide backguard compatibility checks
* backported fix from c770d5cb43
  same backported from c770d5cb43
2023-07-13 23:03:51 -04:00
fd5ca024e6 integrated nice hudbars into our default minetest game
* checkout facc2cffb8
* version 2.3.4 with many backported fixeds
2023-06-20 00:42:50 -04:00
336ce1c8db sfinv - sfinv_home set better text for home button 2023-06-18 04:58:26 -04:00
8196401ab8 fireflies - fix wrong conditional 2023-06-18 04:33:29 -04:00
c624fef6f3 Merge sync 'stable-4.0' to stay in sync with featured fireflies mod
* integrate creative new mod
* featured fireflies with ethereal support
2023-06-18 03:17:30 -04:00
9836d04755 fireflies - sync with oiginal and add support for ethereal
* sync with fireflies of upstream original mod and from minenux
* Add vessels group to firefly vessel
* Detect creative mode and creative privilegies, using creative mod
* Detect ethereal mod and provide more biomes of place
2023-06-18 03:17:07 -04:00
ee13c9f46a fireflies - sync with oiginal and add support for ethereal
* sync with fireflies of upstream original mod and from minenux
* Add vessels group to firefly vessel
* Detect creative mode and creative privilegies, using creative mod
* Detect ethereal mod and provide more biomes of place
2023-06-18 03:14:10 -04:00
ea2069d30e fireflies - allow to spawn/put the net fireflies on more biomes if ethereal
* if the etherealmod is detected allow to spawn/put the net/fireflies
  in more biomes
2023-06-17 10:25:47 -04:00
1624147edc included the reduced and external mantanied fireflies mod for older engines
* the mt5 game already has a improved version of fireflies with timer nodes
  that hide the fireflies at day
2023-06-17 09:59:47 -04:00
f208b6312d updated upgraded simplified creative and provide privilegie feature
* register privilegie of creative for older or newer engines
* enhanced the formspec of the creative player to 4 rows
* try to upgrade most close to track upstream original
* return back text button, remove extra media
  check https://notabug.org/TenPlus1/creative/issues/2
* update readme information to diference features
2023-06-16 00:36:33 -04:00
ae8c3f8eba sfinv - upgrade sfinv and integrated sfinv_home to sfinv 2023-06-12 00:32:55 -04:00
729e344fc8 sethome - update mod to upstream 2023-06-12 00:02:51 -04:00
8e59006dc8 sethome - update mod to upstream 2023-06-12 00:02:10 -04:00
284eb28d6c toolranks - fix mt 5.X depends 2023-06-11 23:21:20 -04:00
901fb492c1 Fix many workbench and enchanting table bugs from MT-Eurythmia
* fix crash https://github.com/Mynetest/Mynetest-server/issues/105
* detect that hammer is present and detect if that mese list are mese
* backported https://github.com/MT-Eurythmia/xdecor/commit/59a65c60611ebe8ef3ced2e406968f049>
* backported https://github.com/MT-Eurythmia/xdecor/commit/28a24a805be109eb8ab32b8633b1dfef5>
2023-06-11 21:46:20 -04:00
13a6891758 xdecor - crash avoiting: Added further sanity check and update formspecs
* update xdecir minenux up to 20230611
* backporting https://notabug.org/minenux/minetest-mod-xdecor/commit/3e0ca1304d454297739d6f8>
* backporting https://github.com/0siribix/xdecor/commit/c7e756afc7d246817209c415c6e9a9dda533>
* backporting https://github.com/0siribix/xdecor/commit/3823fce1e05a9472e7cf798c8346ba95ead1>
* backporting https://notabug.org/minenux/minetest-mod-xdecor/commit/9f4002b749920a6aa906ce7>
2023-06-11 19:57:23 -04:00
dab09dfd32 mods - add tenplus1 toolranks with some backported changes features
* toolranks from minenux with spanish translation and featured description
* backguard compatibility
2023-06-11 14:50:11 -04:00
ebdf4427d3 creative - fix mistake on privs 2023-06-11 06:29:33 -04:00
4a9e24b2f2 provide minetest.is_creative_enabled and backguard compatibilty 2023-06-11 06:19:33 -04:00
aa9f63cb3f farming - make apples 3d backporting the 3d_apples mod 2023-06-07 17:21:20 -04:00
115c85ce40 xdecor - fix possible bad array on enchanting code, related to some bugs
* update mod to f6d0f0b2a5c1d435217bb3409a76da9eb36fe889 with last README info nodes
2023-06-07 16:32:25 -04:00
00bad47eed incorporate xdecor a more light respect homedecor 2023-06-06 15:12:23 -04:00
c23219729c update farming mod for mt game v4, need test compatibility 2023-06-06 11:28:47 -04:00
07d4778ffb update information and references.. use git.minetest.org as mirror
* update game info and release focused version
* modernize the game.conf but mantanin compatibility
* provide LICENSE clarification about real autor historicaly (blockmen)
2022-08-23 11:20:42 -04:00
d82008a256 tnt - update to fix MT5 game detectio engine api
* backported fca1999990
* closes https://notabug.org/TenPlus1/tnt/issues/2
* closes https://codeberg.org/minenux/minetest-mod-tnt/issues/2
2022-08-05 22:47:04 -04:00
e02a31343a v 20220728 - update boats mod, fix missing global minetest object access
* property detect the feature using the namespace global var
2022-07-27 01:56:38 -04:00
36427dada6 merge fix for misc error (fix misc error on boat contidional)
* recommit 58c2cb6d89 after upgrade boats
* sync merge with 5.2 stable brach from codeberg repo
2022-07-27 01:53:03 -04:00
b6d93e76d3 Added detection of mod player_api agains default
* use aliasing sustitution to use player_api when detected
* backported those to legacy.lua
2022-04-14 21:11:48 -04:00
812bb323f6 Verify object is player before checking privs backported for mt 0.4.17 game
* backported 3a3f71aa50
* prevents a crash when a 'nil' digger is passed by the engine to minetest.node_dig
2022-04-14 21:04:28 -04:00
d18f9b4251 Do not crash when a skeleton key is used on an unknown node
* backported from default MT 5.1+
2022-04-14 20:57:56 -04:00
574d6cc65c Fix flammable item entities crashing
* backported from https://github.com/minetest/minetest_game/pull/2659
* fix to close https://codeberg.org/minenux/minetest-game-minetest/issues/11
2022-04-14 20:45:16 -04:00
b1440d887d mod: farming - lower refill time, add player check, fix de locale, add trellis
* Import upstream changes from upstream tenplus1 as
  00e4b3cb89
* lower refill time, add player check
  2e90959a6c
* fix de translations due update translations
  a19f852ddf
* fix spanish translations due typos
  35c5245b3c
* add trellis setting to registered_crops
  https://codeberg.org/minenux/minetest-mod-farming/commit/3cbbb3678e
2022-03-09 12:14:28 -04:00
2f97407591 upgrade beds,boats,bucket,carts,creative,doors,farming,fire,stairs,tnt,wool
* beds 7b6fae96d5
* boats 3832de08f7
* bucket 1d9f32295a
* carts dcbca916cf
* creative ca09e77370
* doors a89ab0454d
* farming 10de84d12d
* fire 4e5f7ad553
* stairs c3a5af6c45
* tnt 8195861f90
* wool de642a08e8
2022-03-01 23:26:11 -04:00
c7cb79422b improve README and api documentation 2022-02-28 23:44:55 -04:00
c23bd322f7 docs - fix missing colon in sintax game_api 2022-02-28 23:17:14 -04:00
18aed0219b * document, configure and improve the give_initial_stuff
* This mod provides some stuff per player at initial play when first join only
* set initial_stuff = default:wood 2,farming:bread 2,default:furnace 1,default:torch 5
* the initial_stuff is only configured per config files not at menu
2021-12-13 20:12:36 -06:00
f1e7172fe1 adapted from player_api: Set eye height property for player model
* backported d4e1bd053e
* Player API: Set eye height property for new player model
2021-12-10 17:35:02 -04:00
SmallJoker
74702c6ada Carts: Replace old, deprecated function names 2021-12-10 17:23:59 -04:00
Lars Hofhansl
d37c1d2312 Creative: Do not give creative priv to admin 2021-12-10 17:20:34 -04:00
be96530e20 Mushroom spread: make overridable and reduce spread
* Move mushroom spread ABM action into a global and overridable function.
  but do not optimise spread code
* backported bcf98df5fac3eb59b02d9fdb066ab92c6228d787
* Reduce spread range to reduce spread through walls.
2021-12-10 15:24:32 -04:00
paramat
535204298e Farming: Make cotton look like cotton, add crafted string item
Remove string -> cotton alias.
2021-12-10 15:11:15 -04:00
657f7cee6e set art and game default, use minenux name and logo venenux
* backported d5cc8c46f6
* now we are into minenux so minetest4 stable-4.0 branch for engine
2021-12-10 13:11:24 -04:00
95e70da3a6 Default: Increase the maximum level of the diamond axe to 3
* backported https://github.com/minetest/minetest_game/pull/1854
* This is the maximum level of the other diamond tools and makes the
  number of uses similar to them.
* fixed https://github.com/minetest/minetest_game/issues/1456
  Diamond axe breaks earlier than mese axe
2021-12-09 16:54:51 -04:00
e07ad71d11 Improve node descriptions for most default items and nodes
* backported https://github.com/minetest/minetest_game/pull/1834
* addressed consistency issues previously discussed in:
* https://github.com/minetest/minetest_game/issues/1473
  Bad item descriptions: Too generic descriptions among specific descriptions
  also cos has a strong tendency towards mixing generic item names
* https://github.com/minetest/minetest_game/issues/1817
  Add tree species to descriptions for appletree and jungletree
  No change to node technical names though. Normal wood is obviously an appletree
2021-12-09 16:26:54 -04:00
paramat
9cf3c953f1 Flowers: More flowers 2021-12-09 15:34:31 -04:00
ezhh
4a1fc02e82 Descriptions: Make capitalization consistent 2021-12-09 15:31:52 -04:00
2b6de659cb Floatland biomes: Add ocean biomes to fix missing sandstone
* Update biome lists for blob ores.
* backported bdc09d2313e5734400d2283549c4906d77a546d0
2021-12-09 15:30:08 -04:00
Ezhh
aa7f6cd060 Make sapling, leaves and fence descriptions consistent
* backported https://github.com/minetest/minetest_game/pull/1795
2021-12-09 15:07:47 -04:00
John Cole
fb610ffa59 Allow mossy cobble slabs to combine
* backported https://github.com/minetest/minetest_game/pull/1791
* fixed https://github.com/minetest/minetest_game/issues/1790
2021-12-09 15:03:29 -04:00
tenplus1
fea78bdf54 Creative: Add 'creative' privilege for survival servers
* This adds a 'creative' privilege to survival servers which OPs can bestow
 on admin or competent builders to give access to the creative inventory.
* backported from 0157175346f9af8cf9ea5ffeb5f3d91fa474d044
2021-12-09 13:00:48 -04:00
sofar
d6a66860af Prevent divide by zero (#2106)
This forces all explosions to damage entities within the 1 node
range. If that needs to be disabled, the damage_radius needs to
be set to 0.
2018-05-18 12:50:47 +02:00
paramat
6d850f23a5 Flower spread ABM: Optimise
Match maximum spread density to maximum mapgen density for flowers.
Place 3 flora nodes at once instead of 1.
Change ABM chance value to 300 to match previous spread rate.
ABM becomes 3 times less intensive.
2018-05-18 12:50:47 +02:00
paramat
2c1af0861f Doors: Avoid crash on nil player in 'can dig door' 2018-05-18 12:50:47 +02:00
Jat15
d2ae721235 Stairs: unbind table groups (#2036)
Unbind table groups for base block, stairs, slabs.
2018-05-18 12:50:18 +02:00
paramat
01db55cee5 default:dirt_with_snow: Re-add to soil group
Previously, saplings were not growing if the dirt they are on turned to
'dirt with snow' before growth.
Also for consistency with other dirt nodes.
2018-05-06 20:44:30 +02:00
Ekdohibs
4ba2b5179e Furnace: Fix being able to cook items without enough fuel
This was triggered when too much time had elapsed when timer was called.
Also, fix timer resolution giving free fuel time.
2018-05-06 20:44:30 +02:00
Diego Martínez
a5092c0df6 creative: Add missing tooltips. 2018-05-06 20:44:30 +02:00
paramat
575c098bae Book textures: Reset colour profiles to remove warnings 2018-05-06 20:44:22 +02:00
paramat
cddd59b578 Book textures: Replace with more original textures 2018-05-06 20:40:45 +02:00
ezhh
7a4b1e0ce1 Default: Make burntimes more rational and consistent 2017-12-05 21:24:02 +01:00
DTA7
0216fa08ec Add nil checks for placer 2017-11-19 23:03:38 +01:00
raymoo
ca3e807d35 Creative: Make the placenode registration check for non-player placers 2017-11-19 23:03:38 +01:00
raymoo
ca38bb2390 Creative: Make handle_node_drops override work for non-player diggers 2017-11-19 23:03:38 +01:00
Coder12a
7d07c52d09 Books: Convert \r to \n
Some files or editors may use \r instand of \n like notepad++. If you copy
text written in notepad++ and pasted into the book. The book will only have
one page.
2017-11-19 23:03:38 +01:00
SmallJoker
532013a032 Creative: Cache inventory items on load 2017-11-19 23:03:38 +01:00
tenplus1
a52622669f TNT: Add tnt.boom defaults
This adds def, def.radius and def.damage_radius defaults to the
tnt.boom() function if they aren't specified on call.
2017-11-19 23:03:38 +01:00
SmallJoker
ce5e668681 Bones: Return bones when taking the last ItemStack 2017-11-19 23:03:38 +01:00
tenplus1
6530fa914b Flowers: Add waterlily right-click checks
Check for on_rightclick functions of nodes when holding a waterlily.
2017-11-19 23:03:38 +01:00
rubenwardy
86eb0e1617 Sfinv: Remove possibility of infinite loop when homepage doesn't exist 2017-11-19 23:03:38 +01:00
rubenwardy
93fb9b36ce Sfinv: Rename navigation tabs to reduce chance of a conflict 2017-11-19 23:03:38 +01:00
danielmeek32
09e3505ea1 Chests: Fix locked chest protection against explosions (#1886)
Fixes #1885
2017-11-19 23:03:38 +01:00
tenplus1
cecbfc1676 Chests: Fix open chest after player leave (#1884)
This should fix the chest staying open when a player disconnects while inside.
2017-11-19 23:03:38 +01:00
tenplus1
fba6f6a4cf TNT: Add explode_center flag
Add 'explode_centre' flag which when false explodes as normal and when true runs on_blast on centre node as well as dropping items.
2017-11-19 23:03:38 +01:00
tenplus1
6053456af1 Mushroom spread: Optimise and make overridable
Move mushroom spread ABM action into a global and overridable function.
Optimise spread code.
Reduce spread range to reduce spread through walls.
2017-11-19 23:03:38 +01:00
Hybrid Dog
cc2f75b2f9 Register fence: Allow setting nodedefs to 'false' 2017-11-19 23:03:38 +01:00
tenplus1
b6ef71c92e TNT's tnt:boom cleanup (#1868)
The tnt:boom node doesn't actually need the on_construct and on_timer functions to remove the node after 0.4 seconds as the tnt_explode function already does this beforehand.
2017-11-19 23:03:38 +01:00
SmallJoker
876da2fbc6 Beds: Do not crash when placing in an unknown node 2017-11-19 23:03:38 +01:00
paramat
ea45ca57a5 Lava cooling: Increase interval to 2
An excessive load has been reported caused by the node searching, so even
when no lava is present.
2017-11-19 23:03:34 +01:00
SmallJoker
6fa3ebfa75 Carts: Check for last pathfinder predition too Minor fix to reduce cart jitter slightly 2017-11-19 22:57:28 +01:00
SmallJoker
efe6fb6dfb TNT: Only burn visually connected powder (#1857) 2017-11-19 22:57:28 +01:00
SmallJoker
1aeb2baa91 Creative: Prevent unauthorized item access (#1840) 2017-11-19 22:57:28 +01:00
Ezhh
e4d6425846 Correct farming/stairs dependency (#1838) 2017-11-19 22:57:28 +01:00
Paramat
81f885795d Crafting: Remove duplicate reversed recipes (#1777)
For axes and hoes only use one recipe that matches the appearance of the texture and in inventory.
2017-11-19 22:53:53 +01:00
paramat
f3e29bc2cc Saplings: Reduce grow time to ABM equivalent
Previous times were chosen using statistical maths, but reports suggested
this was too long.
I tested by timing an ABM acting on 100 nodes, with interval and chance equal
to the old sapling ABM.
50 at 4m59s.
99 at 24m58s.
100 at 26m58s.
So choose a grow time between 5 and 25 min for tree and bush saplings.
If 'can grow' is false at grow time the timer is reset to 5 min.
2017-11-19 22:53:53 +01:00
DS-Minetest
3a72f7b84b Add backface_culling to open chests and fencegates 2017-11-19 22:53:53 +01:00
Foz
20bd4560f8 TNT: Track TNT owner in metadata for protection mods
It is useful for protection mods to know who owns an exploding
TNT block. This allows the blocks destroyed by the TNT to be
limited to the same ones the owner could destroy without using
TNT.

TNT placed within a protected area by the area owner, and later
ignited by another player will destroy within the protected area
nodes the igniter may not otherwise be able to interact with. Any
player could significantly increase the size of an explosion by
placing more TNT in an adjacent unprotected area if the original
TNT block was placed withing 1 node of such a boundary. This
feature sounds dangerous, but we are talking about TNT. Players
should use it carefully.
2017-11-19 22:53:53 +01:00
SmallJoker
8991b9fe54 Carts: Do not connect rails with gunpowder (#1812) 2017-11-19 22:53:53 +01:00
Johannes Fritz
aea6c5dd1d Stairs: Add backface culling to stair meshes
If backface culling is not specified for a tile in 'images' it is set to true.
Slabs already have backface culling due to being defined as nodeboxes (which
are then converted to meshnodes).
2017-11-19 22:53:53 +01:00
paramat
da41caca66 Chests: Check 'def' of node above chest to avoid crash
In 'chest_lid_obstructed(pos)' check for nil 'def' to avoid a crash caused by
an unknown node above the chest.
2017-11-19 22:53:14 +01:00
red-001
103af98864 Books: Also limit the max size of the title
This limits the max size of the full title of the book to `80` letters and
the size of the part thats displayed in the tooltip to `35` letters.
2017-11-19 22:53:14 +01:00
red-001
26606b0520 Books: Limit the size of books
Really large books just waste hard drive space and the engine is not designed to
handle that much data in item metadata, this can cause strange things to happen.
2017-11-19 22:52:00 +01:00
red-001
706844e8bf Books: Add nil value checks to the book formspec handler 2017-11-19 22:52:00 +01:00
paramat
a56274c230 Stairs: Use one recipe matching inventory appearence
No longer have 2 recipes for stairs, choose the one that matches the appearence
in inventory (stair rising toward the right).
Helps to reduce recipe count now that an increasing number of stairs are
being registered.
2017-11-19 22:52:00 +01:00
vorunbekannt75@web.de
3512226867 Default: Revert "Default: Shorter and better ABMs"
This reverts commit e523c3a2965afe76b9102b67992e15fafba1594a to re-enable
the overriding and redefinition of these global functions.
2017-11-19 17:16:32 +01:00
ShadowNinja
d5b9fee6fe Merge 0.4.16 into stable-0.4 2017-06-03 17:22:59 -04:00
sfan5
437860feff Merge tag '0.4.15' into stable-0.4
0.4.15
2016-12-22 23:00:57 +01:00
411 changed files with 3623 additions and 12819 deletions

View File

@ -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

View File

@ -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

View File

@ -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
View 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`

View File

@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
------ ------

View File

@ -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
})

View File

@ -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

View File

@ -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[]"

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

After

Width:  |  Height:  |  Size: 215 KiB

View File

@ -50,7 +50,6 @@ function beds.read_spawns()
end end
-- load player spawn positions
beds.read_spawns() beds.read_spawns()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -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.

View File

@ -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"},
}
})

View File

@ -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/

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=Fernglas
Use with 'Zoom' key=Mit „Zoom“-Taste benutzen

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=Prismáticos
Use with 'Zoom' key=Usar con la tecla 'Zoom'

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=Jumelles
Use with 'Zoom' key=Utiliser avec le bouton « Zoom »

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=Binocolo
Use with 'Zoom' key=Usalo col tasto 'Ingrandimento'

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=Binokular
Use with 'Zoom' key=Guna dengan kekunci 'Zum'

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=Бинокль
Use with 'Zoom' key=Используется с привилегией 'Zoom'

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=Kikare
Use with 'Zoom' key=Används med 'Zoom' knappen

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=望远镜
Use with 'Zoom' key=与“缩放”键一起使用

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=望遠鏡
Use with 'Zoom' key=與“縮放”鍵一起使用

View File

@ -1,3 +0,0 @@
# textdomain: binoculars
Binoculars=
Use with 'Zoom' key=

View File

@ -1,4 +0,0 @@
name = binoculars
description = Minetest Game mod: binoculars
depends = default
optional_depends = creative

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 B

View File

@ -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
View File

@ -0,0 +1 @@
default

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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的骨骸

View File

@ -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的骨骸

View File

@ -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=

View File

@ -1,3 +0,0 @@
name = bones
description = Minetest Game mod: bones
depends = default

View File

@ -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

View File

@ -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)

View File

@ -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/

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=Weißer Schmetterling
Red Butterfly=Roter Schmetterling
Violet Butterfly=Violetter Schmetterling

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=Mariposa blanca
Red Butterfly=Mariposa roja
Violet Butterfly=Mariposa violeta

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=Papillon blanc
Red Butterfly=Papillon rouge
Violet Butterfly=Papillon violet

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=Farfalla bianca
Red Butterfly=Farfalla rossa
Violet Butterfly=Farfalla viola

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=Rama-Rama Putih
Red Butterfly=Rama-Rama Merah
Violet Butterfly=Rama-Rama Ungu

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=Белая Бабочка
Red Butterfly=Красная Бабочка
Violet Butterfly=Фиолетовая Бабочка

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=Vit fjäril
Red Butterfly=Röd fjäril
Violet Butterfly=Violett fjäril

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=白蝴蝶
Red Butterfly=红蝴蝶
Violet Butterfly=紫蝴蝶

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=白蝴蝶
Red Butterfly=紅蝴蝶
Violet Butterfly=紫蝴蝶

View File

@ -1,4 +0,0 @@
# textdomain: butterflies
White Butterfly=
Red Butterfly=
Violet Butterfly=

View File

@ -1,4 +0,0 @@
name = butterflies
description = Minetest Game mod: Butterflies
depends = default, flowers
optional_depends = fireflies

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 125 B

View File

@ -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

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,10 +0,0 @@
# textdomain: creative
Allow player to use creative inventory=プレーヤーにクリエイティブ インベントリーの使用を許可する
Search=検索
Reset=リセット
Previous page=前のページ
Next page=次のページ
All=すべて
Nodes=ブロック
Tools=道具
Items=アイテム

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,10 +0,0 @@
# textdomain: creative
Allow player to use creative inventory=Разрешить игроку использовать творческий инвентарь
Search=Поиск
Reset=Сброс
Previous page=Предыдущая страница
Next page=Следующая страница
All=Всё
Nodes=Ноды
Tools=Инструменты
Items=Предметы

View File

@ -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

View File

@ -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

View File

@ -1,10 +0,0 @@
# textdomain: creative
Allow player to use creative inventory=Дозволити гравцеві використати творчий інвентар
Search=Пошук
Reset=Скинути
Previous page=Попередня сторінка
Next page=Наступна сторінка
All=Все
Nodes=Ноди
Tools=Інструменти
Items=Предмети

View File

@ -1,10 +0,0 @@
# textdomain: creative
Allow player to use creative inventory=允许玩家使用创造模式物品栏
Search=搜索
Reset=重置
Previous page=上一页
Next page=下一页
All=所有
Nodes=节点
Tools=工具
Items=物品

View File

@ -1,10 +0,0 @@
# textdomain: creative
Allow player to use creative inventory=允許玩家使用創造模式物品欄
Search=搜索
Reset=重置
Previous page=上一頁
Next page=下一頁
All=所有
Nodes=節點
Tools=工具
Items=物品

View File

@ -1,10 +0,0 @@
# textdomain: creative
Allow player to use creative inventory=
Search=
Reset=
Previous page=
Next page=
All=
Nodes=
Tools=
Items=

View File

@ -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

View File

@ -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

View File

@ -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,
})

File diff suppressed because it is too large Load Diff

View File

@ -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,
}) })

View File

@ -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

View File

@ -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"},
}
})

View File

@ -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")

View File

@ -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)

View File

@ -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

Some files were not shown because too many files have changed in this diff Show More