MFF

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

    [ 1.12.2 ] Le conteneur ne peut pas être ouvert sur le serveur.

    Planifier Épinglé Verrouillé Déplacé Non résolu Sans suite
    1.12.2
    7 Messages 2 Publieurs 344 Vues 2 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.
    • G Hors-ligne
      GLOUND
      dernière édition par

      Bonjour, j’essaie d’envoyer des packages au serveur pour ouvrir l’inventaire. le problème est que l’inventaire s’ouvre en singleplay, mais pas sur le serveur. Aidez moi.

      Handler:

      @Override
      public IMessage onMessage(PacketOpenInventory message, MessageContext ctx) {
          EntityPlayerMP player = ctx.getServerHandler().player;
          player.openGui(Sareah.instnace, GuiHandler.INVENTORY_GUI_ID, player.world, (int)player.posX, (int)player.posY, (int)player.posZ);
          return null;
      }
      

      register:

      networkWrapper.registerMessage(PacketOpenInventory.Handler.class, PacketOpenInventory.class, 0, Side.SERVER);
      

      send:

      NetworkHandler.networkWrapper.sendToServer(new PacketOpenInventory());
      
      1 réponse Dernière réponse Répondre Citer 0
      • KporalK Hors-ligne
        Kporal
        dernière édition par

        Bonsoir, déjà ici : Sareah.instnace faute de frappe ou dans ton code tu as la même erreur ? Sareah.instance
        Pour quel raison as-tu besoin d’un packet pour ouvrir ton GUI ?

        Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

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

          Le slot ne fonctionnera que s’il est ouvert en tant que paquet.

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

            Je me doute bien 😄 mais cela n’indique en rien la raison du pourquoi tu as spécialement besoin d’un paquet.
            Peut-tu fournir le reste de ton code également ? Notamment PacketOpenInventory.
            Par expérience je dirais sans avoir le code sous les yeux que le souci peux provenir de 2 choses : les proxy ou encore une vérification du type !world.isRemote qui n’est pas faite ( c’est pas forcément ça le souci bien évidement, mais dans mon cas c’est souvent de là que viens le problème ).

            Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

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

              public class PacketOpenInventory implements IMessage {
              
                  public PacketOpenInventory() {}
              
                  @Override
                  public void fromBytes(ByteBuf buf) {
                  }
              
                  @Override
                  public void toBytes(ByteBuf buf) {
                  }
              
                  public static class Handler implements IMessageHandler<PacketOpenInventory, IMessage> {
              
                      @Override
                      public IMessage onMessage(PacketOpenInventory message, MessageContext ctx) {
                          EntityPlayerMP player = ctx.getServerHandler().player;
                          player.openGui(Sareah.getInstance(), GuiHandler.INVENTORY_GUI_ID, player.world, (int)player.posX, (int)player.posY, (int)player.posZ);
                          return null;
                      }
                  }
              }
              
              public class NetworkHandler {
              
                  public static SimpleNetworkWrapper networkWrapper;
              
                  public static void init() {
                      networkWrapper = NetworkRegistry.INSTANCE.newSimpleChannel(Sareah.MODID);
              
                      networkWrapper.registerMessage(PacketOpenInventory.Handler.class, PacketOpenInventory.class, 0, Side.SERVER);
                  }
              }
              
              @SubscribeEvent
              public void guiOpen(GuiOpenEvent event) {
                  if(event.getGui() != null && event.getGui().getClass() == GuiInventory.class) {
                      EntityPlayer player = mc.player;
                      if(!player.isCreative()) {
                          event.setCanceled(true);
                          NetworkHandler.networkWrapper.sendToServer(new PacketOpenInventory());
                      }
                  }
              }
              
              1 réponse Dernière réponse Répondre Citer 0
              • KporalK Hors-ligne
                Kporal
                dernière édition par

                Wow, je t’avoue que ta méthode me laisse … dubitatif !
                Tu ouvres un inventaire pour l’annuler puis envoie un paquet qui renvoie l’information au joueur d’ouvrir un autre inventaire ?
                N’est-il pas possible pour toi d’ouvrir immédiatement l’inventaire souhaiter sans passer par cette étape ?
                Et tu n’as toujours pas répondu concernant le pourquoi il te faut utiliser un paquet ?
                Dans quel but, est-ce absolument nécessaire pour ton code ?

                Il me faudrait faire des tests avec ton code pour pouvoir mieux t’aider, aurais tu des logs également ?
                Voir mieux des System.out.println() sur le paquet lorsque tu lances sur un serveur ! Histoire de voir si en serveur ton paquet != null ?

                Check out my mod : https://www.curseforge.com/minecraft/mc-mods/eygo

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

                  Pour donner l’explication précise, j’ai créé un inventaire de joueur personnalisé: il n’a pas besoin d’ajouter de nouveaux slot, il n’a besoin que des slot d’inventaire existants (armure, barre chaude, inventaire). Ainsi, après avoir annulé l’événement d’inventaire existant, j’essaie d’ouvrir l’inventaire personnalisé; mais si j’utilise également player.openGui, slot d’inventaire ne fonctionne pas.player.openGui Avec un package qui envoie au serveur, il fonctionne très bien en singleplay, mais il ne fonctionne pas sur le serveur. Je dois créer un mod côté client qui peut fonctionner sur le serveur.

                  Si vous n’avez pas utilisé le package:
                  https://imgur.com/a/YX721H4

                  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