forked from VoxeLibre/VoxeLibre
Compare commits
50 Commits
projectile
...
master
Author | SHA1 | Date |
---|---|---|
|
72435933e4 | |
|
35e14dd415 | |
|
173f8a0bca | |
|
1f32b47208 | |
|
bf67fd52e1 | |
|
fd4e1484af | |
|
1b0deae026 | |
|
313c1f558b | |
|
5cafa97dd1 | |
|
ddab68b87c | |
|
2dafbae64b | |
|
65d6cb1d83 | |
|
acf72be89c | |
|
1153a81b65 | |
|
f423c1ea25 | |
|
d8aeb4ce12 | |
|
21c182fc0e | |
|
ca033d0e8d | |
|
beccbacc73 | |
|
ecf12b85cc | |
|
f53bedc131 | |
|
3e6ec9cf10 | |
|
6c8771485c | |
|
f621e3c1de | |
|
7d0f49a218 | |
|
468c2bc68f | |
|
2fc3d92550 | |
|
95228500a9 | |
|
c7e43e31d4 | |
|
067ad7b78b | |
|
add9cbe3bc | |
|
c4f4e7b6fc | |
|
6394371e4f | |
|
e097c87e7c | |
|
9e0136e3c4 | |
|
b2d93f3265 | |
|
dfddea76fb | |
|
da491b8505 | |
|
18571d072c | |
|
cae554bc2b | |
|
8feecf2492 | |
|
68e5c19df4 | |
|
54957e6191 | |
|
48482521ca | |
|
d086bc5176 | |
|
2bd24120e9 | |
|
4d7060cddd | |
|
f119259e67 | |
|
0a14a74860 | |
|
cb4396d424 |
15
CREDITS.md
15
CREDITS.md
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 :
|
||||
|
|
|
@ -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 -->
|
||||
|
||||
|
|
114
RELEASE.md
114
RELEASE.md
|
@ -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*)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
--------------------------
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"..
|
||||
|
|
|
@ -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=
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"}
|
||||
|
|
|
@ -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.")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 = "",
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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ブロックの障壁で、手やレッドストーンの信号で開閉できます。
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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 блока, которые можно открывать и закрывать вручную и по сигналу редстоуна.
|
||||
|
|
|
@ -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.=
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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`
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
})
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
})
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 },
|
||||
|
|
|
@ -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", {
|
||||
|
|
|
@ -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 |
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue