Ouvrir un gui au client à partir du serveur



  • Bonjour , j'ai vraiment besoin d'aide car je suis un peu perdu alors pour commencer j'ai crée un gui de connexion qui fonctionne avec des requêtes php pour vérifier si les identifiants du joueur sont correctes tous fonctionne correctement maintenant il ne me reste plus qu'une seul chose à faire et comme je débute en forge je suis un peu confus j'aimerais que quand le joueur se connecte sur le serveur (le serveur fonctionne avec Thermos) le client ouvre le gui de connexion au joueur et applique quelques effets de potions et je ne sais réellement pas comment faire auriez-vous la possibilité de me dire comment je dois faire je vous remercie !

    cordialement


  • Moddeurs confirmés Rédacteurs Modérateurs Administrateurs

    Très simple, tu fais une recherche sur les events qui s'activent au moment où tu veux lancer ton Gui.



  • Il ne faut pas utiliser des packets qu'il faut envoyer au client à partir du serveur dès que le joueur se connecte sur le serveur pour ouvrir le gui ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Si c'est ça.
    Et pour envoyer le paquet à la connexion il faut utiliser l'event PlayerLoginEvent (ou quelque chose comme ça)



  • D'accord je comprends mieux j'ai suivi vos instructions et j'ai fais ça dans le code :

    @SubscribeEvent
    public void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event)
    {
    EntityPlayerMP player_MP = (EntityPlayerMP)event.player;
    System.out.print("Connection d'un joueur");
    JobGui.instance.network.sendToServer(new CylrpPacketHandler("opengui"));
    }

    est-ce correct ? et une fois j'envoie le message comment je le réceptionne à partir du serveur ?

    et j'ai aussi remarquer que je ne reçois pas dans la console l'informations comme quoi le packet a bien était reçu
    par contre avec un bouton cela fonctionne je ne comprends pas .

    Edit:

    J'ai réussi pour cela c'est utilisé un TimeUnit.SECONDS.sleep(3); et le gui s'affiche correctement je vous remercie et je mets le sujet en résolue ! 🙂



  • JobGui.instance.network.sendToServer(new CylrpPacketHandler("opengui"));
    

    Euh je sais pas comment ça a pu marcher avec un "TimeUnit.SECONDS.sleep(3);" (en tous cas peut marcher qu'en solo) mais cette ligne envoie le packet au serveur, or tu es déjà dessus, il faut que tu envoies le packet au client et tu n'auras pas besoin de "TimeUnit.SECONDS.sleep(3);" qui va en plus faire freeze le serveur si tu mets sur un serveur multi.

    PS : balises java = ❤



  • Oui effectivement je viens de remarquer ça bon bah du coup j'ai encore du boulot



  • J'ai l'impression que mod n'arrive pas à envoyer de packet côté client j'ai oublié quelque chose ?

    <3test



  • du coup j'ai fais comme tu as dis Aymeric mais maintenant je n'arrive plus à me connecter j'ai une erreur dans la console:

    SimpleChannelHandlerWrapper exception
    java.lang.ClassCastException: net.minecraft.client.network.NetHandlerPlayClient cannot be cast to net.minecraft.network.NetHandlerPlayServer

            network = NetworkRegistry.INSTANCE.newSimpleChannel("cylrp");
    
            network.registerMessage(CylrpPacketHandler.Handler.class, CylrpPacketHandler.class, 1, Side.CLIENT);
    
    public class CylrpPacketHandler implements IMessage {
    
        private String text;
    
        public CylrpPacketHandler() { }
    
        public CylrpPacketHandler(String text) {
            this.text = text;
        }
    
        @Override
        public void fromBytes(ByteBuf buf) {
            text = ByteBufUtils.readUTF8String(buf); // this class is very useful in general for writing more complex objects
        }
    
        @Override
        public void toBytes(ByteBuf buf) {
            ByteBufUtils.writeUTF8String(buf, text);
        }
    
        public static class Handler implements IMessageHandler <cylrppackethandler, imessage="">{
    
            @Override
            public IMessage onMessage(CylrpPacketHandler message, MessageContext ctx) {
    
                 if(ctx.side == Side.CLIENT) {
                 EntityPlayerMP player = ctx.getServerHandler().playerEntity;
                 World world = player.worldObj;
                 if(!world.isRemote){
    
                     player.openGui(JobGui.instance, CylrpGuiHandler.CYLRP_ID, world, 0, 0, 0);
                 }
    
                 System.out.println("MESSAGE");
                 }
    
                 return null;
                 }
    
        }
    
    public class PlayerJoinEvent {
    
        @SubscribeEvent
        public void onPlayerLogin(PlayerEvent.PlayerLoggedInEvent event)
        {
            EntityPlayerMP player = (EntityPlayerMP) event.player;
            System.out.print("Connection d'un joueur nommé" + player.getDisplayName());
            JobGui.network.sendTo(new CylrpPacketHandler("p"), player);
        }
    
    }
    

    Edit: C'est bon cette fois-ci j'ai réussi ! merci de votre aide ton message m'a énormément aide</cylrppackethandler,>


Log in to reply