Effet de lenteur sous l'eau
-
Mets un System.out.println pour voir si c’est bien appelé.
-
@‘AymericRed’:
Mets un System.out.println pour voir si c’est bien appelé.
J’ai essayer de mon côté l’event marche bien mais en fait le truc c’est que sa modifie ton walkspeed quand tu sors de l’eau ^^
Essaye un walkspeed de 3.0F marche dans l’eau puis sort sur la terre tu vas voir que sa l’applique une fois hors de l’eau et quand tu re rentre dans l’eau tu es encore slow -
Ah ça ne mache pas dans l’eau, il y a peut-être une fonction setSwimSpeed (je pense pas mais bon), je regarderais tout à l’heure.
-
Mon event est bien appeler mais ca marche pas
-
event.entity.motionX *= nouvelle valeur
event.entity.motionY *= nouvelle valeur
event.entity.motionZ *= nouvelle valeur -
@‘ZeAmateis’:
event.entity.motionX *= nouvelle valeur
event.entity.motionY *= nouvelle valeur
event.entity.motionZ *= nouvelle valeur+1
-
T’a multiplié motionY par quoi ?
-
@‘AymericRed’:
T’a multiplié motionY par quoi ?
j’ai rien dis

-
Je sais plus si c’est += ou *= et tu met un double il me semble teste tu verra
-
@‘ZeAmateis’:
Je sais plus si c’est += ou *= et tu met un double il me semble teste tu verra
avec += il avance tout seul ^^ avec *= ça marche mais genre c’est bugger peu.
-
Sinon if(motionY > 0) motionY += machin truc; et if(motionY < 0) motionY -= machin truc;
-
[font=Source Code Pro*@SubscribeEvent *]public void onLiving(LivingEvent.LivingUpdateEvent *event*) { if (*event*.entity.isInWater()) { *event*.entity.motionX += 1%(#aaa9a7)[; ] *event*.entity.motionZ += 1%(#aaa9a7)[; ] } }Marche pas : je vais plus vite sur terre mais dans l’eau je peu pas me deplacer en X et Z
-
Ce n’est pas +, c’est x
Donc remplace cela par event.entity.motionX*= 1.3F et pareil pour l’axe z -
J’avance tout seul dans l’eau et je vait plus vite sur terre et dans l’eau

-
Faut pas oublier d’ajouter un else avec motionX*=1; et motionZ*=1; pour éviter que le joueur conserve sa vitesse hors de l’eau.
-
@‘Plaigon’:
Faut pas oublier d’ajouter un else avec motionX*=1; et motionZ*=1; pour éviter que le joueur conserve sa vitesse hors de l’eau.
Pas besoin le motion est mis à jour à chaque tick
-
@‘Plaigon’:
Ce n’est pas +, c’est x
Donc remplace cela par event.entity.motionX*= 1.3F et pareil pour l’axe zça marche nickel sa modifie bien la motion du joueur mais le soucis c’est que le joueur avance tout seul après ^^.
-
Envoi le code
-
[font=Source Code Propublic class ]%(#345f99)[WaterEventHandler ]{ %(#278c3c)[*@SubscribeEvent *] public void onPlayerBreakBlock(PlayerEvent.BreakSpeed *event*) { if (*event*.entityPlayer.isInWater()) { *event*.newSpeed = *event*.newSpeed %(#aaa9a7)* 5%(#aaa9a7)[; ] } } %(#278c3c)[*@SubscribeEvent *] public void onLiving(LivingEvent.LivingUpdateEvent *event*) { if (*event*.entity.isInWater()) { *event*.entity.motionX %(#aaa9a7)* 1.3F%(#aaa9a7)[; ] *event*.entity.motionZ %(#aaa9a7)* 1.3F%(#aaa9a7)[; ] } %(#0187df)[else ] { } } } ``` -
Alors, petite explication du code :
- au premier tick le motion est égal à 1, ta fonction est appelée donc le motion vaut 1.3
- au deuxième tick le motion vaut 1.3, ta fonction est appelée donc le motion vaut 1.69
- etc
donc le motion grandit de plus en plus ce qui fait qu’à la fin ton joueur avance tout seul, j’ai donc recopié le code de la 1.8 pour l’enchantement depthrider pour que le code soit correcte.
J’ai d’ailleurs trouvé un petit bug dans ton code : lorsque le joueur est totalement plongé sous l’eau, sa vitesse de minage diminue, j’ai donc corrigé ça aussi :
public class WaterEventHandler { @SubscribeEvent public void onPlayerBreakBlock(PlayerEvent.BreakSpeed event) { if (event.entityPlayer.isInWater()) { float f = 5; if (event.entityPlayer.isInsideOfMaterial(Material.water) && !EnchantmentHelper.getAquaAffinityModifier(event.entityPlayer)) // condition si le joueur est totalement immergé { f *= 5.0F; } event.newSpeed = event.newSpeed * f; } } @SubscribeEvent public void onLiving(LivingEvent.LivingUpdateEvent event) { EntityLivingBase living = event.entityLiving; if (living.isInWater() && (!(living instanceof EntityPlayer) || !((EntityPlayer) living).capabilities.isFlying)) { double d0 = living.posY; float f4 = 0.8F; float f5 = 0.02F; float f6 = 3F; // C'est cette valeur là qui indique le depthrider, si tu veut l'augmenter il te faut supprimer la condition qui suit if (f6 > 3.0F) { f6 = 3.0F; } if (!living.onGround) { // Si le joueur ne touche pas le sol, alors on divise la vitesse par 2, tu peux supprimer cette condition si tu en as envie f6 *= 0.5F; } if (f6 > 0.0F) { f4 += (0.54600006F - f4) * f6 / 3.0F; f5 += (living.getAIMoveSpeed() * 1.0F - f5) * f6 / 3.0F; } living.moveFlying(living.moveStrafing, living.moveForward, f5); living.moveEntity(living.motionX, living.motionY, living.motionZ); living.motionX *= (double) f4; living.motionY *= 0.800000011920929D; living.motionZ *= (double) f4; if (living.isCollidedHorizontally && living.isOffsetPositionInLiquid(living.motionX, living.motionY + 0.6000000238418579D - living.posY + d0, living.motionZ)) { living.motionY = 0.30000001192092896D; } } } }