Gui coté serveur
-
J’utilise le tag “ActualTimer” qui est incrémenter de 1 chaque tick tan que l’un des deux tags (“RightClic” ou LeftClic") est différent de 0.
Lorsque mon tag “ActualTimer” est supérieur à ma Variable “comboTimer” (variable ce coup ci attention) alors tous mes tag sont ré-initialisé a 0 (et donc le timer ce désactive).
Si, au cour de l’un des itérations de mon Timer (d’ou la nécessité de l’effectuer chaque tic), un des deux tags “RightClic” ou LeftClic" est modifier (chose que je vérifie grâce aux tags “RightPreviousClic” et “LeftPreviousClic”), alors je ré-initialise mon tag “ActualTimer” le timer continue alors, mais le tag reprend la valeur 0.
Je ne sais pas si j’ai été assez clair ^^’
-
Je ne vois pas d’autres façons de faire
Ce que tu peux par contre faire c’est actualisé ton time toutes les secondes au lieu de tous les ticks. -
Comment cas ? onUptade est appeler tout les ticks, comment je peu définir pour que ce ne soit que toute les minutes ?
-
Ajoute dans ta classe deux variables :
private static final long start = System.currentTimeMillis() / 1000;
private static int seconds = 0
Ensuite dans ta fonction update :if(seconds != (int)(System.currentTimeMillis() / 1000 - start)) { // ton action ici, elle ne sera que faite toutes les secondes seconds = (int)(System.currentTimeMillis() / 1000 - start); }
C’est le moyen le plus propre pour faire ça.
-
Je vien de relire mon code, et effectuer l’incrémentation chaque seconde n’es pas possible a cause de l’affichage (trop de latence).
Par contre, j’avoue avoir totalement oublier la classe System, et je dois pouvoir me baser sur le temps du syteme et faire le calcul à chaque fois plutôt que de me baser sur un tag qu’il faut re écrire à chaque fois. Je vais m’y pencher dessus ^^EDIT :
public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int itemSlot, boolean isSelected) { if(stack.getTagCompound() == null) { stack.setTagCompound(new NBTTagCompound()); stack.getTagCompound().setInteger("rC", 0); // Right Combo stack.getTagCompound().setInteger("rPC",0); // Right Previous Combo stack.getTagCompound().setInteger("lC", 0); // Left Combo stack.getTagCompound().setInteger("lPC", 0); // Left Previous Combo stack.getTagCompound().setInteger("aT",timer); // actualTimer } if ((nbtVar.readNbtVarInt(stack, nbtVar.RightCombo) != 0) || (nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo) != 0)) { timer++; if (timer < 0) { timer = 0; } int seconds = timer - nbtVar.readNbtVarInt(stack, nbtVar.ActualCombo); if(seconds >= this.comboTimer) { JFunction.write("### ### : " + seconds + " >= " + this.comboTimer + " ?"); nbtVar.writeNbtVar(stack, nbtVar.RightCombo, 0); nbtVar.writeNbtVar(stack, nbtVar.LeftCombo, 0); nbtVar.writeNbtVar(stack, nbtVar.ActualCombo, timer); } else if ( nbtVar.readNbtVarInt(stack, nbtVar.RightCombo) != nbtVar.readNbtVarInt(stack, nbtVar.RightPreviousCombo) || nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo) != nbtVar.readNbtVarInt(stack, nbtVar.LeftPreviousCombo)) { nbtVar.writeNbtVar(stack, nbtVar.ActualCombo, timer); } if (nbtVar.readNbtVarInt(stack, nbtVar.RightCombo) != nbtVar.readNbtVarInt(stack, nbtVar.RightPreviousCombo)) { nbtVar.writeNbtVar(stack, nbtVar.RightPreviousCombo, nbtVar.readNbtVarInt(stack, nbtVar.RightCombo)); } if (nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo) != nbtVar.readNbtVarInt(stack, nbtVar.LeftPreviousCombo)) { nbtVar.writeNbtVar(stack, nbtVar.LeftPreviousCombo, nbtVar.readNbtVarInt(stack, nbtVar.LeftCombo)); } } }
Grace à cette méthode, l’objet n’est pas ré-initialisé à chaque fois. Le seul problème viens de si le joueur joue plus de 2,147,483,647 tick non stop (à raison de 20 tick par seconde, sachant qu’il y a 86400 seconde dans une journée sa fait 17,280,000 de tick par jour, soit à peu près 124 jours non stop.)
Reste a voir si sa ne risque pas de poser de problème niveau serveurs (multi-activation). -
Le problème n’est malheureusement pas terminer X)
Le problème de serveurs semble avoir totalement disparut de par l’utilisation de nbtTags.
En revanche, un nouveau problème apparaît ^^’
Comme vous pouvez le voir sur le GIF animé (ou pas), l’affichage à lieu sur tout nouveaux objet, immédiatement et se fige. De plus, il y a un décalage des objets qui s’effectues lors du premier clic. Si j’effectue plusieurs clic, le problème est résolu tan que je reste sur cette objet. Dès que je change, c’est la même.:::
Désoler pour vos yeux X)
:::Voila les code concerner :
Classe JScreen (Classe d’affichage, qui est sans doute celle qui bug)
Classe JWeapons (Classe de base d’une armes)
JScythe (Classe étendu utilisé dans l’exemple)Étrangement, si on observe le code, l’affichage est censé avoir lieu selon la valeurs du nbtTag, qui, par défaut, est initialisé a 0 (donc pas d’affichage). Chaque valeurs est ensuite correcte, sauf la premier fois…
help !
-
Je vais récupérer les sources dans la soiré ou demain et je vais regarder ça.