- 52
- 1
- 2
Мне понадобилось создать команду с помощью гайда тык. С сервером эта команда не предлагала никакого взаимодействия (зачем мучаться с пакетами, когда можно этого не делать), так что я решил ее зарегать со стороны клиента.
Вот сама команда
Когда использую команду, то выводит "You must specify which player you wish to perform this action on". Я понимаю, что надо каким-то образом указать исполнителя команды или что-то в это роде. Но как?
Java:
@Override
public void preInit(FMLPreInitializationEvent event) {
ClientCommandHandler.instance.registerCommand(new CommandBlockCopy());
super.preInit(event);
}
Вот сама команда
Java:
public class CommandBlockCopy extends CommandBase {
public static final String NAME = "ensBlockCopy", USAGE = "ensBlockCopy <action> <args>";
@Override
public String getCommandName() {
return this.NAME;
}
@Override
public String getCommandUsage(ICommandSender commandSender) {
return this.USAGE;
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender commandSender) {
return true;
}
@Override
public void processCommand(ICommandSender commandSender, String[] args) {
if (commandSender instanceof EntityPlayer) {
if (args.length < 1) {
throw new WrongUsageException(this.getCommandUsage(commandSender));
}
if (args[0].equals("start_copy")) {
if (!BlockCopyer.copyStarted) {
BlockCopyer.copyStarted = true;
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.start_copy.start"));
} else {
CommandBase.getCommandSenderAsPlayer(commandSender).addChatMessage(
new ChatComponentTranslation("commands.ensBlockCopy.start_copy.already_started"));
}
}
if (args[0].equals("select_centre")) {
if (BlockCopyer.copyStarted) {
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.select_centre"));
} else {
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.not_started"));
}
}
if (args[0].equals("remove_blocks")) {
if (BlockCopyer.copyStarted) {
BlockCopyer.mode = 2;
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.remove_blocks"));
} else {
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.not_started"));
}
}
if (args[0].equals("end_copy")) {
if (BlockCopyer.copyStarted) {
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.end_copy.end"));
BlockCopyer.copyStarted = false;
} else {
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.not_started"));
}
}
if (args[0].equals("add_blocks")) {
if (BlockCopyer.copyStarted) {
BlockCopyer.mode = 1;
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.add_blocks"));
} else {
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.not_started"));
}
}
if (args[0].equals("default")) {
if (BlockCopyer.copyStarted) {
BlockCopyer.mode = 0;
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.default"));
} else {
CommandBase.getCommandSenderAsPlayer(commandSender)
.addChatMessage(new ChatComponentTranslation("commands.ensBlockCopy.not_started"));
}
}
}
}
public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] args) {
return args.length == 1
? getListOfStringsMatchingLastWord(args,
new String[] { "start_copy", "end_copy", "default", "remove_blocks", "select_centre",
"add_blocks" })
: null;
}
}
Когда использую команду, то выводит "You must specify which player you wish to perform this action on". Я понимаю, что надо каким-то образом указать исполнителя команды или что-то в это роде. Но как?