Résolu Problème de motion
-
Bonjour,
Alors voilà :
J’ai créé un item qui (normalement) est sensé propulser le joueur en hauteur. Pour cela, je passe par player.motionY.
Sauf que, visiblement ça ne marche pas, rien ne se passe au clic droit, si ce n’est l’envoi du message dans la console :(On est dans une fonction appelée par onItemRightClick(Itemstack, World, EntityPlayer))
if(!world.isRemote) { if(player.onGround) { System.out.println("On Ground !"); player.motionY += 1.0D; } else { player.motionY = 0D; player.fallDistance = 0F; } }
-
Salut plutôt comme ceci :
if(world.isRemote) { if(player.onGround) { System.out.println("On Ground !"); player.motionY += 1.0D; } else { player.motionY = 0D; player.fallDistance = 0F; } }
-
Pourquoi ? Toute la logique de mise à jour se fait côté serveur, or :
"boolean net.minecraft.world.World.isRemoteThis is set to true for client worlds, and false for server worlds"
-
T’as essayé mon code au moins ? Si ça ne marche pas retire la condition if(player.onGround mais y’a pas de raisons que ça ne marche pas
Et au passage non les motion et tout autre type de déplacement ont un rapport direct avec le Side client, crois moi
-
J’avais déjà essayé (et j’ai re-testé à l’instant) et j’ai bien dit que le message “On Ground” s’affiche dans la console, donc pas besoin de retirer la condition (en plus je l’ai rajoutée après mon problème).
Ce qui est bizarre c’est que l’utilisation du motionY ne fonctionne pas uniquement ici, partout ailleurs, ça marche.
-
Essaie plutôt avec une téléportation, les motion sont un peu bizarres.
-
Les motion marchent très bien c’est juste qu’ils doivent être additionnés à une valeur en float et non en double
Et je te garantis de laisser la condition du isRemote en true sinon ça ne marchera pas, les mouvements sont bien gérés côté client. J’en ai la preuve sur mon code qui lui est fonctionnel
-
@Julot10085
Les motions sont des double donc additionner des floats au lieu de doubles ne changera rien (testé)
J’ai essayé avec l’addition de float & le remote à true, ça n’a rien changé.@SCAREX
La téléportation marche, ça fait juste un peu moche ^^.
Je vais essayer en “progressif” (= un tick event avec un tp de plus en plus haut). -
Bon apparemment tu n’as pas l’air de me croire je te donne ce code d’un block que j’ai créer et regarde il est fonctionnel donc le soucis ne vient que de toi
@Override public void onEntityCollidedWithBlock(World p_149670_1_, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity entity) { entity.attackEntityFrom(DyingCraftMod.barbeleDamage, 4.0F); entity.motionY+= 0.48F; entity.motionZ+= 0.48F; }
Je n’ai pas mis de condition isRemote car ce code est exécuté aussi bien en solo qu’en serveur =D
-
Autant pour moi au niveau des float / double
Ton problème est bizarre, essaie de changer la valeur, ou fais d’autre test avec des motionX. Peutêtre que l’axe des Y bug, je sais pas. -
Déjà testé avec tous les autres motions, je suis même allé jusqu’à ne mettre aucune condition, mais ça n’a rien donné…
-
Les motions ne sont que présents côté client il me semble.
-
Niveau joueur alors ?
Parce que ce code marche avec les mobs et autres :if(!world.isRemote) { entity.motionY += 1.0D; }
Je vais essayer quelque chose d’autre donc.
EDIT :
Effectivement il semblerait que les motions du joueur ne s’updatent que côté client, or l’appel de ma fonction est dans un condition qui vérifie si on est côté serveur –'. Donc autant pour moi, vous aviez raison.Sujet résolu.
-
Alors j avais raison et du coup c est la condition qui faisait que sa ne marchait pas ? Si oui c est quand même ce que j avais dit a mon premier message…