MrTigreroux Posted April 21, 2017 Share Posted April 21, 2017 (edited) Hi ! I'm creating a mod that needs to check if certains players are online on a bungee network (of minecraft of course). To do that, I thought about the tab completion when we start the name of a player it is suggested with online players. I did some researchs and found that it's managed with a packet. I'm sending it with: Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C14PacketTabComplete("/test ")); But I don't know how to retrieve the packet with the list of player names that the server send me back. In others words, how can I check when the client receive a specific vanilla packet ? I found that I would have to change the NetworkHandler but I don't really understand how... If anyone know how to do that, it would be really nice. Have a nice day. Edited April 21, 2017 by MrTigreroux Line break Quote Link to comment Share on other sites More sharing options...
MrTigreroux Posted April 21, 2017 Author Share Posted April 21, 2017 18 minutes ago, diesieben07 said: As you can see in NetHandlerPlayClient::handleTabComplete, the tab completion response is passed to the currently active GUI. Why can't you use the data you see in the online-player box visible when you press the tab key? Because I want all players connected on the bungee network and not only who that are on "my" server. Quote Link to comment Share on other sites More sharing options...
MrTigreroux Posted April 22, 2017 Author Share Posted April 22, 2017 Searching into the code of Minecraft, I found that GuiChat class has a foundPlayerNames list but it is private. Therefore, I searched for reflection method to access it but I still get a java.lang.NoSuchFieldException Here one try of getting this list: getDeclaredField(Minecraft.getMinecraft().currentScreen, "foundPlayerNames") With method: public static Object getDeclaredField(Object object, String field) { try { Field f = object.getClass().getDeclaredField(field); f.setAccessible(true); return f.get(object); } catch (Exception ex) { ex.printStackTrace(); return null; } } Thanks in advance if anyone know why I get this error. Quote Link to comment Share on other sites More sharing options...
MrTigreroux Posted April 22, 2017 Author Share Posted April 22, 2017 It is because I don't close the chat and I made an event to tell me when a new GuiScreen is opened. Quote Link to comment Share on other sites More sharing options...
MrTigreroux Posted April 22, 2017 Author Share Posted April 22, 2017 I'm using a command to get this list. First I write "/ping " then I press TAB to show me the tab completion list. After that, I try to get the private list of GuiChat but it throw me an exception. If I closed the chat before getting this list, the GuiChat would be reset and I don't know how I could get him by the way. Quote Link to comment Share on other sites More sharing options...
MrTigreroux Posted April 22, 2017 Author Share Posted April 22, 2017 Yes but I don't know how to intercept the response, so I'm trying to get it when it is processed and saved in GuiChat. Quote Link to comment Share on other sites More sharing options...
MrTigreroux Posted April 22, 2017 Author Share Posted April 22, 2017 Yes I understood but keep not knowing how to. Do you know any open source project that did it please ? Quote Link to comment Share on other sites More sharing options...
HashtagShell Posted April 22, 2017 Share Posted April 22, 2017 Wouldn't throwing around events for received events be something for Forge to be able to do? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
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.