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

    Résolu [1.7.10] - Barre d'Xp de métier Custom non syncronisée

    1.7.x
    1.7.10
    8
    41
    2444
    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.
    • G
      Gael62 dernière édition par

      Bonjour , j’ai un soucis depuis un bon moment , j’ai fais une barre d’XP custom avec des
      métiers que j’ai ajouté dans mon mod ,mais le soucis c’est que cette barre ne reçoit pas l’XP tandis que dans ma class d’Item de test reçoit bien l’XP ! J’ai l’impression que le soucis vient du fait que la fonction OnItemRightClick dans ma class ItemSword à un paramètre EntityPlayer et que ma fonction drawScreen n’en as pas , j’ai essayé de le mettre dans
      drawScreen mais le jeu n’affiche plus le GUI ! Malgré des recherches je n’ai rien trouvé d’utile ! Merci de prendre la penne de m’aidé

      Cordialement Gael62 !

      Class GuiJobs

      public class Guijobs extends GuiScreen {
      	
      final ResourceLocation bg = new ResourceLocation("megamod", "textures/gui/XPJob.png");
      final ResourceLocation bg2 = new ResourceLocation("megamod", "textures/gui/Cadre.png");
      private static final ResourceLocation texture = new ResourceLocation("textures/gui/demo_background.png");
      
      	   public Guijobs()
      	   {
      		  
      	   }  
      	   public boolean doesGuiPauseGame()
      	    {
      	        return false;
      	    }	
      	   @Override
      	   public void initGui()
      	   {
      	       super.initGui();
      	   }   
      	   @Override
      	   protected void keyTyped(char typedChar, int keyCode)
      	   {
      	       super.keyTyped(typedChar, keyCode);
      	   }
      	   @Override
      	   protected void actionPerformed(GuiButton button)
      	   {
      			if (button.id == 0) {
      				
      			}
      			if (button.id == 1) {
      				
      			}		    
      	   }					  
      	   @Override
      	   public void updateScreen()
      	   {
      		  
      	       super.updateScreen();
      	   } 
      	   public void drawScreen(int mouseX, int mouseY, float partialTick)
      	   { 		
      		   jobHandler props = jobHandler.get(mc.thePlayer);
      		   
      	       mc.getTextureManager().bindTexture(texture);
      	       GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
      	       
      	       this.drawTexturedModalRect(this.width / 2 - 115, this.height / 2 - 105, 0, 0, 256, 250);	       
      	       mc.renderEngine.bindTexture(this.bg2);
      	       DisplayHelper.drawTexturedQuadFit(this.width/ 2.0D - 112.0D, this.height/ 2.0D - 50.5D, 50.0D, 9.0D, 0.0D);
      	       
      	       super.drawScreen(mouseX, mouseY, partialTick);       
      	       mc.renderEngine.bindTexture(this.bg);				
      	       DisplayHelper.drawTexturedQuadFit(this.width/ 2.0D - 110.0D, this.height/ 2.0D - 50.0D, props.getMoney(), 8.0D, 0.0D);       
      	   }  
      }
      

      Class JobHandler

      public class jobHandler implements IExtendedEntityProperties{
      	
      	   public final static String EXT_PROP_NAME = "ExtPropTuto";
      	   
      	    private final EntityPlayer player;
      	 
      	    public long money;
      	    public long maxMoney;
      		
      		
      		protected DataWatcher dataWatcher;
      
      		
      	
      	    
      	public jobHandler(EntityPlayer player) {
              this.player = player;
              this.money = 0;
              this.maxMoney = 200;
      
      	}
              public static final void register(EntityPlayer player) {
              player.registerExtendedProperties(jobHandler.EXT_PROP_NAME,
                      new jobHandler(player));
          }
       
          public static final jobHandler get(EntityPlayer player) {
              return (jobHandler) player.getExtendedProperties(EXT_PROP_NAME);
          
          }
          @Override
          public void saveNBTData(NBTTagCompound compound) {
       
              NBTTagCompound properties = new NBTTagCompound();
       
              properties.setLong("Money", this.money);
              properties.setLong("MaxMoney", this.maxMoney);
              compound.setTag(EXT_PROP_NAME, properties);
          }
       
          @Override
          public void loadNBTData(NBTTagCompound compound) {
              NBTTagCompound properties = (NBTTagCompound) compound
                      .getTag(EXT_PROP_NAME);
              this.money = properties.getLong("Money");
              this.maxMoney = properties.getLong("MaxMoney");
          
          }
          
      	@Override
      	public void init(Entity entity, World world) {
      		
      		
      	}
              public final void sync()
              {
                  if (!player.worldObj.isRemote)
                  {
                      EntityPlayerMP player1 = (EntityPlayerMP) player;
                      MegaMod.d.sendTo((IMessage)new PacketMoney(), player1);
                  }
                  else
                  {
                      PacketMoney packetcaracteristique = new PacketMoney(this.maxMoney , this.money);
                      MegaMod.d.sendToServer((IMessage)new PacketMoney());
                  }
              }
       
      	private static String getSaveKey(EntityPlayer player) {
              return player.getDisplayName() + ":" + EXT_PROP_NAME;
          }
          public static void saveProxyData(EntityPlayer player) {
              jobHandler playerData = jobHandler.get(player);
              NBTTagCompound savedData = new NBTTagCompound();
       
              playerData.saveNBTData(savedData);
              CommonProxy.storeEntityData(getSaveKey(player), savedData);
          }
       
          public static void loadProxyData(EntityPlayer player) {
              jobHandler playerData = jobHandler.get(player);
              NBTTagCompound savedData = CommonProxy
                      .getEntityData(getSaveKey(player));
       
              if (savedData != null) {
                  playerData.loadNBTData(savedData);
              }
              playerData.sync();
          }
          public boolean pay(long amount) {
              boolean sufficient = amount <= this.money;
       
              if (sufficient) {
                  this.money -= amount;
                  this.sync();
              } else {
                  return false;
              }
       
              return sufficient;
          }
       
          public void addMoney(long amount) {
              this.money += amount;
              this.sync();
          }
       
          public long getMoney() {
          	 
              return this.money;
             
          }
       
          public void setMoney(long newMoney) {
              this.money = newMoney;
              this.sync();
          }
          public void update(long money, long maxMoney){
          	
          }
      	public long getMaxMoney(long money2) {
      	
      		return this.maxMoney;
      	}
      	    
      }
          
      

      Class ItemSword ( pour tester l’XP)

      public class ItemSwords extends ItemSword {
      
      	public ItemSwords(ToolMaterial p_i45356_1_) {
      		super(p_i45356_1_);
      	}
      	@Override
          public ItemStack onItemRightClick(ItemStack itemstack, World world, EntityPlayer player)
      	{
      	if (!world.isRemote)
      	{
          jobHandler metier = jobHandler.get(player);
      	ChatComponentTranslation comp = new ChatComponentTranslation("tu as " + metier.money +" XP");
      	player.addChatComponentMessage(comp);
      	}
      	return itemstack;
      	}
      }
      
      1 réponse Dernière réponse Répondre Citer 0
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

        Salut,
        à mon avis c’est surtout un souci de synchronisation.
        Dans la classe ItemSwords retires le if (!world.isRemote) cela va exécuter le code sur le client et le serveur.
        Si tu obtiens deux valeurs différentes, tu as effectivement un problème de synchronisation des valeurs (ton client n’a pas la bonne valeur).

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

          Salut @robin4002 ,
          J’obtient effectivement 2 valeurs différentes , mais je fais comment pour déterminé d’ou vient ce soucis de syncro ? Cela vient t’il des packets ? text alternatif

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

            Oui c’est les paquets.

            Vérifies qu’ils sont bien envoyés et bien reçus.

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

              j’ai ajouté
              d.registerMessage(PacketMoney.Handler.class, PacketMoney.class, 6, Side.SERVER);

              		d.registerMessage(PacketMoney.Handler.class, PacketMoney.class, 5, Side.CLIENT);
              		d.registerMessage(PacketMoney.Handler.class, PacketMoney.class, 6, Side.SERVER); 
              

              mais ça n’a rien changé , j’ai ensuite testé à différents endroits des (syst.out.printIn) et j’ai l’impression que le packet n’est envoyé que du coté if(!world.isRemote) dans la fonction sync de jobHandler

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

                Fais voir les classes de tes paquets ?

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

                  Voila ma classe PacketMoney

                  public class PacketMoney implements IMessage
                  {
                  public long maxMoney;
                  public long money;
                  
                  
                  public PacketMoney()
                  {
                   
                  }
                   
                  public PacketMoney(long cooldown, long kamas)
                  {
                  this.maxMoney = cooldown;
                  this.money = kamas;
                  
                   
                  }
                   
                  @Override
                  public void fromBytes(ByteBuf buf)
                  {
                  maxMoney = buf.readLong();
                  money = buf.readLong();
                  
                  
                  }
                   
                  @Override
                  public void toBytes(ByteBuf buf)
                  {
                  buf.writeLong(maxMoney);
                  buf.writeLong(money);
                  
                  
                  }
                   
                  public static class Handler implements IMessageHandler <PacketMoney, IMessage>{
                  @Override
                  public IMessage onMessage(PacketMoney message, MessageContext ctx)
                  {
                  if(ctx.netHandler instanceof NetHandlerPlayServer)
                  {
                  jobHandler prop = jobHandler.get(((NetHandlerPlayServer)ctx.netHandler).playerEntity);
                  prop.update(message.money, message.maxMoney);
                  
                  }
                  if(ctx.netHandler instanceof NetHandlerPlayClient)
                         {
                  jobHandler prop = jobHandler.get(getClientPlayer());
                             prop.update(message.money, message.maxMoney);
                            
                         }
                         return null;
                  }
                     }
                   
                  @SideOnly(Side.CLIENT)
                     public static EntityPlayer getClientPlayer()
                     {
                     return Minecraft.getMinecraft().thePlayer;
                     }
                   
                  }
                  
                  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 onMessage de l’handler est bien appelé ?

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

                      Il n’y as que ce coté qui est appelé lors que je addXp (donc j’utilise les packet)

                      if(ctx.netHandler instanceof NetHandlerPlayClient)
                             {
                      jobHandler prop = jobHandler.get(getClientPlayer());
                                 prop.update(message.money, message.maxMoney);
                                
                             }
                             return null;
                      }
                         }
                      
                      1 réponse Dernière réponse Répondre Citer 0
                      • robin4002
                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                        Ce qui est le résultat attendu quand on envoie un paquet du serveur vers le client.

                        En fait le souci c’est que ta fonction prop.update ne fait rien …

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

                          il faut que je rajoute

                           public void update(long money, long maxMoney){
                              
                          	this.money = money;
                                  this.maxMoney = maxMoney;
                                                       
                              }
                          
                          1 réponse Dernière réponse Répondre Citer 0
                          • G
                            Gael62 dernière édition par

                            J’ai réussi j’ai mis ;

                            public void update(long money, long money2){
                            
                            this.money = money;
                            this.money = money2;
                            }
                            

                            le Gui est fonctionnel et les deux valeurs sonts bien syncro !
                            Merci de ton aide @robin4002 , je passe en résolu !

                            1 réponse Dernière réponse Répondre Citer 0
                            • Superloup10
                              Superloup10 Modérateurs dernière édition par

                              Je pense que tu devrais relire le code de ton dernier message, car il est impossible que les 2 valeurs soient synchronisées avec un tel code.

                              Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                              Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                              1 réponse Dernière réponse Répondre Citer 1
                              • G
                                Gael62 dernière édition par

                                C’est bizarre car pourtant j’obtient bien les 2 mêmes valeurs et le gui et fonctionnel
                                (le Gui est moche pour l’instant car je l’ai pas terminé)
                                text alternatif

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

                                  Le souci de ton code actuel c’est que tu ne mets à jour correctement le maxMoney.

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

                                    Un autre problème que tu as dans ton code, c’est que ce n’est pas sécurisé. Le client pourrais très bien envoyer un packet au serveur et mentir sur la quantité d’argent qu’il a réellement. Dans ton code actuelle, le serveur accepterais sans se poser de question.

                                    1 réponse Dernière réponse Répondre Citer 1
                                    • G
                                      Gael62 dernière édition par

                                      Il faut donc que j’inverse les packets ?
                                      Par exemple il faut que ce soit le Serveur qui envoie le packet et non le client ?

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

                                        Le serveur commande et le client execute !
                                        Le serveur doit gere les quantité et le client doit seulement pouvoir les recupérer mais pas les modifier

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

                                          j’ai fait quelques modifications ;

                                          J’ai lancé le jeu en serveur et je l’ai rejoint avec un client avec un packet supplémentaire (pour simulé un give d’XP et afin de voir la sécurité) ,au moment de l’envoie du packet le serveur me kick avec un beau “A fatal error as occured” je me suis reconnecté au serveur est mon XP n’a pas été modifier .

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

                                            hein …? pas comrpris

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

                                            MINECRAFT FORGE FRANCE © 2018

                                            Powered by NodeBB