Problème de lit
-
public class EmotionLifeEvent { @SubscribeEvent public void whenHurt(LivingAttackEvent e) { if(e.entity instanceof EntityPlayer) { EntityPlayer player = (EntityPlayer)e.entity; BlockPos pos = player.getPosition(); // Check All Inventory for(int i = 0; i < player.inventory.getSizeInventory(); i++) { 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")); } } } } @SubscribeEvent public void whenSpawn(Clone e) { EntityPlayer player = e.original; if(e.wasDeath == true) { if(player.getEntityData().getBoolean("ring")) { for(int i = 0; i <= 5; ++i) { if(i == 5) { // Prevent The Lava Death player.addPotionEffect(new PotionEffect(Potion.fireResistance.getId(), 800, 0, true, false)); player.setPosition(player.getEntityData().getInteger("posX"), player.getEntityData().getInteger("posY"), player.getEntityData().getInteger("posZ")); player.getEntityData().setBoolean("ring", false); } } } } } } -
Tu n’as pas supprimé la boucle. Regarde jusqu’où le code va et fait une System.out.println du tag compound du joueur.
-
Déjà expliqué et déjà fais ,)
-
moi, j’ai une question. Si le joueur meurt dans le nether ou l’end ?
-
Évitons les questions délicates veut tu x) Je ferais une conditions plus tard ça posera aucun problème d’abord il faudrait régler le problème précédemment cité.
-
Tu as expliqué pourquoi tu mettais un effet de fire resistance, pas pourquoi tu utilises une boucle inutile.
Où est placé ton ring ? Est-ce bien l’item purpuraRing et non un item extends purpuraRing ? Rajouter un System.out.println dans ta boucle pour afficher le contenu du slot et son index.
-
Si justement j’ai expliqué ça aussi ,) Et ça fonctionne très bien comme je l’ai écris aussi, l’erreur ne viens pas de là. Je vais devoir me citer je crois ^^
-
Au lieu de mettre cette boucle tu devrais faire un thread.
-
J’avais crue voir ça pour faire un timer oui, mais si ça fonctionne comme ça je me suis dis que c’était très bien, je le modifierais à l’occasion.
-
@‘SCAREX’:
Où est placé ton ring ? Est-ce bien l’item purpuraRing et non un item extends purpuraRing ? Rajouter un System.out.println dans ta boucle pour afficher le contenu du slot et son index.
Et pour cette question ?
-
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 :CScarex : Chez moi ça ne fonctionne toujours pas

-
Tu as bien mis exactement le même code ?
-
Oui Scarex, complétement identique

