Résolu 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
-
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 ?
-
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.NetHandlerPlayServernetwork = 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,>