



Résumé du projet
Les joueurs de Minecraft découvrent un oiseau aquatique qui apparaît naturellement, qu'ils peuvent attirer, apprivoiser, faire suivre et commander de s'asseoir, ainsi qu'une banane qui accorde un bref effet de vitesse. Le mod sépare la simulation partagée du rendu client, réutilise les systèmes natifs de créatures apprivoisables et fournit des modèles, textures et quatre états d'animation personnalisés.
Architecture
- Joueur Minecraft, Client · interaction, use item · interact, banane, contrôle du propriétaire, bascule assise
- Minecraft + Fabric, Exécution · hôte du mod, fabric.mod.json
- Initialiseur Waterbird, Cycle de vie · initialisation commune, Waterbird.java · onInitialize
- WaterbirdEntity, Domaine · créature apprivoisable, entity/custom/WaterbirdEntity.java, 1 apprivoisement sur 10, 20 points de vie, suivi du propriétaire, objectif assis
- Modèle + moteur de rendu, Client · présentation, WaterbirdClient.java · entity/client
- Règles d'apparition dans l'Overworld, Monde · règle de génération, world/gen/ModEntityGeneration.java
- Registre des objets + entités, Données · registres du jeu, ModItems.java · ModEntities.java
- Modèles, textures + langue, Données · ressources visuelles, src/main/resources/assets/waterbird
- Minecraft + Fabric vers Initialiseur Waterbird: CHARGER LE MOD
- Joueur Minecraft vers WaterbirdEntity: UTILISER LA BANANE
- Initialiseur Waterbird vers Registre des objets + entités: ENREGISTRER LES TYPES
- Initialiseur Waterbird vers Règles d'apparition dans l'Overworld: AJOUTER LES APPARITIONS
- Règles d'apparition dans l'Overworld vers WaterbirdEntity: CRÉER LE WATERBIRD
- WaterbirdEntity vers Modèle + moteur de rendu: LIRE LA POSE
- Modèle + moteur de rendu vers Modèles, textures + langue: CHARGER LES RESSOURCES
Suivez le chargement, l'interaction, la simulation et le rendu à travers le mod.
Déploiement : Mod JAR → dossier de mods Fabric · client ou serveur Minecraft
Résultats
- 1 sur 10 · chance d'apprivoisement avec une banane
- 10 s · effet de vitesse de la banane
- 1 à 3 · taille du groupe d'apparition naturelle
- 4 · états d'animation modélisés
Compétences démontrées : séparation du cycle de vie Fabric · interaction d'entité pilotée par le serveur · comportement de créature apprivoisable fondé sur des objectifs · animation client pilotée par l'état · raccordement des ressources et registres
Problèmes et solutions
Conserver une logique de jeu pilotée par le serveur tout en intégrant un petit mod aux systèmes existants de Minecraft.
▓ Étendre ParrotEntity pour le comportement apprivoisable
Problème : L'oiseau aquatique doit gérer l'apprivoisement, le propriétaire, le vol, le suivi et la position assise sans reconstruire toute la mécanique des créatures passives de Minecraft.
Créer une sous-classe de ParrotEntity, conserver son cycle de vie, puis ajouter l'interaction avec la banane ainsi que les objectifs et attributs propres à l'oiseau aquatique.
- Option rejetée : une implémentation personnalisée de MobEntity, car elle dupliquerait la propriété, l'état d'apprivoisement et le comportement de déplacement
- Compromis accepté : le comportement hérité du perroquet limite les futures spécialisations
- Résultat : une entité compacte prend en charge l'apprivoisement, le suivi, la position assise et le vol
█ Confier l'apprivoisement et la position assise au serveur
Problème : Le propriétaire et l'état assis doivent rester cohérents pour chaque joueur du monde.
Consommer la banane et modifier l'état d'apprivoisement ou assis sur le serveur, tout en renvoyant à Minecraft la réussite de l'interaction selon le côté d'exécution.
- Option rejetée : la mutation d'état côté client, car elle pourrait afficher une réussite sans état persistant dans le monde
- Compromis accepté : le code d'interaction doit distinguer le côté serveur du côté client
- Résultat : le serveur possède l'état, tandis que les clients reçoivent les mises à jour d'entité et particules standard
▒ Séparer l'initialisation commune de celle du client
Problème : L'enregistrement des entités et leur apparition dans le monde doivent fonctionner sur les serveurs, mais les classes de modèle et de rendu sont réservées au client.
Utiliser des points d'entrée Fabric distincts pour le code principal et le client, avec l'enregistrement du rendu isolé dans WaterbirdClient.
- Option rejetée : enregistrer le rendu depuis l'initialisation commune, car les serveurs dédiés ne peuvent pas charger les classes client
- Compromis accepté : la configuration associée est répartie entre deux points d'entrée
- Résultat : le même mod JAR se charge dans les environnements client et serveur
▤ Piloter l'animation depuis l'état de l'entité
Problème : La marche, le vol, l'attente et la position assise exigent des poses distinctes qui suivent le comportement réel de l'entité.
Mettre à jour les états d'animation côté client à chaque tick et laisser le modèle combiner le mouvement avec les séquences d'attente, de vol et de position assise.
- Option rejetée : une boucle générique unique, car le vol et la position assise exigent des poses visiblement différentes
- Compromis accepté : la priorité des états et les transitions résident dans une logique de tick écrite à la main
- Résultat : quatre états modélisés répondent directement au mouvement, au vol et à la position assise
▚ Réutiliser la banane comme aliment et moyen d'interaction
Problème : Les joueurs ont besoin d'un objet facile à comprendre, utile à la fois pour eux et pour la nouvelle créature.
Enregistrer une banane qui restaure la faim, accorde un effet de vitesse de 10 secondes, attire les oiseaux aquatiques et tente de les apprivoiser.
- Option rejetée : un jeton d'apprivoisement séparé, car il ajouterait un objet à usage unique
- Compromis accepté : l'équilibrage de la nourriture et de l'apprivoisement partage désormais une même ressource
- Résultat : un objet relie l'inventaire, les effets du joueur, l'attraction par l'IA et la propriété