Non résolu Event Forge appelé plusieurs fois ...
-
Bonjour,
Voilà j’ai découvert le modding sur Minecraft à l’aide de vos tutoriels Forge et je vous en remercie déjà car ils étaient globalement très clair
Cependant, j’ai quelque chose que je n’ai pas bien compris, c’est que lorsque je code un Event comme PlayerInteractEvent.RightClickBlock, ce dernier est appelé 8 fois en une seconde à partir du moment ou je cliques sur un block ?
Et cela est plutot gênant de mon coté, je voulais donc savoir déjà pourquoi le jeu fait cela et comment faire pour remédier à ce problème ? -
Bonjour,
Il est appelé pour chaque main et en client / serveur. Mais normalement ça ne fait que 4, pas 8
Ajoutes un
if (!event.getPlayer().world.isRemote)
et une autre condition pour la activeHand (je ne connais plus par coeur le nom du getter) et ça va déjà limiter. -
@robin4002 a dit dans Event Forge appelé plusieurs fois ... :
!event.getPlayer().world.isRemote
public void BlockRightClickEvent(PlayerInteractEvent.RightClickBlock event) { // client side EntityPlayer entityPlayer = event.getEntityPlayer(); System.out.println("OK"); //if (!event.getEntityPlayer().world.isRemote) { if (entityPlayer.getHeldItemMainhand().getItem() == Items.IRON_AXE) { if (Teleportation) { position = event.getPos(); Teleportation = false; System.out.println("1"); } else if (!Teleportation) { entityPlayer.setPosition(position.getX(), position.getY(), position.getZ()); Teleportation = true; System.out.println("2"); } } //} } }
D’accord Merci pour ta réponse c’est ce que j’ai fait et effectivement ca divise par deux le nombre de passage. Par contre l’item ne marche plus …
En fait j’essaye de faire une hache qui permet d’enregistrer une position en faisant un premier cliques gauche sur un bloc et qui au second clique gauche te teleporte au block prealablement enregistré.
Voici la boucle que j’essayes de faire en fait mais voici ce que le terminal effectue quand je fais clique gauche :[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:54]: 1
[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:54]: 1
[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:58]: 2
[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Client thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:58]: 2
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:54]: 1
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:54]: 1
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:58]: 2
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:48]: OK
[14:49:17] [Server thread/INFO] [STDOUT]: [fr.dalhfire.copscore.EventCops:BlockRightClickEvent:58]: 2 -
Les variables Teleportation et position viennent d’où ?
-
@robin4002 Elles ont été défini préalablement dans la classe désolé j’ai oublié le de le mettre ^^
public class EventCops { public boolean Teleportation = true; public BlockPos position; @SubscribeEvent public void onAttackEntityEvent(AttackEntityEvent event) { if (event.getTarget().canBeAttackedWithItem() && !event.getTarget().hitByEntity(event.getEntity()) && event.getTarget() instanceof EntityLivingBase && event.getTarget().hurtResistantTime <= 0) { EntityLivingBase attacker = event.getEntityLiving(); EntityLivingBase target = (EntityLivingBase) event.getTarget(); if (attacker.getHeldItemMainhand() == ItemStack.EMPTY) return; if (attacker.getHeldItemMainhand().getItem() == ItemsCops.SkyKeySword) { System.out.println("OK"); attacker.addPotionEffect(new PotionEffect(Potion.getPotionById(10), 25, 10)); } } } @SubscribeEvent public void BlockRightClickEvent(PlayerInteractEvent.RightClickBlock event) { // client side EntityPlayer entityPlayer = event.getEntityPlayer(); System.out.println("OK"); //if (!event.getEntityPlayer().world.isRemote) { if (entityPlayer.getHeldItemMainhand().getItem() == Items.IRON_AXE) { if (Teleportation) { position = event.getPos(); Teleportation = false; System.out.println("1"); } else if (!Teleportation) { entityPlayer.setPosition(position.getX(), position.getY(), position.getZ()); Teleportation = true; System.out.println("2"); } } //} } }
-
Bon au final j’ai rajouté une condition supplementaire( entityplayer.isSneaking() pour la boucle else if et j’ai enlevé la variale Teleportation, et l’item marche bcp mieux
J’ai toujours des appels supplémentaires mais tant pis ca me va déjà mieux !
Merci à toi @robin4002 -
Ce message a été supprimé ! -