Professeur

Les entités

3 messages dans ce sujet

Les entités

Sommaire

  1. Introduction
  2. Mécaniques des entités
    1. Types d'entités
    2. Création et suppression
    3. Déplacements
    4. Collisions
      1. Avec les autres entités
      2. Avec le monde
    5. Intéraction
    6. Synchronisation client/serveur
  3. Rendu des entités
    1. Introduction sur l'organisation du système de rendu
    2. Les modèles
    3. Les animations

 


Vous pouvez proposer des améliorations sur ce topic

1

Partager ce message


Lien à poster
Partager sur d’autres sites

1. Introduction

Les entités, au même titre que les blocs, constituent un système absolument central de Minecraft. Tout, dans dans un monde, est soit une entité soit bloc (en considérant les TileEntities comme des blocs). On pourra par citer, comme exemples d'entités :

  • Joueurs
  • Cochons
  • Particules
  • Foudre
  • Flèches
  • Tableaux
  • ...

 

La compréhension des mécaniques qui régissent le système d'entités est donc fondamentale au modding (on pourra sauvagement faire le parallèle suivant : si les entités représentent la moitié des objets présents dans un monde, alors vous allez passer 50% de votre temps de moddeur à en coder).

 


Pour toute question, avis, suggestion, merci de vous rendre sur ce topic
Merci à Wytrem pour sa contribution.

 

1

Partager ce message


Lien à poster
Partager sur d’autres sites

2. Mécaniques des entités

2.1 Types d'entités

Il existe, bien sûr, plusieurs types d'entités, chacun représenté par une classe qui étend Entity.

De manière générale, on pourrait les classer en 3 catégories :

  • Les effets visuels (météo, particules, etc.) ;
  • Les joueurs ;
  • Le reste (monstres, animaux, flèches, items au sol, etc.).

Ce découpage n'est pas fruit du hasard, il est effectué en fonction de la gestion client/serveur dont bénéficient les entités de chaque catégorie (les effets visuels ne sont pas synchronisés, les créatures et les joueurs apparaissent grâce à des packets différents) -- nous y reviendrons.

Ces types d'entités sont enregistrés dans une classe nommée EntityList, qui enregistre, pour chaque type d'entité :

  • Un numéro (unique) ;
  • Un nom ;
  • La classe de ce type.

Chaque entité est une instance d'une des classes enregistrées dans cette liste, et ce côté client comme serveur, à l'exception des joueurs.

2.1.1 Le cas des joueurs

Le modèle se complexifie un peu pour le joueurs.

Alors que toutes les entités sont instance d'une classe portant le même nom et ayant sensiblement les même effets côté client comme serveur, on s'aperçoit que, côté client, les joueurs sont traités différemment ; il existe 2 classes filles d'AbstractClientPlayer : EntitityPlayerSP et EntityOtherPlayerMP.

La nomination des classes est assez explicite : côté client, un joueur peut être celui qui est contrôlé par l'utilisateur, ou un autre joueur présent dans le monde.

Côté serveur, c'est plus simple : tous les joueurs sont instances de EntityPlayerMP.

Note : la présence dans les sources du client d'une classe EntityPlayerMP n'est due qu'à celle du serveur intégré, le client proprement dit ne s'en sert pas.

2.2 Création et suppression

Comme nous l'avons dit, un numéro, un nom et une classe qui étend Entity sont liés dans la classe EntityList.

Lors du chargement d'un monde, côté serveur donc, les données des entités sont lues depuis des fichiers au format NBT compressés. Une entité est instanciée, en utilisant le constructeur prenant en argument un monde (qui doit obligatoirement être présent dans toutes les classes filles d'Entity), puis ses informations (position, vie, déplacement, inventaire, etc.) sont lues depuis un NBTTagCompound récupéré du fichier de stockage.

Lorsqu'une entité meurt (information relayée par le booléen Entity::isDead), elle est automatiquement supprimée du monde par le serveur.


Pour toute question, avis, suggestion, merci de vous rendre sur ce topic
Merci à Wytrem pour sa contribution.

 

2

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant