Posted March 20, 20169 yr Hello, So, recently I started my mod, which is designed to be played multiplayer without any other mod. In this mod, the server send a "OpenGui" Message/Packet, and the client need to open a GUI in which he will put a first name and a last name. Then the client need to send back a "SetName" Message/Packet. Right now I implemented this as is: - PlayerLoggedInEvent detect a player connection. After checking that the world !isRemote, I send a OpenGuiMessage(Login) to the player - When the client receive "OpenGuiMessage(Int)" it opens the Gui "Int" with a simple "mc.displayGuiScreen" The problem is that actually, the Gui pops up just before Minecraft load the render, so a few ms after the screen shows, it closes to have currentScreen == null & GuiIngame. It is not even visible, though my PC got laggy during the connection so I had time to see the GuiScreen poping up then closes.. How can I wait the render has been done to open the Gui (Or opening it directly without showing the Game first) Thanks in advance
March 20, 20169 yr This will work. It is just that you are doing something else wrong. You are opening gui from Netty Thread (packet). What you need to do, and not only in this case, but in ALL your packets is to pass task to MC's thread. For Client: Minecraft.getMinecraft().addScheduledTask(new Runnable() ... For Server: player.getServerForPlayer().addScheduledTask(new Runnable() ... 1.7.10 is no longer supported by forge, you are on your own.
March 20, 20169 yr Author This is working indeed, Thank you I haven't modded for a while those thinks looks kinda new to me..
March 21, 20169 yr Author mmh actually I'm not that done.. I am doing pretty much the same thing, once the player has set it server-side, I send another packet to sync the ExtandedProperties: public IMessage handleClientMessage(final EntityPlayer player, final UpdateClientMessage message, MessageContext ctx) { final Minecraft mc = Minecraft.getMinecraft(); mc.addScheduledTask(new Runnable() { @Override public void run() { System.out.println("Tries to get it"); PlayerProps pp = PlayerProps.get(player); System.out.println("Got it: " + pp.toString()); pp.setName(message.fName, message.lName); pp.setMoney(message.money); } }); return null; } Then I get it at each connect. It works the first time when I set my name, but then as soon as I connect it does nothing. When I take out the task, it kicks me out and the log says that "NullPointerException" on PlayerProps.get I have no clue how to register it since I already do this: @SubscribeEvent public void onEntityConstructing(EntityConstructing evt) { if (evt.entity instanceof EntityPlayer && PlayerProps.get((EntityPlayer)evt.entity) == null) { PlayerProps.register((EntityPlayer)evt.entity); } } NOTE that it does work without problems singleplayer EDIT: Actually, it works some times, and some other it doesn't.. I can't find how to reproduce working / non working. By "Some time" I mean, when I connect, and that it doesn't work, I disconnect and reconnect, untill it works. Tough when I disconnect and reconnect it is not mandatory that it works...
March 21, 20169 yr Well. It worked for me in 1.8, 1.8.9 and now in 1.9. Best shot: Post whole src on Git. If not... you could call Skype (ernio333), since I've got some time (TeamViewer preferred). 1.7.10 is no longer supported by forge, you are on your own.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.