Jump to content

[1.8.9] Listening for chat messages and cancel the sending of them


Recommended Posts

Posted

Hello,

Im trying to adjust values in my mod via chat messages. For example: Player: "wandstrength set 1" -> mod sets int wandstrength to 1.

I tried using the ServerChatEvent which works in singleplayer but not in multiplayer:

 

public void onServerChatEvent(ServerChatEvent event){

	Chat.printMsg("Canceled sending of message"); //this solely outputs the string to the chat (client only)
	event.setCanceled(true);
}

 

Note: currently im making a clientside only mod so i dont want the server to need the mod.

 

Im open to any suggestion, as long as the server doesnt need the mod and the other players on the server wont see the message.

Posted

Sorry for my nooby questions but how do i register a command and the commandhandler?

 

this is what i found (by lexmanos):

 

/**
* The class that handles client-side chat commands. You should register any
* commands that you want handled on the client with this command handler.
*
* If there is a command with the same name registered both on the server and
* client, the client takes precedence!
*
*/

public class ClientCommandHandler extends CommandHandler{

    public static final ClientCommandHandler instance = new ClientCommandHandler();

    public String[] latestAutoComplete = null;

    /**
     * @return 1 if successfully executed, -1 if no permission or wrong usage,
     *         0 if it doesn't exist or it was canceled (it's sent to the server)
     */
    @Override
    public int executeCommand(ICommandSender sender, String message)
    {
        message = message.trim();

        if (message.startsWith("/"))
        {
            message = message.substring(1);
        }

        String[] temp = message.split(" ");
        String[] args = new String[temp.length - 1];
        String commandName = temp[0];
        System.arraycopy(temp, 1, args, 0, args.length);
        ICommand icommand = (ICommand) getCommands().get(commandName);

        try
        {
            if (icommand == null)
            {
                return 0;
            }
            
            if(icommand.getCommandName() == "toggle"){
            	
            	KeyHandler.tAutohit = true;
            }

            if (icommand.canCommandSenderUseCommand(sender))
            {
                CommandEvent event = new CommandEvent(icommand, sender, args);
                if (MinecraftForge.EVENT_BUS.post(event))
                {
                    if (event.exception != null)
                    {
                        throw event.exception;
                    }
                    return 0;
                }

                icommand.processCommand(sender, args);
                return 1;
            }
            else
            {
                sender.addChatMessage(format(RED, "commands.generic.permission"));
            }
        }
        catch (WrongUsageException wue)
        {
            sender.addChatMessage(format(RED, "commands.generic.usage", format(RED, wue.getMessage(), wue.getErrorObjects())));
        }
        catch (CommandException ce)
        {
            sender.addChatMessage(format(RED, ce.getMessage(), ce.getErrorObjects()));
        }
        catch (Throwable t)
        {
            sender.addChatMessage(format(RED, "commands.generic.exception"));
            t.printStackTrace();
        }

        return -1;
    }

    //Couple of helpers because the mcp names are stupid and long...
    private ChatComponentTranslation format(EnumChatFormatting color, String str, Object... args)
    {
        ChatComponentTranslation ret = new ChatComponentTranslation(str, args);
        ret.getChatStyle().setColor(color);
        return ret;
    }

    public void autoComplete(String leftOfCursor, String full)
    {
        latestAutoComplete = null;

        if (leftOfCursor.charAt(0) == '/')
        {
            leftOfCursor = leftOfCursor.substring(1);

            Minecraft mc = FMLClientHandler.instance().getClient();
            if (mc.currentScreen instanceof GuiChat)
            {
                List<String> commands = getTabCompletionOptions(mc.thePlayer, leftOfCursor, mc.thePlayer.getPosition());
                if (commands != null && !commands.isEmpty())
                {
                    if (leftOfCursor.indexOf(' ') == -1)
                    {
                        for (int i = 0; i < commands.size(); i++)
                        {
                            commands.set(i, GRAY + "/" + commands.get(i) + RESET);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < commands.size(); i++)
                        {
                            commands.set(i, GRAY + commands.get(i) + RESET);
                        }
                    }

                    latestAutoComplete = commands.toArray(new String[commands.size()]);
                }
            }
        }
    }
}

Yes, i know this is just copy-pasted but the documentation on forge is very "minimalistic"...

Thanks in advance  :)

Posted

You don't register command handler. You use it to register Commands.

 

Common: (server commands)

@EventHandler

public void serverLoad(FMLServerStartingEvent event)

{

event.registerServerCommand(new SomeCommand());

}

 

For client only: (you call this in preInit)

ClientCommandHandler.instance.registerCommand(new SomeCommand());

 

Seriously - you can find this anywhere on google.

1.7.10 is no longer supported by forge, you are on your own.

  • 2 weeks later...
Posted

It's a valid event to catch "Unknown command" message from server? I try to implement client command in my mod WITHOUT register true command and handler. Something like You have describe in first post, and this catchis last thing I need.

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



×
×
  • Create New...

Important Information

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