Помогите [РЕШЕНО] Добавление команды

Статус
Закрыто для дальнейших ответов.

Death_Cat

Активный участник
Пользователь
Баллы
61
Имя в Minecraft
Death_CatHD
Добрый вечер.
Возникла проблема, что команда не добавляется, вроде бы всё правильно написал, но команды нет.
Буду признателен в решении проблемы.

Главный класс:
Код:
package Kot.main;

import java.util.logging.Logger;

import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;

import net.md_5.bungee.api.ChatColor;

public class KotFirst extends JavaPlugin {
   
    Logger log = Logger.getLogger("Minecraft");
   
    public Permission playerPermission = new Permission("kot.death");
    public void onEnable(){
       
       
        Bukkit.getPluginManager().registerEvents(new Handler(), this);
        PluginManager pm = getServer().getPluginManager();
        pm.addPermission(playerPermission);
       
        getLogger().info("Plugin enable");
        log.info("OH ITS WORK!");
       
    }
   
    @Override
    public void onDisable(){
       
    }

   
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
   
        if(cmd.getName().equalsIgnoreCase("death") && sender instanceof Player) {
           
            Player player = (Player) sender;
           
            if(player.hasPermission("kot.death")) {
                sender.sendMessage(ChatColor.GREEN + "True message!");
               
            } else {
               
                sender.sendMessage(ChatColor.RED + "False message!");
            }
           
           
   
        }
       
        return false;
    }
   
}


plugin.yml
Код:
name: KotFirst
main: Kot.main.KotFirst
version: 1.0
commands:
   death:
      description: use for send message to player.
      usage: /death <none>
 
бросил взгляд и сразу увидел это
Код:
if(cmd.getName().equalsIgnoreCase("death")

В label команда, в args аргументы.
Вторым взглядом не заметил регистрации команды при ините плагина..
 
бросил взгляд и сразу увидел это
Код:
if(cmd.getName().equalsIgnoreCase("death")

В label команда, в args аргументы.
Вторым взглядом не заметил регистрации команды при ините плагина..
Ее не нужно регать в главном классе.
 
У тебя табов нету в plugin.yml, как она не работает? Ошибки в консоли нету?
 
вот щяс глянул в свой плагин
this.getCommand("кмд").setExecutor(new хандлер());
 
вот щяс глянул в свой плагин
this.getCommand("кмд").setExecutor(new хандлер());
Ты регистрируешь команду в другом классе, по этому указываешь на обработчика
Просто не работает, пишет что такой команды нету при вводе.
Он просто так не работать не может, твой плагин хотя-бы есть в списке?
import net.md_5.bungee.api.ChatColor;
И какого черта
 
Плагин есть в списке, команда не работает.
Остальные функции (ивенты) работают.
 
Лучше кстати, регистрируй команду в отдельном классе, getCommand("command").setExecutor(new CommandHandler())
 
Лучше кстати, регистрируй команду в отдельном классе, getCommand("command").setExecutor(new CommandHandler())
мне удобнее в мейне всю эту хрень делать
хотя по сути никакой разницы нет, это всего лишь привязка эксекутора
 
В plugin.yml напиши так(замени):
Код:
commands:
  death:
    description: use for send message to player.
    usage: /<command> <none>
 
В plugin.yml напиши так(замени):
Код:
commands:
  death:
    description: use for send message to player.
    usage: /<command> <none>

Всё равно команды нет в игре.
Проблема так и осталась.
Может быть кто-то подскажет в чем ошибка ?
 
Минимально для того, чтобы команда работала, нужно всего лишь корректно прописать её в plugin.yml и корректно поймать.
  • Цитирую:
    В plugin.yml напиши так(замени):
    Согласно формату Yaml можно использовать любое количество пробелов. Так что у ТС-а корректный текст.
  • Цитирую:
    бросил взгляд и сразу увидел это ... в label команда, в args аргументы.
    В label — использованный алиас (которых может быть много), а в cmd.getName() именно так, как прописано в plugin.yml. Так что у ТС-а этот момент тоже правильный. Единственное, могу отметить излишество в использовании регистронезависимого сравнения, ибо "именно так, как прописано в plugin.yml".
  • Цитирую:
    Вторым взглядом не заметил регистрации команды при ините плагина..
    Главный класс плагина уже реализует интерфейс CommandExecutor, и предоставляет затычку метода onCommand по умолчанию, а также является executor-ом для всех своих команд по умолчанию. Так что у ТС-а всё правильно.
    Могу отметить, что очень часто полезно использовать аннотации Override, чтобы словить несоответствие сигнатур методов, но в данном случае у ТС-а они корректны. Но прописать стоит.
    А ещё стоило бы прописать return true;
    upload_2016-11-7_12-0-1.png
    Ведь если команду "поймали" и её работа исполнена, надо сообщить наверх правдивую информацию.
  • Зачёркнутые строки необязательны:
    upload_2016-11-7_11-57-7.png
    Нет никакой необходимости где-либо регистрировать права, можно просто брать и проверять, выданы ли они игроку или нет.
  • Цитирую:
    import net.md_5.bungee.api.ChatColor;
    Обязательно исправить на нужный пакет.
Каких-либо явных причин для неработоспособности кода я не увидел. Стоит всё перекомпилировать целиком и внимательно смотреть логи.
 
Код:
     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
         if(cmd.getName().equalsIgnoreCase("one")) {
             return CommandOne(sender, args);
         }
         return false;
     }
  
     public boolean CommandOne(CommandSender sender, String[] args) {
         Player p = (Player) sender;
        
         //Действие
        return true;
     }
 
Видно я что-то не понимаю, но проблема осталась.

Код:
@Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
      
        if(sender instanceof Player){
          
            if(cmd.getName().equalsIgnoreCase("death")){
                sender.sendMessage(ChatColor.AQUA + "True message");
                  
                    return true;
              
            }
          
        }
      
        return false;
    }
 
Видно я что-то не понимаю, но проблема осталась.

Код:
@Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
     
        if(sender instanceof Player){
         
            if(cmd.getName().equalsIgnoreCase("death")){
                sender.sendMessage(ChatColor.AQUA + "True message");
                 
                    return true;
             
            }
         
        }
     
        return false;
    }
@Override зачем тут?
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх