Posted May 10, 201312 yr Hey everyone, The part of my mod that I'm working on involves the server handling all chat messages. I want the server to receive the chat message, and decide who it should go to. Right now, as an initial proof of concept, I'm trying to have the server intercept the message and then hand deliver it to everyone with some text appended. Once I have that working, I'll focus on my logic around deciding who each message should go to. Here's what I have: public class ServerChatEventHandler { @ForgeSubscribe public void onServerChatEvent(ServerChatEvent event) { EntityPlayerMP sender = event.player; List<EntityPlayerMP> players = MinecraftServer.getServer().getConfigurationManager().playerEntityList; for (EntityPlayerMP receiver : players) { receiver.sendChatToPlayer("You hear " + sender.username + " say '" + event.message); } } } then in my mod class: @Init public void load(FMLInitializationEvent event) { proxy.registerRenderers(); MinecraftForge.EVENT_BUS.register(new ServerChatEventHandler()); } This works as expected on a single player game... since I don't cancel the event, I receive the original message and the one sent by the server. When I pack up my mod and deploy it to my test server, it swallows all chat messages. I type something in chat, and it disappears. Does anyone know what I'm doing wrong? My code as it is shouldn't prevent the original chat message from going through, but it does just that when used on in SMP. I would appreciate any advice anyone could offer. Thanks! - Scott
May 10, 201312 yr I could be wrong, but it seems a lot like you're registering your eventhandler only on the client. @ServerStarting public void serverStart(FMLServerStartingEvent event) { server = event.getServer(); MinecraftForge.EVENT_BUS.register(new EventHookContainerClass()); } In general, you should have two EventHookContainerClass, one for Clients only and one for Servers only. Good luck! Have a modding question? PM me and hopefully I'll be able to help. Good at 2d Pixel Art? We need your help! http://www.minecraftforum.net/topic/1806355-looking-for-2d-pixel-artist/
May 10, 201312 yr Author I have to concede my ignorance here. I tried putting that serverStart code in my mod's main class, and it didn't do anything. Where am I supposed to put that? Is there any example or tutorial out there for how to properly build a mod that works both in SMP and SSP? Just for the sake of clarity, I've added the following to my mod's main class: private static MinecraftServer server; @ServerStarting public void serverStart(FMLServerStartingEvent event) { server = event.getServer(); MinecraftForge.EVENT_BUS.register(new ServerChatEventHandler()); }
May 10, 201312 yr What do you have inside of your ServerChatEventHandler()? By the way, for the sake of time, I recommend testing the server portion of the mod by running the server in Eclipse (or whatever you're using for editing). This saves time that you would have used for compiling and stuff. Have a modding question? PM me and hopefully I'll be able to help. Good at 2d Pixel Art? We need your help! http://www.minecraftforum.net/topic/1806355-looking-for-2d-pixel-artist/
May 10, 201312 yr Author I haven't changed anything in the event handler class. I just changed where I registered it. public class ServerChatEventHandler { @ForgeSubscribe public void onServerChatEvent(ServerChatEvent event) { EntityPlayerMP sender = event.player; List<EntityPlayerMP> players = MinecraftServer.getServer().getConfigurationManager().playerEntityList; for (EntityPlayerMP receiver : players) { receiver.sendChatToPlayer("You hear " + sender.username + " say '" + event.message); } } } My register code (in the mod's main class... along side @PreInit, @Init, @PostInit: private static MinecraftServer server; @ServerStarting public void serverStart(FMLServerStartingEvent event) { server = event.getServer(); MinecraftForge.EVENT_BUS.register(new ServerChatEventHandler()); } And not to show how slow I am, but how do I run the server in eclipse? It would be awesome not to have to compile to test the server components.
May 10, 201312 yr I'll look through that code to see if there's anything obvious. In the meantime, you can run a server in Eclipse by clicking the dropdown arrow next to the normal 'Run' green arrow in the top left and clicking 'Server'. I can't imagine how awful it would be to code servermods without that. =P With the changed registration, does singleplayer still function? Have a modding question? PM me and hopefully I'll be able to help. Good at 2d Pixel Art? We need your help! http://www.minecraftforum.net/topic/1806355-looking-for-2d-pixel-artist/
May 10, 201312 yr Author Zetal, I can't thank you enough. Months and months of making a small change, compiling, obfuscating, zipping, and installing my mod to test the tiny change. I can't believe how stupid I've been. Also, being able to read the console from the server allowed me to catch a bug in a utility class that prevented my chat handing event from working. Issue is resolved, and I'd have never figured it out without your help. Thanks!
May 10, 201312 yr I'm glad to hear it. =) Keep on modding! Have a modding question? PM me and hopefully I'll be able to help. Good at 2d Pixel Art? We need your help! http://www.minecraftforum.net/topic/1806355-looking-for-2d-pixel-artist/
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.