1
0
Fork 0

Compare commits

...

50 Commits

Author SHA1 Message Date
the-real-herowl 72435933e4 Add defensive check (#4437)
This fixes #4436 and possible other unnoticed crashes by adding a defensive check.

Reviewed-on: VoxeLibre/VoxeLibre#4437
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-06-15 03:51:03 +02:00
the-real-herowl 35e14dd415 Potion conversion fix (#4426)
Reviewed-on: VoxeLibre/VoxeLibre#4426
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-06-13 13:22:14 +02:00
the-real-herowl 173f8a0bca Effect loading fixes (#4425)
Reviewed-on: VoxeLibre/VoxeLibre#4425
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-06-13 13:21:36 +02:00
teknomunk 1f32b47208 Fix crash while fighting whither (#4392)
Reviewed-on: VoxeLibre/VoxeLibre#4392
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-06-12 14:18:03 +02:00
SmokeyDope bf67fd52e1 Zombie texture improvements (#4260)
Reviewed-on: VoxeLibre/VoxeLibre#4260
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: SmokeyDope <smokey@tilde.team>
Co-committed-by: SmokeyDope <smokey@tilde.team>
2024-06-11 19:38:41 +02:00
WillConker fd4e1484af Fix crash on high levels of frost walker (#4423)
Reviewed-on: VoxeLibre/VoxeLibre#4423
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: WillConker <willconker@noreply.git.minetest.land>
Co-committed-by: WillConker <willconker@noreply.git.minetest.land>
2024-06-11 19:17:12 +02:00
teknomunk 1b0deae026 Fix crash when bonemealing sweet berry bushes (#4419)
Reviewed-on: VoxeLibre/VoxeLibre#4419
Reviewed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-06-11 18:47:18 +02:00
teknomunk 313c1f558b Make all hollow logs breakable (#4418)
Reviewed-on: VoxeLibre/VoxeLibre#4418
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-06-11 18:43:33 +02:00
teknomunk 5cafa97dd1 Fix formspec code that reads strength button field (#4385)
Reviewed-on: VoxeLibre/VoxeLibre#4385
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-06-11 18:40:44 +02:00
teknomunk ddab68b87c Add instructions on how to eat to basic controls help entry (#4420)
Reviewed-on: VoxeLibre/VoxeLibre#4420
Reviewed-by: ancientmarinerdev <ancientmariner_dev@proton.me>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-06-10 19:44:30 +00:00
JoseDouglas26 2dafbae64b Hotfix for brewing stands rotation (#4371)
Reviewed-on: VoxeLibre/VoxeLibre#4371
Reviewed-by: teknomunk <teknomunk@protonmail.com>
Co-authored-by: JoseDouglas26 <josedouglas20002014@gmail.com>
Co-committed-by: JoseDouglas26 <josedouglas20002014@gmail.com>
2024-06-07 06:10:52 +00:00
the-real-herowl 65d6cb1d83 Merge pull request 'release/0.87.1' (#4357) from release/0.87.1 into master
Reviewed-on: VoxeLibre/VoxeLibre#4357
2024-06-02 02:01:07 +00:00
the-real-herowl acf72be89c Post-hotfix reset version 0.88.0-SNAPSHOT 2024-06-02 04:00:05 +02:00
the-real-herowl 1153a81b65 Update release notes for hotfix v0.87.1 2024-06-02 03:58:50 +02:00
the-real-herowl f423c1ea25 Set version for hotfix v0.87.1 2024-06-02 03:47:02 +02:00
the-real-herowl d8aeb4ce12 Updated hotfix process (#4356)
Reviewed-on: VoxeLibre/VoxeLibre#4356
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-06-02 01:43:08 +00:00
the-real-herowl 21c182fc0e Fixed creative.lua invalidating iterator in loop (#4354)
Reviewed-on: VoxeLibre/VoxeLibre#4354
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-06-02 00:33:29 +00:00
teknomunk ca033d0e8d Correctly refresh enchantment tool capabilities in mcl_potions haste/fatigue effects (#4355)
Reviewed-on: VoxeLibre/VoxeLibre#4355
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-06-01 23:25:42 +00:00
teknomunk beccbacc73 Fix Stalker texture generation (#4343)
This fixes stalker texture generation when the stalker is standing on a node that uses a texture using a texture modifier.

Reviewed-on: VoxeLibre/VoxeLibre#4343
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-06-01 20:23:38 +00:00
teknomunk ecf12b85cc Fix undefined global warning for variable distance in spawning code (#4348)
Fixes the warning about an undeclared global that occurs the first time a mob attempts to spawn.

Reviewed-on: VoxeLibre/VoxeLibre#4348
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-05-31 09:54:59 +00:00
the-real-herowl f53bedc131 Merge pull request 'Fix beacon crash' (#4342) from teknomunk/MineClone2:fix-beacon-crash into master
Reviewed-on: VoxeLibre/VoxeLibre#4342
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
2024-05-30 11:19:19 +00:00
the-real-herowl 3e6ec9cf10 Fixed eye of ender crash (#4344)
This makes sure every loaded eye of ender gets its `_luck` parameter set.

Reviewed-on: VoxeLibre/VoxeLibre#4344
2024-05-30 11:17:19 +00:00
teknomunk 6c8771485c Fix variable name 2024-05-30 10:51:45 +00:00
teknomunk f621e3c1de Fix up formspecs on pre-0.87.0 beacons, fix typo 2024-05-30 10:51:45 +00:00
teknomunk 7d0f49a218 Fix typo 2024-05-30 10:51:45 +00:00
teknomunk 468c2bc68f Change to conversion table 2024-05-30 10:51:45 +00:00
teknomunk 2fc3d92550 Convert 'strenght' to 'strength' in beacons and guard against no effect string metadata set, fix whitespace in mcl_beacons/init.lua 2024-05-30 10:51:45 +00:00
teknomunk 95228500a9 Don't crash when name == nil 2024-05-30 10:51:45 +00:00
teknomunk c7e43e31d4 Convert crash to a warning 2024-05-30 10:51:45 +00:00
JoseDouglas26 067ad7b78b Change stack size for snowballs and eggs (#4312)
Reviewed-on: VoxeLibre/VoxeLibre#4312
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: JoseDouglas26 <josedouglas20002014@gmail.com>
Co-committed-by: JoseDouglas26 <josedouglas20002014@gmail.com>
2024-05-30 08:31:15 +00:00
teknomunk add9cbe3bc Fix mob spawner crash (#4337)
This fixes #4336 crash at login about mcl_mobspawners. Also adds an API call, `mcl_mobs.register_conversion` for converting one mob into another and updates rovers and stalkers to use this API call.

Reviewed-on: VoxeLibre/VoxeLibre#4337
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-05-30 08:29:12 +00:00
teknomunk c4f4e7b6fc Fix crash that occurs when lingering or splash potions are used from a dispenser (#4335)
Reviewed-on: VoxeLibre/VoxeLibre#4335
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-05-30 08:02:59 +00:00
teknomunk 6394371e4f Update minetest version support information (#4332)
Reviewed-on: VoxeLibre/VoxeLibre#4332
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-05-30 08:00:47 +00:00
the-real-herowl e097c87e7c Merge pull request 'release_0_87_prismatic' (#4320) from release_0_87_prismatic into master
Reviewed-on: VoxeLibre/VoxeLibre#4320
2024-05-26 16:41:42 +00:00
the-real-herowl 9e0136e3c4 Post-release set version 0.88.0-SNAPSHOT 2024-05-26 18:38:39 +02:00
the-real-herowl b2d93f3265 Add release notes for v0.87 2024-05-26 18:30:19 +02:00
the-real-herowl dfddea76fb Updated release credits and set version for v0.87 2024-05-26 18:30:19 +02:00
the-real-herowl da491b8505 Documented a returned table (effect data) (#4330)
Updated documentation, follow-up to #4130

Reviewed-on: VoxeLibre/VoxeLibre#4330
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-05-26 16:29:27 +00:00
the-real-herowl 18571d072c Further documentation fixes (#4329)
All related to the rename. Also updated a script used while releasing.

Reviewed-on: VoxeLibre/VoxeLibre#4329
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-05-26 15:50:05 +00:00
the-real-herowl cae554bc2b Defensive checks (#4328)
Fixes rare crashes related to some effects

Reviewed-on: VoxeLibre/VoxeLibre#4328
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-05-26 15:32:41 +00:00
teknomunk 8feecf2492 Fix crashes with raids and bad omen effect (#4326)
Reviewed-on: VoxeLibre/VoxeLibre#4326
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-05-26 15:21:43 +00:00
Mikita Wiśniewski 68e5c19df4 Add new `supported_node_facedir` group and apply it to item frames (#4291)
This change should fix item frames not placing on chests and similar blocks

Reviewed-on: VoxeLibre/VoxeLibre#4291
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Mikita Wiśniewski <rudzik8@protonmail.com>
Co-committed-by: Mikita Wiśniewski <rudzik8@protonmail.com>
2024-05-26 15:21:14 +00:00
the-real-herowl 54957e6191 Merge pull request 'Update French README' (#4323) from syl/VoxeLibre:readme into master 2024-05-26 17:06:26 +02:00
syl 48482521ca Update French README 2024-05-26 17:05:17 +02:00
syl d086bc5176 Mangrove: Missing upper case (#4324)
Reviewed-on: VoxeLibre/VoxeLibre#4324
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: syl <syl@gresille.org>
Co-committed-by: syl <syl@gresille.org>
2024-05-25 14:42:50 +00:00
the-real-herowl 2bd24120e9 Stalker texture building fix (#4322)
Added a defensive check for stalker texture building.

Reviewed-on: VoxeLibre/VoxeLibre#4322
2024-05-25 11:57:05 +00:00
syl 4d7060cddd French translation for potions (#4321)
Reviewed-on: VoxeLibre/VoxeLibre#4321
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: syl <syl@gresille.org>
Co-committed-by: syl <syl@gresille.org>
2024-05-25 11:18:37 +00:00
Nicu f119259e67 Updated the sleeping formspec for a better look (#4319)
This PR deals with the UI side of #3645 - no logic was changed to prevent the spam related to the `zzZ` button.

The chatbox now only shows in multiplayer, where it belongs. The buttons have also been resized and moved into positions that make them look nicer.

Reviewed-on: VoxeLibre/VoxeLibre#4319
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: Nicu <kneekoo@noreply.git.minetest.land>
Co-committed-by: Nicu <kneekoo@noreply.git.minetest.land>
2024-05-24 20:35:13 +00:00
teknomunk 0a14a74860 Fix crash when converting endermen to rovers (#4318)
Fixes a crash that occurs when automatically converting endermen to rovers.

Reviewed-on: VoxeLibre/VoxeLibre#4318
Reviewed-by: the-real-herowl <the-real-herowl@noreply.git.minetest.land>
Co-authored-by: teknomunk <teknomunk@protonmail.com>
Co-committed-by: teknomunk <teknomunk@protonmail.com>
2024-05-24 10:32:19 +00:00
the-real-herowl cb4396d424 Fix stonecutter warnings (#4315)
This fixes faulty fallthrough mechanisms attempting to register the same recipe more than once in some cases. This fixes the warning spam when entering a world, while keeping the warnings for mods that misuse the Stonecutter API.

Reviewed-on: VoxeLibre/VoxeLibre#4315
Co-authored-by: the-real-herowl <wiktor_t-i@proton.me>
Co-committed-by: the-real-herowl <wiktor_t-i@proton.me>
2024-05-24 10:31:27 +00:00
46 changed files with 853 additions and 279 deletions

View File

@ -3,7 +3,7 @@
## Creator of MineClone
* davedevils
## Creator of MineClone2
## Creator of VoxeLibre
* Wuzzy
## Maintainers
@ -24,6 +24,8 @@
* SmokeyDope
* Faerraven / Michieal
* Codiac
* rudzik8
* teknomunk
## Past Developers
* jordan4ibanez
@ -37,7 +39,6 @@
## Contributors
* RandomLegoBrick
* rudzik8
* Code-Sploit
* aligator
* Rootyjr
@ -129,6 +130,16 @@
* Bakawun
* JoseDouglas26
* Zasco
* PrWalterB
* michaljmalinowski
* nixnoxus
* Potiron
* Tuxilio
* Impulse
* Doods
* SOS-Games
* Bram
* qoheniac
## Music
* Jordach for the jukebox music compilation from Big Freaking Dig

View File

@ -64,9 +64,12 @@ Use the `/giveme` chat command to obtain them. See the in-game help for
an explanation.
## Installation
This game requires [Minetest](http://minetest.net) to run (version 5.4.1 or
later). So you need to install Minetest first. Only stable versions of Minetest
are officially supported.
To run the game with the best performance and support, we recommend the latest
stable version of [Minetest](http://minetest.net), be we always make an effort
to support one version behind the latest stable version. In some cases, older
versions might still be good enough but you would be missing out on important
Minetest features that enable important features for our game.
There is no support for running VoxeLibre in development versions of Minetest.
To install VoxeLibre (if you haven't already), move this directory into the

View File

@ -1,7 +1,8 @@
# VoxeLibre
Un jeu non-officiel similaire à Minecraft pour Minetest. Forké depuis Mineclone par davedevils. Développé par de nombreuses personnes. Pas développé ni supporté par Mojang AB.
Un jeu inspiré de Minecraft pour Minetest. Forké depuis Mineclone par davedevils.
Développé par de nombreuses personnes, voir CREDITS.md pour une liste complète.
### Gameplay
### Gameplay
Vous atterissez dans un monde fait entièrement de cubes et généré aléatoirement. Vous pouvez explorer le monde, miner et construire presque n'importe quel bloc pour créer de nouvelles structures. Vous pouvez choisir de jouer en "mode survie" dans lequel vous devez combattre des monstres et la faim et progresser lentement dans différents aspects du jeu, comme l'extraction de minerai, l'agriculture, la construction de machines et ainsi de suite. Ou alors vous pouvez jouer en "mode créatif" où vous pouvez construire à peu près n'importe quoi instantanément.
### Résumé du Gameplay
@ -21,7 +22,7 @@ Vous atterissez dans un monde fait entièrement de cubes et généré aléatoire
### Commencer
* **Frappez un arbre** jusqu'à ce qu'il casse et donne du bois
* Placez le **bois dans la grille 2x2** (la "grille de fabrication" de votre menu d'inventaire) et fabriquez 4 planches de bois
* Placer les 4 planches de bois dans la grille 2x2 et **fabriquez un établi**
* Placez les 4 planches de bois dans la grille 2x2 et **fabriquez un établi**
* **Faites un clic droit sur l'établi** (icone livre) pour apprendre toutes les recettes possibles
* **Fabriquez une pioche de bois** pour miner la pierre
* Différents outils minent différentes sortes de blocs. Essayez-les !
@ -30,10 +31,10 @@ Vous atterissez dans un monde fait entièrement de cubes et généré aléatoire
### Agriculture
* Trouvez des graines
* Fabriquez une houe
* Faites un clic droit sur la terre ou des blocs similaires avec la houe pour créer des terres agricoles
* Placer des graines sur des terres agricoles et regardez les pousser
* Faites un clic droit sur la terre ou un bloc similaire avec la houe pour créer des terres agricoles
* Placez des graines sur des terres agricoles et regardez les pousser
* Récoltez les plantes une fois matûres
* Les terres agricoles proche de l'eau deviennent humides et accélèrent la croissance
* Les terres agricoles proches de l'eau deviennent humides et accélèrent la croissance
### Four
* Fabriquez un four
@ -46,7 +47,7 @@ Vous atterissez dans un monde fait entièrement de cubes et généré aléatoire
Plus d'aide à propos du jeu, des blocs, objets et plus encore peuvent être trouvés dans le jeu. Vous pouvez accéder à l'aide depuis le menu inventaire.
### Objets spéciaux
Les objets suivants sont intéressants pour le mode Créatif et pour les constructeurs de cartes d'aventure. Ils ne peuvent être obtenus dans le jeu ou dans l'inventaire créatif.
Les objets suivants sont intéressants pour le mode Créatif et pour les constructeurs de cartes d'aventure. Ils ne peuvent être obtenus dans le jeu ou dans l'inventaire créatif.
* Barrière : `mcl_core:barrier`
@ -58,29 +59,31 @@ Il n'y a pas de support de VoxeLibre dans les versions développement de Minetes
Pour installer VoxeLibre (si ce n'est pas déjà fait), déplacez ce dossier dans le dossier “games” de Minetest. Consultez l'aide de Minetest pour en apprendre plus.
## Liens utiles
## Liens utiles
Le dépôt de VoxeLibre est hébergé sur Mesehub. Pour contribuer ou signaler des problèmes, allez là-bas.
* Mesehub : <https://git.minetest.land/MineClone2/MineClone2>
* Mesehub : <https://git.minetest.land/VoxeLibre/VoxeLibre>
* Discord : <https://discord.gg/xE4z8EEpDC>
* YouTube : <https://www.youtube.com/channel/UClI_YcsXMF3KNeJtoBfnk9A>
* IRC : <https://web.libera.chat/#mineclone2>
* Matrix : <https://app.element.io/#/room/#mc2:matrix.org>
* Reddit : <https://www.reddit.com/r/MineClone2/>
* Forums Minetest : <https://forum.minetest.net/viewtopic.php?f=50&t=16407>
* ContentDB : <https://content.minetest.net/packages/wuzzy/mineclone2/>
* OpenCollective : <https://opencollective.com/mineclone2>
* Mastodon : <https://fosstodon.org/@VoxeLibre>
* Lemmy : <https://lemm.ee/c/voxelibre>
* Espace Matrix : <https://app.element.io/#/room/#voxelibre:matrix.org>
* Forums Minetest : <https://forum.minetest.net/viewtopic.php?f=50&t=16407>
* Reddit : <https://www.reddit.com/r/VoxeLibre/>
* IRC (peu utilisé) : <https://web.libera.chat/#mineclone2>
## Objectif
* Essentiellement, créer un clone de Minecraft stable, moddable, libre et gratuit basé sur le moteur de jeu Minetest avec des fonctionnalités abouties, utilisable à la fois en mode solo et multijoueur. Actuellement, beaucoup des fonctionnalités de **Minecraft Java Edition** sont déjà implémentées et leur amélioration est prioritaire sur les nouvelles demandes.
* Avec une priorité moindre, implémenter les fonctionnalités des versions **Minecraft + OptiFine** (OptiFine autant que supporté par le moteur Minetest). Cela signifie que les fonctionnalités présentes dans les versions listées sont priorisées.
* Dans l'idéal, créer une expérience performante qui tourne bien sur des ordinateurs à basse performance. Malheureusement, en raison des mécanismes de Minecraft et des limitations du moteur Minetest ainsi que de la petite taille de la communauté de joueurs sur des ordinateurs à basses performances, les optimisations sont difficiles à explorer.
* Créer un jeu stable, performant, moddable et libre inspiré de Minecraft en utilisant le moteur de jeu Minetest, utilisable à la fois en mode solo et multijoueur.
* Actuellement, un grand nombre de fonctionnalités sont déjà implémentées.
L'amélioration des fonctionnalités existantes est toujours la bienvenue.
## Statut de complétion
Ce jeu est actuellement au stade **beta**.
Il est jouable mais incomplet en fonctionnalités.
La rétro-compatibilité n'est pas entièrement garantie, mettre votre monde à jour peut causer de petits bugs.
Si vous voulez utiliser la version de développement de VoxeLibre en production, la branche master est habituellement relativement stable. Les branches de test fusionnent souvent des pull requests expérimentales et doivent être considérées comme moins stable.
Si vous voulez utiliser la version de développement de VoxeLibre en production, la branche master est habituellement relativement stable.
Les principales fonctionnalités suivantes sont disponibles :
@ -108,12 +111,12 @@ Les principales fonctionnalités suivantes sont disponibles :
* Horloge
* Boussole
* Éponge
* Bloc de slime
* Bloc de slime
* Petites plantes et pousses
* Teintures
* Bannières
* Blocs de décoration : verre, verre teinté, vitres, barres de fer, terre cuites (et couleurs), têtes et plus
* Cadres d'objets
* Cadres d'objets
* Juke-boxes
* Lits
* Menu d'inventaire
@ -122,7 +125,7 @@ Les principales fonctionnalités suivantes sont disponibles :
* Livres pour écrire
* Commandes
* Villages
* L'End
* L'End
* et plus !
Les fonctionnalités suivantes sont incomplètes :

View File

@ -1,4 +1,6 @@
# MineClone 2
This file is severely out of date. If you can help updating this translation, please reach out to us (contact in README.md - the English version).
# VoxeLibre
一個非官方的Minetest遊戲遊玩方式和Minecraft類似。由davedevils從MineClone分拆。
由許多人開發。並非由Mojang Studios開發。<!-- "Mojang AB"'s Name changed at 2020/05, main README should change too -->

View File

@ -28,16 +28,16 @@ git commit -m "Updated release credits and set version for v0.87"
git add releasenotes/0_87-the_prismatic_release.md
git commit -m "Add release notes for v0.87"
```
5. **Tag and push to the tag:**
7. **Tag and push to the tag:**
```
git tag 0.87.0
git push origin 0.87.0
```
6. Update version in game.conf to the next version with -SNAPSHOT suffix:
8. Update version in game.conf to the next version with -SNAPSHOT suffix:
```
git commit -m "Post-release set version 0.87.0-SNAPSHOT"
git commit -m "Post-release set version 0.88.0-SNAPSHOT"
```
7. Push the above to a new branch, and make the release PR. Merge to finalize release process.
9. Push the above to a new branch, and make the release PR. Merge to finalize release process.
### Release via ContentDB
@ -68,46 +68,100 @@ git commit -m "Post-release set version 0.87.0-SNAPSHOT"
## Hotfix Release
The below is not up-to-date. At the next hotfix the process should be finalized and updated.
### Before releasing
First, determine if the current state of the master branch is fine for the Hotfix.
In general, Hotfixes shouldn't contain new features to minimize the risk of regressions.
* If it hasn't been long since the release, and the only PRs merged so far are bugfixes and/or documentation changes,
it is certainly fine to use it as a base for the release.
* If there are some features merged, but they are aimed at fixing/alleviating important issues with the last released version, it may still be fine.
* If there are some simple QoL features merged that are irrelevant to the last release, it may still be fine to use it as a base for the Hotfix.
* If there are major features or large overhauls merged, it *most probably* is **not** fine to use as a base for the Hotfix.
If you decided that the current state of the master branch can be used as the Hotfix version, make sure that all the PRs merged since the last release
are in the Hotfix milestone and you are working on a clean branch based on the master branch, up-to-date with the one on the repo.
In this case, **skip** the following section.
### Prepare release branch
When hotfixing, you should never release new features. Any new code increases risk of new bugs which has additional testing/release concerns.
To mitigate this, you just release the last release, and the relevant bug fix. For this, we do the following:
* Create release branch from the last release tag, push it:
If you decided that the current state of the master branch shouldn't be used as the Hotfix version, you must prepare a release branch.
1. Create release branch from the last release tag, push it:
```
git checkout -b release/0.82.1 0.82.0
git push origin release/0.82.1
```
2. Cherry-pick the relevant commits from the master branch, or merge them from other (PR) branches.
3. Make sure your local copy of the branch contains all the relevant changes, **do not rebase**.
#### Prepare feature branch and fix
* Create feature branch from that release branch (can review it to check only fix is there, nothing else, and use to also merge into master separately)
`git checkout -b hotfix_bug_1_branch`
* Fix crash/serious bug and commit
* Push branch and create pr to the release and also the master branch (Do not rebase, to reduce merge conflict risk. Do not delete after first merge or it needs to be repushed)
#### Update version and tag the release
* After all fixes are in release branch, pull it locally (best to avoid a merge conflict as feature branch will need to be merged into master also, which already changed version):
* Update version in game.conf to hotfix version and commit it. Example: version=0.82.1
* Tag it, push tag and branch:
### Release process
1. Update CREDITS.md if it is needed
2. Update version in game.conf
3. If you've changed CREDITS.md, run the script:
```
git tag 0.82.1
git push origin 0.82.1
lua tools/generate_ingame_credits.lua
```
4. Make a commit for the above:
```
git add game.conf
git commit -m "Set version for hotfix v0.87.1"
```
or, if credits got updated:
```
git add CREDITS.md
git add mods/HUD/mcl_credits/people.lua
git add game.conf
git commit -m "Updated release credits and set version for hotfix v0.87.1"
```
5. Add a section in the last releasnotes, like this:
```
## 0.87.1 hotfix
```
and describe the changes there
6. Make a commit for the releasenotes changes:
```
git add releasenotes/0_87-the_prismatic_release.md
git commit -m "Update release notes for hotfix v0.87.1"
```
7. **Tag and push to the tag:**
```
git tag 0.87.1
git push origin 0.87.1
```
8. If you are skipping some changes from the master branch (and thus are using a prepared master branch from the previous section),
push to the remote and skip the next two steps:
```
git push origin release/0.82.1
```
9. If you're releasing master branch, update version in game.conf to the next version with -SNAPSHOT suffix:
```
git commit -m "Post-hotfix reset version 0.88.0-SNAPSHOT"
```
10. If you're releasing master branch, push the above to a new branch, and make the release PR. Merge to finalize release process.
Note: If you have to do more than 1 hotfix release, can do it on the same release branch.
### Release via ContentDB
1. Go to VoxeLibre page (https://content.minetest.net/packages/Wuzzy/mineclone2/)
2. Click [+Release] button
3. Enter the release tag number in the title and Git reference box. For example (without quotes): "0.87.1"
4. In the minimum minetest version, put the oldest supported version (as of 19/05/2024 it is 5.6), leave the Maximum minetest version blank
5. Click save. Hotfix is now live.
### After releasing
...inform people.
* Add a comment to the forum post with the release number and change log. Maintainer will update the main post with code link.
* Add a Discord announcement post and @everyone with link to the release issue and release notes, and describe briefly what the hotfix does.
* Add a Matrix announcement post and @room with content like above.
* Share the news on reddit + Lemmy. Good subs to share with:
* r/linux_gaming
* r/opensourcegames
* r/opensource
* r/freesoftware
* r/linuxmasterrace
* r/VoxeLibre
* r/MineClone2 (*for now*)

View File

@ -1,4 +1,4 @@
title = VoxeLibre
description = A survival sandbox game. Survive, gather, hunt, build, explore, and do much more.
disallowed_mapgens = v6
version=0.87.0-SNAPSHOT
version=0.88.0-SNAPSHOT

View File

@ -94,5 +94,16 @@ function minetest.check_single_for_falling(pos)
end
end
if get_item_group(node.name, "supported_node_facedir") ~= 0 then
local dir = facedir_to_dir(node.param2)
if dir then
local def = registered_nodes[get_node(vector.add(pos, dir)).name]
if def and def.drawtype == "airlike" then
drop_attached_node(pos)
return true
end
end
end
return false
end

View File

@ -671,6 +671,13 @@ mob will spawn e.g.
mobs_animal:sheep_chance 11000
mobs_monster:sand_monster_chance 100
Registering Mob Conversion
----------------
Sometimes you need to completely replace one mob with a different version. To do this, use:
mcl_mobs.register_conversion(old_name, new_name)
Rideable Horse Example Mob
--------------------------

View File

@ -802,34 +802,37 @@ function mob_class:on_punch(hitter, tflp, tool_capabilities, dir)
end
-- alert others to the attack
local objs = minetest.get_objects_inside_radius(hitter:get_pos(), self.view_range)
local obj = nil
local alert_pos = hitter:get_pos()
if alert_pos then
local objs = minetest.get_objects_inside_radius(alert_pos, self.view_range)
local obj = nil
for n = 1, #objs do
for n = 1, #objs do
obj = objs[n]:get_luaentity()
obj = objs[n]:get_luaentity()
if obj then
-- only alert members of same mob or friends
if obj.group_attack
and obj.state ~= "attack"
and obj.owner ~= name then
if obj.name == self.name then
obj:do_attack(hitter)
elseif type(obj.group_attack) == "table" then
for i=1, #obj.group_attack do
if obj.group_attack[i] == self.name then
obj._aggro = true
obj:do_attack(hitter)
break
if obj then
-- only alert members of same mob or friends
if obj.group_attack
and obj.state ~= "attack"
and obj.owner ~= name then
if obj.name == self.name then
obj:do_attack(hitter)
elseif type(obj.group_attack) == "table" then
for i=1, #obj.group_attack do
if obj.group_attack[i] == self.name then
obj._aggro = true
obj:do_attack(hitter)
break
end
end
end
end
end
-- have owned mobs attack player threat
if obj.owner == name and obj.owner_loyal then
obj:do_attack(self.object)
-- have owned mobs attack player threat
if obj.owner == name and obj.owner_loyal then
obj:do_attack(self.object)
end
end
end
end

View File

@ -342,6 +342,17 @@ function mcl_mobs.register_mob(name, def)
minetest.register_entity(name, setmetatable(final_def,mcl_mobs.mob_class_meta))
end -- END mcl_mobs.register_mob function
function mcl_mobs.register_conversion(old_name, new_name)
minetest.register_entity(old_name, {
on_activate = function(self, staticdata, dtime)
local obj = minetest.add_entity(self.object:get_pos(), new_name, staticdata)
local hook = (obj:get_luaentity() or {})._on_after_convert
if hook then hook(obj) end
self.object:remove()
end,
_convert_to = new_name,
})
end
function mcl_mobs.get_arrow_damage_func(damage, typ)
local typ = mcl_damage.types[typ] and typ or "arrow"

View File

@ -633,7 +633,7 @@ local function get_next_mob_spawn_pos(pos)
-- those further away from the player.
local fx = (math_random(1,10000)-1) / 10000
local x = inverse_pwl(fx, SPAWN_DISTANCE_CDF_PWL)
distance = x * (MOB_SPAWN_ZONE_OUTER - MOB_SPAWN_ZONE_INNER) + MOB_SPAWN_ZONE_INNER
local distance = x * (MOB_SPAWN_ZONE_OUTER - MOB_SPAWN_ZONE_INNER) + MOB_SPAWN_ZONE_INNER
--print("Using spawn distance of "..tostring(distance).." fx="..tostring(fx)..",x="..tostring(x))
-- TODO Floor xoff and zoff and add 0.5 so it tries to spawn in the middle of the square. Less failed attempts.

View File

@ -491,20 +491,17 @@ mcl_mobs.register_mob("mobs_mc:rover", {
view_range = 64,
fear_height = 4,
attack_type = "dogfight",
})
-- compat
minetest.register_entity("mobs_mc:enderman", {
on_activate = function(self, staticdata, dtime)
minetest.add_entity(self.object:get_pos(), "mobs_mc:rover", staticdata)
_on_after_convert = function(obj)
obj:set_properties({
mesh = "vl_rover.b3d",
textures = { "vl_mobs_rover.png^vl_mobs_rover_face.png" },
visual_size = {x=10, y=10},
})
self.object:remove()
end,
})
end
}) -- END mcl_mobs.register_mob("mobs_mc:rover", {
-- compat
mcl_mobs.register_conversion("mobs_mc:enderman", "mobs_mc:rover")
-- End spawn
mcl_mobs:spawn_specific(

View File

@ -32,10 +32,11 @@ local function get_texture(self)
end
end
end
if not texture then
if not texture or texture == "" then
texture = "vl_stalker_default.png"
end
texture = "([combine:16x24:0,0=" .. texture .. ":0,16=" .. texture .. texture_suff
texture = texture:gsub("([\\^:\\[])","\\%1") -- escape texture modifiers
texture = "([combine:16x24:0,0=(" .. texture .. "):0,16=(" .. texture ..")".. texture_suff
if self.attack then
texture = texture .. ")^vl_mobs_stalker_overlay_angry.png"
else
@ -131,7 +132,11 @@ mcl_mobs.register_mob("mobs_mc:stalker", {
self:boom(mcl_util.get_object_center(self.object), self.explosion_strength)
end
end
self.object:set_properties({textures={get_texture(self)}})
local new_texture = get_texture(self)
if self._stalker_texture ~= new_texture then
self.object:set_properties({textures={new_texture, "mobs_mc_empty.png"}})
self._stalker_texture = new_texture
end
end,
on_die = function(self, pos, cmi_cause)
-- Drop a random music disc when killed by skeleton or stray
@ -175,7 +180,18 @@ mcl_mobs.register_mob("mobs_mc:stalker", {
floats = 1,
fear_height = 4,
view_range = 16,
})
_on_after_convert = function(obj)
obj:set_properties({
visual_size = {x=2, y=2},
mesh = "vl_stalker.b3d",
textures = {
{get_texture({}),
"mobs_mc_empty.png"},
},
})
end,
}) -- END mcl_mobs.register_mob("mobs_mc:stalker", {
mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
description = S("Overloaded Stalker"),
@ -304,26 +320,8 @@ mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
--Having trouble when fire is placed with lightning
fire_resistant = true,
glow = 3,
})
-- compat
minetest.register_entity("mobs_mc:creeper", {
on_activate = function(self, staticdata, dtime)
local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker", staticdata)
obj:set_properties({
visual_size = {x=2, y=2},
mesh = "vl_stalker.b3d",
textures = {
{get_texture({}),
"mobs_mc_empty.png"},
},
})
self.object:remove()
end,
})
minetest.register_entity("mobs_mc:creeper_charged", {
on_activate = function(self, staticdata, dtime)
local obj = minetest.add_entity(self.object:get_pos(), "mobs_mc:stalker_overloaded", staticdata)
_on_after_convert = function(obj)
obj:set_properties({
visual_size = {x=2, y=2},
mesh = "vl_stalker.b3d",
@ -332,9 +330,12 @@ minetest.register_entity("mobs_mc:creeper_charged", {
AURA},
},
})
self.object:remove()
end,
})
}) -- END mcl_mobs.register_mob("mobs_mc:stalker_overloaded", {
-- compat
mcl_mobs.register_conversion("mobs_mc:creeper", "mobs_mc:stalker")
mcl_mobs.register_conversion("mobs_mc:creeper_charged", "mobs_mc:stalker_overloaded")
mcl_mobs:spawn_specific(
"mobs_mc:stalker",

View File

@ -105,8 +105,6 @@ function mcl_raids.promote_to_raidcaptain(c) -- object
if cmi_cause and cmi_cause.type == "punch" and cmi_cause.puncher:is_player() then
awards.unlock(cmi_cause.puncher:get_player_name(), "mcl:voluntary_exile")
local lv = mcl_potions.get_effect_level(cmi_cause.puncher, "bad_omen")
if not lv then lv = 0
else lv = lv.factor end
lv = math.max(5,lv + 1)
mcl_potions.give_effect_by_level("bad_omen", cmi_cause.puncher, lv, 6000)
end
@ -311,7 +309,7 @@ mcl_events.register_event("raid",{
self.health_max = 1
self.health = 0
local lv = mcl_potions.get_effect_level(minetest.get_player_by_name(self.player), "bad_omen")
if lv and lv.factor and lv.factor > 1 then self.max_stage = 6 end
if lv > 1 then self.max_stage = 6 end
end,
cond_progress = function(self)
if not is_player_near(self) then return false end

View File

@ -126,6 +126,9 @@ S("• I: Show/hide inventory menu").."\n\n"..
S("Inventory interaction:").."\n"..
S("See the entry “Basics > Inventory”.").."\n\n"..
S("Hunger/Eating:").."\n"..
S("• While holding food, hold the right mouse button (PC) or double-tap and hold the second tap (Android) to eat").."\n\n"..
S("Camera:").."\n"..
S("• Z: Zoom").."\n"..
S("• F7: Toggle camera mode").."\n\n"..

View File

@ -78,6 +78,8 @@ World interaction:=
• I: Show/hide inventory menu=
Inventory interaction:=
See the entry “Basics > Inventory”.=
Hunger/Eating:=
• While holding food, hold the right mouse button (PC) or double-tap and hold the second tap (Android) to eat=
Camera:=
• Z: Zoom=
• F7: Toggle camera mode=

View File

@ -26,6 +26,8 @@ return {
"SmokeyDope",
"Faerraven / Michieal",
"Codiac",
"rudzik8",
"teknomunk",
}},
{S("Past Developers"), 0xF84355, {
"jordan4ibanez",
@ -39,7 +41,6 @@ return {
}},
{S("Contributors"), 0x52FF00, {
"RandomLegoBrick",
"rudzik8",
"Code-Sploit",
"aligator",
"Rootyjr",
@ -131,6 +132,16 @@ return {
"Bakawun",
"JoseDouglas26",
"Zasco",
"PrWalterB",
"michaljmalinowski",
"nixnoxus",
"Potiron",
"Tuxilio",
"Impulse",
"Doods",
"SOS-Games",
"Bram",
"qoheniac",
}},
{S("Music"), 0xA60014, {
"Jordach for the jukebox music compilation from Big Freaking Dig",

View File

@ -106,11 +106,6 @@ minetest.register_on_mods_loaded(function()
end
if def.groups.brewitem then
local str = name
if def.groups._mcl_potion == 1 then
local stack = ItemStack(name)
tt.reload_itemstack_description(stack)
str = stack:to_string()
end
table.insert(inventory_lists["brew"], str)
nonmisc = true
end
@ -128,14 +123,12 @@ minetest.register_on_mods_loaded(function()
local stack = ItemStack(name)
local potency = def._default_potent_level - 1
stack:get_meta():set_int("mcl_potions:potion_potent", potency)
tt.reload_itemstack_description(stack)
table.insert(inventory_lists["brew"], stack:to_string())
end
if def.has_plus then
local stack = ItemStack(name)
local extend = def._default_extend_level
stack:get_meta():set_int("mcl_potions:potion_plus", extend)
tt.reload_itemstack_description(stack)
table.insert(inventory_lists["brew"], stack:to_string())
end
end
@ -144,6 +137,17 @@ minetest.register_on_mods_loaded(function()
end
end
-- Itemstack descriptions need to be reloaded separately, because tt invalidates minetest.registered_items iterators, somehow
-- (and pairs() uses said iterators internally)
-- TODO investigate the iterator invalidation, where does it happen?
for name, list in pairs(inventory_lists) do
for i=1, #list do
local stack = ItemStack(list[i])
tt.reload_itemstack_description(stack)
list[i] = stack:to_string()
end
end
for ench, def in pairs(mcl_enchanting.enchantments) do
local str = "mcl_enchanting:book_enchanted " .. ench .. " " .. def.max_level
if def.inv_tool_tab then

View File

@ -84,6 +84,9 @@ local pallete_order = {
pane_magenta_flat = 16,
pane_magenta = 16
}
local EFFECT_CONVERSIONS = {
strenght = "strength"
}
local function get_beacon_beam(glass_nodename)
if glass_nodename == "air" then return 0 end
@ -159,7 +162,7 @@ local function remove_beacon_beam(pos)
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
end
if node.name == "mcl_beacons:beacon_beam" then
minetest.remove_node({x=pos.x,y=y,z=pos.z})
end
@ -212,24 +215,30 @@ local function effect_player(effect,pos,power_level, effect_level,player)
end
local function apply_effects_to_all_players(pos)
local meta = minetest.get_meta(pos)
local meta = minetest.get_meta(pos)
local effect_string = meta:get_string("effect")
local effect_level = meta:get_int("effect_level")
local effect_level = meta:get_int("effect_level")
local power_level = beacon_blockcheck(pos)
local power_level = beacon_blockcheck(pos)
if effect_level == 2 and power_level < 4 then --no need to run loops when beacon is in an invalid setup :P
local new_effect_string = EFFECT_CONVERSIONS[effect_string]
if new_effect_string then
effect_string = new_effect_string
meta:set_string("effect", effect_string)
end
if effect_string == "" or ( effect_level == 2 and power_level < 4 ) then --no need to run loops when beacon is in an invalid setup :P
return
end
local beacon_distance = (power_level + 1) * 10
local beacon_distance = (power_level + 1) * 10
for _, player in pairs(minetest.get_connected_players()) do
if vector.distance(pos, player:get_pos()) <= beacon_distance then
if not clear_obstructed_beam(pos) then
effect_player(effect_string, pos, power_level, effect_level, player)
end
end
if vector.distance(pos, player:get_pos()) <= beacon_distance then
if not clear_obstructed_beam(pos) then
effect_player(effect_string, pos, power_level, effect_level, player)
end
end
end
end
@ -244,8 +253,7 @@ minetest.register_node("mcl_beacons:beacon", {
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("input", 1)
local form = formspec_string
meta:set_string("formspec", form)
meta:set_string("formspec", formspec_string)
end,
on_destruct = function(pos)
local meta = minetest.get_meta(pos)
@ -257,7 +265,7 @@ minetest.register_node("mcl_beacons:beacon", {
remove_beacon_beam(pos)
end,
on_receive_fields = function(pos, formname, fields, sender)
if fields.swiftness or fields.regeneration or fields.leaping or fields.strenght
if fields.swiftness or fields.regeneration or fields.leaping or fields.strength
or fields.haste or fields.resistance or fields.absorption or fields.slow_falling then
local sender_name = sender:get_player_name()
local power_level = beacon_blockcheck(pos)
@ -271,7 +279,7 @@ minetest.register_node("mcl_beacons:beacon", {
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local input = inv:get_stack("input",1)
if input:is_empty() then
return
end
@ -321,7 +329,7 @@ minetest.register_node("mcl_beacons:beacon", {
end
minetest.get_meta(pos):set_string("effect","resistance")
successful = true
elseif fields.strenght and power_level >= 3 then
elseif fields.strength and power_level >= 3 then
if power_level == 4 then
minetest.get_meta(pos):set_int("effect_level",2)
else
@ -353,7 +361,7 @@ minetest.register_node("mcl_beacons:beacon", {
awards.unlock(sender:get_player_name(),"mcl:beacon")
input:take_item()
inv:set_stack("input",1,input)
local beam_palette_index = 0
remove_beacon_beam(pos)
for y = pos.y +1, pos.y + 201 do
@ -362,7 +370,6 @@ minetest.register_node("mcl_beacons:beacon", {
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
end
if minetest.get_item_group(node.name, "glass") ~= 0 or minetest.get_item_group(node.name,"material_glass") ~= 0 then
beam_palette_index = get_beacon_beam(node.name)
@ -426,10 +433,19 @@ minetest.register_abm{
apply_effects_to_all_players(pos)
end,
}
minetest.register_lbm({
label = "Update beacon formspecs (0.87.1)",
name = "mcl_beacons:update_beacon_formspecs_0_87_1",
nodenames = { "mcl_beacons:beacon" },
action = function(pos)
local meta = minetest.get_meta(pos)
meta:set_string("formspec", formspec_string)
end
})
minetest.register_craft({
output = "mcl_beacons:beacon",
recipe = {
recipe = {
{"mcl_core:glass", "mcl_core:glass", "mcl_core:glass"},
{"mcl_core:glass", "mcl_mobitems:nether_star", "mcl_core:glass"},
{"mcl_core:obsidian", "mcl_core:obsidian", "mcl_core:obsidian"}

View File

@ -225,11 +225,9 @@ local function update_formspecs(finished, players)
local button_abort = "button_exit[4,3;4,0.75;leave;"..F(S("Abort sleep")).."]"
local bg_presleep = "bgcolor[#00000080;true]"
local bg_sleep = "bgcolor[#000000FF;true]"
local chatbox = "field[0.2,4.5;9,1;chatmessage;"..F(S("Chat:"))..";]"
local chatsubmit = "button[9.2,3.75;1,2;chatsubmit;"..F(S("send!")).."]"
local defaultmessagebutton = "button[10.2,3.75;1,2;defaultmessage;zzZzzZ]"
form_n = form_n .. chatbox .. chatsubmit --because these should be in the formspec in ANY case, they might as well be added here already
local chatbox = "field[0.3,4.5;10,1;chatmessage;"..F(S("Chat:"))..";]"
local chatsubmit = "button[10,3.73;2,2;chatsubmit;"..F(S("Send")).."]"
local defaultmessagebutton = "button[10.98,2.93;1,2;defaultmessage;zzZ]"
if finished then
for name,_ in pairs(mcl_beds.player) do
@ -237,6 +235,7 @@ local function update_formspecs(finished, players)
end
return
elseif not is_sp then
form_n = form_n .. chatbox .. chatsubmit --because these should be in the formspec in ANY case, they might as well be added here already
local text = S("Players in bed: @1/@2", player_in_bed, ges)
if not night_skip then
text = text .. "\n" .. S("Note: Night skip is disabled.")

View File

@ -340,6 +340,7 @@ local function on_put(pos, listname, index, stack, player)
local inv = meta:get_inventory()
local str = ""
local stack
local oldparam2 = minetest.get_node(pos).param2
for i=1, inv:get_size("stand") do
stack = inv:get_stack("stand", i)
if not stack:is_empty() then
@ -347,7 +348,7 @@ local function on_put(pos, listname, index, stack, player)
else str = str.."0"
end
end
minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str})
minetest.swap_node(pos, {name = "mcl_brewing:stand_"..str, param2 = oldparam2})
minetest.get_node_timer(pos):start(1.0)
--some code here to enforce only potions getting placed on stands
end

View File

@ -205,7 +205,8 @@ walkover.register_global(function(pos, _, player)
if frost_walker <= 0 then
return
end
local radius = frost_walker + 2
-- 1011 = sqrt(4096000)/2; 4096000 is the max number of nodes for find_nodes_in_area_under_air
local radius = math.min(frost_walker + 2, 1011)
local minp = {x = pos.x - radius, y = pos.y, z = pos.z - radius}
local maxp = {x = pos.x + radius, y = pos.y, z = pos.z + radius}
local positions = minetest.find_nodes_in_area_under_air(minp, maxp, "mcl_core:water_source")

View File

@ -22,6 +22,7 @@ minetest.register_entity("mcl_end:ender_eye", {
self._phase = 0
end
end
if not self._luck then self._luck = 0 end
end,
on_step = function(self, dtime)

View File

@ -53,7 +53,7 @@ for i=0, 3 do
end
if 3 ~= i and mcl_dye and
clicker:get_wielded_item():get_name() == "mcl_bone_meal:bone_meal" then
mcl_dye.apply_bone_meal({under=pos},clicker)
mcl_dye.apply_bone_meal({under=pos, above=vector.offset(pos,0,1,0)},clicker)
if not minetest.is_creative_enabled(pn) then
itemstack:take_item()
end

View File

@ -654,7 +654,7 @@ end
minetest.register_alias("mcl_hoppers:hopper_item", "mcl_hoppers:hopper")
minetest.register_lbm({
label = "Update hopper formspecs (0.60.0",
label = "Update hopper formspecs (0.60.0)",
name = "mcl_hoppers:update_formspec_0_60_0",
nodenames = {"group:hopper"},
run_at_every_load = false,

View File

@ -638,7 +638,7 @@ function mcl_itemframes.create_base_definitions()
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
groups = { dig_immediate = 3, deco_block = 1, dig_by_piston = 1, container = 1, attached_node_facedir = 1 },
groups = { dig_immediate = 3, deco_block = 1, dig_by_piston = 1, container = 1, supported_node_facedir = 1 },
sounds = mcl_sounds.node_sound_defaults(),
node_placement_prediction = "",

View File

@ -266,7 +266,7 @@ minetest.register_node("mcl_mangrove:river_water_logged_roots",rwlroots)
minetest.register_node("mcl_mangrove:mangrove_mud_roots", {
description = S("Muddy Mangrove Roots"),
_tt_help = S("crafted with Mud and Mangrove roots"),
_tt_help = S("Crafted with Mud and Mangrove roots"),
_doc_items_longdesc = S("Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it."),
tiles = {
"mcl_mud.png^mcl_mangrove_roots_top.png",

View File

@ -21,7 +21,7 @@ water logged mangrove roots=racines de palétuvier immergées
Mangrove roots, despite being a full block, can be waterlogged and do not flow water out=Les racines de palétuvier sont un bloc plein mais qui peut être immergé et ne remplace pas l'eau.
These cannot be crafted yet only occure when get in contact of water.=Elles ne peuvent être fabriquées mais se forment au contact de l'eau.
Muddy Mangrove Roots=Racines de palétuvier boueuses
crafted with Mud and Mangrove roots=fabriqué avec de la boue et des racines de palétuvier
Crafted with Mud and Mangrove roots=Fabriqué avec de la boue et des racines de palétuvier
Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it.=Les racines de palétuvier boueuses sont un bloc du marécage de la mangrove. Il noie un joueur à l'intérieur.
Mangrove Door=Porte en palétuvier
Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Les portes en bois sont des barrières hautes à 2 blocs qui peuvent être ouvertes ou fermées à la main et par un signal redstone.

View File

@ -21,7 +21,7 @@ water logged mangrove roots=水没したマングローブの根
Mangrove roots, despite being a full block, can be waterlogged and do not flow water out=マングローブの根は、フルブロックであるにもかかわらず水没することがあり、水が流出しない
These cannot be crafted yet only occure when get in contact of water.=これはクラフトできないものの、水と接触したときだけ発生します。
Muddy Mangrove Roots=泥に塗れたマングローブの根
crafted with Mud and Mangrove roots=泥とマングローブの根で作られたもの
Crafted with Mud and Mangrove roots=泥とマングローブの根で作られたもの
Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it.=泥に塗れたマングローブの根は、マングローブの沼地から1ブロックの場所にあります。
Mangrove Door=マングローブのドア
Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=木製のドアは、高さ2ブロックの障壁で、手やレッドストーンの信号で開閉できます。

View File

@ -21,7 +21,7 @@ water logged mangrove roots=Raízes de Mangue Alagadas
Mangrove roots, despite being a full block, can be waterlogged and do not flow water out=Raízes de mangue, mesmo sendo um bloco inteiro, podem ser alagadas e não escorre água delas.
These cannot be crafted yet only occure when get in contact of water.=Essas não podem ser fabricadas ainda ocorrendo apenas quando tem contato com a água.
Muddy Mangrove Roots=Raízes Barrentas de Mangue
crafted with Mud and Mangrove roots=Fabricadas com barro e raízes de mangue
Crafted with Mud and Mangrove roots=Fabricadas com barro e raízes de mangue
Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it.=Raízes barrentas de mangue é um bloco dos pântanos de mangue. Afunda o jogador um pouco para dentro de si.
Mangrove Door=Porta de Mangue
Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Portas de madeira são barreiras de 2 blocos de altura as quais podem ser abertas ou fechadas pela mão e por um sinal de redstone.

View File

@ -21,7 +21,7 @@ water logged mangrove roots=Затопленные мангровые корни
Mangrove roots, despite being a full block, can be waterlogged and do not flow water out=Мангровые корни, не смотря на то что это полный блок, может быть затоплен и не выпускать воду наружу.
These cannot be crafted yet only occure when get in contact of water.=Нельзя скрафтить, появляется только при контакте с водой.
Muddy Mangrove Roots=Грязные мангровые корни
crafted with Mud and Mangrove roots=Крафтится с помощью грязи и мангровых корней
Crafted with Mud and Mangrove roots=Крафтится с помощью грязи и мангровых корней
Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it.=Грязные мангровые корни это блок из мангровых болот. Игрок немного погружается внутрь них.
Mangrove Door=Мангровая дверь
Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=Деревянные двери это преграды высотой в 2 блока, которые можно открывать и закрывать вручную и по сигналу редстоуна.

View File

@ -21,7 +21,7 @@ water logged mangrove roots=
Mangrove roots, despite being a full block, can be waterlogged and do not flow water out=
These cannot be crafted yet only occure when get in contact of water.=
Muddy Mangrove Roots=
crafted with Mud and Mangrove roots=
Crafted with Mud and Mangrove roots=
Muddy Mangrove Roots is a block from mangrove swamp.It drowns player a bit inside it.=
Mangrove Door=
Wooden doors are 2-block high barriers which can be opened or closed by hand and by a redstone signal.=

View File

@ -63,8 +63,8 @@ local function set_doll_properties(doll, mob)
xs = doll_size_overrides[mob].x
ys = doll_size_overrides[mob].y
else
xs = mobinfo.visual_size.x * 0.33333
ys = mobinfo.visual_size.y * 0.33333
xs = (mobinfo.visual_size.x or 0) * 0.33333
ys = (mobinfo.visual_size.y or 0) * 0.33333
end
local prop = {
mesh = mobinfo.mesh,
@ -358,6 +358,11 @@ doll_def.on_activate = function(self, staticdata, dtime_s)
if mob == "" or mob == nil then
mob = default_mob
end
-- Handle conversion of mob spawners
local convert_to = (minetest.registered_entities[mob] or {})._convert_to
if convert_to then mob = convert_to end
set_doll_properties(self.object, mob)
self.object:set_velocity({x=0, y=0, z=0})
self.object:set_acceleration({x=0, y=0, z=0})
@ -390,3 +395,11 @@ minetest.register_lbm({
respawn_doll(pos)
end,
})
minetest.register_on_mods_loaded(function()
for name,mobinfo in pairs(minetest.registered_entities) do
if ( mobinfo.is_mob or name:find("mobs_mc") ) and not ( mobinfo.visual_size or mobinfo._convert_to ) then
minetest.log("warning", "Definition for "..tostring(name).." is missing field 'visual_size', mob spawners will not work properly")
end
end
end)

View File

@ -66,6 +66,33 @@ This section describes parts of the API related to defining and managing effects
`mcl_potions.get_effect(object, effect_name)` - returns a table containing values of the effect of the ID `effect_name` on the `object` if the object has the named effect, `false` otherwise.
* table returned by the above function is like this:
```lua
effect = {
dur = float -- duration of the effect in seconds, may be infinite
timer = float -- how much of the duration (in seconds) has already elapsed
no_particles = bool -- if this is true, no particles signifying this effect will appear
-- player-only fields
hud_index = int -- position in the HUD used by this effect (icon, level, timer) - probably meaningless outside mcl_potions
-- optional fields
factor = float -- power of the effect if the effect uses factor; this may mean different things depending on the effect
step = float -- how often (in seconds) the on_step() function of the effect is executed, if it exists
hit_timer = float -- how much of the step (in seconds) has already elapsed
-- effect-specific fields
-- effects in mcl_potions have their own fields here, for now external effects can't add any here
blocked = bool -- used by conduit power
high = bool -- used by nausea
vignette = int -- handle to the HUD vignette of the effect, used by effects that use one
absorb = float -- "HP" of the absorption effect
waypoints = table -- used by glowing, indexed by player ObjectRef, contains HUD handles for the glowing waypoints
flash = float -- used by darkness, denotes vision range modifier
flashdir = bool -- used by darkness, denotes whether vision range is increasing (or decreasing)
}
```
`mcl_potions.get_effect_level(object, effect_name)` returns the level of the effect of the ID `effect_name` on the `object`. If the effect has no levels, returns `1`. If the object doesn't have the effect, returns `0`. If the effect is not registered, returns `nil`.
@ -120,6 +147,7 @@ This section describes parts of the API related to defining and managing effects
#### Internally registered effects
You can't register effects going by these names, because they are already used:
* `invisibility`
* `poison`
* `regeneration`

View File

@ -372,7 +372,9 @@ mcl_potions.register_effect({
playerphysics.add_physics_factor(object, "gravity", "mcl_potions:slow_falling", 0.5)
end,
on_step = function(dtime, object, factor, duration)
local vel = object:get_velocity().y
local vel = object:get_velocity()
if not vel then return end
vel = vel.y
if vel < -3 then object:add_velocity(vector.new(0,-3-vel,0)) end
end,
on_end = function(object)
@ -430,7 +432,9 @@ mcl_potions.register_effect({
return S("moves body upwards at @1 nodes/s", factor)
end,
on_step = function(dtime, object, factor, duration)
local vel = object:get_velocity().y
local vel = object:get_velocity()
if not vel then return end
vel = vel.y
if vel<factor then object:add_velocity(vector.new(0,factor,0)) end
end,
particle_color = "#420E7E",
@ -452,11 +456,16 @@ mcl_potions.register_effect({
object:get_meta():set_int("night_vision", 1)
mcl_weather.skycolor.update_sky_color({object})
end,
on_load = function(object, factor)
object:get_meta():set_int("night_vision", 1)
mcl_weather.skycolor.update_sky_color({object})
end,
on_step = function(dtime, object, factor, duration)
mcl_weather.skycolor.update_sky_color({object})
end,
on_end = function(object)
local meta = object:get_meta()
if not meta then return end
meta:set_int("night_vision", 0)
mcl_weather.skycolor.update_sky_color({object})
end,
@ -499,7 +508,9 @@ mcl_potions.register_effect({
mcl_weather.skycolor.update_sky_color({object})
end,
on_end = function(object)
object:get_meta():set_int("darkness", 0)
local meta = object:get_meta()
if not meta then return end
meta:set_int("darkness", 0)
mcl_weather.skycolor.update_sky_color({object})
object:set_sky({fog = {
fog_distance = -1,
@ -1084,6 +1095,7 @@ function mcl_potions.update_haste_and_fatigue(player)
if f_fac ~= 1 then meta:set_float("mcl_potions:fatigue", 1 - f_fac)
else meta:set_string("mcl_potions:fatigue", "") end
meta:set_tool_capabilities()
meta:set_string("groupcaps_hash","")
mcl_enchanting.update_groupcaps(item)
if h_fac == 0 and f_fac == 1 then
player:set_wielded_item(item)
@ -1344,7 +1356,7 @@ minetest.register_globalstep(function(dtime)
potions_set_hud(object)
else
local ent = object:get_luaentity()
if ent then
if ent and ent._mcl_potions then
ent._mcl_potions["_EF_"..name] = nil
end
end
@ -1359,7 +1371,7 @@ minetest.register_globalstep(function(dtime)
end
else
local ent = object:get_luaentity()
if ent then
if ent and ent._mcl_potions then
ent._mcl_potions["_EF_"..name] = EF[name][object]
end
end
@ -1392,6 +1404,7 @@ function mcl_potions._reset_haste_fatigue_item_meta(player)
meta:set_string("mcl_potions:haste", "")
meta:set_string("mcl_potions:fatigue", "")
meta:set_tool_capabilities()
meta:set_string("groupcaps_hash","")
mcl_enchanting.update_groupcaps(item)
end
end
@ -1516,6 +1529,11 @@ function mcl_potions._load_player_effects(player)
local loaded = minetest.deserialize(meta:get_string("mcl_potions:_EF_"..name))
if loaded then
EF[name][player] = loaded
end
if EF[name][player] then -- this is needed because of legacy effects loaded separately
if effect.uses_factor and type(EF[name][player].factor) ~= "number" then
EF[name][player].factor = effect.level_to_factor(1)
end
if effect.on_load then
effect.on_load(player, EF[name][player].factor)
end
@ -1533,6 +1551,9 @@ function mcl_potions._load_entity_effects(entity)
local loaded = entity._mcl_potions["_EF_"..name]
if loaded then
EF[name][object] = loaded
if effect.uses_factor and not loaded.factor then
EF[name][object].factor = effect.level_to_factor(1)
end
if effect.on_load then
effect.on_load(object, EF[name][object].factor)
end
@ -1771,9 +1792,14 @@ end
local function target_valid(object, name)
if not object or object:get_hp() <= 0 then return false end
-- Don't apply effects to anything other than players and entities that have mcl_potions support
-- but are not bosses
local entity = object:get_luaentity()
if entity and entity.is_boss then return false end
if not object:is_player() and (not entity or entity.is_boss or not entity._mcl_potions) then
return false
end
-- Check resistances
for i=1, #registered_res_predicates do
if registered_res_predicates[i](object, name) then return false end
end
@ -1825,6 +1851,10 @@ end
function mcl_potions.give_effect_by_level(name, object, level, duration, no_particles)
if level == 0 then return false end
if not registered_effects[name] then
minetest.log("warning", "[mcl_potions] Trying to give unknown effect "..tostring(name))
return false
end
if not registered_effects[name].uses_factor then
return mcl_potions.give_effect(name, object, 0, duration, no_particles)
end

View File

@ -173,8 +173,8 @@ function mcl_potions.register_lingering(name, descr, color, def)
obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity})
obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3})
local ent = obj:get_luaentity()
ent._potency = item:get_meta():get_int("mcl_potions:potion_potent")
ent._plus = item:get_meta():get_int("mcl_potions:potion_plus")
ent._potency = stack:get_meta():get_int("mcl_potions:potion_potent")
ent._plus = stack:get_meta():get_int("mcl_potions:potion_plus")
ent._effect_list = def._effect_list
end
})

View File

@ -1,27 +1,283 @@
# textdomain: mcl_potions
<effect> <duration> [<factor>]=<effet> <durée> [<facteur>]
Invisibility=Invisibilité
body is invisible=le corps est invisible
Poison=Poison
-1 HP / @1 s=-1 PV / @1 s
Regeneration=Régénération
+1 HP / @1 s=+1 PV / @1 s
Strength=Force
+@1% melee damage=+@1% dégâts de mêlée
Weakness=Faiblesse
-@1% melee damage=-@1% dégâts de mêlée
Water Breathing=Respiration aquatique
limitless breathing under water=respiration illimitée sous l'eau
Dolphin's Grace=Grâce du dauphin
swimming gracefully=nage gracieuse
Leaping=Saut
+@1% jumping power=+@1% puissance de saut
-@1% jumping power=-@1% puissance de saut
Slow Falling=Chute lente
decreases gravity effects=diminue les effets de la gravité
Swiftness=Rapidité
+@1% running speed=+@1% vitesse de course
Slowness=Lenteur
-@1% running speed=-@1% vitesse de course
Levitation=Lévitation
moves body upwards at @1 nodes/s=déplace le corps vers le haut à @1 nœuds/s
Night Vision=Vision nocturne
improved vision during the night=améliore la vision durant la nuit
Darkness=Obscurité
surrounded by darkness=entouré d'obscurité
not seeing anything beyond @1 nodes=ne vois rien au-delà de @1 nœuds
Glowing=Surbrillance
more visible at all times=plus visible en permanence
Health Boost=Bonus de santé
HP increased by @1=PV augmentés de @1
Absorption=Absorption
absorbs up to @1 incoming damage=absorbe jusqu'à @1 dégâts reçus
Fire Resistance=Résistance au feu
resistance to fire damage=resistance aux dégâts du feu
Resistance=Résistance
resist @1% of incoming damage=résiste à @1% des dégâts reçus
Luck=Chance
Bad Luck=Malchance
Bad Omen=Mauvais présage
danger is imminent=un danger est imminent
Hero of the Village=Héros du village
Withering=Dépérissement
-1 HP / @1 s, can kill=-1 PV / @1 s, peut tuer
Frost=Gel
-1 HP / 1 s, can kill, -@1% running speed=-1 PV / @1 s, peut tuer, -@1% vitesse de course
Blindness=Cécité
impaired sight=déficience visuelle
Nausea=Nausée
not feeling very well...=ne se sent pas très bien
frequency: @1 / 1 s=fréquence : @1 / 1 s
Food Poisoning=Intoxication alimentaire
exhausts by @1 per second=s'épuise de @1 par seconde
Saturation=Saturation
saturates by @1 per second=sature de @1 par seconde
Haste=Célérité
+@1% mining and attack speed=+@1% de vitesse d'attaque et de minage
Fatigue=Fatigue
-@1% mining and attack speed=-@1% de vitesse d'attaque et de minage
Conduit Power=Force de conduit
+@1% mining and attack speed in water=+@1% de vitesse d'attaque et de minage sous l'eau
<effect>|heal|list|clear|remove <duration|heal-amount|effect>|INF [<level>] [<factor>] [NOPART]=<effet>|heal|list|clear|remove <durée|quantité-soin|effet>|INF [<niveau>] [<facteur>] [NOPART]
Add a status effect to yourself. Arguments: <effect>: name of status effect. Passing "list" as effect name lists available effects. Passing "heal" as effect name heals (or harms) by amount designed by the next parameter. Passing "clear" as effect name removes all effects. Passing "remove" as effect name removes the effect named by the next parameter. <duration>: duration in seconds. Passing "INF" as duration makes the effect infinite. (<heal-amount>: amount of healing when the effect is "heal", passing a negative value subtracts health. <effect>: name of a status effect to be removed when using "remove" as the previous parameter.) <level>: effect power determinant, bigger level results in more powerful effect for effects that depend on the level (no changes for other effects), defaults to 1, pass F to use low-level factor instead. <factor>: effect strength modifier, can mean different things depending on the effect, no changes for effects that do not depend on level/factor. NOPART at the end means no particles will be shown for this effect.=Ajoute un effet de statut à vous-même. Arguments : <effet> : nom de l'effet de statut. Utiliser "list" comme nom d'effet liste les effets disponibles. Utiliser "heal" comme nom d'effet soigne (ou blesse) d'un nombre défini par le paramètre suivant. Utiliser "clear" comme nom d'effet enleve tous les effets. Utiliser "remove" comme nom d'effet enlève l'effet nommé dans le paramètre suivant. <durée> : durée en secondes. Utiliser "INF" comme durée rends l'effet infini. (<quantité-soin> : quantité de soin lorsque l'effet est "heal", utiliser une valeur négative enlève de la santé. <effet> : nom de l'effet de statut à enlever lors de l'utilisation de "remove" comme paramètre précédent.) <niveau> : détermine la puissance de l'effet, un niveau plus élevé se traduit par un effet plus puissant pour les effets qui dépendent du niveau (aucun changement pour les autres effets), défaut à 1, utiliser F pour utiliser un facteur de bas niveau à la place. <facteur> : effet modificateur de force, peut avoir différentes significations en fonction de l'effet, pas de changement pour les effets qui ne dépendent pas du niveau/facteur. NOPART à la fin signifie qu'aucune particule ne sera affichée pour cet effet.
Missing effect parameter!=Paramètre d'effet manquant !
Missing or invalid heal amount parameter!=Paramètre de quantité de soin manquant ou invalide !
Player @1 healed by @2 HP.=Joueur @1 soigné de @2 PV.
Player @1 harmed by @2 HP.=Joueur @1 blessé de @2 PV.
Effects cleared for player @1=Effets effacés pour le joueur @1
Removed effect @1 from player @2=Effet @1 enlevé pour le joueur @2
@1 is not an available status effect.=@1 n'est pas un effet de statut disponible.
Missing or invalid duration parameter!=Paramètre de durée manquant ou invalide !
Invalid level parameter!=Paramètre de niveau invalide !
Missing or invalid factor parameter when level is F!=Paramètre de facteur manquant ou invalide quand le niveau est F!
@1 effect given to player @2 for @3 seconds with factor of @4.=Effet @1 donné au joueur @2 pour @3 seconds avec un facteur de @4.
@1 effect given to player @2 for @3 seconds.=Effet @1 donné au joueur @2 pour @3 seconds.
Giving effect @1 to player @2 failed.=L'attribution de l'effet @1 au joueur @2 a échoué.
@1 effect on level @2 given to player @3 for @4 seconds.=Effet @1 de niveau @2 donné au joueur @3 pendant @4 secondes.
A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect or a set of status effects.=Une potion jetable qui se brisera à l'impact, où elle donne à tous les joueurs et créatures proches un effet de statut ou un ensemble d'effets de statut.
Use the “Punch” key to throw it.=Utilisez la touche "Frapper" pour la lancer.
A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect or set of effects, possibly repeatedly.=Une potion jetable qui se brisera à l'impact, où elle crée un nuage magique qui persiste pendant un moment. Tout joueur ou mob à l'intérieur du nuage recevra l'effet de la potion ou un ensemble d'effets, peut-être à plusieurs reprises.
This particular arrow is tipped and will give an effect when it hits a player or mob.=Cette flèche particulière est enchantée et donnera un effet lorsqu'elle touche un joueur ou un mob.
Use the “Place” key to drink it.=Utilisez la touche "Utiliser" pour la boire.
Drinking a potion gives you a particular effect or set of effects.=Boire une potion vous donne un effet particulier ou un ensemble d'effets.
@1 Potion @2=@1 potion @2
@1 Potion=Potion @1
Potion @1=Potion @1
Strange Potion=Potion étrange
Splash @1=@1 jetable
Lingering @1=@1 persistante
@1 Arrow @2=@1 flèche @2
@1 Arrow=Flèche @1
Arrow @1=Flèche @1
Strange Tipped Arrow=Flèche à pointe étrange
Mighty=puissante
of Trolling=de trollage
Dragon's Breath=Souffle du dragon
This item is used in brewing and can be combined with splash potions to create lingering potions.=Cet objet est utilisé dans le brassage et peut être combiné avec des potions jetables pour créer des potions persistantes.
Awkward=étrange
No effect=Aucun effet
Has an awkward taste and is used for brewing potions.=A un goût étrange et est utilisée pour préparer des potions.
Mundane=banale
Has a terrible taste and is not really useful for brewing potions.=A un goût terrible et n'est pas vraiment utile pour préparer des potions.
Thick=épaisse
Has a bitter taste and may be useful for brewing potions.=A un goût amer et peut être utile pour préparer des potions.
of Healing=de guérison
+@1 HP=+@1 PV
Instantly heals.=Guérit instantanément
of Harming=de dégâts
-@1 HP=-@1 PV
Instantly deals damage.=Inflige des dégâts instantanément.
of Night Vision=de vision nocturne
Increases the perceived brightness of light under a dark sky.=Augmente la luminosité de la lumière perçue sous un ciel sombre.
of Swiftness=de rapidité
Increases walking speed.=Augmente la vitesse de marche.
of Slowness=de lenteur
Decreases walking speed.=Diminue la vitesse de marche.
of Leaping=de saut
Increases jump strength.=Augmente la force de saut.
of Withering=de dépérissement
Applies the withering effect which deals damage at a regular interval and can kill.=Applique l'effet de dépérissement qui inflige des dégâts à intervalles réguliers et peut tuer.
of Poison=de poison
Applies the poison effect which deals damage at a regular interval.=Applique l'effet de poison qui inflige des dégâts à intervalles réguliers.
of Regeneration=de régénération
Regenerates health over time.=Régénère la santé au fil du temps.
of Invisibility=d'invisibilité
Grants invisibility.=Confère l'invisibilité.
of Water Breathing=de respiration aquatique
Grants limitless breath underwater.=Confère une respiration illimitée sous l'eau.
of Fire Resistance=de résistance au feu
Grants immunity to damage from heat sources like fire.=Confère une immunité aux dégâts causés par des sources de chaleur comme le feu.
of Strength=de force
Increases attack power.=Augmente la puissance d'attaque.
of Weakness=de faiblesse
Decreases attack power.=Diminue la puissance d'attaque.
of Slow Falling=de chute lente
Instead of falling, you descend gracefully.=Au lieu de tomber, vous descendez avec grâce.
of Levitation=de lévitation
Floats body slowly upwards.=Le corps flotte lentement vers le haut.
of Darkness=d'obscurité
Surrounds with darkness.=Entoure d'obscurité.
of Glowing=de surbrillance
Highlights for others to see.=Mise en valeur pour que les autres voient.
of Health Boost=de bonus de santé
Increases health.=Augmente la santé.
of Absorption=d'absorption
Absorbs some incoming damage.=Absorbe les dégâts reçus.
of Resistance=de résistance
Decreases damage taken.=Diminue les dégâts subis.
of Stone Cloak=de manteau de pierre
Decreases damage taken at the cost of speed.=Diminue les dégâts subis au détriment de la vitesse.
of Luck=de chance
Increases luck.=Augmente la chance.
of Bad Luck=de malchance
Decreases luck.=Diminue la chance.
of Frost=de gel
Freezes...=Gèle...
of Blindness=de cécité
Impairs sight.=Altére la vue.
of Nausea=de nausée
Disintegrates senses.=Désintègre les sens.
of Food Poisoning=d'intoxication alimentaire
Moves bowels too fast.=Déplace les intestins trop rapidement.
of Saturation=de saturation
Satisfies hunger.=Satisfait la faim.
of Haste=de célérité
Increases digging and attack speed.=Augmente la vitesse de creusage et d'attaque.
of Fatigue=de fatigue
Decreases digging and attack speed.=Diminue la vitesse de creusage et d'attaque.
Ominous=funeste
Attracts danger.=Attire le danger.
Unknown Potion=Potion inconnue
Right-click to identify=Clic droit pour identifier
Unknown Tipped Arrow=Flèche à pointe inconnue
Add a status effect to yourself. Arguments: <effect>: name of status effect, e.g. poison. <duration>: duration in seconds. <factor>: effect strength multiplier (1 @= 100%)=Ajoutez-vous un effet de statut. Arguments: <effet>: nom de l'effet de statut, par ex. poison. <duration>: durée en secondes. <facteur>: multiplicateur de force d'effet (1 @= 100%)
Missing effect parameter!=Paramètre d'effet manquant!
Missing or invalid duration parameter!=Paramètre durée manquant ou invalide!
Invalid factor parameter!=Paramètre facteur invalide!
@1 is not an available status effect.=@1 n'est pas un effet disponible.
Fermented Spider Eye=Oeil d'araignée fermenté
Try different combinations to create potions.=Essayez différentes combinaisons pour créer des potions.
Glass Bottle=Bouteille en verre
Liquid container=Récipient de liquide
A glass bottle is used as a container for liquids and can be used to collect water directly.=Une bouteille en verre est utilisée comme récipient pour les liquides et peut être utilisée pour collecter l'eau directement.
A glass bottle is used as a container for liquids and can be used to collect water directly.=Une bouteille en verre est utilisée comme récipient pour les liquides et peut être utilisée pour recueillir l'eau directement.
To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Pour collecter l'eau, poser la sur un chaudron avec de l'eau (qui enlève un niveau d'eau) ou toute source d'eau (qui n'enlève pas d'eau).
To collect water, use it on a cauldron with water (which removes a level of water) or any water source (which removes no water).=Pour récolter l'eau, utilisez la sur un chaudron avec de l'eau (qui enlève un niveau d'eau) ou toute source d'eau (qui n'enlève pas d'eau).
Water Bottle=Bouteille d'eau
Water bottles can be used to fill cauldrons. Drinking water has no effect.=Les bouteilles d'eau peuvent être utilisées pour remplir les chaudrons. L'eau potable n'a aucun effet.
Water bottles can be used to fill cauldrons. Drinking water has no effect.=Les bouteilles d'eau peuvent être utilisées pour remplir les chaudrons. Boire l'eau n'a aucun effet.
Use the “Place” key to drink. Place this item on a cauldron to pour the water into the cauldron.=Utilisez la touche "Utiliser" pour boire. Placez cet article sur un chaudron pour verser l'eau dans le chaudron.
River Water Bottle=Bouteille d'eau de rivière
River water bottles can be used to fill cauldrons. Drinking it has no effect.=Les bouteilles d'eau de rivière peuvent être utilisées pour remplir les chaudrons. Le boire n'a aucun effet.
River water bottles can be used to fill cauldrons. Drinking it has no effect.=Les bouteilles d'eau de rivière peuvent être utilisées pour remplir les chaudrons. La boire n'a aucun effet.
Use the “Place” key to drink. Place this item on a cauldron to pour the river water into the cauldron.=Utilisez la touche "Utiliser" pour boire. Placez cet objet sur un chaudron pour verser l'eau de la rivière dans le chaudron.
@ -37,79 +293,3 @@ A throwable water bottle that will shatter on impact, where it creates a cloud o
Glistering Melon=Melon étincelant
This shiny melon is full of tiny gold nuggets and would be nice in an item frame. It isn't edible and not useful for anything else.=Ce melon brillant est plein de minuscules pépites d'or et serait bien dans un cadre d'objet. Il n'est pas comestible et n'est utile à rien d'autre.
A throwable potion that will shatter on impact, where it creates a magic cloud that lingers around for a while. Any player or mob inside the cloud will receive the potion's effect, possibly repeatedly.=Une potion jetable qui se brisera à l'impact, où elle crée un nuage magique qui persiste pendant un moment. Tout joueur ou mob à l'intérieur du nuage recevra l'effet de la potion, peut-être à plusieurs reprises.
Use the “Punch” key to throw it.=Utilisez la touche "Frapper" pour le lancer.
Use the “Place” key to drink it.=Utilisez la touche "Utiliser" pour le boire.
Drinking a potion gives you a particular effect.=Boire une potion vous donne un effet particulier.
1 HP/@1s | @2=1 PV/@1s | @2
@1 HP=@1 PV
@1 Potion=Potion @1
Splash @1 Potion=Potion @1 jetable
Lingering @1 Potion=Potion @1 persistante
Arrow of @1=Flêche de @1
II= II
IV= IV
@1 Potion@2=@1 Potion@2
Splash @1@2 Potion=Potion @1@2 jetable
Lingering @1@2 Potion=Potion @1@2 persistante
Arrow of @1@2=Flêche de @1@2
@1 + Potion=@1 + Potion
Splash @1 + Potion=Potion @1 + jetable
Lingering @1 + Potion=Potion @1 + persistante
Arrow of @1 +=Flêche de @1 +
Awkward Potion=Potion étrange
Awkward Splash Potion=Potion étrange jetable
Awkward Lingering Potion=Potion étrange persistante
Has an awkward taste and is used for brewing potions.=A un goût étrange et est utilisé pour préparer des potions.
Mundane Potion=Potion banale
Mundane Splash Potion=Potion banale jetable
Mundane Lingering Potion=Potion banale persistante
Has a terrible taste and is not useful for brewing potions.=A un goût terrible et n'est pas utile pour préparer des potions.
Thick Potion=Potion épaisse
Thick Splash Potion=Potion épaisse jetable
Thick Lingering Potion=Potion épaisse persistante
Has a bitter taste and is not useful for brewing potions.=A un goût amer et n'est pas utile pour préparer des potions.
Dragon's Breath=Souffle du dragon
This item is used in brewing and can be combined with splash potions to create lingering potions.=Cet objet est utilisé dans le brassage et peut être combiné avec des potions d'éclaboussures pour créer des potions persistantes.
Healing=Guérison
+4 HP=+4 PV
+8 HP=+8 PV
Instantly heals.=Guérit instantanément.
Harming=Dégâts
-6 HP=-6 PV
-12 HP=-12 PV
Instantly deals damage.=Donne des dégâts instantanément.
Night Vision=Vision Nocturne
Increases the perceived brightness of light under a dark sky.=Augmente la luminosité perçue de la lumière sous un ciel sombre.
Swiftness=Rapidité
Increases walking speed.=Augmente la vitesse de marche.
Slowness=Lenteur
Decreases walking speed.=Diminue la vitesse de marche.
Leaping=Saut
Increases jump strength.=Augmente la force de saut.
Poison=Poison
Applies the poison effect which deals damage at a regular interval.=Applique l'effet de poison qui inflige des dégâts à intervalle régulier.
Regeneration=Régénération
Regenerates health over time.=Régénère la santé au fil du temps.
Invisibility=Invisibilité
Grants invisibility.=Accorde l'invisibilité.
Water Breathing=Respiration aquatique
Grants limitless breath underwater.=Donne une respiration illimitée sous l'eau.
Fire Resistance=Résistance au feu
Grants immunity to damage from heat sources like fire.=Confère une immunité aux dégâts causés par des sources de chaleur comme le feu.
Weakness=Faiblesse
Weakness +=Faiblesse +
Strength=Force
Strength II=Force II
Strength +=Force +
Try different combinations to create potions.=Essayez différentes combinaisons pour créer des potions.
No effect=Aucun effet
A throwable potion that will shatter on impact, where it gives all nearby players and mobs a status effect.=Une potion jetable qui se brisera à l'impact, où elle donne à tous les joueurs et créatures proches un effet de statut.
This particular arrow is tipped and will give an effect when it hits a player or mob.=Cette flèche particulière est enchantée et donnera un effet lorsqu'elle touche un joueur ou un mob.

View File

@ -841,20 +841,22 @@ local function replace_legacy_potion(itemstack)
end
local compat = "mcl_potions:compat_potion"
local compat_arrow = "mcl_potions:compat_arrow"
minetest.register_craftitem(compat, {
description = S("Unknown Potion"),
_tt_help = S("Right-click to identify"),
local compat_def = {
description = S("Unknown Potion") .. "\n" .. minetest.colorize("#ff0", S("Right-click to identify")),
image = "mcl_potions_potion_overlay.png^[colorize:#00F:127^mcl_potions_potion_bottle.png^vl_unknown.png",
groups = {not_in_creative_inventory = 1},
on_secondary_use = replace_legacy_potion,
on_place = replace_legacy_potion,
})
minetest.register_craftitem(compat_arrow, {
description = S("Unknown Tipped Arrow"),
_tt_help = S("Right-click to identify"),
}
local compat_arrow_def = {
description = S("Unknown Tipped Arrow") .. "\n" .. minetest.colorize("#ff0", S("Right-click to identify")),
image = "mcl_bows_arrow_inv.png^(mcl_potions_arrow_inv.png^[colorize:#FFF:100)^vl_unknown.png",
groups = {not_in_creative_inventory = 1},
on_secondary_use = replace_legacy_potion,
on_place = replace_legacy_potion,
})
}
minetest.register_craftitem(compat, compat_def)
minetest.register_craftitem(compat_arrow, compat_arrow_def)
local old_potions_plus = {
"fire_resistance", "water_breathing", "invisibility", "regeneration", "poison",
@ -866,14 +868,14 @@ local old_potions_2 = {
}
for _, name in pairs(old_potions_2) do
minetest.register_alias("mcl_potions:" .. name .. "_2", compat)
minetest.register_alias("mcl_potions:" .. name .. "_2_splash", compat)
minetest.register_alias("mcl_potions:" .. name .. "_2_lingering", compat)
minetest.register_alias("mcl_potions:" .. name .. "_2_arrow", compat_arrow)
minetest.register_craftitem("mcl_potions:" .. name .. "_2", compat_def)
minetest.register_craftitem("mcl_potions:" .. name .. "_2_splash", compat_def)
minetest.register_craftitem("mcl_potions:" .. name .. "_2_lingering", compat_def)
minetest.register_craftitem("mcl_potions:" .. name .. "_2_arrow", compat_arrow_def)
end
for _, name in pairs(old_potions_plus) do
minetest.register_alias("mcl_potions:" .. name .. "_plus", compat)
minetest.register_alias("mcl_potions:" .. name .. "_plus_splash", compat)
minetest.register_alias("mcl_potions:" .. name .. "_plus_lingering", compat)
minetest.register_alias("mcl_potions:" .. name .. "_plus_arrow", compat_arrow)
minetest.register_craftitem("mcl_potions:" .. name .. "_plus", compat_def)
minetest.register_craftitem("mcl_potions:" .. name .. "_plus_splash", compat_def)
minetest.register_craftitem("mcl_potions:" .. name .. "_plus_lingering", compat_def)
minetest.register_craftitem("mcl_potions:" .. name .. "_plus_arrow", compat_arrow_def)
end

View File

@ -65,8 +65,8 @@ function mcl_potions.register_splash(name, descr, color, def)
obj:set_velocity({x=dropdir.x*velocity,y=dropdir.y*velocity,z=dropdir.z*velocity})
obj:set_acceleration({x=dropdir.x*-3, y=-9.8, z=dropdir.z*-3})
local ent = obj:get_luaentity()
ent._potency = item:get_meta():get_int("mcl_potions:potion_potent")
ent._plus = item:get_meta():get_int("mcl_potions:potion_plus")
ent._potency = stack:get_meta():get_int("mcl_potions:potion_potent")
ent._plus = stack:get_meta():get_int("mcl_potions:potion_plus")
ent._effect_list = def._effect_list
end
})

View File

@ -66,13 +66,15 @@ function mcl_stonecutter.register_recipe(input, output, count)
local fallthrough = mcl_stonecutter.registered_recipes[output]
if fallthrough then
for o, c in pairs(fallthrough) do
mcl_stonecutter.register_recipe(input, o, c * count)
if not mcl_stonecutter.registered_recipes[input][o] then
mcl_stonecutter.register_recipe(input, o, c * count)
end
end
end
for i, recipes in pairs(mcl_stonecutter.registered_recipes) do
for name, c in pairs(recipes) do
if name == input then
if name == input and not mcl_stonecutter.registered_recipes[i][output] then
mcl_stonecutter.register_recipe(i, output, c * count)
end
end

View File

@ -293,7 +293,7 @@ minetest.register_craftitem("mcl_throwing:snowball", {
_doc_items_longdesc = S("Snowballs can be thrown or launched from a dispenser for fun. Hitting something with a snowball does nothing."),
_doc_items_usagehelp = how_to_throw,
inventory_image = "mcl_throwing_snowball.png",
stack_max = 16,
stack_max = 64,
groups = { weapon_ranged = 1 },
on_use = mcl_throwing.get_player_throw_function("mcl_throwing:snowball_entity"),
_on_dispense = mcl_throwing.dispense_function,
@ -306,7 +306,7 @@ minetest.register_craftitem("mcl_throwing:egg", {
_doc_items_longdesc = S("Eggs can be thrown or launched from a dispenser and breaks on impact. There is a small chance that 1 or even 4 chicks will pop out of the egg."),
_doc_items_usagehelp = how_to_throw,
inventory_image = "mcl_throwing_egg.png",
stack_max = 16,
stack_max = 64,
on_use = mcl_throwing.get_player_throw_function("mcl_throwing:egg_entity"),
_on_dispense = mcl_throwing.dispense_function,
groups = { craftitem = 1 },

View File

@ -43,7 +43,7 @@ function vl_hollow_logs.register_hollow_log(defs)
local groups = {axey = 1, building_block = 1, handy = 1, hollow_log = 1}
if not defs[5] then
groups = table.insert(groups, {fire_encouragement = 5, fire_flammability = 5, flammable = 2, hollow_log_burnable = 1})
table.update(groups, {fire_encouragement = 5, fire_flammability = 5, flammable = 2, hollow_log_burnable = 1})
end
minetest.register_node(modname .. ":"..name.."_hollow", {

View File

@ -0,0 +1,180 @@
## 0.87 The Prismatic release
### Contributors
#### New Developers
* rudzik8
* teknomunk
#### New Contributors
* PrWalterB
* michaljmalinowski
* nixnoxus
* Potiron
* Tuxilio
* Impulse
* Doods
* SOS-Games
* Bram
* qoheniac
### Game rename
Based on months of collecting suggestions, analysis and vetting of possible names, community voting and discussion between developers, the rename of the game has reached its conclusion! The project has been renamed to **VoxeLibre**.
Along with this, a documentation update has been conducted by Herowl, teknomunk and rudzik8. Make sure to check out the updated Contributing Guidelines!
### Potions and Effects redo
After more than half a year of work, it is finally here! The whole system has been rewritten from the ground up by Herowl. New effects, potions and brewing recipes have been added. Potion tooltips have been reworked. In the HUD you can now see more information about what effects you have at the moment, including level and duration. Beacon has also received more effects and is now quite functional.
A few new items to be used as brewing ingredients have been added. For now you can obtain them from fishing and trading with villagers. Those items will be made obtainable from other sources and will get more uses, hopefully in the next release. The functionality of some effects is not complete and they are also not obtainable yet (hero of the village and conduit power).
Some of the old potions and tipped arrows don't work with the new API and have to be converted. To avoid constant rechecking of all inventories, they have been bound to placeholder definitions. What this means is that if you notice weird potions or arrows marked with question marks, you will have to right-click them to run the conversion. A small price to pay for less lag, right?
Improved support of mobs by the effects and potions, including effects being properly saved on mobs. Despite that, some effects still don't work with mobs, because the mobs' code doesn't support them properly:
* the following effects don't work with mobs at all: water breathing, dolphin's grace, leaping, swiftness, slowness, slow falling, night vision, darkness, frost, health boost, absorption, fire resistance, resistance, luck, bad luck, blindness, nausea, food poisoning, saturation, haste, fatigue, conduit power
* the following effects should work with mobs: invisibility, regeneration, poison, withering, strength, weakness, levitation, glowing
* the following effects have no effect on mobs (but can be applied with the API): bad omen, hero of the village
While not everything is available in game, a great API (documented in the module) has been exposed for modders, allowing adding new effects and potions. Potions can now have all sorts of custom effects and multiple effects at once. Effects and potions can now have indefinitely many levels and potentially infinite duration, available with the `/effect` command and the modding API. Effects can still (and even more so than before!) be fine-tuned with factors and abnormal levels, which can sometimes give unexpected results, but it's all left up to modders.
### Nether Portals rewrite
Another large rework! Thanks to emptyshore, portals to (and from) the Nether now work better than ever, connecting properly to each other. They shouldn't cause unwelcome surprises either, stranding you where you never expected to go, and shouldn't teleport you up into the skies.
### Mob spawning system
An update by Bakawun improved the mob spawning, optimizing it and making the randomness work better, as well as properly taking into account set spawn chances. This update also changed the mob spawn chances and ratios.
Another improvement to the system was made by teknomunk, who wrote a new system for spawn position calculation. This enables overhead spawning, among other things allowing for some mob farms to work.
Also, light and height checking of Slimes has been fixed by Codiac, so they should no longer spawn in large numbers in inappropriate places.
### Mob improvements
Not only did mob spawning get improved, but mobs themselves did too.
Rover is a new mob, replacing the enderman. Along with this rework by Herowl and teknomunk, node picking code was refactored and generalized, paving the way for more mobs visibly holding actual items in the future.
Stalker is another new mob, replacing the creeper. This rework completed by Herowl contains a new camouflage mechanic and otherwise a new look at a well-known concept.
Ghast received a great update by Bakawun and Herowl. Its hitbox should now work properly, and deflecting the fireballs should work properly again too. Also the achievement for killing a Ghast with a ghast fireball should now be granted properly.
Sounds for Hoglin/Zoglin, Piglin and skeletons have been updated by Bakawun and should now be used properly.
Strider received a few fixes by nixnoxus. Breeding, attracting and riding should now work.
### Eating animation
Eating is no longer instant in survival mode, but delayed instead with the new system designed by Eliy21.
To signify it properly, Herowl added an animation visible in the first-person mode.
### New blocks
* Colored End Rod variants by Herowl.
* Colored Redstone Lamps by Herowl.
* Glazed Terracotta Pillars by Potiron.
* Compressed Cobblestone by SmokeyDope.
* Clovers and Four-leaf Clovers by Herowl.
* Hollow logs by JoseDouglas26 and Herowl
### Capes
Thanks to the changes by chmodsayshello and rudzik8, you can now pick a cape in the character skin customization UI. Thanks for the "Minetest" cape texture to QwertyDragon.
### Colored leather armor
Leather armor can now be colored (and washed) thanks to AFCMS and Herowl. Aside of the crafting recipes, this added a command and a modding API for this.
### Cherry blossom particles
The particles of the cherry blossom, which fall from the cherry leaves, have been vastly improved by Wbjitscool and Herowl. Plant some cherry trees and behold the new animation and the wind direction changing 3 times a game day.
### Signs text editing
Now you can edit the text on signs by right-clicking ("place") on a sign placed in the world, all thanks to Araca.
### Tool durability tooltips
Yet another feature from Araca, tooltips for tools (and weapons) will now display how much durability they have remaining. Now you have more precise info than just the wearbar!
### Creative inventory fixes
Items can't be moved around in the creative inventory, tabs there have proper tooltips and searching works on Android with Minetest 5.8+ all thanks to rudzik8.
### Help UI Mobs section
A "Mobs" section added to the Help UI by SOS-Games. Translations may be missing.
### Texture pack converter
One of our tools, the Python script allowing conversion of Minecraft resource packs (texture-wise) to the Minetest format to work with our game, has received a great update by Impulse and Doods. It should now work with packs from newer versions, but keep in mind that not everything can be automated and the packs may still require some manual fixes (and additions, if you want to cover all of our own features that have no equivalents in Minecraft).
### New Translation
* Occitan by PrWalterB
### Translation updates
* Spanish by megustanlosfrijoles
* French by syl
* Polish by Herowl
* German by Tuxilio, Herowl and qoheniac
* Syntax fixes in translation files by megustanlosfrijoles
### Other changes
* Melon and pumpkin generation by michaljmalinowski
* Golden rails accelerate carts properly by nixnoxus
* Elytra Animation works again by MrRar
* Mobs aggro disabled when damage is disabled by emptyshore
* Fortune enchantment on hoes works by JoseDouglas26
* Typo in pumpkin.lua fixed by SmokeyDope
* Node rotation at placement improvements by JoseDouglas26
* Nylium reverting to netherrack by JoseDouglas26
* Hunger debug setting exposed properly by SmokeyDope
* Nether vine placement fixes by SmokeyDope
* Survival inventory tabs API fixes by Impulse
* Cactus damaging mobs by Eliy21
* Sweet berry bush slowdown decreased by Eliy21
* Fixed scaffolding placement replacing other blocks without a trace by JoseDouglas26
* Nodes fireproofing and missing plank recipes added by Doods
* End Rods now use a proper mesh model by Herowl
* Piglin bartering improvements by nixnoxus
* Hopper item movement improved by teknomunk
* Partial item stack pickup by teknomunk
* Bone meal node protection check by CyberMango
* Undeclared variable usage fixed by nixnoxus
* Biome check when spawning override (API, Skyblock support) by AncientMariner
* Reimported tga_encoder as subtree (this allows support of some mods) by Herowl
* Bed placement and destruction fixes by teknomunk
* Item tooltip shouldn't be modified needlessly (this fixes some bugs causing items to not stack properly) by Herowl
* Beds now properly ignore players in other dimensions by nixnoxus
* Stray pixels in leather cap texture removed by SmokeyDope
* Allow lecterns to be placed on sides of blocks by JoseDouglas26
* Fix warnings by JoseDouglas26
* Experience from trading by nixnoxus
* Boats easier to destroy with punching by Eliy21
* Horse and Donkey animation fix by Bakawun
* Villagers won't eat shulker boxes (independent of their food content) anymore by teknomunk
* Beds now properly ignore players in the wrong dimensions when counting by nixnoxus
* Shears now wear properly when harvesting comb from a beehive by teknomunk
* Improved compatibility with mapgen mods by Bram
* Item frame attachment fixed by rudzik8
* Stray pixels in sweet berry textures removed by rudzik8
* Warning related to milk bucket fixed by teknomunk
* Seed is now logged when entering a world by Nicu
* Startup warnings from mcl_stonecutter fixed by Herowl
* Sleeping GUI improved by Nicu
* Description capitalization fix by syl
### Special thanks
* To emptyshore, for the in-depth research and testing of the Mob Spawning System rework, as well as his aforementioned Nether Portals system rework.
### Crash fixes
* Damage animation related crash by Herowl
* Shields-related crash by Impulse
* Elytra-related crash by Herowl
* Damage animation and player invulnerability related crash by Eliy21
* Rocket explosion related crash by Herowl
* New game load crash by AncientMariner
* XP orbs related crash by teknomunk
* Ghast fireball related crash by Araca
* Crash related to server restart while a player is dead by teknomunk
* Crashes related to the new effects API - by teknomunk and Herowl
## 0.87.1 hotfix
* Fixed crash when shooting potions from a dispenser - by teknomunk
* Fixed crash related to custom mobspawners - by teknomunk
* Fixed beacon crash - by teknomunk
* Fixed eye of ender crash - by Herowl
* Fixed Stalker texture generation - by teknomunk
* Correctly refresh enchanted tool capabilities - by teknomunk
* Fixed creative inventory misbehaving - by Herowl
* Fixed variable definition in mob spawning code - by teknomunk
* Updated documentation - by Herowl and teknomunk
* Increased stack size for snowballs and eggs - by JoseDouglas26

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -4,7 +4,7 @@
local colors = {
["Creator of MineClone"] = "0x0A9400",
["Creator of MineClone2"] = "0xFBF837",
["Creator of VoxeLibre"] = "0xFBF837",
["Maintainers"] = "0xFF51D5",
["Developers"] = "0xF84355",
["Past Developers"] = "0xF84355",