• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Extended Entity Properties

Les entités
1.7.2
21
127
33.6k
Charger plus de messages
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • robin4002
    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 31 janv. 2015, 10:24

    Je l’ai vu, il me faut juste le temps de regarder.
    J’édite mon message dès que c’est bon (d’ici midi, et si j’ai pas trouvé pour midi je regarderais cette aprèm).

    En semaine mon temps est très limité.

    Finalement ça a été assez rapide. Le problème c’est que les paquets qui partent du serveur se perdent, le client ne sait pas quoi en faire.
    Dans ta classe principale tu as ça actuellement :

    ​        // Network
            network = NetworkRegistry.INSTANCE.newSimpleChannel(MODID + ":CHANNEL_1");
            network.registerMessage(PacketData_01.Handler.class, PacketData_01.class, 0, Side.SERVER);

    Donc si le paquet par du client vers le serveur le serveur sait ce qu’il doit faire.
    Mais dans l’autre sens non.
    Solution ? Il suffit d’ajouter cette ligne en plus :

    ​        network.registerMessage(PacketData_01.Handler.class, PacketData_01.class, 0, Side.CLIENT);
    
    1 réponse Dernière réponse Répondre Citer 0
    • bin4r1s
      bin4r1s dernière édition par 1 févr. 2015, 16:29

      Merci je teste 🙂

      EDIT :
      Super ça marche ! Un grand merci 🙂

      Mes mods:

      • New Ores
      • More Dragons
      1 réponse Dernière réponse Répondre Citer 0
      • environ 10 mois
      • Antoine_
        Antoine_ dernière édition par 7 déc. 2015, 17:57

        Bonjour j’ai suivi ce tuto mais j’ai des erreur dans ma console je ne comprend pas car le packet marche mais il y a des erreurs

        [14:07:56 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:183) [ExtendedEntityPropCaracteristique.class:?]
        at joueur.ExtendedEntityPropCaracteristique.addKamas(ExtendedEntityPropCaracteristique.java:277) [ExtendedEntityPropCaracteristique.class:?]
        at equipement.epees.Goultard.func_77659_a(Goultard.java:29) [Goultard.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.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:825) [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]
        [14:07:56 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.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:183) [ExtendedEntityPropCaracteristique.class:?]
        at joueur.ExtendedEntityPropCaracteristique.addKamas(ExtendedEntityPropCaracteristique.java:277) [ExtendedEntityPropCaracteristique.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.network.NetHandlerPlayServer.func_147346_a(NetHandlerPlayServer.java:825) [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_1
        51269_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]

        Mon extends entityproperties

        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();
        }
        }

        mon packet

        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;
        }
        }

        Mon init

        network.registerMessage(Packetcaracteristique.Handler.class, Packetcaracteristique.class, 1, Side.SERVER);
        network.registerMessage(Packetcaracteristique.Handler.class, Packetcaracteristique.class, 1, Side.CLIENT);
        ```</packetcaracteristique,>
        1 réponse Dernière réponse Répondre Citer 0
        • SCAREX
          SCAREX dernière édition par 7 déc. 2015, 19:52

          D’un côté tu fais un readInt et l’autre writeLong, essaie déjà en mettant un readLong plutôt

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 0
          • Antoine_
            Antoine_ dernière édition par 7 déc. 2015, 22:07

            ah oui desolé l’erreur est déjà corrigé j’avais remarqué entre temps mais ca ne fonctionne toujours pas toujours ce message d’erreur dans la console

            1 réponse Dernière réponse Répondre Citer 0
            • SCAREX
              SCAREX dernière édition par 8 déc. 2015, 15:54

              Est-ce que ce serai possible d’avoir les classes complètes (avec les imports) car sinon le rapport d’erreur est faussé.

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

              1 réponse Dernière réponse Répondre Citer 0
              • Antoine_
                Antoine_ dernière édition par 14 déc. 2015, 12:33

                Dessolé pour le retard weekend de décembre chargé avec le père noël 😃 bon voici mes classe scarex :

                mon ExtendedEntityPropCaracteristique :

                package joueur;
                import interfaces.gui.metiers.Guilevelmetier;
                import cpw.mods.fml.common.network.simpleimpl.IMessage;
                import cpw.mods.fml.relauncher.Side;
                import cpw.mods.fml.relauncher.SideOnly;
                import mods.TutoMod;
                import mods.common.Commonproxy;
                import net.minecraft.client.Minecraft;
                import net.minecraft.entity.Entity;
                import net.minecraft.entity.player.EntityPlayer;
                import net.minecraft.entity.player.EntityPlayerMP;
                import net.minecraft.nbt.NBTTagCompound;
                import net.minecraft.util.ChatComponentTranslation;
                import net.minecraft.world.World;
                import net.minecraftforge.common.IExtendedEntityProperties;
                public class ExtendedEntityPropCaracteristique implements IExtendedEntityProperties
                {
                public final static String EXT_PROP_NAME = "Caracteristiquejoueur";
                private final EntityPlayer player;
                public long cooldown;
                public long kamas;
                public long classe;
                public long levelbucheron;
                public long xpalchimiste, xpbucheron , xpchasseur , xpmineur , xppaysan , xppecheur , xpbijoutier , xpboulanger , xpbricoleur , xpforgeurdedagues , xpforgeurdepees ,
                xpforgeurdehaches , xpforgeurdemarteaux , xpforgeurdepelles , xppoissonnier , xpcordonnier , xpforgeurdeboucliers , xpsculpteurdarcs , xpsculpteurdebaguettes ,
                xpsculpteurdebatons , xptailleur , xpcordomage , xpcostumage , xpjoaillomage , xpforgemagededagues , xpforgemagedepees , xpforgemagedhaches , xpforgemagedemarteaux ,
                xpforgemagedepelles , xpsculptemagedarcs , xpsculptemagedebaguettes , xpsculptemagedebaton;
                public ExtendedEntityPropCaracteristique(EntityPlayer player)
                {
                this.player = player;
                this.cooldown = 0;
                this.kamas = 0;
                this.classe =0;
                this.levelbucheron = 0;
                this.xpalchimiste = 0;
                this.xpbucheron = 0;
                this.xpchasseur = 0;
                this.xpmineur = 0;
                this.xppaysan = 0;
                this.xppecheur = 0;
                this.xpbijoutier = 0;
                this.xpboulanger = 0;
                this.xpbricoleur = 0;
                this.xpforgeurdedagues = 0;
                this.xpforgeurdepees = 0;
                this.xpforgeurdehaches = 0;
                this.xpforgeurdemarteaux = 0;
                this.xpforgeurdepelles = 0;
                this.xppoissonnier = 0;
                this.xpcordonnier = 0;
                this.xpforgeurdeboucliers = 0;
                this.xpsculpteurdarcs = 0;
                this.xpsculpteurdebaguettes = 0;
                this.xpsculpteurdebatons = 0;
                this.xptailleur = 0;
                this.xpcordomage = 0;
                this.xpcostumage = 0;
                this.xpjoaillomage = 0;
                this.xpforgemagededagues = 0;
                this.xpforgemagedepees = 0;
                this.xpforgemagedhaches = 0;
                this.xpforgemagedemarteaux = 0;
                this.xpforgemagedepelles = 0;
                this.xpsculptemagedarcs = 0;
                this.xpsculptemagedebaguettes = 0;
                this.xpsculptemagedebaton = 0;
                }
                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("Kamas", this.kamas);
                properties.setLong("Classe", this.classe);
                properties.setLong("Xpalchimiste", this.xpalchimiste);
                properties.setLong("Xpbucheron", this.xpbucheron);
                properties.setLong("Xpchasseur", this.xpchasseur);
                properties.setLong("Xpmineur", this.xpmineur);
                properties.setLong("Xppaysan", this.xppaysan);
                properties.setLong("Xppecheur", this.xppecheur);
                properties.setLong("Xpbijoutier", this.xpbijoutier);
                properties.setLong("Xpboulanger", this.xpboulanger);
                properties.setLong("Xpbricoleur", this.xpbricoleur);
                properties.setLong("Xpforgeurdedagues", this.xpforgeurdedagues);
                properties.setLong("Xpforgeurdepees", this.xpforgeurdepees);
                properties.setLong("Xpforgeurdehaches", this.xpforgeurdehaches);
                properties.setLong("Xpforgeurdemarteaux", this.xpforgeurdemarteaux);
                properties.setLong("Xpforgeurdepelles", this.xpforgeurdepelles);
                properties.setLong("Xppoissonnier", this.xppoissonnier);
                properties.setLong("Xpcordonnier", this.xpcordonnier);
                properties.setLong("Xpforgeurdeboucliers", this.xpforgeurdeboucliers);
                properties.setLong("Xpsculpteurdarcs", this.xpsculpteurdarcs);
                properties.setLong("Xpsculpteurdebaguettes", this.xpsculpteurdebaguettes);
                properties.setLong("Xpsculpteurdebatons", this.xpsculpteurdebatons);
                properties.setLong("Xptailleur", this.xptailleur);
                properties.setLong("Xpcordomage", this.xpcordomage);
                properties.setLong("Xpcostumage", this.xpcostumage);
                properties.setLong("Xpjoaillomage", this.xpjoaillomage);
                properties.setLong("Xpforgemagededagues", this.xpforgemagededagues);
                properties.setLong("Xpforgemagedepees", this.xpforgemagedepees);
                properties.setLong("Xpforgemagedhaches", this.xpforgemagedhaches);
                properties.setLong("Xpforgemagedemarteaux", this.xpforgemagedemarteaux);
                properties.setLong("Xpforgemagedepelles", this.xpforgemagedepelles);
                properties.setLong("Xpsculptemagedarcs", this.xpsculptemagedarcs);
                properties.setLong("Xpsculptemagedebaguettes", this.xpsculptemagedebaguettes);
                properties.setLong("Xpsculptemagedebaton", this.xpsculptemagedebaton);
                properties.setLong("Levelbucheron", this.levelbucheron);
                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.kamas = properties.getLong("Kamas");
                this.classe = properties.getLong("Classe");
                this.xpalchimiste =  properties.getLong("Xpalchimiste");
                this.xpbucheron = properties.getLong("Xpbucheron");
                this.xpmineur = properties.getLong("Xpmineur");
                this.xppaysan = properties.getLong("Xppaysan");
                this.xppecheur = properties.getLong("Xppecheur");
                this.xpbijoutier = properties.getLong("Xpbijoutier");
                this.xpboulanger = properties.getLong("Xpboulanger");
                this.xpbricoleur = properties.getLong("Xpbricoleur");
                this.xpforgeurdedagues = properties.getLong("Xpforgeurdedagues");
                this.xpforgeurdepees = properties.getLong("Xpforgeurdepees");
                this.xpforgeurdehaches = properties.getLong("Xpforgeurdehaches");
                this.xpforgemagedemarteaux  = properties.getLong("Xpforgemagedemarteaux");
                this.xpforgeurdepelles = properties.getLong("Xpforgeurdepelles");
                this.xppoissonnier = properties.getLong("Xppoissonnier");
                this.xpcordonnier = properties.getLong("Xpcordonnier");
                this.xpforgeurdeboucliers = properties.getLong("Xpforgeurdeboucliers");
                this.xpsculpteurdarcs = properties.getLong("Xpsculpteurdarcs");
                this.xpsculpteurdebaguettes = properties.getLong("Xpsculpteurdebaguettes");
                this.xpsculpteurdebatons = properties.getLong("Xpsculpteurdebatons");
                this.xptailleur = properties.getLong("Xptailleur");
                this.xpcordomage = properties.getLong("Xpcordomage");
                this.xpcostumage = properties.getLong("Xpcostumage");
                this.xpjoaillomage = properties.getLong("Xpjoaillomage");
                this.xpforgemagededagues = properties.getLong("Xpforgemagededagues");
                this.xpforgemagedepees = properties.getLong("Xpforgemagedepees");
                this.xpforgemagedhaches = properties.getLong("Xpforgemagedhaches");
                this.xpforgemagedemarteaux  = properties.getLong("Xpforgemagedemarteaux");
                this.xpforgemagedepelles = properties.getLong("Xpforgemagedepelles");
                this.xpsculptemagedarcs = properties.getLong("Xpsculptemagedarcs");
                this.xpsculptemagedebaguettes = properties.getLong("Xpsculptemagedebaguettes");
                this.xpsculptemagedebaton = properties.getLong("Xpsculptemagedebaton");
                this.levelbucheron = properties.getLong("Levelbucheron");
                }
                @Override
                public void init(Entity entity, World world)
                {
                // TODO Auto-generated method stub
                }
                public final void sync()
                {
                Packetcaracteristique packetcaracteristique = new Packetcaracteristique(this.cooldown , this.kamas, this.classe, this.xpalchimiste, this.xpbucheron, this.xpchasseur, this.xpmineur, this.xppaysan,
                this.xppecheur, this.xpbijoutier, this.xpboulanger, this.xpbricoleur, this.xpforgeurdedagues, this.xpforgeurdepees, this.xpforgeurdehaches, this.xpforgemagedemarteaux,
                this.xpforgeurdepelles, this.xppoissonnier, this.xpcordonnier, this.xpforgeurdeboucliers, this.xpsculpteurdarcs, this.xpsculpteurdebaguettes, this.xpsculpteurdebatons,
                this.xptailleur, this.xpcordomage, this.xpcostumage, this.xpjoaillomage, this.xpforgemagededagues, this.xpforgemagedepees, this.xpforgemagedhaches, this.xpforgemagedemarteaux,
                this.xpforgemagedepelles, this.xpsculptemagedarcs, this.xpsculptemagedebaguettes, this.xpsculptemagedebaton, this.levelbucheron);
                TutoMod.network.sendToServer(packetcaracteristique);
                if (!player.worldObj.isRemote)
                {
                EntityPlayerMP player1 = (EntityPlayerMP) player;
                TutoMod.network.sendTo(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 classe, long kamas, long xpalchimiste, long xpbucheron, long xpchasseur, long xpmineur, long xppaysan, long xppecheur, long xpbijoutier,
                long xpboulanger, long xpbricoleur, long xpforgeurdedagues, long xpforgeurdepees, long xpforgeurdehaches, long xpforgeurdemarteaux, long xpforgeurdepelles,
                long xppoissonnier, long xpcordonnier, long xpforgeurdeboucliers, long xpsculpteurdarcs, long xpsculpteurdebaguettes, long xpsculpteurdebatons, long xptailleur,
                long xpcordomage, long xpcostumage, long xpjoaillomage, long xpforgemagededagues, long xpforgemagedepees, long xpforgemagedhaches, long xpforgemagedemarteaux, long xpforgemagedepelles,
                long xpsculptemagedarcs, long xpsculptemagedebaguettes, long xpsculptemagedebaton, long levelbucheron)
                {
                      this.cooldown = cooldown;
                      this.kamas = kamas;
                      this.classe = classe;
                      this.xpalchimiste= xpalchimiste;
                  this.xpbucheron= xpbucheron;
                  this.xpchasseur= xpchasseur;
                  this.xpmineur= xpmineur;
                  this.xppaysan= xppaysan;
                  this.xppecheur= xppecheur;
                  this.xpbijoutier= xpbijoutier;
                  this.xpboulanger= xpboulanger;
                  this.xpbricoleur= xpbricoleur;
                  this.xpforgeurdedagues= xpforgeurdedagues;
                  this.xpforgeurdepees= xpforgeurdepees;
                  this.xpforgeurdehaches= xpforgeurdehaches;
                  this.xpforgeurdemarteaux= xpforgeurdemarteaux;
                  this.xpforgeurdepelles= xpforgeurdepelles;
                  this.xppoissonnier= xppoissonnier;
                  this.xpcordonnier= xpcordonnier;
                  this.xpforgeurdeboucliers= xpforgeurdeboucliers;
                  this.xpsculpteurdarcs= xpsculpteurdarcs;
                  this.xpsculpteurdebaguettes= xpsculpteurdebaguettes;
                  this.xpsculpteurdebatons= xpsculpteurdebatons;
                  this.xptailleur= xptailleur;
                  this.xpcordomage= xpcordomage;
                  this.xpcostumage= xpcostumage;
                  this.xpjoaillomage= xpjoaillomage;
                  this.xpforgemagededagues= xpforgemagededagues;
                  this.xpforgemagedepees= xpforgemagedepees;
                  this.xpforgemagedhaches= xpforgemagedhaches;
                  this.xpforgemagedemarteaux= xpforgemagedemarteaux;
                  this.xpforgemagedepelles= xpforgemagedepelles;
                  this.xpsculptemagedarcs= xpsculptemagedarcs;
                  this.xpsculptemagedebaguettes= xpsculptemagedebaguettes;
                  this.xpsculptemagedebaton = xpsculptemagedebaton;
                  this.levelbucheron = levelbucheron;
                }
                //Kamas
                public boolean pay(long amount)
                {
                boolean sufficient = amount <= this.kamas;
                if (sufficient)
                {
                this.kamas -= amount;
                this.sync();
                } else
                {
                return false;
                }
                return sufficient;
                }
                public void addKamas(long amount)
                {
                this.kamas += amount;
                this.sync();
                }
                public long getKamas()
                {
                return this.kamas;
                }
                public void setKamas(long newKamas)
                {
                this.kamas = newKamas;
                this.sync();
                }
                //Cooldown
                public void addCooldown(long amount)
                {
                this.cooldown += amount;
                this.sync();
                }
                public void setCooldown(long newCooldown)
                {
                this.cooldown = newCooldown;
                this.sync();
                }
                //Metier
                //Bucheron
                public void addxpbucheron(long amount)
                {
                this.xpbucheron += amount;
                this.sync();
                }
                public void setxpbucheron(long newXpbucheron)
                {
                this.xpbucheron = newXpbucheron;
                this.sync();
                }
                public void addlevelbucheron(long amount)
                {
                this.levelbucheron += amount;
                this.sync();
                }
                @SideOnly(Side.CLIENT)
                public void openscreen()
                {
                Minecraft.getMinecraft().displayGuiScreen(new Guilevelmetier());
                }
                }

                mon Packetcaracteristique:

                package joueur;
                import java.io.IOException;
                import net.minecraft.client.Minecraft;
                import net.minecraft.client.entity.EntityPlayerSP;
                import net.minecraft.client.network.NetHandlerPlayClient;
                import net.minecraft.entity.player.EntityPlayer;
                import net.minecraft.entity.player.EntityPlayerMP;
                import net.minecraft.network.NetHandlerPlayServer;
                import interfaces.packets.Zaap;
                import io.netty.buffer.ByteBuf;
                import io.netty.channel.ChannelHandlerContext;
                import cpw.mods.fml.common.network.ByteBufUtils;
                import cpw.mods.fml.common.network.simpleimpl.IMessage;
                import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
                import cpw.mods.fml.common.network.simpleimpl.MessageContext;
                import cpw.mods.fml.relauncher.Side;
                import cpw.mods.fml.relauncher.SideOnly;
                public class Packetcaracteristique implements IMessage
                {
                public long cooldown;
                public long kamas;
                public long classe;
                public long levelbucheron;
                public long xpalchimiste, xpbucheron , xpchasseur , xpmineur , xppaysan , xppecheur , xpbijoutier , xpboulanger , xpbricoleur , xpforgeurdedagues , xpforgeurdepees ,
                xpforgeurdehaches , xpforgeurdemarteaux , xpforgeurdepelles , xppoissonnier , xpcordonnier , xpforgeurdeboucliers , xpsculpteurdarcs , xpsculpteurdebaguettes ,
                xpsculpteurdebatons , xptailleur , xpcordomage , xpcostumage , xpjoaillomage , xpforgemagededagues , xpforgemagedepees , xpforgemagedhaches , xpforgemagedemarteaux ,
                xpforgemagedepelles , xpsculptemagedarcs , xpsculptemagedebaguettes , xpsculptemagedebaton;
                public Packetcaracteristique()
                {
                }
                public Packetcaracteristique(long cooldown, long kamas, long classe, long xpalchimiste, long xpbucheron, long xpchasseur, long xpmineur, long xppaysan, long xppecheur, long xpbijoutier,
                long xpboulanger, long xpbricoleur, long xpforgeurdedagues, long xpforgeurdepees, long xpforgeurdehaches, long xpforgeurdemarteaux, long xpforgeurdepelles,
                long xppoissonnier, long xpcordonnier, long xpforgeurdeboucliers, long xpsculpteurdarcs, long xpsculpteurdebaguettes, long xpsculpteurdebatons, long xptailleur,
                long xpcordomage, long xpcostumage, long xpjoaillomage, long xpforgemagededagues, long xpforgemagedepees, long xpforgemagedhaches, long xpforgemagedemarteaux, long xpforgemagedepelles,
                long xpsculptemagedarcs, long xpsculptemagedebaguettes, long xpsculptemagedebaton, long levelbucheron)
                {
                this.cooldown = cooldown;
                this.kamas = kamas;
                this.classe = classe;
                   this.xpalchimiste= xpalchimiste;
                this.xpbucheron= xpbucheron;
                this.xpchasseur= xpchasseur;
                this.xpmineur= xpmineur;
                this.xppaysan= xppaysan;
                this.xppecheur= xppecheur;
                this.xpbijoutier= xpbijoutier;
                this.xpboulanger= xpboulanger;
                this.xpbricoleur= xpbricoleur;
                this.xpforgeurdedagues= xpforgeurdedagues;
                this.xpforgeurdepees= xpforgeurdepees;
                this.xpforgeurdehaches= xpforgeurdehaches;
                this.xpforgeurdemarteaux= xpforgeurdemarteaux;
                this.xpforgeurdepelles= xpforgeurdepelles;
                this.xppoissonnier= xppoissonnier;
                this.xpcordonnier= xpcordonnier;
                this.xpforgeurdeboucliers= xpforgeurdeboucliers;
                this.xpsculpteurdarcs= xpsculpteurdarcs;
                this.xpsculpteurdebaguettes= xpsculpteurdebaguettes;
                this.xpsculpteurdebatons= xpsculpteurdebatons;
                this.xptailleur= xptailleur;
                this.xpcordomage= xpcordomage;
                this.xpcostumage= xpcostumage;
                this.xpjoaillomage= xpjoaillomage;
                this.xpforgemagededagues= xpforgemagededagues;
                this.xpforgemagedepees= xpforgemagedepees;
                this.xpforgemagedhaches= xpforgemagedhaches;
                this.xpforgemagedemarteaux= xpforgemagedemarteaux;
                this.xpforgemagedepelles= xpforgemagedepelles;
                this.xpsculptemagedarcs= xpsculptemagedarcs;
                this.xpsculptemagedebaguettes= xpsculptemagedebaguettes;
                this.xpsculptemagedebaton = xpsculptemagedebaton;
                this.levelbucheron = levelbucheron;
                }
                @Override
                public void fromBytes(ByteBuf buf)
                {
                cooldown = buf.readLong();
                kamas = buf.readLong();
                classe = buf.readLong();
                xpalchimiste = buf.readLong();
                xpbucheron = buf.readLong();
                xpchasseur = buf.readLong();
                xpmineur = buf.readLong();
                xppaysan = buf.readLong();
                xppecheur = buf.readLong();
                xpbijoutier = buf.readLong();
                xpboulanger = buf.readLong();
                xpbricoleur = buf.readLong();
                xpforgeurdedagues = buf.readLong();
                xpforgeurdepees  = buf.readLong();
                xpforgeurdehaches = buf.readLong();
                xpforgeurdemarteaux = buf.readLong();
                xpforgeurdepelles = buf.readLong();
                xppoissonnier = buf.readLong();
                xpcordonnier  = buf.readLong();
                xpforgeurdeboucliers = buf.readLong();
                xpsculpteurdarcs = buf.readLong();
                xpsculpteurdebaguettes  = buf.readLong();
                xpsculpteurdebatons = buf.readLong();
                xptailleur = buf.readLong();
                xpcordomage = buf.readLong();
                xpcostumage = buf.readLong();
                xpjoaillomage = buf.readLong();
                xpforgemagededagues = buf.readLong();
                xpforgemagedepees = buf.readLong();
                xpforgemagedhaches = buf.readLong();
                xpforgemagedemarteaux = buf.readLong();
                xpforgemagedepelles = buf.readLong();
                xpsculptemagedarcs = buf.readLong();
                xpsculptemagedebaguettes = buf.readLong();
                xpsculptemagedebaton = buf.readLong();
                levelbucheron = buf.readLong();
                }
                @Override
                public void toBytes(ByteBuf buf)
                {
                buf.writeLong(cooldown);
                buf.writeLong(kamas);
                buf.writeLong(classe);
                buf.writeLong(xpalchimiste);
                buf.writeLong(xpbucheron);
                buf.writeLong(xpchasseur);
                buf.writeLong(xpmineur);
                buf.writeLong(xppaysan);
                buf.writeLong(xppecheur);
                buf.writeLong(xpbijoutier);
                buf.writeLong(xpboulanger);
                buf.writeLong(xpbricoleur);
                buf.writeLong(xpforgeurdedagues);
                buf.writeLong(xpforgeurdepees);
                buf.writeLong(xpforgeurdehaches);
                buf.writeLong(xpforgeurdemarteaux);
                buf.writeLong(xpforgeurdepelles);
                buf.writeLong(xppoissonnier);
                buf.writeLong(xpcordonnier);
                buf.writeLong(xpforgeurdeboucliers);
                buf.writeLong(xpsculpteurdarcs);
                buf.writeLong(xpsculpteurdebaguettes);
                buf.writeLong(xpsculpteurdebatons);
                buf.writeLong(xptailleur);
                buf.writeLong(xpcordomage);
                buf.writeLong(xpcostumage);
                buf.writeLong(xpjoaillomage);
                buf.writeLong(xpforgemagededagues);
                buf.writeLong(xpforgemagedepees);
                buf.writeLong(xpforgemagedhaches);
                buf.writeLong(xpforgemagedemarteaux);
                buf.writeLong(xpforgemagedepelles);
                buf.writeLong(xpsculptemagedarcs);
                buf.writeLong(xpsculptemagedebaguettes);
                buf.writeLong(xpsculptemagedebaton);
                buf.writeLong(levelbucheron);
                }
                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.kamas,message.classe ,message.xpalchimiste ,message.xpbucheron ,message.xpchasseur ,message.xpmineur ,message.xppaysan,
                            message.xppecheur ,message.xpbijoutier ,message.xpboulanger ,message.xpbricoleur ,message.xpforgeurdedagues ,message.xpforgeurdepees ,message.xpforgeurdehaches,
                            message.xpforgeurdemarteaux, message.xpforgeurdepelles, message.xppoissonnier, message.xpcordonnier, message.xpforgeurdeboucliers, message.xpsculpteurdarcs,
                            message.xpsculpteurdebaguettes, message.xpsculpteurdebatons,message.xptailleur, message.xpcordomage, message.xpcostumage, message.xpjoaillomage,
                            message.xpforgemagededagues, message.xpforgemagedepees, message.xpforgemagedhaches, message.xpforgemagedemarteaux, message.xpforgemagedepelles,
                            message.xpsculptemagedarcs, message.xpsculptemagedebaguettes, message.xpsculptemagedebaton, message.levelbucheron);
                }
                else if(ctx.netHandler instanceof NetHandlerPlayClient)
                       {
                ExtendedEntityPropCaracteristique prop = ExtendedEntityPropCaracteristique.get(getClientPlayer());
                           prop.update(message.cooldown, message.kamas ,message.classe ,message.xpalchimiste ,message.xpbucheron ,message.xpchasseur ,message.xpmineur ,message.xppaysan,
                            message.xppecheur ,message.xpbijoutier ,message.xpboulanger ,message.xpbricoleur ,message.xpforgeurdedagues ,message.xpforgeurdepees ,message.xpforgeurdehaches,
                            message.xpforgeurdemarteaux, message.xpforgeurdepelles, message.xppoissonnier, message.xpcordonnier, message.xpforgeurdeboucliers, message.xpsculpteurdarcs,
                            message.xpsculpteurdebaguettes, message.xpsculpteurdebatons,message.xptailleur, message.xpcordomage, message.xpcostumage, message.xpjoaillomage,
                            message.xpforgemagededagues, message.xpforgemagedepees, message.xpforgemagedhaches, message.xpforgemagedemarteaux, message.xpforgemagedepelles,
                            message.xpsculptemagedarcs, message.xpsculptemagedebaguettes, message.xpsculptemagedebaton, message.levelbucheron);
                       }
                       return null;
                }
                   }
                @SideOnly(Side.CLIENT)
                   public static EntityPlayer getClientPlayer()
                   {
                   return Minecraft.getMinecraft().thePlayer;
                   }
                }

                et mon item qui compte :

                package equipement.epees;
                import joueur.ExtendedEntityPropCaracteristique;
                import net.minecraft.entity.player.EntityPlayer;
                import net.minecraft.item.Item.ToolMaterial;
                import net.minecraft.item.ItemStack;
                import net.minecraft.item.ItemSword;
                import net.minecraft.util.ChatComponentTranslation;
                import net.minecraft.world.World;
                public class Goultard extends ItemSword
                {
                public Goultard(ToolMaterial material)
                {
                super(material);
                }
                @Override
                public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player)
                {
                if (!world.isRemote)
                {
                ExtendedEntityPropCaracteristique metier = ExtendedEntityPropCaracteristique.get(player);
                metier.addKamas(10);
                ChatComponentTranslation comp = new ChatComponentTranslation("tu as " + metier.kamas +" kamas");
                player.addChatComponentMessage(comp);
                }
                return itemstack;
                }
                }

                Voila donc ça fonctionne mais avec des erreurs console … le crash du dessus et le bon

                Merci à toi pour ton aide</packetcaracteristique,>

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 14 déc. 2015, 12:57

                  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);
                  }
                  }

                  ->

                  public final void sync()
                  {
                      if (!player.worldObj.isRemote)
                      {
                          EntityPlayerMP player1 = (EntityPlayerMP) player;
                          TutoMod.network.sendTo((IMessage)new Packetcaracteristique(), player1);
                      }
                      else
                      {
                          Packetcaracteristique packetcaracteristique = new Packetcaracteristique(this.cooldown , this.argent);
                          TutoMod.network.sendToServer((IMessage)new Packetcaracteristique());
                      }
                  }

                  Envoyer un paquet au serveur alors que tu es déjà côté serveur ne risque pas de fonctionner.

                  En passant tu devrais utiliser des tableaux pour ton code, ça serait bien plus pratique.

                  1 réponse Dernière réponse Répondre Citer 0
                  • Antoine_
                    Antoine_ dernière édition par 14 déc. 2015, 15:52

                    Niquel merci beaucoup robin exact erreur de débutant 😞 et oui je vais passer par des tableaux XD

                    1 réponse Dernière réponse Répondre Citer 0
                    • un an
                    • Deleted
                      Deleted dernière édition par 13 juin 2017, 14:12

                      Bonjour, je ne m’étais jamais rendu compte jusqu’à aujourd’hui, mais ce tuto n’a jamais été revu pour prendre en compte les uuid des joueurs, car là pour le moment, il enregistre les données en fonctions des usernames que contient la hashmap. De ce fait, si un joueur se déco, change son pseudo sur minecraft.net, puis revient, il aura perdu toutes ses données relatives 😕

                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 13 juin 2017, 17:40

                        La hash map est utilisé pour la persistance des données lors de la mort.

                        Donc non, si un joueur se déconnecte, change de pseudo puis revient il n’aura rien perdu car lors de la déconnexion les données vont dans le nbt du joueur qui lui est bien lié à l’uuid.

                        Le tutoriel date aussi de la 1.7.2 (et il y a toujours écrit 1.7.2) à ce moment les uuid n’existait pas.

                        Les points qui me pose surtout problème, c’est l’utilisation des paquets de FFMT libs et le code de synchro qui n’est pas correct, ainsi que l’utilisation d’une map et deux event pour la persistance des données de la mort alors qu’il y a un moment plus simple en un event avec PlayerEvent.Clone.

                        Mais une fois de plus en 1.7.2 il n’y avait pas tout cela.

                        1 réponse Dernière réponse Répondre Citer 0
                        • Deleted
                          Deleted dernière édition par 13 juin 2017, 17:53

                          Je n’ai pas compris. Moi ce que je vois, c’est une hashmap qui traite les NBT en fonction du getDisplayName, du coup, j’ai dû mal à croire que ce soit bien saved peu importe le username. Malheureusement je ne vais pas m’amuser à changer mon pseudo, comme il y a un délai de 1 ou 2 mois il me semble, avant de pouvoir remettre l’ancien…

                          Par ailleurs, l’event EntityJoinWorldEvent synchro les NBT de l’extProp avec ceux de la HashMap, du coup j’ai dû mal à croire, que si on a un nouveau pseudo, la HashMap puisse avoir une entrée avec celui-ci, comme il s’agirait de notre première connexion. Au pire je te fais confiance, mais je n’aime pas coder à l’aveugle sans comprendre.

                          En fait, je n’ai surtout pas compris cette partie de ton message :
                          @‘robin4002’:

                          car lors de la déconnexion les données vont dans le nbt du joueur qui lui est bien lié à l’uuid

                          Où vois-tu cela ? En tout cas, pas dans mon event handler ^^’

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 13 juin 2017, 18:41

                            Donc tu n’as pas compris l’intérêt de la hashmap ni de l’event EntityJoinWorldEvent dans la situation ici présente.
                            Relis mon message précédent.

                            La sauvegarde des données se fait via la fonction saveNBTData et loadNBTData de l’eep qui sont appelé par forge, qui lui envoie en argument un nbt qui est lié au fichier .dat du joueur (pseudo.dat en 1.7.2 et bien uuid.dat en 1.7.10).

                            1 réponse Dernière réponse Répondre Citer 0
                            • Deleted
                              Deleted dernière édition par 13 juin 2017, 18:57

                              Pour moi la HashMap servait à récupérer les NBT en fonction du joueur possédant répondant au username contenu dans l’entré, mais comme il semblerait que j’ai faux sur toute la ligne…
                              Sinon tu sais quoi, je vais essayer de reprendre depuis le début, y’a quelque chose que j’ai loupé.

                              1 réponse Dernière réponse Répondre Citer 0
                              • robin4002
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 13 juin 2017, 19:20

                                Lorsqu’un joueur meurt, les données sont sauvegarder dans la map.
                                Lorsqu’un joueur rejoint un monde (ce qui est le cas quand on respawn), si les données sont dans la map, il les restitues. C’est tout.

                                La map ne gère pas la persistance quand le joueur se déconnecte, encore heureux sinon cela voudrait dire que le joueur perd tout si le serveur est redémarré ! (la map n’est que en ram).

                                1 réponse Dernière réponse Répondre Citer 0
                                • Deleted
                                  Deleted dernière édition par 13 juin 2017, 19:27

                                  Mdrr, + tu en rajoutes, + c’est flou…
                                  Et que se passe-t-il quand le joueur meurt, se déco, que le serveur redémarre (on a donc la map qui se vide, hein ?), et que le joueur rejoint ? Il a bien tout perdu, non ?

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • LeBossMax2
                                    LeBossMax2 dernière édition par 13 juin 2017, 20:18

                                    À mon avis, quand tu meurs, l’entité du joueur est toujours là avec les données enregistrées en NBT et elles restent jusqu’à ce que je joueur fasse respawn. Donc il n’y as pas de problème, comme les données on été enregistrés dans les NBT du joueur mort, le restart du serveur ne va pas faire perdre les données.

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • Deleted
                                      Deleted dernière édition par 13 juin 2017, 20:21

                                      Dans ce cas, si l’entity du joueur ne disparaît jamais, pourquoi se servir d’une HashMap ? Elle est forcément passé à null je pense.

                                      EDIT = Du coup j’en profite pour poser ma petite question ici : j’ai 2 joueurs sur un serveur, mais le client A ne semble pas connaître la valeur ds’un boolean quelconque enregistré chez le B. En revanche le B, joué en première personne n’a aucun problème de synchro entre client et serveur. Du coup comment résoudre ce genre de bug, où 1 client ne parvient pas à connaître les valeurs de l’ExtProp d’un client 2. Je pense que ça vient du serveur, j’ai tout de même essayé un sendToAll dans ma méthode sync, mais rien à faire 😕
                                      Merci d’avance !

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • robin4002
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 13 juin 2017, 20:28

                                        Si lors de la mort le joueur clique sur se déconnecter au lieu de respawn et que le serveur est redémarré avant que le joueur ne revient il va en effet perdre les données, c’est le défaut de cette méthode.

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Deleted
                                          Deleted dernière édition par 13 juin 2017, 20:30

                                          Ah oui c’est problématique 😕
                                          Il faudrait enregistrer les différents objets NBTTagCompound aux données des joueurs correspondants, non ?
                                          Ah nan, donc plutôt enregistrer la HashMap dans le dossier du serveur, ou carrément dans les NBT du monde ?

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 6
                                          • 7
                                          • 5 / 7
                                          88 sur 127
                                          • Premier message
                                            88/127
                                            Dernier message
                                          Design by Woryk
                                          Contact / Mentions Légales

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB