/* * Minecraft Forge * Copyright (c) 2016-2018. * * 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 java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiChat; import net.minecraft.command.CommandException; import net.minecraft.command.CommandHandler; import net.minecraft.command.ICommand; import net.minecraft.command.ICommandSender; import net.minecraft.command.WrongUsageException; import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.CommandEvent; import net.minecraftforge.fml.client.FMLClientHandler; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextFormatting; import net.minecraftforge.fml.common.FMLLog; import static net.minecraft.util.text.TextFormatting.*; /** * 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(); boolean usedSlash = message.startsWith("/"); if (usedSlash) { 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 = getCommands().get(commandName); try { if (icommand == null || (!usedSlash && icommand instanceof IClientCommand && !((IClientCommand)icommand).allowUsageWithoutPrefix(sender, message))) { return 0; } if (icommand.checkPermission(this.getServer(), sender)) { CommandEvent event = new CommandEvent(icommand, sender, args); if (MinecraftForge.EVENT_BUS.post(event)) { if (event.getException() != null) { throw event.getException(); } return 0; } this.tryExecute(sender, args, icommand, message); return 1; } else { sender.sendMessage(format(RED, "commands.generic.permission")); } } catch (WrongUsageException wue) { sender.sendMessage(format(RED, "commands.generic.usage", format(RED, wue.getMessage(), wue.getErrorObjects()))); } catch (CommandException ce) { sender.sendMessage(format(RED, ce.getMessage(), ce.getErrorObjects())); } catch (Throwable t) { sender.sendMessage(format(RED, "commands.generic.exception")); FMLLog.log.error("Command '{}' threw an exception:", message, t); } return -1; } //Couple of helpers because the mcp names are stupid and long... private TextComponentTranslation format(TextFormatting color, String str, Object... args) { TextComponentTranslation ret = new TextComponentTranslation(str, args); ret.getStyle().setColor(color); return ret; } public void autoComplete(String leftOfCursor) { latestAutoComplete = null; if (leftOfCursor.charAt(0) == '/') { leftOfCursor = leftOfCursor.substring(1); Minecraft mc = FMLClientHandler.instance().getClient(); if (mc.currentScreen instanceof GuiChat) { List commands = getTabCompletions(mc.player, leftOfCursor, mc.player.getPosition()); if (!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()]); } } } } @Override protected MinecraftServer getServer() { return Minecraft.getMinecraft().getIntegratedServer(); } } */