MFF

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

    Problème update gui + ExtProp synchro serveur exception

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    14 Messages 3 Publieurs 2.7k 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.
    • robin4002R Hors-ligne
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs
      dernière édition par

      Sur NHG pour afficher le menu de sélection du kit on passe par TickEvent.ClientTickEvent.
      Si Minecraft.getMinecraft().currentScreen est null est que le kit est null on ouvre le Gui de sélection.

      Je te conseil de faire quelque chose de similaire.

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

        Ok merci de ta réponse, je vais essayer dans la soirée. Mais j’aurai aimé comprendre pourquoi ce code là qui me paraît + que basique, ne marche pas ?? J’aurai fait une erreur tout bête quelque part  😕

        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 😕
          Essayes de print currentScreen dans un event de tick.

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

            Ok y’a du mieux 😃
            Mon gui est ouvert mais ressemble à ça !!!

            Mon code de l’event que j’ai bien enregistré client side only

            
            private GuiCatalog gui = null;
            
            @SubscribeEvent
            public void onPlayerEnteredInWorld(TickEvent.ClientTickEvent event)
            {
            if(Minecraft.getMinecraft().theWorld != null)
            {
            if(event.phase == TickEvent.Phase.END)
            {
            if(Minecraft.getMinecraft().currentScreen == null && this.gui == null)
            {
            System.out.println(this.gui == null);
            Minecraft.getMinecraft().displayGuiScreen(gui = new GuiCatalog(" "));
            System.out.println(this.gui == null);
            }
            }
            }
            }
            
            

            Merci encore 😃

            EDIT = Après un petit débug, j’ai remarqué que ça venait de ma ligne drawTexturedModalRect. Je corrige et si je rencontre un problème je reviens 🙂

            Par-contre j’ai encore un autre problème, voici mon image originale :
            (Les vraies dimensions ne sont pas 800x500 mais 1127x797)

            Or la méthode ne semble pas fonctionner, puisque voici mon résultat en jeu :

            Qu’ai-je loupé ? Je ne comprends qu’à moitié la méthode drawTexturedModalRect avec les 4 vecteurs, donc je ne saurai me débrouiller seul ^^’
            Après pensez-vous qu’un glScale pourrait résoudre l’affaire ???

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

              UP pour mon problème d’image mal dimensionnée à afficher et aussi question, je souhaiterai que ce gui ne s’affiche qu’une seule fois par joueur. A chaque fois que mon mod est load, mon instance du GuiCatalog va redevenir nulle je me trompe ? Donc il faudrait que je passe par un boolean stocké dans les tags du joueur ou y’a + simple ? Passer par un simple fichier texte local dans le mod mais faudrait juste que le joueur n’y touche pas ^^’

              J’ai ce code là mais ce n’est pas forcément le meilleur rendu puisque j’ai dû descendre les dimensions de mon image à 512x512 et voici désormais l

              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

                Les textures de Minecraft doivent toujours avoir un double de deux.
                Fait une texture de 1024*512 même si tu n’utilise pas toute la texture.

                Et oui passe par un tag nbt.

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

                  Ok j’oublie souvent ce détail 🙂
                  Merci de me l’avoir rappelé
                  Et encore autre chose, j’ai toujours du mal avec les ExtProp et les packets, je souhaiterai checker si un boolean est false, dans quel cas j’ouvrirai mon gui dans mon event ClientTickEvent mais j’obtiens ce crash report sur serveur :

                  [22:37:05] [Server thread/ERROR] [FML]: SimpleChannelHandlerWrapper exception
                  java.lang.RuntimeException: Missing
                  at cpw.mods.fml.server.FMLServerHandler.getClientToServerNetworkManager(FMLServerHandler.java:238) ~[FMLServerHandler.class:?]
                  at cpw.mods.fml.common.FMLCommonHandler.getClientToServerNetworkManager(FMLCommonHandler.java:530) ~[FMLCommonHandler.class:?]
                  at cpw.mods.fml.common.network.FMLOutboundHandler$OutboundTarget$8.selectNetworks(FMLOutboundHandler.java:225) ~[FMLOutboundHandler$OutboundTarget$8.class:?]
                  at cpw.mods.fml.common.network.FMLOutboundHandler.write(FMLOutboundHandler.java:273) ~[FMLOutboundHandler.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.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:?]
                  at fr.mrplaigon.catalog.common.extprop.ExtendedEntityPropertiesPlayer.sync(ExtendedEntityPropertiesPlayer.java:59) [ExtendedEntityPropertiesPlayer.class:?]
                  at fr.mrplaigon.catalog.common.handler.ExtPropEventHandler.onEntityJoinWorld(ExtPropEventHandler.java:50) [ExtPropEventHandler.class:?]
                  at cpw.mods.fml.common.eventhandler.ASMEventHandler_8_ExtPropEventHandler_onEntityJoinWorld_EntityJoinWorldEvent.invoke(.dynamic) [?:?]
                  at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) [ASMEventHandler.class:?]
                  at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) [EventBus.class:?]
                  at net.minecraft.world.World.spawnEntityInWorld(World.java:1503) [World.class:?]
                  at net.minecraft.server.management.ServerConfigurationManager.playerLoggedIn(ServerConfigurationManager.java:322) [ServerConfigurationManager.class:?]
                  at net.minecraft.server.management.ServerConfigurationManager.initializeConnectionToPlayer(ServerConfigurationManager.java:170) [ServerConfigurationManager.class:?]
                  at cpw.mods.fml.common.network.handshake.NetworkDispatcher.completeServerSideConnection(NetworkDispatcher.java:190) [NetworkDispatcher.class:?]
                  at cpw.mods.fml.common.network.handshake.NetworkDispatcher.completeHandshake(NetworkDispatcher.java:463) [NetworkDispatcher.class:?]
                  at cpw.mods.fml.common.network.internal.HandshakeCompletionHandler.channelRead0(HandshakeCompletionHandler.java:17) [HandshakeCompletionHandler.class:?]
                  at cpw.mods.fml.common.network.internal.HandshakeCompletionHandler.channelRead0(HandshakeCompletionHandler.java:11) [HandshakeCompletionHandler.class:?]
                  at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:98) [SimpleChannelInboundHandler.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
                  at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [MessageToMessageDecoder.class:?]
                  at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [MessageToMessageCodec.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.invokeChannelRead(DefaultChannelHandlerContext.java:337) [DefaultChannelHandlerContext.class:?]
                  at io.netty.channel.DefaultChannelHandlerContext.fireChannelRead(DefaultChannelHandlerContext.java:323) [DefaultChannelHandlerContext.class:?]
                  at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:785) [DefaultChannelPipeline.class:?]
                  at io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:169) [EmbeddedChannel.class:?]
                  at cpw.mods.fml.common.network.internal.FMLProxyPacket.processPacket(FMLProxyPacket.java:86) [FMLProxyPacket.class:?]
                  at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241) [NetworkManager.class:?]
                  at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182) [NetworkSystem.class:?]
                  at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726) [MinecraftServer.class:?]
                  at net.minecraft.server.dedicated.DedicatedServer.updateTimeLightAndEntities(DedicatedServer.java:349) [DedicatedServer.class:?]
                  at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614) [MinecraftServer.class:?]
                  at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
                  at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
                  [22:37:14] [Netty IO #2/ERROR] [FML]: NetworkDispatcher exception
                  java.io.IOException: Une connexion existante a dû être fermée par l’hôte distant
                  at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:1.7.0_71]
                  at sun.nio.ch.SocketDispatcher.read(Unknown Source) ~[?:1.7.0_71]
                  at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source) ~[?:1.7.0_71]
                  at sun.nio.ch.IOUtil.read(Unknown Source) ~[?:1.7.0_71]
                  at sun.nio.ch.SocketChannelImpl.read(Unknown Source) ~[?:1.7.0_71]
                  at io.netty.buffer.UnpooledUnsafeDirectByteBuf.setBytes(UnpooledUnsafeDirectByteBuf.java:436) ~[UnpooledUnsafeDirectByteBuf.class:?]
                  at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:870) ~[AbstractByteBuf.class:?]
                  at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:208) ~[NioSocketChannel.class:?]
                  at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:87) [AbstractNioByteChannel$NioByteUnsafe.class:?]
                  at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:480) [NioEventLoop.class:?]
                  at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:447) [NioEventLoop.class:?]
                  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:341) [NioEventLoop.class:?]
                  at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:101) [SingleThreadEventExecutor$2.class:?]
                  

                  Cependant en solo je n’ai aucun crash. Après j’ai bien enregistré mon Packet sur 2 handlers différents pour chaque side, mais à la limite le common je m’en fichais pas mal, mais si je le retire plus rien n’est détecté.
                  Voici mon code

                  
                  public class ExtendedEntityPropertiesPlayer implements IExtendedEntityProperties 
                  {
                  
                  public final static String EXT_PROP_NAME = "ExtProp" + CatalogMod.MODID;
                  private final EntityPlayer player;
                  public boolean catalogBackup;
                  
                  public ExtendedEntityPropertiesPlayer(EntityPlayer player)
                  {
                  this.player = player;
                  this.catalogBackup = false;
                  }
                  
                  @Override
                  public void saveNBTData(NBTTagCompound compound) 
                  {
                  NBTTagCompound properties = new NBTTagCompound();
                  properties.setBoolean("catalogBackup", this.catalogBackup);
                  compound.setTag(EXT_PROP_NAME, properties);
                  }
                  
                  @Override
                  public void loadNBTData(NBTTagCompound compound) 
                  {
                  NBTTagCompound properties = (NBTTagCompound) compound.getTag(EXT_PROP_NAME);
                  this.catalogBackup = properties.getBoolean("catalogBackup");
                  }
                  
                  @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() 
                  {
                  PacketCatalogBackup packet1 = new PacketCatalogBackup(this.catalogBackup);
                  CatalogMod.network.sendToServer(packet1);
                  if (!player.worldObj.isRemote)
                  {
                  EntityPlayerMP player1 = (EntityPlayerMP) player;
                  CatalogMod.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 void setCatalogBackup(boolean flag)
                  {
                  this.catalogBackup = flag;
                  this.sync();
                  }
                  }
                  
                  

                  Packet :

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

                  Et mes events au cas où

                  
                  public class ExtPropEventHandler 
                  {
                  
                  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();
                  }
                  }
                  }
                  
                  

                  Voilà 1 prob de + ^^’
                  Je sais que le post d’origine n’a rien à voir avec ces ExtProp mais je modifie le titre de manière à ce que tout le monde soit informé de la modif 😃
                  Merci d’avance</packetcatalogbackup,></packetcatalogbackup,>

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

                    As-tu enregistré le paquet des 2 côtés ?

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

                      Oui bien évidemment 🙂
                      network.registerMessage(PacketCatalogBackup.ClientHandler.class, PacketCatalogBackup.class, 0, Side.CLIENT);
                      network.registerMessage(PacketCatalogBackup.CommonHandler.class, PacketCatalogBackup.class, 1, Side.SERVER);

                      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

                        Tu essayes d’envoyer un paquet au serveur alors que tu es déjà côté serveur.

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

                          Pas compris où ? Dans ma méthode sync ? Faut que je retire le sendToServer ?

                          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 d’où, le rapport de crash ne l’indique pas 😕

                            ÉDIT : en effet dans la fonction sync, il faudrait le mettre dans un else après le if(!world.isRemote).

                            1 réponse Dernière réponse Répondre Citer 1
                            • DeletedD Hors-ligne
                              Deleted
                              dernière édition par

                              Nikel! Sa marche bien 😃
                              Merci encore une fois !

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

                              MINECRAFT FORGE FRANCE © 2024

                              Powered by NodeBB