Jump to content

Handling chat in a server mod.


Chronicide

Recommended Posts

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

 

Link to comment
Share on other sites

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/

Link to comment
Share on other sites

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());
}

 

Link to comment
Share on other sites

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/

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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/

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Another Update: Updating the Forge MDL version worked. My conjecture to this weird bug or issue of sorts is that the plugin was downloading mappings and MDK from the latest forge minecraft version instead of the set forge minecraft version. This could be the only possible case of explanation, because clearing gradle cache does not work for me. I have tried this for over hours and just upgrading the MDK worked for me. Build and compile gradlew commands also works now, which further proves my guess. This is probably a bug on the plugin's side somehow, but it just doesn't make sense since at start trying the 40.2.18 MDL works fine and then deleting the cache breaks it.
    • Update: It seems like the forge version I was using was broken entirely, somehow... I am now using the Forge MDL 1.18.2-40.2.21 (previous used 40.2.18) version and now everything is working sort-of fine.... adding extra dependencies seems to break it again. It is so weird... Did anyone have similar issues with this before? I'm also using the Minecraft Development plugin for IntelliJ IDEA
    • Hello! I'm currently having issues while building a jar file for my Minecraft 1.18.2 Forge mod. I've attached a link to imgur below that holds two screenshots of the errors. I'm using Jetbrains IntelliJ IDEA 2024.1 and Gradle 8.4. This is my repo: Mod Repo When I was modding, I needed to build the mod in order to test the mod, which didn't work, as the first screenshot gives. It throws errors for each classes in the forge registry class (or whatever the hell that mess is) and is just generally confusing. Now I have deleted everything in my project folder and re-pulled the repo from github, which now gives the errors in the second image where all forge classes are not imported somehow. When I try to build it now, it just repeats the same errors in the first image. https://imgur.com/a/DYwSKqJ Please I need help desparately
    • [main/WARN] [net.minecraft.server.Main/]: Failed to load datapacks, can't proceed with server load. You can either fix your datapacks or reset to vanilla with --safeMode 8400java.util.concurrent.ExecutionException: com.google.gson.JsonParseException: Error loading registry data: No key name in MapLike[{"elements":[{"element":{"element_type":"minecraft:legacy_single_pool_element","location":"duneons:towns/village_creeperforest/town_center_01","processors":{"processors":[]},"projection":"rigid"},"weight":1}],"fallback":"minecraft:empty","forge:registry_name":"duneons:towns/village_creeperforest/town_centers"}] 8401at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396) ~[?:?] 8402at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073) ~[?:?] 8403at net.minecraft.server.Main.main(Main.java:182) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8404at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] 8405at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] 8406at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] 8407at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] 8408at net.minecraftforge.fml.loading.targets.CommonServerLaunchHandler.lambda$launchService$0(CommonServerLaunchHandler.java:29) ~[fmlloader-1.19.2-43.3.13.jar%2367!/:?] 8409at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-10.0.8.jar%2354!/:?] 8410at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-10.0.8.jar%2354!/:?] 8411at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-10.0.8.jar%2354!/:?] 8412at cpw.mods.modlauncher.Launcher.run(Launcher.java:106) [modlauncher-10.0.8.jar%2354!/:?] 8413at cpw.mods.modlauncher.Launcher.main(Launcher.java:77) [modlauncher-10.0.8.jar%2354!/:?] 8414at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-10.0.8.jar%2354!/:?] 8415at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-10.0.8.jar%2354!/:?] 8416at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) [bootstraplauncher-1.1.2.jar:?] 8417Caused by: com.google.gson.JsonParseException: Error loading registry data: No key name in MapLike[{"elements":[{"element":{"element_type":"minecraft:legacy_single_pool_element","location":"duneons:towns/village_creeperforest/town_center_01","processors":{"processors":[]},"projection":"rigid"},"weight":1}],"fallback":"minecraft:empty","forge:registry_name":"duneons:towns/village_creeperforest/town_centers"}] 8418at net.minecraft.core.RegistryAccess.m_206152_(RegistryAccess.java:211) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8419at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] 8420at net.minecraft.core.RegistryAccess.m_206159_(RegistryAccess.java:210) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8421at net.minecraft.core.RegistryAccess.m_206171_(RegistryAccess.java:203) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8422at net.minecraft.resources.RegistryOps.m_206817_(RegistryOps.java:32) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8423at net.minecraft.resources.RegistryOps.m_206813_(RegistryOps.java:25) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8424at net.minecraft.server.Main.lambda$main$2(Main.java:160) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8425at net.minecraft.server.WorldLoader.m_214362_(WorldLoader.java:24) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8426at net.minecraft.server.WorldStem.m_214415_(WorldStem.java:18) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8427at net.minecraft.server.Main.lambda$main$3(Main.java:158) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8428at net.minecraft.Util.m_214652_(Util.java:775) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8429at net.minecraft.Util.m_214679_(Util.java:770) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8430at net.minecraft.server.Main.main(Main.java:157) ~[server-1.19.2-20220805.130853-srg.jar%23243!/:?] 8431... 13 more 8432  
    • Try using 1.20.6-50.0.5, it just fixed an issue related to enchanting: https://github.com/MinecraftForge/MinecraftForge/commit/0e829630da67c91d2b5a91ea4b65eb033f868e76
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.