Résolu Vitesse d'un joueur côté serveur
-
J’aimerais récupérer la vitesse d’un joueur côté serveur (j’utilise un IExtendedEntityProperties et j’aimerais éviter d’utiliser un nouveau paquet à envoyer au serveur, je préfère l’utiliser en dernier recours). J’ai déjà essayé :
- le motion, sauf qu’il n’existe pas côté serveur
- la variable moveForward qui elle existe côté serveur sauf qu’elle n’est appliquée que si la valeur est supérieure à 1 côté serveur (géré lorsque le paquet est reçu)
- la différence des positions (avant et après le tickage du joueur) mais ces valeurs sont toujours les mêmes (posX, prevPosX et lastTickPosX. La variable serverPosX est toujours à 0)
- getWalkSpeed, sauf que c’est un multiplicateur constant
Code à l’instant :
@SubscribeEvent public void onPlayerTick(PlayerTickEvent event) { EntityPlayer player = event.player; EEPThirstBar t = EEPThirstBar.getEEP(player); int i = 0; if (event.phase == Phase.END) { if (event.side == Side.SERVER) { if (player.isInWater()) i = 1; } } else { if (event.side == Side.SERVER) { if (player.ticksExisted % 20 == 0) { Hilium.LOGGER.info(player.posX + " | " + player.prevPosX + " | " + player.lastTickPosX); } } } if (i != 0) t.incrementValue(i); }
Mais rien à faire, je n’arrive pas à avoir la vitesse à laquelle avance le joueur.
-
Regardes la position déjà stocké dans tes extended properties (on considère qu’elle est égale à la position courante si aucune n’est sauvegardée) et soustrais cette position à la position courante pour obtenir la vitesse en mètres/ticks
Une fois la vitesse obtenue, tu remplaces l’ancienne position par la position courante dans l’extended properties, et voilàSent from my GT-I9000 using Tapatalk 2
-
Mais j’ai aucune position stockée dans l’EEP, et puis çà fait beaucoup d’enregistrer la position tous les ticks dans un EEP, non ?
-
Si tu le fais que côté serveur, c’est juste ajouter trois variables dans l’EEP et changer leur valeur chaque tick, c’est rien ^^
Sent from my GT-I9000 using Tapatalk 2
-
Merci beaucoup, mais je crois au final que je vais devoir utiliser des paquets côté client : il faut que je détecte lorsqu’une personne boit une fiole d’eau et l’event est appelé seulement côté client, à moins qu’il y est une autre manière de savoir lorsqu’une fiole est bue (j’utilise le PlayerUseItemEvent.Finish).
-
Bon, j’ai finalement décidé d’utiliser un paquet, je ferme.