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

    Résolu ExtendedEntityProperties et problème de synchro

    1.7.x
    1.7.10
    3
    13
    1663
    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.
    • Deleted
      Deleted dernière édition par

      Bonjour à tous et à toutes
      Comme le titre l’indique plutôt bien, j’ai encore un problème avec mes ExtProp concernant l’EntityPlayer. La synchro client - serveur ne se fait pas. Je soupçonne mes events d’en être la cause, le reste m paraissant correcte. Juste peut-être la classe de mon packet, car dans le tuto, gugu se sert de la ffmt lib pour faire les siens, alors je sais pas si ça pourrait influencer quelque chose ??
      Sans plus tarder, voici mes classes

      Mon ExtProp

      
      public class ExtendedEntityPropertiesPlayer implements IExtendedEntityProperties 
      {
      
      public final static String EXT_PROP_NAME = "ExtProp" + StolenLifeMod.MODID;
      private final EntityPlayer player;
      private boolean beLying;
      
      public ExtendedEntityPropertiesPlayer(EntityPlayer player)
      {
      this.player = player;
      this.beLying = false;
      }
      
      @Override
      public void saveNBTData(NBTTagCompound compound) 
      {
      NBTTagCompound properties = new NBTTagCompound();
      properties.setBoolean("beLying", this.beLying);
      compound.setTag(EXT_PROP_NAME, properties);
      }
      
      @Override
      public void loadNBTData(NBTTagCompound compound) 
      {
      NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
      this.beLying = properties.getBoolean("beLying");
      }
      
      @Override
      public void init(Entity entity, World world) 
      {
      }
      
      public static final void register(EntityPlayer player) 
      {
      player.registerExtendedProperties(ExtendedEntityPropertiesPlayer.EXT_PROP_NAME, new ExtendedEntityPropertiesPlayer(player));
      }
      
      public static final ExtendedEntityPropertiesPlayer get(EntityPlayer player) 
      {
      return (ExtendedEntityPropertiesPlayer) player.getExtendedProperties(EXT_PROP_NAME);
      }
      
      public final void sync() 
      {
      PacketToBeLying packet1 = new PacketToBeLying(this.beLying);
              StolenLifeMod.network.sendToServer(packet1);
      if (!player.worldObj.isRemote) 
      {
      EntityPlayerMP player1 = (EntityPlayerMP) player;
      StolenLifeMod.network.sendTo(packet1, player1);
      }
      }
      
      private static String getSaveKey(EntityPlayer player) 
      {
      return player.getDisplayName() + ":" + EXT_PROP_NAME;
      }
      
      public static void saveProxyData(EntityPlayer player) 
      {
      ExtendedEntityPropertiesPlayer playerData = ExtendedEntityPropertiesPlayer.get(player);
      NBTTagCompound savedData = new NBTTagCompound();
      playerData.saveNBTData(savedData);
      CommonProxy.storeEntityData(getSaveKey(player), savedData);
      }
      
      public static void loadProxyData(EntityPlayer player) 
      {
      ExtendedEntityPropertiesPlayer playerData = ExtendedEntityPropertiesPlayer.get(player);
      NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player));
      if (savedData != null) 
      {
      playerData.loadNBTData(savedData);
      }
      playerData.sync();
      }
      
      public boolean isLyingDown()
      {
      return beLying;
      }
      
      public void setBeLyingDown(boolean flag)
      {
      this.beLying = flag;
      this.sync();
      }
      }
      
      

      Ma classe d’events

      
      public class ExtPropEventHandler 
      {
      
      @SubscribeEvent
      public void onLivingPlayerEvent(LivingUpdateEvent event)
      {
      if(event.entityLiving instanceof EntityPlayer)
      {
      if(event.entityLiving.isSneaking())
      {
      ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get((EntityPlayer)event.entityLiving);
      System.out.println("side " + event.entityLiving.worldObj.isRemote);
      System.out.println("result : " + props.isLyingDown());
      }
      }
      }
      
      private CommonProxy commonProxy = new CommonProxy();
      
      @SubscribeEvent
      public void onEntityConstructing(EntityConstructing event) 
      {
      if (event.entity instanceof EntityPlayer && ExtendedEntityPropertiesPlayer.get((EntityPlayer) event.entity) == null)
      ExtendedEntityPropertiesPlayer.register((EntityPlayer) event.entity);
      }
      
      @SubscribeEvent
      public void onLivingDeathEvent(LivingDeathEvent event) 
      {
      if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) 
      {
      NBTTagCompound playerData = new NBTTagCompound();
      ((ExtendedEntityPropertiesPlayer) (event.entity.getExtendedProperties(ExtendedEntityPropertiesPlayer.EXT_PROP_NAME))).saveNBTData(playerData);
      commonProxy.storeEntityData(((EntityPlayer) event.entity).getDisplayName(), playerData);
      ExtendedEntityPropertiesPlayer.saveProxyData((EntityPlayer) event.entity);
      } 
      else 
      {
      
      }
      }
      
      @SubscribeEvent
      public void onEntityJoinWorld(EntityJoinWorldEvent event) 
      {
      if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) 
      {
      NBTTagCompound playerData = commonProxy .getEntityData(((EntityPlayer) event.entity) .getDisplayName());
      if (playerData != null) 
      {
      ((ExtendedEntityPropertiesPlayer) (event.entity.getExtendedProperties(ExtendedEntityPropertiesPlayer.EXT_PROP_NAME))).loadNBTData(playerData);
      }
      ((ExtendedEntityPropertiesPlayer) (event.entity.getExtendedProperties(ExtendedEntityPropertiesPlayer.EXT_PROP_NAME))).sync();
      }
      }
      }
      
      

      Mon packet

      
      public class PacketToBeLying implements IMessage
      {
      
      private static boolean beLying;
      
      public PacketToBeLying()
      {
      
      }
      
      public PacketToBeLying(boolean beLying)
      {
      this.beLying = beLying;
      }
      
      @Override
      public void fromBytes(ByteBuf buf) 
      {
      this.beLying = buf.readBoolean();
      }
      
      @Override
      public void toBytes(ByteBuf buf) 
      {
      buf.writeBoolean(beLying);
      }
      public static class Handler implements IMessageHandler <packettobelying, imessage="">{
      
      @Override
      public IMessage onMessage(PacketToBeLying message, MessageContext ctx) 
      {
      EntityPlayerMP player = ctx.getServerHandler().playerEntity;
      ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
      boolean flag = props.isLyingDown();
      flag = beLying;
      return null;
      }
      
      }
      }
      
      

      Mes events sont bien enregistrés sur le bus MinecraftForge uniquement ! Et mon packet est enregistré avec le bon discriminator (= 0, tout façon je n’ai que lui) et sur le side server.Quand je me sers du setter, je suis dans la fonction onBlockActivated puis dans une condition !isRemote. La retirer ne change sctrictement rien à mon prob de client qui n’a pas la bonne valeur (selon le client, mon boolean est toujours sur false). Et apparemment le problème ne vient pas de ma valeur primitive, car si je me sers de float, double, etc… le problème est le même. Bref, je vous remercie d’avance pour ceux qui proposeront leur aide =)</packettobelying,>

      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        Bha oui normal que c’est toujours sur false côté client.
        Ton code en fait que la synchro client -> serveur et non pas la synchro serveur -> client
        Pour avoir la synchro dans l’autre sens il faut faire un second paquet (ou enregistrer deux fois le même mais avec un handler différent) avec comme side receveur le client.

        1 réponse Dernière réponse Répondre Citer 0
        • Deleted
          Deleted dernière édition par

          Je ne comprends pas le but de tout ça. A quoi sert d’envoyer un packet si il faut l’envoyer sur les 2 sides.D’habitude 1 packet s’envoie que vers 1 seul sides. Mon code (dans mes events) est sûrement corrigeable, ou c’est vraiment la seule solution que de l’enregistrer 2 fois ?? D’ailleurs que faut-il que je fasse ? Tu me dis de créer un second handler différent ? Et dedans y’aura quoi, ça
          EntityPlayer player = Minecraft.getMinecraft().thePlayer
          à la place de ça
          EntityPlayerMP player = ctx.getServerHandler().playerEntity; ??

          Et dernière question, il me semblait que ma méthode synchro était correcte car j’envoie bien 2 fois le paquet, sur 2 sides différents.

          EDIT : Je suis en train de tester plusieurs choses, si ça ne marche tjrs pas ds 5 min, je poste tout :3

          Bon voilà mes 2 packets :
          Le common side

          
          public class CommonPacketToBeLying implements IMessage
          {
          
          private static boolean beLying;
          
          public CommonPacketToBeLying()
          {
          
          }
          
          public CommonPacketToBeLying(boolean beLying)
          {
          this.beLying = beLying;
          }
          
          @Override
          public void fromBytes(ByteBuf buf) 
          {
          this.beLying = buf.readBoolean();
          }
          
          @Override
          public void toBytes(ByteBuf buf) 
          {
          buf.writeBoolean(beLying);
          }
          
          public static class Handler implements IMessageHandler <commonpackettobelying, imessage="">{
          
          @Override
          public IMessage onMessage(CommonPacketToBeLying message, MessageContext ctx) 
          {
          EntityPlayerMP player = ctx.getServerHandler().playerEntity;
          ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
          boolean flag = props.isLyingDown();
          flag = beLying;
          return null;
          }
          }
          }
          
          

          Et le client side

          
          public class ClientPacketToBeLying implements IMessage
          {
          
          private static boolean beLying;
          
          public ClientPacketToBeLying()
          {
          
          }
          
          public ClientPacketToBeLying(boolean beLying)
          {
          this.beLying = beLying;
          }
          
          @Override
          public void fromBytes(ByteBuf buf) 
          {
          this.beLying = buf.readBoolean();
          }
          
          @Override
          public void toBytes(ByteBuf buf) 
          {
          buf.writeBoolean(beLying);
          }
          
          public static class Handler implements IMessageHandler <clientpackettobelying, imessage="">{
          @Override
          public IMessage onMessage(ClientPacketToBeLying message, MessageContext ctx) 
          {
          EntityPlayer player = Minecraft.getMinecraft().thePlayer;
          ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
          boolean flag = props.isLyingDown();
          flag = beLying;
          return null;
          }
          }
          }
          
          

          Mes enregistrements de packets
          network.registerMessage(CommonPacketToBeLying.Handler.class, CommonPacketToBeLying.class, 0, Side.SERVER);
          network.registerMessage(ClientPacketToBeLying.Handler.class, ClientPacketToBeLying.class, 1, Side.CLIENT);

          Ma nouvelle méthode sync (je pense que l’erreur vient de là)

          
          public final void sync() 
          {
          ClientPacketToBeLying packet1 = new ClientPacketToBeLying(this.beLying);
                  StolenLifeMod.network.sendToServer(packet1);
          if (!player.worldObj.isRemote) 
          {
          EntityPlayerMP player1 = (EntityPlayerMP) player;
          CommonPacketToBeLying packet2 = new CommonPacketToBeLying(this.beLying);
          StolenLifeMod.network.sendTo(packet2, player1);
          }
          }
          
          

          Je dis ça juste comme ça, j’ai debuggué plusieurs trucs sur cettte méthode et j’ai vu qu’elle n’était appelé que du côté common, alors ça peut peut-être influencer quelque chose, à voir :)</clientpackettobelying,></commonpackettobelying,>

          1 réponse Dernière réponse Répondre Citer 0
          • Snowy_1803
            Snowy_1803 dernière édition par

            Moi perso, j’ai fait ce genre de classe avec qu’un Packet serveur -> client. Après ça dépends de ce que tu veux faire.

            Moddeur 1.8

            Développeur Java

            1 réponse Dernière réponse Répondre Citer 0
            • Deleted
              Deleted dernière édition par

              @Snowy_1803 : Essaie d’utiliser ton extprop dans un event client side only et tu t’apercevras qu’il ne marchera pas 😉
              A part ça je pense m’approcher de + en + du but mais en vain le prob persiste.
              Mes classes modifiées :
              Mon packet client

              
              public class ClientPacketToBeLying implements IMessage
              {
              
              private static boolean beLying;
              
              public ClientPacketToBeLying()
              {
              
              }
              
              public ClientPacketToBeLying(boolean beLying)
              {
              this.beLying = beLying;
              }
              
              @Override
              public void fromBytes(ByteBuf buf)
              {
              this.beLying = buf.readBoolean();
              }
              
              @Override
              public void toBytes(ByteBuf buf)
              {
              buf.writeBoolean(beLying);
              }
              
              public static class Handler implements IMessageHandler <clientpackettobelying, commonpackettobelying="">{
              @Override
              public CommonPacketToBeLying onMessage(ClientPacketToBeLying message, MessageContext ctx)
              {
              return new CommonPacketToBeLying(message.beLying);
              }
              }
              }
              
              

              Mon packet common

              
              public class CommonPacketToBeLying implements IMessage
              {
              
              private static boolean beLying;
              
              public CommonPacketToBeLying()
              {
              
              }
              
              public CommonPacketToBeLying(boolean beLying)
              {
              this.beLying = beLying;
              }
              
              @Override
              public void fromBytes(ByteBuf buf)
              {
              this.beLying = buf.readBoolean();
              }
              
              @Override
              public void toBytes(ByteBuf buf)
              {
              buf.writeBoolean(beLying);
              }
              
              public static class Handler implements IMessageHandler <commonpackettobelying, imessage="">{
              @Override
              public IMessage onMessage(CommonPacketToBeLying message, MessageContext ctx)
              {
              EntityPlayerMP player = ctx.getServerHandler().playerEntity;
              ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
              boolean flag = props.isLyingDown();
              flag = beLying;
              return null;
              }
              }
              }
              
              

              Ma méthode sync()

              
              public final void sync()
              {
              EntityPlayerMP player1 = (EntityPlayerMP) player;
              ClientPacketToBeLying packet1 = new ClientPacketToBeLying(this.beLying);
              StolenLifeMod.network.sendTo(packet1, player1);
              }
              
              

              Dans l’espoir d’avoir une réponse pertinente :)</commonpackettobelying,></clientpackettobelying,>

              1 réponse Dernière réponse Répondre Citer 0
              • robin4002
                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                Oui ta fonction sync envoie le paquet dans les deux sens. Mais ton paquet n’est que conçu pour arriver sur le serveur.
                Et oui c’est exactement ça, tu fais un deuxième handler et tu utilises Minecraft.getMinecraft().thePlayer. (n’oublies pas le @SideOnly au dessus de la méthode onMessage).

                Et si un paquet peut très bien être envoyé sur les deux side. Il faut juste l’enregistrer deux fois, avec un handler différent pour chaque side.

                EDIT : utilises le même paquet, ça sera plus simple.

                1 réponse Dernière réponse Répondre Citer 0
                • Deleted
                  Deleted dernière édition par

                  Alors je dois vraiment pas être doué, j’ai (il me semble) bien suivi tes conseils, or ça ne marche toujours pas (le client ne connaît pas la réelle valeur du boolean)
                  Mon (unique packet)

                  
                  public class PacketToBeLying implements IMessage
                  {
                  
                  private static boolean beLying;
                  
                  public PacketToBeLying()
                  {
                  
                  }
                  
                  public PacketToBeLying(boolean beLying)
                  {
                  this.beLying = beLying;
                  }
                  
                  @Override
                  public void fromBytes(ByteBuf buf)
                  {
                  this.beLying = buf.readBoolean();
                  }
                  
                  @Override
                  public void toBytes(ByteBuf buf)
                  {
                  buf.writeBoolean(beLying);
                  }
                  
                  public static class ClientHandler implements IMessageHandler <packettobelying, imessage="">{
                  @Override
                  @SideOnly(Side.CLIENT)
                  public IMessage onMessage(PacketToBeLying message, MessageContext ctx)
                  {
                  EntityPlayer player = Minecraft.getMinecraft().thePlayer;
                  ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                  boolean flag = props.isLyingDown();
                  flag = beLying;
                  return null;
                  }
                  }
                  public static class CommonHandler implements IMessageHandler <packettobelying, imessage="">{
                  @Override
                  public IMessage onMessage(PacketToBeLying message, MessageContext ctx)
                  {
                  EntityPlayerMP player = ctx.getServerHandler().playerEntity;
                  ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                  boolean flag = props.isLyingDown();
                  flag = beLying;
                  return null;
                  }
                  }
                  }
                  
                  

                  Ma méthode sync

                  
                  public final void sync()
                  {
                  PacketToBeLying packet1 = new PacketToBeLying(this.beLying);
                  StolenLifeMod.network.sendToServer(packet1);
                  if (!player.worldObj.isRemote)
                  {
                  EntityPlayerMP player1 = (EntityPlayerMP) player;
                  StolenLifeMod.network.sendTo(packet2, player1);
                  }
                  }
                  
                  

                  Mes enregistrements de packets
                  network.registerMessage(PacketToBeLying.ClientHandler.class, PacketToBeLying.class, 0, Side.CLIENT);
                  network.registerMessage(PacketToBeLying.CommonHandler.class, PacketToBeLying.class, 1, Side.SERVER);

                  Moi qui pensait tout connaitre des packets xD
                  En + ma méthode sync n’est appellé que côté common, donc je pense que c’est à cause de ça que la méthode sendToServer ne peut pas fonctionner, qu’en penses-tu ?</packettobelying,></packettobelying,>

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                    Non le problème est dans ta fonction onMessage (je ne sais pas pourquoi je l’ai pas vu plus tôt x))
                    EntityPlayer player = Minecraft.getMinecraft().thePlayer;
                    ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                    boolean flag = props.isLyingDown();
                    flag = beLying;
                    return null;

                    ça devrait plutôt être :
                    EntityPlayer player = Minecraft.getMinecraft().thePlayer;
                    ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                    props.setLyingDown(message.beLying);
                    return null;

                    Et beLying ne doit pas être static dans le paquet. (les histoires d’instance c’est toujours pas ça, je vois encore trop de static mal placé faut vraiment que je finisse le tutoriel sur Java).

                    1 réponse Dernière réponse Répondre Citer 0
                    • Deleted
                      Deleted dernière édition par

                      Le problème persiste, sauf que cette fois ma console ne m’indique même plus le server side, que le client. Et d’ailleurs le client est toujours à false. Je sais pas si c’est clair, si ça ne l’est pas tu peux peut-être essayer chez toi
                      Mes 2 handlers :

                      
                      public static class ClientHandler implements IMessageHandler <packettobelying, imessage="">{
                      @Override
                      @SideOnly(Side.CLIENT)
                      public IMessage onMessage(PacketToBeLying message, MessageContext ctx)
                      {
                      EntityPlayer player = Minecraft.getMinecraft().thePlayer;
                      ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                      props.setBeLyingDown(message.beLying);
                      return null;
                      }
                      }
                      public static class CommonHandler implements IMessageHandler <packettobelying, imessage="">{
                      @Override
                      public IMessage onMessage(PacketToBeLying message, MessageContext ctx)
                      {
                      EntityPlayerMP player = ctx.getServerHandler().playerEntity;
                      ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                      props.setBeLyingDown(message.beLying);
                      return null;
                      }
                      }
                      
                      ```</packettobelying,></packettobelying,>
                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                        La fonction setBeLyingDown set bien ta variable ?
                        Sinon envoies un zip du dossier src.

                        1 réponse Dernière réponse Répondre Citer 0
                        • Deleted
                          Deleted dernière édition par

                          Oui c’est bien un setter qui m’a l’air fonctionnel.
                          Je te les ai envoyées en mp 😃

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                            PacketToBeLying :

                            package fr.stdevteam.stolenlife.common.packets;
                            
                            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;
                            import fr.stdevteam.stolenlife.common.extprop.ExtendedEntityPropertiesPlayer;
                            import io.netty.buffer.ByteBuf;
                            import net.minecraft.client.Minecraft;
                            import net.minecraft.entity.player.EntityPlayer;
                            import net.minecraft.entity.player.EntityPlayerMP;
                            
                            public class PacketToBeLying implements IMessage
                            {
                            
                            private boolean beLying;
                            
                            public PacketToBeLying()
                            {
                            
                            }
                            
                            public PacketToBeLying(boolean beLying)
                            {
                            this.beLying = beLying;
                            }
                            
                            @Override
                            public void fromBytes(ByteBuf buf)
                            {
                            this.beLying = buf.readBoolean();
                            }
                            
                            @Override
                            public void toBytes(ByteBuf buf)
                            {
                            buf.writeBoolean(beLying);
                            }
                            
                            public static class ClientHandler implements IMessageHandler <packettobelying, imessage="">{
                            @Override
                            @SideOnly(Side.CLIENT)
                            public IMessage onMessage(PacketToBeLying message, MessageContext ctx)
                            {
                            EntityPlayer player = Minecraft.getMinecraft().thePlayer;
                            ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                            props.beLying = message.beLying;
                            System.out.println("paquet " + props.beLying + " " + message.beLying);
                            return null;
                            }
                            }
                            public static class CommonHandler implements IMessageHandler <packettobelying, imessage="">{
                            @Override
                            public IMessage onMessage(PacketToBeLying message, MessageContext ctx)
                            {
                            EntityPlayerMP player = ctx.getServerHandler().playerEntity;
                            ExtendedEntityPropertiesPlayer props = ExtendedEntityPropertiesPlayer.get(player);
                            props.beLying = message.beLying;
                            return null;
                            }
                            }
                            }
                            

                            ExtendedEntityPropertiesPlayer :

                            package fr.stdevteam.stolenlife.common.extprop;
                            
                            import fr.stdevteam.stolenlife.common.core.CommonProxy;
                            import fr.stdevteam.stolenlife.common.core.StolenLifeMod;
                            import fr.stdevteam.stolenlife.common.packets.PacketToBeLying;
                            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.world.World;
                            import net.minecraftforge.common.IExtendedEntityProperties;
                            
                            public class ExtendedEntityPropertiesPlayer implements IExtendedEntityProperties
                            {
                            
                            public final static String EXT_PROP_NAME = "ExtProp" + StolenLifeMod.MODID;
                            private final EntityPlayer player;
                            public boolean beLying;
                            
                            public ExtendedEntityPropertiesPlayer(EntityPlayer player)
                            {
                            this.player = player;
                            this.beLying = false;
                            }
                            
                            @Override
                            public void saveNBTData(NBTTagCompound compound)
                            {
                            NBTTagCompound properties = new NBTTagCompound();
                            properties.setBoolean("beLying", this.beLying);
                            compound.setTag(EXT_PROP_NAME, properties);
                            }
                            
                            @Override
                            public void loadNBTData(NBTTagCompound compound)
                            {
                            NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
                            this.beLying = properties.getBoolean("beLying");
                            }
                            
                            @Override
                            public void init(Entity entity, World world)
                            {
                            }
                            
                            public static final void register(EntityPlayer player)
                            {
                            player.registerExtendedProperties(ExtendedEntityPropertiesPlayer.EXT_PROP_NAME, new ExtendedEntityPropertiesPlayer(player));
                            }
                            
                            public static final ExtendedEntityPropertiesPlayer get(EntityPlayer player)
                            {
                            return (ExtendedEntityPropertiesPlayer) player.getExtendedProperties(EXT_PROP_NAME);
                            }
                            
                            public final void sync()
                            {
                            PacketToBeLying packet1 = new PacketToBeLying(this.beLying);
                            StolenLifeMod.network.sendToServer(packet1);
                            if (!player.worldObj.isRemote)
                            {
                            EntityPlayerMP player1 = (EntityPlayerMP) player;
                            StolenLifeMod.network.sendTo(packet1, player1);
                            }
                            }
                            
                            private static String getSaveKey(EntityPlayer player)
                            {
                            return player.getDisplayName() + ":" + EXT_PROP_NAME;
                            }
                            
                            public static void saveProxyData(EntityPlayer player)
                            {
                            ExtendedEntityPropertiesPlayer playerData = ExtendedEntityPropertiesPlayer.get(player);
                            NBTTagCompound savedData = new NBTTagCompound();
                            playerData.saveNBTData(savedData);
                            CommonProxy.storeEntityData(getSaveKey(player), savedData);
                            }
                            
                            public static void loadProxyData(EntityPlayer player)
                            {
                            ExtendedEntityPropertiesPlayer playerData = ExtendedEntityPropertiesPlayer.get(player);
                            NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player));
                            if (savedData != null)
                            {
                            playerData.loadNBTData(savedData);
                            }
                            playerData.sync();
                            }
                            
                            public boolean isLyingDown()
                            {
                            return beLying;
                            }
                            
                            public void setBeLyingDown(boolean flag)
                            {
                            this.beLying = flag;
                            this.sync();
                            }
                            }
                            

                            Comme ça cela fonctionne, il affiche deux fois true dans la console.</packettobelying,></packettobelying,>

                            1 réponse Dernière réponse Répondre Citer 0
                            • Deleted
                              Deleted dernière édition par

                              Ok super prob résolu ! Merci encore de ton aide =D

                              1 réponse Dernière réponse Répondre Citer 0
                              • 1 / 1
                              • Premier message
                                Dernier message
                              Design by Woryk
                              Contact / Mentions Légales

                              MINECRAFT FORGE FRANCE © 2018

                              Powered by NodeBB