From b2e3f353df1f88cdcbba9a6cfc11c747558151f3 Mon Sep 17 00:00:00 2001 From: diesieben07 Date: Tue, 2 May 2017 02:22:53 +0200 Subject: [PATCH] Allow client commands to control whether they can be invoked without prefix. (#3847) --- .../client/ClientCommandHandler.java | 5 ++- .../minecraftforge/client/IClientCommand.java | 39 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 src/main/java/net/minecraftforge/client/IClientCommand.java diff --git a/src/main/java/net/minecraftforge/client/ClientCommandHandler.java b/src/main/java/net/minecraftforge/client/ClientCommandHandler.java index 61773db8b0..ff11443e9d 100644 --- a/src/main/java/net/minecraftforge/client/ClientCommandHandler.java +++ b/src/main/java/net/minecraftforge/client/ClientCommandHandler.java @@ -59,7 +59,8 @@ public class ClientCommandHandler extends CommandHandler { message = message.trim(); - if (message.startsWith("/")) + boolean usedSlash = message.startsWith("/"); + if (usedSlash) { message = message.substring(1); } @@ -72,7 +73,7 @@ public class ClientCommandHandler extends CommandHandler try { - if (icommand == null) + if (icommand == null || (!usedSlash && icommand instanceof IClientCommand && !((IClientCommand)icommand).allowUsageWithoutPrefix(sender, message))) { return 0; } diff --git a/src/main/java/net/minecraftforge/client/IClientCommand.java b/src/main/java/net/minecraftforge/client/IClientCommand.java new file mode 100644 index 0000000000..b5421c258c --- /dev/null +++ b/src/main/java/net/minecraftforge/client/IClientCommand.java @@ -0,0 +1,39 @@ +/* + * Minecraft Forge + * Copyright (c) 2016. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation version 2.1 + * of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package net.minecraftforge.client; + +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; + +/** + * Client-side commands can implement this interface to allow additional control over when the command may be used. + */ +public interface IClientCommand extends ICommand +{ + + /** + * Determine whether this command can be used without the "/" prefix. By default this is true. + * @param sender the command sender + * @param message the message, without potential prefix + * @return true to allow the usage of this command without the prefix + */ + boolean allowUsageWithoutPrefix(ICommandSender sender, String message); + +}