Rendu visuel joueur
-
J’ai essayé avec l’extended Entity Property mais le problème est toujours le même.
Me suis-je trompé ?
Voici ma nouvelle classe :public class rendu implements IExtendedEntityProperties { @SubscribeEvent public void changementRendu(RenderPlayerEvent.Pre event) { { //code de l'event } public static ThreadDownloadImageData downloadRendu(ResourceLocation p_110304_0_, String p_110304_1_) { //téléchargement du rendu } @Override public void saveNBTData(NBTTagCompound compound) { // TODO Auto-generated method stub } @Override public void loadNBTData(NBTTagCompound compound) { // TODO Auto-generated method stub } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } protected ResourceLocation getEntityTexture(EntityLiving living) { DataWatcher dw = living.getDataWatcher(); String texture = dw.getWatchableObjectString(20); return new ResourceLocation(texture); } } -
Est-ce que tu le register? Est-ce que tu peux nous donner ta classe de rendu aussi?
-
Je vais peut être dire une ânerie mais le fonctionnement du datawatcher ne serait pas plus indiqué pour une info qui doit être stockée par un seul joueur et qui influence les autres également?
-
Le DataWatcher sert à sauvegarder et synchroniser des valeurs client-serveur. Par contre, tu as raison, l’info est stockée par un seul joueur. Perso, j’utilise un DataWatcher pour déterminer la texture et ensuite je récupère le DataWatcher dans le render et je l’envoie dans mon download.
-
Le rendu et l’extend entity properties sont dans la même classe. Faut-il les séparer ?
-
Ton EEP doit être dans une classe séparée puisque tu dois implémenter IExtendedProperties, mais tu peux register ta classe comme event handler et l’utiliser pour les deux.
-
Mais y’a pas besoin de DataWatcher, qu’est-ce que t’enregistres dans ton datawatcher ?! On a juste besoin de connaitre le pseudo du joueur et ensuite on commence le téléchargement…
Le problème qu’il faut résoudre est dans l’event RenderPlayerEvent, la nom de la texture à télécharger est sûrement le même que celui du joueur login. Je regarderai + en détails ce week-end
-
Du coup j’enlève le code du DataWatcher ? Et l’EEP je laisse ou pas ?
-
Par contre, tu devrais utiliser le UUID au lieu du pseudo, comme ça tu es certain. Dans l’exemple que je t’ai envoyé, j’utilise un DataWatcher cae j’ai besoin de sauvegarder le nom de la texture, mais dans ton cas, tu n’en as pas besoin.
-
Du coup j’ai ajouté l’EEP et je l’ai register dans un event mais le problème est toujours le même
Voici ma classe :
public class rendu implements IExtendedEntityProperties { public final static String EXT_PROP_NAME = "ExtPropRendu"; //private final EntityPlayer player; @SubscribeEvent public void changementRendu(RenderPlayerEvent.Pre event) { //code pour modifier le rendu } @SubscribeEvent public void onEntityConstructing(EntityConstructing event) { if (event.entity instanceof EntityPlayer && rendu.get((EntityPlayer) event.entity) == null) rendu.register((EntityPlayer) event.entity); } public static final void register(EntityPlayer player) { player.registerExtendedProperties(rendu.EXT_PROP_NAME, new rendu()); } public static final rendu get(EntityPlayer player) { return (rendu) player.getExtendedProperties(EXT_PROP_NAME); } public static ThreadDownloadImageData downloadRendu(ResourceLocation p_110304_0_, String p_110304_1_) { //téléchargement du rendu } @Override public void saveNBTData(NBTTagCompound compound) { // TODO Auto-generated method stub } @Override public void loadNBTData(NBTTagCompound compound) { // TODO Auto-generated method stub } @Override public void init(Entity entity, World world) { // TODO Auto-generated method stub } protected ResourceLocation getEntityTexture(EntityLiving living) { DataWatcher dw = living.getDataWatcher(); String texture = dw.getWatchableObjectString(20); return new ResourceLocation(texture); } ``` Aurais-je oublié quelque chose ? -
Le problème vient du fait que tu n’as pas comprit comme gérer les instances.
Le but d’un epp c’est d’avoir une instance par entité. Mais si tu mets le code qui change le rendu du joueur dans la même classe ainsi que les variables en rapport tu n’exploites pas l’intérêt de l’epp comme lors de l’enregistrement de la classe en temps que classe event il n’y a qu’une seule instance.Enfin de toute façon comme je sais très bien ce que tu cherches à faire la discussion va s’arrêter ici.