Impossible d'avoir l'effet ainsi que le Timer sur mon Item



  • Bonjour, donc voici mon problème j'ai crée un Item au quel j'ai affecter un effet de potion via onRightClick pour éviter que sa sois trop abusé j'ai décicer de lui ajouter un timer donc pour sa j'ai crée une variable int timer ainsi qu'un boolean pour l'activation mon problème c'est que je n'arrive pas a faire fonctionner les 2, sois j'ai l'effet de potion qui marche et pas le timer sois l'inverse le timer marche l'effet de potion s'affiche dans l'inventaire (Mais aucune particule et le timer reste ensuite bloqué a 00:00) Voici mon code j'espère qu'une personne poura m'aiguiller dans la bonne direction

    public class TimerSpeedRuneMod extends Item
    {
    	private int timer = 0;
    	private boolean onOff = false;
    	
    	 public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
    	    {
    		 if(onOff == false)
    		 	{
    		 	p_77659_3_.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), 150, 1));
    		 	onOff = true;
    			};
    			return p_77659_1_;		 	
    	    }
    	
    	 public void onUpdate(ItemStack p_77663_1_, World p_77663_2_, Entity p_77663_3_, int p_77663_4_, boolean p_77663_5_) 
    	 {
    		 if(onOff == true)
    		 {
    			 timer++;
    			 System.out.println(timer);
    		 }
    		 
    		 if(timer == 200)
    		 {
    			 ((EntityPlayer) p_77663_3_).addChatMessage((new ChatComponentText(EnumChatFormatting.GREEN + "La rune Speed peut-être utilisée !")));
    			 timer = 0;
    			 onOff = false;
    		 }
    	 }
    	
    }
    

    en vous remerciant d'avance pour le temps consacré a me répondre.


  • Administrateurs

    Salut,
    Pourquoi utiliser une valeur booléenne "on off" alors que tu peux directement utiliser if(timer >= 200) comme condition ?



  • Car je ne vois pas trop comment faire sans après si tu as mieux je suis preneur x)



  • Et le truc c'est que je comprends pas pourquoi mon code ne marche pas l'erreur doit être toute bête en plus


  • Administrateurs

    Comme cela :

    public class TimerSpeedRuneMod extends Item
    {
    	private int timer = 0;
    	
    	 public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_)
    	 {
    		 if(timer <= 0)
    		 {
    		 	p_77659_3_.addPotionEffect(new PotionEffect(Potion.moveSpeed.getId(), 150, 1));
                            timer = 200;
    		 }
    		 return p_77659_1_;		 	
    	 }
    	
    	 public void onUpdate(ItemStack p_77663_1_, World p_77663_2_, Entity p_77663_3_, int p_77663_4_, boolean p_77663_5_) 
    	 {
    		 if(timer >= 0)
    		 {
    			 timer--;
    		 }
    		 
    		 if(timer == 0)
    		 {
    			 ((EntityPlayer) p_77663_3_).addChatMessage((new ChatComponentText(EnumChatFormatting.GREEN + "La rune Speed peut-être utilisée !")));
    		 }
    	 }
    }
    

    Je suis simplement partie sur le fait que 0 ou - l'objet est utilisable et lorsqu'on l'utilise le timeur revient à 200.



  • D'accord merci je vais tester cela , mais tu peut me dire pourquoi cela ne marcher pas dans mon exemple car je n'apprends rien si je ne connais pas la cause merci d'avance de ta futur réponse.



  • Attention, c'est pas du tout bon ça. Tu ne doit pas utiliser d'attributs dans une class d'item ou de block comme ça. ça veux dire que tous les items aurons le même timer (par exemple si j'ai 10 fois l'item dans mon inventaire, le timer va aller 10 fois plus vite et c'est pire si tu est en multi). Il faut utiliser les NBT tags de l'item à la place.



  • @lebossmax2 Merci de ta réponse je ne maitrise pas encore les NBT c'est pour cela que je ne les utilises pas une fois mon mod fini et fonctionnel je passerais a l'optimisation et la conversion pour MCP



  • Donc après test j'ai toujours la même erreur que avant le même soucis le timer marche mais pas l'effet comme on vois il est actif dans l'inventaire mais ne marche pas en jeux @robin4002 .
    0_1530556203838_01b90007-98a6-4506-ac44-680eab1e7e66-image.png



  • Tu as testé sur un serveur ? A mon avis le problème c'est que tu n'utilise pas les NBT. (Et du coups ça marche que en multi comme les variables ne sont pas partagées)



  • @lebossmax2 Je viens de tester en Local sur un serveur les 2 codes marche très bien aucun problème tu as donc raison mais j'mis connais pas en NBT pour le faire et sa m'étonnerais que tu me le fasse même demander gentiment ^^'



  • En effet, par contre il y a un tuto à ce sujet : https://www.minecraftforgefrance.fr/topic/4300/les-tags-nbt (Il y a même un exemple pour les items à la fin)



  • Merci cela me sera très utile problème résolu je close merci encore de votre temps @LeBossMax2 @robin4002 .