MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Problème d'handler

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.8
    21 Messages 4 Publieurs 4.6k Vues 1 Watching
    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.
    • T Hors-ligne
      TentaiTaiga
      dernière édition par

      Ma classe MoneyEventHandler est enregistrée dans l’init comme ça: MinecraftForge.EVENT_BUS.register(new MoneyEventHandler());

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

        Dans ce cas tu ne devrais pas avoir un npe. C’est étrange. Vérifies peut-être que Minecraft.getMinecraft().thePlayer n’est pas null à l’arrivé du paquet.

        1 réponse Dernière réponse Répondre Citer 0
        • T Hors-ligne
          TentaiTaiga
          dernière édition par

          J’ai vu que le NPE était causé par ceci dans ma classe de l’extendedentityprop :

          public static final ExtendedEntityPropTuto get(EntityPlayer player) 
          {
          return (ExtendedEntityPropTuto) player.getExtendedProperties(EXT_PROP_NAME);
          }
          

          et par ceci dans l’handler du packet

          else if(ctx.netHandler instanceof NetHandlerPlayClient)
                 {     
                  EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
                  ExtendedEntityPropTuto dat = ExtendedEntityPropTuto.get(player);
                     dat.update(message.money, message.maxMoney);
                 }
          

          Ce serait à cause de la façon dont je récupère le joueur pour le client  ?

          Et désolé si je met du temps à répondre à vos aides, je ne suis pas très dispo pendant la semaine  :s

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

            Normalement ça devrait fonctionner. C’est peut-être le fait d’envoyer le paquet tout de suite à la connexion qui cause problème.
            Dans le paquet ajoute :
            System.out.println(Minecraft.getMinecraft().thePlayer);
            S’il affiche null c’est bien que le joueur est null.

            1 réponse Dernière réponse Répondre Citer 0
            • T Hors-ligne
              TentaiTaiga
              dernière édition par

              Quand je recrée une map j’obtiens ça:

              [Netty Local Client IO #0/INFO] [STDOUT]: [tarael.packet.PacketMoney$Handler:onMessage:85]: EntityPlayerSP['Wassangota'/207, l='MpServer', x=8,50, y=65,00, z=8,50]
              [18:46:13] [Netty Local Client IO #0/INFO] [STDOUT]: [tarael.packet.PacketMoney$Handler:onMessage:85]: EntityPlayerSP['Wassangota'/207, l='MpServer', x=8,50, y=65,00, z=8,50]
              

              Et quand je la relance je ne l’ai plus, seulement les logs de crash. J’ai mis le println au mauvais endroit dans mon classe ?

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

                En effet, met le print au début de la condition.

                1 réponse Dernière réponse Répondre Citer 0
                • T Hors-ligne
                  TentaiTaiga
                  dernière édition par

                  Au début dans le “else if” j’obtiens ça maintenant dans le crash

                  [Netty Local Client IO #0/INFO] [STDOUT]: [tarael.packet.PacketMoney$Handler:onMessage:82]: null
                  

                  donc cette ligne ```java
                  System.out.println(Minecraft.getMinecraft().thePlayer);

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

                    Oui donc c’est bien le joueur qui est null.
                    Donc envoyer un paquet dès la connexion n’est pas une bonne idée.

                    1 réponse Dernière réponse Répondre Citer 0
                    • T Hors-ligne
                      TentaiTaiga
                      dernière édition par

                      Donc si j’ai bien compris pour envoyer le paquet il ne faut pas que je passe par EntityJoinWorldEvent mais par autre chose dans l’event handler ?

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

                        Regardes avec PlayerEvent.PlayerLogginEvent (par contre c’est un event de fml).

                        1 réponse Dernière réponse Répondre Citer 0
                        • T Hors-ligne
                          TentaiTaiga
                          dernière édition par

                          Oui ça marche maintenant je peux relancer mon monde en solo et en multi sans crash. Mais quand je meurs je perd mes données. Je sauvegarde mal les données dans LivingDeathEvent ?

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

                            Mets un System.out.println(“quelque chose”); dans saveNBTData et loadNBTData pour vérifier que les fonctions sont appelés.

                            1 réponse Dernière réponse Répondre Citer 0
                            • T Hors-ligne
                              TentaiTaiga
                              dernière édition par

                              Alors quand je rejoins le monde le message que j’ai mis dans le loadNBTData apparaît bien dans la console et quand je meurt celui du saveNBTData aussi. Les fonction sont donc bien appelées mais alors pourquoi alors je n’obtiens pas la valeur de mon argent ?

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

                                Aucune idée x)
                                Renvoies ton code actuel ?

                                1 réponse Dernière réponse Répondre Citer 0
                                • T Hors-ligne
                                  TentaiTaiga
                                  dernière édition par

                                  Voila le code de mon event handler :

                                  package tarael.packet;
                                  
                                  import net.minecraft.entity.player.EntityPlayer;
                                  import net.minecraft.nbt.NBTTagCompound;
                                  import net.minecraftforge.event.entity.EntityEvent.EntityConstructing;
                                  import net.minecraftforge.event.entity.EntityJoinWorldEvent;
                                  import net.minecraftforge.event.entity.living.LivingDeathEvent;
                                  import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
                                  import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent;
                                  import net.minecraftforge.fml.common.gameevent.PlayerEvent.PlayerRespawnEvent;
                                  import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
                                  import tarael.common.ModTarael;
                                  import tarael.client.CommonProxy;
                                  import tarael.common.ModTarael;
                                  import tarael.extendedentity.ExtendedEntityPropTuto;
                                  
                                  public class MoneyEventHandler {
                                  CommonProxy proxy = ModTarael.proxy;
                                  private EntityPlayer player;
                                  
                                  @SubscribeEvent
                                  public void onEntityConstructing(EntityConstructing event) {
                                  
                                  if (event.entity instanceof EntityPlayer
                                  && ExtendedEntityPropTuto.get((EntityPlayer) event.entity) == null)
                                  
                                  ExtendedEntityPropTuto.register((EntityPlayer) event.entity);
                                  }
                                  
                                  @SubscribeEvent
                                  public void onLivingDeathEvent(LivingDeathEvent event) {
                                  if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer) 
                                  {
                                  NBTTagCompound playerData = new NBTTagCompound();
                                  ((ExtendedEntityPropTuto) (event.entity
                                  .getExtendedProperties(ExtendedEntityPropTuto.EXT_PROP_NAME)))
                                  .saveNBTData(playerData);
                                  CommonProxy.storeEntityData(
                                  ((EntityPlayer)event.entity).getName(), playerData);
                                  ExtendedEntityPropTuto.saveProxyData((EntityPlayer)event.entity);
                                  } 
                                  else {
                                  
                                  }
                                  }
                                  
                                  @SubscribeEvent
                                  public void onPlayerLogginEvent(PlayerLoggedInEvent event) {
                                  if (!event.player.worldObj.isRemote
                                  && event.player instanceof EntityPlayer) {
                                  ExtendedEntityPropTuto.get((EntityPlayer) event.player).sync();
                                  if (!event.player.worldObj.isRemote
                                  && event.player instanceof EntityPlayer) {
                                  NBTTagCompound playerData = proxy
                                  .getEntityData(((EntityPlayer) event.player).getName());
                                  if (playerData != null) {
                                  ((ExtendedEntityPropTuto) (event.player
                                  .getExtendedProperties(ExtendedEntityPropTuto.EXT_PROP_NAME)))
                                  .loadNBTData(playerData);
                                  }
                                  
                                  ((ExtendedEntityPropTuto) (event.player
                                  .getExtendedProperties(ExtendedEntityPropTuto.EXT_PROP_NAME)))
                                  .sync();
                                  }
                                  }
                                  }
                                  
                                  /*@SubscribeEvent
                                  public void onEntityJoinWorld(EntityJoinWorldEvent event) {
                                  if (!event.entity.worldObj.isRemote
                                  && event.entity instanceof EntityPlayer) {
                                  NBTTagCompound playerData = proxy
                                  .getEntityData(((EntityPlayer) event.entity).getName());
                                  if (playerData != null) {
                                  ((ExtendedEntityPropTuto) (event.entity
                                  .getExtendedProperties(ExtendedEntityPropTuto.EXT_PROP_NAME)))
                                  .loadNBTData(playerData);
                                  }
                                  ((ExtendedEntityPropTuto) (event.entity
                                  .getExtendedProperties(ExtendedEntityPropTuto.EXT_PROP_NAME)))
                                  .sync();
                                  }
                                  }*/
                                  }
                                  
                                  

                                  Edit: Et l’ ExtendedEntityProp :

                                  package tarael.extendedentity;
                                  
                                  import tarael.client.CommonProxy;
                                  import tarael.common.ModTarael;
                                  import tarael.packet.PacketMoney;
                                  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.IChatComponent;
                                  import net.minecraft.world.World;
                                  import net.minecraftforge.common.IExtendedEntityProperties;
                                  import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
                                  
                                  public class ExtendedEntityPropTuto implements IExtendedEntityProperties 
                                  {
                                  
                                  public final static String EXT_PROP_NAME = "ExtPropTuto";
                                  
                                  private final EntityPlayer player;
                                  
                                  public long money;
                                      public long maxMoney;
                                  
                                      public ExtendedEntityPropTuto(EntityPlayer player) {
                                  this.player = player;
                                  this.money = 0;
                                  this.maxMoney = 999999999;
                                  }
                                  
                                      public static final void register(EntityPlayer player) 
                                  {
                                  player.registerExtendedProperties(ExtendedEntityPropTuto.EXT_PROP_NAME, new ExtendedEntityPropTuto(player));
                                  }
                                  
                                  public static final ExtendedEntityPropTuto get(EntityPlayer player) 
                                  {
                                  return (ExtendedEntityPropTuto) player.getExtendedProperties(EXT_PROP_NAME);
                                  }
                                  
                                  @Override
                                  public void saveNBTData(NBTTagCompound compound) 
                                  {
                                  // TODO Auto-generated method stub
                                  NBTTagCompound properties = new NBTTagCompound();
                                  properties.setLong("Money", this.money);
                                  properties.setLong("MaxMoney", this.maxMoney);
                                  compound.setTag(EXT_PROP_NAME, properties);
                                  System.out.println("quelque chose saveNBTData");
                                  }
                                  
                                  @Override
                                  public void loadNBTData(NBTTagCompound compound) 
                                  {
                                  // TODO Auto-generated method stub
                                  NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
                                  this.money = properties.getLong("Money");
                                  this.maxMoney = properties.getLong("MaxMoney");
                                  System.out.println("quelque chose loadNBTData");
                                  }
                                  
                                  @Override
                                  public void init(Entity entity, World world) {
                                  // TODO Auto-generated method stub
                                  
                                  }
                                  
                                  public final void sync() 
                                  {
                                  PacketMoney packetMoney = new PacketMoney(this.money , this.maxMoney);
                                  
                                     if (!player.worldObj.isRemote) 
                                     {
                                         EntityPlayerMP player1 = (EntityPlayerMP) player;
                                         ModTarael.network.sendTo(packetMoney, player1);
                                     }
                                     else
                                     {
                                      ModTarael.network.sendToServer(packetMoney);
                                     }
                                  }
                                  
                                  private static String getSaveKey(EntityPlayer player) {
                                  return player.getDisplayName() + ":" + EXT_PROP_NAME;
                                  }
                                  
                                  public static void saveProxyData(EntityPlayer player) {
                                  ExtendedEntityPropTuto playerData = ExtendedEntityPropTuto.get(player);
                                  NBTTagCompound savedData = new NBTTagCompound();
                                  
                                  playerData.saveNBTData(savedData);
                                  CommonProxy.storeEntityData(getSaveKey(player), savedData);
                                  }
                                  
                                  public static void loadProxyData(EntityPlayer player) {
                                  ExtendedEntityPropTuto playerData = ExtendedEntityPropTuto.get(player);
                                  NBTTagCompound savedData = CommonProxy.getEntityData(getSaveKey(player));
                                  
                                  if (savedData != null) {
                                  playerData.loadNBTData(savedData);
                                  }
                                  playerData.sync();
                                  }
                                  
                                  public void update(long money, long maxMoney)
                                  
                                  {
                                       this.money = money;
                                       this.maxMoney = maxMoney;
                                  }
                                  
                                  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();
                                  }
                                  
                                  }
                                  
                                  
                                  1 réponse Dernière réponse Répondre Citer 0
                                  • SCAREXS Hors-ligne
                                    SCAREX
                                    dernière édition par

                                    Regarde si tu appelles les variables côté serveur ou client déjà, si c’est serveur et que ça ne marche pas, le problème vient de ton EEP, sinon c’est surement un problème de synchronisation

                                    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
                                    • T Hors-ligne
                                      TentaiTaiga
                                      dernière édition par

                                      Comment ça ? Tu veux que je regarde si dans le onMessage j’envoie les données vers le serveur et le client ?

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • AymericRedA Hors-ligne
                                        AymericRed
                                        dernière édition par

                                        System.out.println() affichera la side d’où la fonction est appelé dans la console.

                                        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • T Hors-ligne
                                          TentaiTaiga
                                          dernière édition par

                                          Bonjour, alors déjà désolé de m’éterniser sur ce sujet mais comme je l’ai dis je ne suis pas dispo pendant la semaine ^^. Donc pour mon problème c’est à peu près régler : Quand je meurs les données sont sauvegardés et charger mais le problème c’est que ces données ne sont presque qu’envoyé au serveur et très peu de fois des deux côtés. Mon problème vient de ma méthode pour sync ? ou lors de l’envoie des données au respawn ?

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

                                          MINECRAFT FORGE FRANCE © 2024

                                          Powered by NodeBB