101 lines
5.4 KiB
Markdown
101 lines
5.4 KiB
Markdown
# beta.060 — objets et blocs sur les mobs
|
|
|
|
Ticket `codex/mob-head-blocks-beta060`.
|
|
|
|
## Contrat avant implémentation
|
|
|
|
Les mobs peuvent porter un exemplaire d'un objet dans un emplacement distinct
|
|
de leur équipement natif. L'IA continue de se déplacer et d'agir normalement.
|
|
Le geste confirmé est Maj + clic droit avec l'objet pour équiper, clic droit
|
|
pour utiliser, Maj + clic droit à main vide pour récupérer. La tête vide
|
|
retrouve le geste de portage existant. Aucun achat d'aptitude supplémentaire.
|
|
|
|
Les blocs réutilisent les interactions de tête existantes : stockage public,
|
|
établi, four, levier, bouton, torche de redstone, etc. Un seul emplacement,
|
|
aucun remplacement silencieux. Le retrait et la mort rendent l'objet et le
|
|
contenu ordinaire ; une Shulker garde son contenu une seule fois. Les mobs
|
|
hostiles gardent leur comportement et leur armure. Les familiers conservent
|
|
leur IA et leurs règles d'appartenance ; leur disparition restitue l'objet.
|
|
|
|
La source redstone est indexée dans la cellule de la tête, sans poser de bloc.
|
|
Une poule équipée d'une torche alimente les circuits voisins au fil de ses
|
|
déplacements. Un levier ou bouton peut être actionné par un joueur. Les coups
|
|
déclenchent les réactions déjà prévues des blocs portés. Les distances,
|
|
menus opérateur et contrôles du serveur restent applicables.
|
|
|
|
## Données et compatibilité
|
|
|
|
Ajout du champ `sanctuary:mob_head`, schéma 1, aux seules entités équipées.
|
|
Il contient l'exemplaire et l'état du bloc natif (même contrat de session que
|
|
les joueurs). Les anciennes entités sans champ restent sans objet. Les données
|
|
illisibles sont conservées et leur équipement est bloqué jusqu'à réparation.
|
|
Les formats des joueurs, inventaires, générations et chunks ne changent pas.
|
|
Déchargement : sauvegarde et fermeture des menus, suppression du signal local ;
|
|
rechargement : restauration sans duplication. Aucune migration de monde existant.
|
|
Un retour à une version antérieure ne doit pas être fait en sauvegardant les
|
|
mobs ainsi équipés : récupérer leurs objets avant ce retour.
|
|
|
|
## Vérifications
|
|
|
|
Le parcours `MobHead060ClientChecks` passe sur Minecraft 26.3-pre-2, dans un
|
|
monde plat de développement, graine 42. Les commandes sont désactivées après
|
|
la création pour vérifier l'accès d'un joueur normal.
|
|
|
|
- Maintien réel de la touche d'accroupissement et paquet natif d'interaction :
|
|
une seule torche transférée, aucune mise en portage, récupération à main vide,
|
|
puis portage de la poule redevenue disponible.
|
|
- Deux lampes déjà posées : allumage à proximité, extinction après déplacement
|
|
et signal présent dans la nouvelle cellule. Suppression immédiate de la
|
|
source lors d'un déchargement natif d'entité, puis restauration après lecture
|
|
de son NBT et rechargement.
|
|
- Vrai menu de coffre à trois rangées, sept diamants conservés par sauvegarde,
|
|
fermeture du visiteur et restitution exacte au retrait. Shulker rendue une
|
|
seule fois avec cinq émeraudes ; mort avec un baril et quatre lingots, sans
|
|
duplication lors d'un second nettoyage.
|
|
- Levier, bouton, pot fleuri, distributeur tirant une flèche après un vrai coup,
|
|
four fondant du fer avec du charbon et TNT consommée dans une seule entité
|
|
amorcée. Le coffre porté par le joueur reste fonctionnel.
|
|
- Extraction des modèles natifs adultes/bébés pour poule, vache, zombie,
|
|
abeille, slime, morue, Wither et Ender Dragon ; objet ordinaire affichable.
|
|
Libellés FR/EN et conservation d'un enregistrement invalide vérifiés.
|
|
- Captures de la poule avec sa torche, des lampes et du coffre ouvert inspectées
|
|
dans `build/mob-head060-evidence/`.
|
|
|
|
Commande native réussie en 1 min 10 s :
|
|
|
|
```sh
|
|
./gradlew :sanctuary:runClientGameTest -x :sanctuary:runGameTest \
|
|
-PsanctuaryClientTests=true -PsanctuaryMobHead060ClientTests=true \
|
|
-PsanctuaryQuickTests=true
|
|
```
|
|
|
|
Journal : `build/mob-head060-client.log`, marqueur `MOB_HEAD060_PASS`.
|
|
`./gradlew check build assemblePack assembleTestPack`, avec les mêmes propriétés
|
|
et l'exclusion du serveur dédié, réussit en 2 min 15 s (122 tâches).
|
|
Journal : `build/mob-head060-check.log`.
|
|
|
|
Les deux exports packwiz sont vérifiés par `build/verify-mob-head060.py` :
|
|
1 620 classes conformes au build, références compilées aux nouvelles signatures
|
|
contrôlées, ressources de jeu et JEI préservés, archives beta.059 intactes.
|
|
Reçu : `build/mob-head060-artifact.json`.
|
|
[Pack normal](../build/Sanctuary-beta.060.mrpack) ·
|
|
[Monde plat rapide](../build/Sanctuary-Test-beta.060.mrpack).
|
|
|
|
## Limites de cette livraison
|
|
|
|
Les blocs gardent les mêmes limites que sur les joueurs : lit décoratif,
|
|
piston local sans poussée de terrain, absence de random ticks pour les cultures
|
|
et conditions natives requises pour les structures multiblocs. Un objet porté
|
|
ne remplace pas l'IA : les déplacements restent ceux du mob. Les familiers
|
|
éphémères rendent leur objet au sol lorsqu'ils disparaissent ; l'objet ne se
|
|
stocke pas dans leur œuf.
|
|
|
|
Les modèles ordinaires suivent leur tête animée. Les rendus spécialisés sans
|
|
modèle de créature standard, notamment le dragon, ont un placement de repli
|
|
près de leur hauteur de regard, qui pourra demander un ajustement visuel.
|
|
Le test des variantes est une extraction native ; seules la poule et son
|
|
interface de coffre ont fait l'objet d'une inspection visuelle de capture.
|
|
Aucune session avec plusieurs clients humains ou mesure de FPS n'est revendiquée.
|
|
Aucune installation personnelle, publication de canal ou acceptation d'EULA
|
|
de serveur dédié.
|