Problème de calcul de tick sur event



  • Bonjour voila j'essaye de calculer un tick coté client et de le remettre à zéro lorsque le joueur tape une entité mais j'ai bien le message je fonctionne mais pas la remise à zéro

    protected int cooldown = 0;
    protected int time = 2000;
    
    @SubscribeEvent
    public void Playerregenaration(LivingAttackEvent event)
    {
       if(event.source.getSourceOfDamage() instanceof EntityPlayer && event.ammount > 1)
    {
        cooldown = 0;
                           System.out.println("je fonctionne");
    }
    }
    @SubscribeEvent
    public void Playerregenaration2(TickEvent.PlayerTickEvent event)
    {
    if(cooldown < time)
    {
    cooldown = cooldown + 1;
    System.out.println(cooldown);
    }
    }
    

    Merci d'avance



  • Et est-ce que tu as le message qui s'affiche de ton second event ? Celui-là :
    System.out.println(cooldown);


  • Rédacteurs

    Il faut les enregistrer côté serveur



  • Ok, je suis en train de vérifier le code chez moi.
    Mais juste comme ça ta variable est universelle à tous les joueurs. Je veux dire tu ne souhaiterais pas qu'elle soit unique pour chaque joueur, sinon ça risque d'être bugué, le cooldown :§
    Si tu souhaites qu'elle soit unique, crées-toi un ExtendedEntityProperties via le tuto du gugu42 sur le fofo et puis voilà, ce n'est pas plus compliqué ^^'

    EDIT = Au passage, je ne comprends pas trop l'intérêt de ton cooldown, si tu pouvais être plus précis, car ton code lui ne nous apprend rien du tout.


  • Rédacteurs

    Julot à raison, je ne sais pas ce que tu compte faire mais il y a des chances que ce ne soit pas la bonne solution.
    Sinon pour ce qui est des events, pour savoir si ils sont côté client ou côté serveur il suffit de regarder dans quel package ils se trouvent :
    Côté client :
    cpw.mods.fml.client.event
    net.minecraftforge.client.event

    Côté serveur :
    cpw.mods.fml.common.event
    cpw.mods.fml.common.gameevent
    net.minecraftforge.event



  • Voici sinon le code corrigé

    
    protected int cooldown = 0;
    protected int time = 2000;
    
    @SubscribeEvent
    public void Playerregenaration(LivingAttackEvent event)
    {
       if(event.source.getSourceOfDamage() instanceof EntityPlayer && event.ammount > 1)
    {
        cooldown = 0;
                   System.out.println("je fonctionne");
    }
    }
    
    @SubscribeEvent
    public void Playerregenaration2(LivingUpdateEvent event)
    {
    if(event.entity instanceof EntityPlayer)
    {
    if(cooldown < time)
    {
    cooldown = cooldown + 1;
    System.out.println("SIDE : " + event.entity.worldObj.isRemote);
    System.out.println("VALEUR : " + cooldown);
    }
    }
    }
    
    

    Juste comme ça LivingUpdateEvent est sur le bus MinecraftForge, donc si tu avais un ligne de ce genre-là
    FMLCommonHandler.instance().bus().register(new EventHandlerCommon());
    dans ta méthode init, tu peux la retirer 🙂

    Mais encore une fois ton code est inutile, je ne vois pas trop à quoi te sert ton cooldown quand tu frappes une entity, si tu pouvais nous préciser 😃



  • Merci pour vos réponse donc il va falloir que je passe ExtendedEntityProperties si j'ai bien compris julot

    pour mon code en gros je voudrais que quand l'on tape une entité on attende un temps prècis avant d'avoir un heal automatique sur le joueur.



  • En gros, le joueur qui tappe aura un team après un certain cooldown, c est ça ?
    Donc fais une condition dans l event LivingUpdateEvent qui vérifiera si le cooldown est supérieur ou égal à telle valeur, et si oui, tu heal ton joueur 😃



  • Après plusieurs test le seul moyen que mon idée fonctionne correctement et de passer par un Extended Entity Properties donc j'ai suivi le tuto de Gugu42.

    http://www.minecraftforgefrance.fr/showthread.php?tid=905

    Malheureusement il utilise FFMT-Lib pour gérer plus facilement ses packet j'ai donc essayer de l'installer mais sans aucun sucée meme en suivant le tuto de Kevin_68 qui est en 1.5.2.

    http://www.minecraftforgefrance.fr/showthread.php?tid=65

    Si quelqu'un pourrait me fournir de l'aide je le remercie d'avance.


  • Administrateurs



  • Bon mon ExtendedEntityProperties ne marche pas je ne comprend pas pourquoi voici mon code

    public class ExtendedEntityPropCaracteristique implements IExtendedEntityProperties
    {
    public final static String EXT_PROP_NAME = "Caracteristiquejoueur";
    private final EntityPlayer player;
    public long cooldown;
    public long argent;
    
    public ExtendedEntityPropCaracteristique(EntityPlayer player)
    {
    this.player = player;
    this.cooldown = 0;
    this.argent = 20;
    }
    
    public static final void register(EntityPlayer player)
    {
    player.registerExtendedProperties(ExtendedEntityPropCaracteristique.EXT_PROP_NAME,
    new ExtendedEntityPropCaracteristique(player));
    }
    
    public static final ExtendedEntityPropCaracteristique get(EntityPlayer player)
    {
    return (ExtendedEntityPropCaracteristique) player.getExtendedProperties(EXT_PROP_NAME);
    }
    
    @Override
    public void saveNBTData(NBTTagCompound compound)
    {
    NBTTagCompound properties = new NBTTagCompound();
    properties.setLong("Cooldown", this.cooldown);
    properties.setLong("Argent", this.argent);
    compound.setTag(EXT_PROP_NAME, properties);
    }
    
    @Override
    public void loadNBTData(NBTTagCompound compound)
    {
    NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
    this.cooldown = properties.getLong("Cooldown");
    this.argent = properties.getLong("Argent");
    }
    
    @Override
    public void init(Entity entity, World world)
    {
    // TODO Auto-generated method stub
    }
    
    public final void sync()
    {
    Packetcaracteristique packetcaracteristique = new Packetcaracteristique(this.cooldown , this.argent);
       //La ligne suivante dépend de votre manière d'envoyer les packets. Celle-ci vient de mon mod, je ne la changerais pas car je ne peux l'appliquer à votre mod, mais elle reste bonne pour un exemple.
    TutoMod.network.sendToServer((IMessage)new Packetcaracteristique());
    
    if (!player.worldObj.isRemote)
    {
    EntityPlayerMP player1 = (EntityPlayerMP) player;
               //Ici, même chose que précédemment, sauf que le packet est envoyé au player.
    TutoMod.network.sendTo((IMessage)new Packetcaracteristique(), player1);
    }
    }
    
    private static String getSaveKey(EntityPlayer player)
    {
    return player.getDisplayName() + ":" + EXT_PROP_NAME;
    }
    
    public static void saveProxyData(EntityPlayer player)
    {
    ExtendedEntityPropCaracteristique playerData = ExtendedEntityPropCaracteristique.get(player);
    NBTTagCompound savedData = new NBTTagCompound();
    playerData.saveNBTData(savedData);
    Commonproxy.storeEntityData(getSaveKey(player), savedData);
    }
    
    public static void loadProxyData(EntityPlayer player)
    {
    ExtendedEntityPropCaracteristique playerData = ExtendedEntityPropCaracteristique.get(player);
    NBTTagCompound savedData = Commonproxy.getEntityData(getSaveKey(player));
    if (savedData != null)
    {
    playerData.loadNBTData(savedData);
    }
    playerData.sync();
    }
    public void update(long cooldown, long argent)
    
    {
          this.cooldown = cooldown;
          this.argent = argent;
    }
    public boolean pay(long amount)
    {
    boolean sufficient = amount <= this.argent;
    if (sufficient)
    {
    this.argent -= amount;
    this.sync();
    } else
    {
    return false;
    }
    return sufficient;
    }
    
    public void addMoney(long amount)
    {
    this.argent += amount;
    this.sync();
    }
    
    public long getMoney()
    {
    return this.argent;
    }
    
    public void setMoney(long newMoney)
    {
    this.argent = newMoney;
    this.sync();
    }
    }
    
    implements IMessage
    {
    public long cooldown;
    public long argent;
    
    public Packetcaracteristique()
    {
    
    }
    
    public Packetcaracteristique(long cooldown, long argent)
    {
    this.cooldown = cooldown;
    this.argent = argent;
    }
    
    @Override
    public void fromBytes(ByteBuf buf)
    {
    cooldown = buf.readInt();
    argent = buf.readInt();
    }
    
    @Override
    public void toBytes(ByteBuf buf)
    {
    buf.writeLong(cooldown);
    buf.writeLong(argent);
    }
    
    public static class Handler implements IMessageHandler <packetcaracteristique, imessage="">{
    @Override
    public IMessage onMessage(Packetcaracteristique message, MessageContext ctx)
    {
    if(ctx.netHandler instanceof NetHandlerPlayServer)
    {
    ExtendedEntityPropCaracteristique prop = ExtendedEntityPropCaracteristique.get(((NetHandlerPlayServer)ctx.netHandler).playerEntity);
    prop.update(message.cooldown, message.argent);
    }
    else if(ctx.netHandler instanceof NetHandlerPlayClient)
           {
    ExtendedEntityPropCaracteristique prop = ExtendedEntityPropCaracteristique.get(getClientPlayer());
               prop.update(message.cooldown, message.argent);
           }
           return null;
    }
       }
    
    @SideOnly(Side.CLIENT)
       public static EntityPlayer getClientPlayer()
       {
       return Minecraft.getMinecraft().thePlayer;
       }
    
    }
    
    
    network.registerMessage(Packetcaracteristique.Handler.class, Packetcaracteristique.class, 1, Side.SERVER);
    network.registerMessage(Packetcaracteristique.Handler.class, Packetcaracteristique.class, 1, Side.CLIENT);
    
    

    Voila merci d'avance je pense que l'erreur vient de mon packet mais je ne voie pas comment faire autrement</packetcaracteristique,>



  • Pourquoi tu fais un writeLong et un readInt ?



  • Exact erreur de ma pars merci çà fonctionne un peu mieux ma valeur de base s'ajoute bien mais lorsque je l'utilise çà ne marche pas :

    Exemple quand j'ajoute 10 de money avec le clique droit de mon item, l'argent reste à 10 au lieu de s'ajouter comme si l'enregistrement ne fonctionnais pas.

    Par contre en multijoueur mon packet fonctionne correctement en apparence j'avais 120 d'argent et il m'ecris 120+10=130 dans ma console mais avec un gros message d'erreur avant celui-ci …

    at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:1.7.10-1448.121]
    at joueur.ExtendedEntityPropCaracteristique.sync(ExtendedEntityPropCaracteristique.java:66) [ExtendedEntityPropCaracteristique.class:?]
    at joueur.ExtendedEntityPropCaracteristique.addMoney(ExtendedEntityPropCaracteristique.java:122) [ExtendedEntityPropCaracteristique.class:?]
    at equipement.epees.Epeedeboisaille.func_77659_a(Epeedeboisaille.java:23) [Epeedeboisaille.class:?]
    at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:172) [add.class:?]
    at net.minecraft.server.management.ItemInWorldManager.func_73085_a(ItemInWorldManager.java:382) [mx.class:?]
    at net.minecraft.server.management.ItemInWorldManager.func_73078_a(ItemInWorldManager.java:512) [mx.class:?]
    at net.minecraft.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:853) [nh.class:?]
    at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:60) [jo.class:?]
    at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:9) [jo.class:?]
    at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:244) [ej.class:?]
    at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:173) [nc.class:?]
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:991) [MinecraftServer.class:?]
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) [lt.class:?]
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:809) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:669) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45-internal]
    [17:27:58 ERROR]: SimpleChannelHandlerWrapper exception
    java.lang.RuntimeException: Missing
    
    at cpw.mods.fml.server.FMLServerHandler.getClientToServerNetworkManager(FMLServerHandler.java:238) ~[FMLServerHandler.class:1.7.10-1448.121]
    at cpw.mods.fml.common.FMLCommonHandler.getClientToServerNetworkManager(FMLCommonHandler.java:542) ~[FMLCommonHandler.class:1.7.10-1448.121]
    at cpw.mods.fml.common.network.FMLOutboundHandler$OutboundTarget$8.selectNetworks(FMLOutboundHandler.java:225) ~[FMLOutboundHandler$OutboundTarget$8.class:1.7.10-1448.121]
    at cpw.mods.fml.common.network.FMLOutboundHandler.write(FMLOutboundHandler.java:273) ~[FMLOutboundHandler.class:1.7.10-1448.121]
    at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:637) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:115) ~[MessageToMessageEncoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:1.7.10-1448.121]
    at joueur.ExtendedEntityPropCaracteristique.sync(ExtendedEntityPropCaracteristique.java:66) [ExtendedEntityPropCaracteristique.class:?]
    at joueur.ExtendedEntityPropCaracteristique.addMoney(ExtendedEntityPropCaracteristique.java:122) [ExtendedEntityPropCaracteristique.class:?]
    at equipement.epees.Epeedeboisaille.func_77659_a(Epeedeboisaille.java:23) [Epeedeboisaille.class:?]
    at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:172) [add.class:?]
    at net.minecraft.server.management.ItemInWorldManager.func_73085_a(ItemInWorldManager.java:382) [mx.class:?]
    at net.minecraft.server.management.ItemInWorldManager.func_73078_a(ItemInWorldManager.java:512) [mx.class:?]
    at net.minecraft.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:853) [nh.class:?]
    at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:60) [jo.class:?]
    at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:9) [jo.class:?]
    at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:244) [ej.class:?]
    at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:173) [nc.class:?]
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:991) [MinecraftServer.class:?]
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) [lt.class:?]
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:809) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:669) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45-internal]
    [17:27:58 WARN]: More than one exception was raised. Will report only the first one and log others.
    java.lang.RuntimeException: Missing
    at cpw.mods.fml.server.FMLServerHandler.getClientToServerNetworkManager(FMLServerHandler.java:238) ~[FMLServerHandler.class:1.7.10-1448.121]
    at cpw.mods.fml.common.FMLCommonHandler.getClientToServerNetworkManager(FMLCommonHandler.java:542) ~[FMLCommonHandler.class:1.7.10-1448.121]
    at cpw.mods.fml.common.network.FMLOutboundHandler$OutboundTarget$8.selectNetworks(FMLOutboundHandler.java:225) ~[FMLOutboundHandler$OutboundTarget$8.class:1.7.10-1448.121]
    at cpw.mods.fml.common.network.FMLOutboundHandler.write(FMLOutboundHandler.java:273) ~[FMLOutboundHandler.class:1.7.10-1448.121]
    at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:637) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.handler.codec.MessageToMessageEncoder.write(MessageToMessageEncoder.java:115) ~[MessageToMessageEncoder.class:?]
    at io.netty.handler.codec.MessageToMessageCodec.write(MessageToMessageCodec.java:116) ~[MessageToMessageCodec.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.invokeWrite(DefaultChannelHandlerContext.java:644) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.write(DefaultChannelHandlerContext.java:698) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.Defaul
    
    tChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:688) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelHandlerContext.writeAndFlush(DefaultChannelHandlerContext.java:717) ~[DefaultChannelHandlerContext.class:?]
    at io.netty.channel.DefaultChannelPipeline.writeAndFlush(DefaultChannelPipeline.java:893) ~[DefaultChannelPipeline.class:?]
    at io.netty.channel.AbstractChannel.writeAndFlush(AbstractChannel.java:239) ~[AbstractChannel.class:?]
    at cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper.sendToServer(SimpleNetworkWrapper.java:236) [SimpleNetworkWrapper.class:1.7.10-1448.121]
    at joueur.ExtendedEntityPropCaracteristique.sync(ExtendedEntityPropCaracteristique.java:66) [ExtendedEntityPropCaracteristique.class:?]
    at joueur.ExtendedEntityPropCaracteristique.addMoney(ExtendedEntityPropCaracteristique.java:122) [ExtendedEntityPropCaracteristique.class:?]
    at equipement.epees.Epeedeboisaille.func_77659_a(Epeedeboisaille.java:23) [Epeedeboisaille.class:?]
    at net.minecraft.item.ItemStack.func_77957_a(ItemStack.java:172) [add.class:?]
    at net.minecraft.server.management.ItemInWorldManager.func_73085_a(ItemInWorldManager.java:382) [mx.class:?]
    at net.minecraft.server.management.ItemInWorldManager.func_73078_a(ItemInWorldManager.java:512) [mx.class:?]
    at net.minecraft.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:853) [nh.class:?]
    at net.minecr
    
    aft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:60) [jo.class:?]
    at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.func_148833_a(SourceFile:9) [jo.class:?]
    at net.minecraft.network.NetworkManager.func_74428_b(NetworkManager.java:244) [ej.class:?]
    at net.minecraft.network.NetworkSystem.func_151269_c(NetworkSystem.java:173) [nc.class:?]
    at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:991) [MinecraftServer.class:?]
    at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:431) [lt.class:?]
    at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:809) [MinecraftServer.class:?]
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:669) [MinecraftServer.class:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_45-internal]
    [17:27:58 INFO]: 130
    

    Si quelqu'un pourrait me sortir de la je le remercie



  • Résolu merci tout le monde je vous love ❤