Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Команды плагина

Discussion in 'Разработка плагинов для новичков' started by CraftCoder, Apr 12, 2014.

  1. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Так тоже не робит.
     
  2. Хостинг MineCraft
    <
  3. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Тогда ещё вопрос. Где этот метод находится?
     
  4. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Code:
    public void onEnable()
        {
            getLogger().info("Rpg shield plugin was enabled!");
            Bukkit.getPluginManager().registerEvents(this, this);
           
        }
        public void onDisable()
        {
            getLogger().info("Rpg shield plugin was disabled!");
        }
       
        public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
            //ВОТ ОН!
        }
     
  5. BeLkA

    BeLkA Старожил Пользователь

    Trophy Points:
    153
    Skype:
    FayStaff
    Но... Ведь только синтаксис выучить... Недостаточно... Хотя, похоже, достаточно.
     
  6. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Дальше при достаточном знании английского и умеении пользоваться JavaDocs почти всё возможно
     
    makssof likes this.
  7. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Den_Abr, может перед onCommand нужно метку поставить или что?
     
  8. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Попробуй создать отдельно класс реализующий CommandExecutor
     
  9. kris13

    kris13 Активный участник Пользователь

    Trophy Points:
    78
    Можешь поставить @Override, но по хорошему при компиляции java сама догадается.
    Советую примерно так реализовывать

    Code:
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
            Player p = null;
            if (sender instanceof Player) {
                p = (Player) sender;
            }
            if (p == null) {
                return true;
            }
            String cmdname = command.getName();
            if ("custom".equals(cmdname.toLowerCase())){
                if (customCommand(p, args)) {
                    return true;
                }
            }
            return true;
        }
    При этом не забывайте в onEnable() не забывайте объявить команду - this.getCommand("custom").setExecutor(this);
    Ну или делайте как посоветовал Den_Abr только вместо this ставьте реализующий класс.
     
  10. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Сколько кода видел, заметил особенность - если расположить метод onCommand() в главном классе, то экзекутор не нужен в onEnable

    UPD: А всё потому что JavaPlugin реализует CommandExecutor
     
  11. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Trophy Points:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Почему это нужно регистрировать как экзекутор? Пфф.
     
  12. BeLkA

    BeLkA Старожил Пользователь

    Trophy Points:
    153
    Skype:
    FayStaff
    Английский знаю хорошо, с JavaDocs проблемы...
     
  13. kris13

    kris13 Активный участник Пользователь

    Trophy Points:
    78
    Вы чего? Это выставление обработчика команды, без него вашему onCommand просто ничего не передастся. И именно потому что "JavaPlugin реализует CommandExecutor" мы можем писать this.
     
  14. konfyciu98

    konfyciu98 Старожил Пользователь

    Trophy Points:
    123
    Skype:
    wwwixelsor9
    Имя в Minecraft:
    konfyciu
    Я всегда боялся экзекуторов и располагаю команды в главном классе) Все норм :) Они не могут ошибаться!
     
  15. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Ко всему вышесказанному дам 1 простой совет.
    Как я убедился на личном опыте - plugin.yml и команды это вещи плохо совместимые.
    Поэтому всегда делаю так:
    1) В plugin.yml только регистрируем команды в стиле
    commands:
    example1:
    example2:
    example3:

    2) onCommand всегда на return true;

    3) Проверку всех Permissions, вывод всех сообщений и ошибок осуществляем на прямую через плагин.
     
  16. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Кароче что-то у меня ни хера не получается, кто-то может написать плагин, который просто будет работать при команде itgive и кинуть мне исходники, заранее спасибо.
     
  17. BeLkA

    BeLkA Старожил Пользователь

    Trophy Points:
    153
    Skype:
    FayStaff
    Давай сделаю, бесплатно.
     
  18. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Code:
    17:43:25 [SEVERE] Could not load 'plugins\RPGItems.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
            at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
    inLoader.java:257)
            at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
    .java:132)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugins(CraftServer.ja
    va:241)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.reload(CraftServer.java:61
    3)
            at org.bukkit.Bukkit.reload(Bukkit.java:277)
            at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
    23)
            at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:19
    2)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchCommand(CraftServe
    r.java:528)
            at org.bukkit.craftbukkit.v1_6_R3.CraftServer.dispatchServerCommand(Craf
    tServer.java:515)
            at net.minecraft.server.v1_6_R3.DedicatedServer.as(DedicatedServer.java:
    263)
            at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:2
    28)
            at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:4
    88)
            at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java
    :421)
            at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:5
    83)
    Caused by: while scanning for the next token
    found character         '\t' that cannot start any token
     in "<reader>", line 6, column 10:
          itgive:
                 ^
    
            at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.ja
    va:358)
            at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:17
    9)
            at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingValue.produce(P
    arserImpl.java:591)
            at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:161)
            at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:146)
            at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:133)
            at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java
    :237)
            at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
            at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java
    :237)
            at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:160)
            at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:12
    3)
            at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:106)
    
            at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseCons
    tructor.java:121)
            at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:480)
            at org.yaml.snakeyaml.Yaml.load(Yaml.java:411)
            at org.bukkit.plugin.PluginDescriptionFile.<init>(PluginDescriptionFile.
    java:188)
            at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
    inLoader.java:252)
            ... 13 more
    Мудрил мудрил я, и получилась такая ошибка, ругается на "ничто", после itgive:
     
  19. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    А потом догадываешься прочитать весь стак и увидеть, что в конфиге у тебя неверно расставлены отступы, а именно, через tab их делать нельзя, ручками жать пробел надо.
     
  20. Автор темы
    CraftCoder

    CraftCoder Старожил Пользователь

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    А сколько пробелов нужно, у меня вроде по 2 стоит.
     
  21. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    NotePad++ чёрточками выделяет каждые 4 пробела
     

Share This Page