Résolu Problème de lit
-
commentaires six :
“Robin, j’ai utilisé pas mal de System.out.print() tous relativement intéressant. D’une première part la valeur “ring” est égal à false lors du deuxième event, j’ai donc placé un print lors de la condition :”
Bref j’ai placé un print à la fin et l’erreur pour faire court doit venir de :
player.getEntityData().setBoolean("ring", true);
-
Bon, écoute, si tu ne veux pas que je t’aide, dit le. Je vois pas comment il pourrais y avoir un problème à cet endroit. Le problème vient forcément d’un autre endroit.
-
Non c’est juste que tu devrais prendre le temps de lire, j’écris correctement français et je prend le temps de tout expliquer alors je vois pas pourquoi il y aurait un problème ^^’
Pourtant si puisque lors du deuxième event “ring” = false et le print ne s’affiche pas dans la console dans le premier event comme si ça n’existais pas or le code du début avec cette même condition fonctionné parfaitement (donc ça ne viens pas de mon code principale).
Ps: Ce print ci :
if(player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() == EmotionItems.purpuraRing) { player.getEntityData().setBoolean("ring", true); player.getEntityData().setInteger("posX", pos.getX()); player.getEntityData().setInteger("posY", pos.getY()); player.getEntityData().setInteger("posZ", pos.getZ()); System.out.print(player.getEntityData().getBoolean("ring")); }
-
J’ai trouvé d’où venait le problème : il y a 2 joueurs, l’ancien et le nouveau.
Voici un code qui marche (remplace juste Items.apple par ton item) :
@SubscribeEvent public void onLivingDeath(LivingDeathEvent event) { if (event.entityLiving instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.entityLiving; for (int i = 0; i < player.inventory.getSizeInventory(); i++) { if (player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() == Items.apple) { BlockPos pos = player.getPosition(); player.getEntityData().setBoolean("ring", true); player.getEntityData().setInteger("posX", pos.getX()); player.getEntityData().setInteger("posY", pos.getY()); player.getEntityData().setInteger("posZ", pos.getZ()); } } } } @SubscribeEvent public void onEntitySpawn(PlayerEvent.Clone event) { if (event.wasDeath) { EntityPlayer player = event.original; if (player.getEntityData().getBoolean("ring")) { event.entityPlayer.addPotionEffect(new PotionEffect(Potion.fireResistance.getId(), 800, 0, true, false)); event.entityPlayer.setPosition(player.getEntityData().getInteger("posX"), player.getEntityData().getInteger("posY"), player.getEntityData().getInteger("posZ")); } } }
-
D’accord merci beaucoup Scarex, bon du coup pour le problème online c’est réglé reste plus qu’à trouver comment téléporter le joueur même si il a un point de spawn grâce au lit
Ps: J’ai essayé avec l’event “LivingSpawnEvent” pour le respawn mais marche pas :C
-
Utilise un thread pour tp au bout de une seconde.
-
Dans le code que je t’ai donné, le joueur est téléporté quand il spawn même s’il a un lit.
-
Robin : Malheureusement le thread ne fait que retarder le spawn d’une seconde Et même avec l’autre event ça ne fonctionne pas :C
Scarex : Chez moi ça ne fonctionne toujours pas
-
Tu as bien mis exactement le même code ?
-
Oui Scarex, complétement identique
-
Tu as bien pensé à mettre event.entityPlayer pour le setPosition, tu as l’effet de fire resistance ?
-
Oui tout fonctionne très bien, la téléportation sans le lit et le fire resistance dans tous les cas. J’ai pris le temps aussi de rajouter cette condition pour pallier au problème éventuelle et ça fonctionne parfaitement :
if(player.worldObj.provider.getDimensionId() == 0){}
Dans le pire des cas sinon on vas pas débattre pendant une heure pour un petit problème comme ça et puis tempi.
-
Vérifier la version de Forge que vous utilisez chacun.
-
“forge-1.8-11.14.3.1449”
-
1.8 11.14.1.1336 : je l’ai mis sur mon mod de test que je ne mets pas à jour souvent. Je mets à jour mon workspace.
-
Dans ce cas faut check s’il n’y a pas eu un changement du côté de Forge.
-
1.8 11.14.3.1450 : fonctionne, le problème vient de toi. As-tu bien enregistré l’événement avec MinecraftForge et non FMLComonHandler ?
Je te renvois le code utilisé :
@SubscribeEvent public void onLivingDeath(LivingDeathEvent event) { if (event.entityLiving instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer) event.entityLiving; for (int i = 0; i < player.inventory.getSizeInventory(); i++) { if (player.inventory.getStackInSlot(i) != null && player.inventory.getStackInSlot(i).getItem() == Items.apple) { BlockPos pos = player.getPosition(); player.getEntityData().setBoolean("ring", true); player.getEntityData().setInteger("posX", pos.getX()); player.getEntityData().setInteger("posY", pos.getY()); player.getEntityData().setInteger("posZ", pos.getZ()); } } } } @SubscribeEvent public void onEntitySpawn(PlayerEvent.Clone event) { if (event.wasDeath) { EntityPlayer player = event.original; if (player.getEntityData().getBoolean("ring")) { event.entityPlayer.addPotionEffect(new PotionEffect(Potion.fireResistance.getId(), 800, 0, true, false)); event.entityPlayer.setPosition(player.getEntityData().getInteger("posX"), player.getEntityData().getInteger("posY"), player.getEntityData().getInteger("posZ")); } } }
-
Oui heureusement que oui ^^’ Et j’ai fais du copier coller, mais vraiment, pourtant quand on définie un point de spawn avec le lit et qu’ensuite on essaye de ce suicider avec la bague dans l’inventaire rien à faire la téléportation ne fonctionne pas :C
Ps: J’ai update vers la dernière version de forge mais même dans l’autre aussi ça ne marchais pas alors il doit vraiment y avoir un problème quelque pars.
-
Effectivement, j’ai regardé un peu le code, et en fait le clone est appelé après la téléportation au spawn mais avant la téléportation au lit.
La seule solution que j’ai pu trouvé c’est d’utiliser le PlayerRespawnEvent de fml qui est appelé après, le seul problème c’est que les NBT tags ne sont pas clonés avec, il faut donc utiliser le clone event pour copier les NBT dans les tags du nouveau joueur pour ensuite les utiliser dans le PlayerRespawnEvent.
-
PlayerRespawnEvent vient aussi de Forge non ?