-
Mais il y a quoi de compliqué ???
@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.getPlayer(); ItemStack helmet = player.inventory.armorItemInSlot( 3 ); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); if(boots != null && leggings != null && chestplate != null && helmet != null) { player.capabilities.allowFlying = true; } else { player.capabilities.allowFlying = false; } } -
J’avais quasiment fait ça j’avais juste mal écrit la ligne de l’EntityPlayer mais je pensais m’être complètement planté, ducoup j’ai juste un probléme avec le event.getPlayer , le getPlayer me met une erreur… “The method getPlayer() is undefined for the type TickEvent.PlayerTickEvent”
@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.getPlayer(); ItemStack helmet = player.inventory.armorItemInSlot( 3 ); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); if(boots != null && leggings != null && chestplate != null && helmet != null) { player.capabilities.allowFlying = true; } else { player.capabilities.allowFlying = false; } } -
C’est peut-être getEntityPlayer() alors ? Ou juste .player; ?
-
Je peux mettre event.player mais impossible de voler et pour getEntityPlayer impossible de le mettre ça fait pareil que le .getPlayer…
-
Donc c’est event.player le bon.
Maintenant reste à savoir si ton événement est bien appelé ou non. Si la fonction n’est jamais appelé c’est que tu ne l’as pas enregistré, retourne voir le tutoriel dans ce cas …
-
C’est bon je l’ai enregistré avec event.player et j’arrive a voler en survie ! Petit problème je vole sans armure…
Je continue à chercher mais si jamais t’as la solution je suis preneur :grinning_face_with_sweat: -
Bon j’y arrive pas, je comprend pas…
-
Si tu arrêtes de voler sans armure, est-ce que tu arrives à nouveau à voler ensuite ?
-
oui j’arrive a voler après m’être posé sans armure et le problème est encore pire, des que je lance le jeu je peut voler direct sans mettre aucun bout d’armure…
Je te remet mon code au cas ou
package fr.arca.arcadia; import fr.arca.arcadia.init.ItemsMod; public class EventHandler { @SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.player; ItemStack helmet = player.inventory.armorItemInSlot( 3 ); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); if(boots != null && leggings != null && chestplate != null && helmet != null) { player.capabilities.allowFlying = true; } else { player.capabilities.allowFlying = false; } } } -
Si tu arrives à voler c’est que Minecraft n’utilise pas l’attribut null quand un slot est vide mais il utilise ItemStack.EMPTY donc vérifie plutôt si l’ItemStack est différent de ItemStack.EMPTY.
-
Merci beaucoup ça fonctionne parfaitement, mais pour toute les armures…
J’arrive pas à limiter le fly à une seule armure. J’ai quelques idées mais je n’arrive pas à les mettre en place.
Comment je pourrais faire pour que seulement quand un item en particulier est équipé la condition soit vérifié ? -
A lieu de vérifier si le casque est pas vide tu vérifie si le casque est le casque que tu veut si ca bug vérifie d’abord si c’est pas EMPTY avant de vérifier que ce qui y’a dedans est ce que tu veut en gros tu garde la meme condition sauf que au lieu de EMPTY tu met l’item tu veut
ItemStack checkedHelmet= new ItemStack(TaClasse.TonCasque ); ItemStack checkedboot= new ItemStack(TaClasse.Tonboot ); ItemStack checkedchest= new ItemStack(TaClasse.TonChest ); ItemStack checkedleggin= new ItemStack(TaClasse.TonLeggin );if(boots == checkedboot && leggings == checkedleggin && chestplate == checkedchest && helmet == checkedHelmet) { player.capabilities.allowFlying = true; } else { player.capabilities.allowFlying = false; }//si ca marche pas tu fait ca if(boots != ItemStack.EMPTY && leggings != ItemStack.EMPTY && chestplate != ItemStack.EMPTY && helmet != ItemStack.EMPTY ) { if(boots == checkedboot && leggings == checkedleggin && chestplate == checkedchest && helmet == checkedHelmet) { player.capabilities.allowFlying = true; } } else { player.capabilities.allowFlying = false; } -
Désolé ça ne fonctionne pas, je n’arrive plus du tout à fly.
J’ai essayé ça:@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.player; ItemStack helmet = player.inventory.armorItemInSlot( 3 ); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); ItemStack checkedHelmet = new ItemStack(ItemsMod.findium_helmet); ItemStack checkedChestplate = new ItemStack(ItemsMod.findium_chestplate); ItemStack checkedLeggings = new ItemStack(ItemsMod.findium_leggings); ItemStack checkedBoots = new ItemStack(ItemsMod.findium_boots); if(boots != ItemStack.EMPTY && leggings != ItemStack.EMPTY && chestplate != ItemStack.EMPTY && helmet != ItemStack.EMPTY) { if(helmet == checkedHelmet && chestplate == checkedChestplate && leggings == checkedLeggings && boots == checkedBoots) { player.capabilities.allowFlying = true; } } else { player.capabilities.allowFlying = false; player.capabilities.isFlying = false; } }et ça:
@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.player; ItemStack helmet = player.inventory.armorItemInSlot( 3 ); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); ItemStack checkedHelmet = new ItemStack(ItemsMod.findium_helmet); ItemStack checkedChestplate = new ItemStack(ItemsMod.findium_chestplate); ItemStack checkedLeggings = new ItemStack(ItemsMod.findium_leggings); ItemStack checkedBoots = new ItemStack(ItemsMod.findium_boots); if(helmet == checkedHelmet && chestplate == checkedChestplate && leggings == checkedLeggings && boots == checkedBoots) { player.capabilities.allowFlying = true; } else { player.capabilities.allowFlying = false; player.capabilities.isFlying = false; } } -
Par contre un truc intéressant c’est que quand je vérifie juste si “chest == checkedchest” je ne plus fly même en créatif.
-
player.inventory.armorItemInSlot( 3 );
peut être que les slot sont pas bon je suis en train de vérifier xD et pour le creatif faudrait ajouter un condition pour verifier si le joueur est en creatif ou non
-
Non mais tu essayes de comparer une nouvelle instance d’un itemstack avec un autre en utilisant l’opérateur ==, ça sera forcement faux.
Faudrait plutôt comparerhelmet.getItem() == ItemsMod.findium_helmet -
@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.player; ItemStack helmet = player.inventory.armorItemInSlot(3); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); if(helmet.isItemEqual(new ItemStack(Items.DIAMOND_HELMET)) && chestplate.isItemEqual(new ItemStack(Items.DIAMOND_CHESTPLATE)) && leggings.isItemEqual(new ItemStack(Items.DIAMOND_LEGGINGS)) && boots.isItemEqual(new ItemStack(Items.DIAMOND_BOOTS))) { player.capabilities.allowFlying = true; }else{ player.capabilities.allowFlying = false; } }ca ca fonctionne autant pour moi j’ai ecrit ce qui a au dessus vite et j’aurait pas du ya une fonction pour faire ca x)
-
Ça y est tout fonctionne parfaitement merci a tous ! Plus que le fly en créatif a fixer et c’est bon.
Je vous met le code final :@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.player; ItemStack helmet = player.inventory.armorItemInSlot(3); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); if(helmet.isItemEqual(new ItemStack(ItemsMod.findium_helmet)) && chestplate.isItemEqual(new ItemStack(ItemsMod.findium_chestplate)) && leggings.isItemEqual(new ItemStack(ItemsMod.findium_leggings)) && boots.isItemEqual(new ItemStack(ItemsMod.findium_boots))) { player.capabilities.allowFlying = true; } else { player.capabilities.allowFlying = false; player.capabilities.isFlying = false; } } -
petit indice avec ca tu devrait trouver par toit meme
if(player.capabilities.isCreativeMode)soit tu fait en sort que ca ca fasse toujours voler soit tu fait en sorte que ta condition s’applique pas quand tu est creatif
-
Merci de ton indice mais c’est bon j’ai trouvé, par contre j’ai fait autrement je sais pas si c’est grave :grinning_face_with_sweat:
@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.player; ItemStack helmet = player.inventory.armorItemInSlot(3); ItemStack chestplate = player.inventory.armorItemInSlot( 2 ); ItemStack leggings = player.inventory.armorItemInSlot( 1 ); ItemStack boots = player.inventory.armorItemInSlot( 0 ); if(!player.isCreative()) { if(helmet.isItemEqual(new ItemStack(ItemsMod.findium_helmet)) && chestplate.isItemEqual(new ItemStack(ItemsMod.findium_chestplate)) && leggings.isItemEqual(new ItemStack(ItemsMod.findium_leggings)) && boots.isItemEqual(new ItemStack(ItemsMod.findium_boots))) { player.capabilities.allowFlying = true; } else { player.capabilities.allowFlying = false; player.capabilities.isFlying = false; } } }