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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем CraftCoder, 12 апр 2014.

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

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

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

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

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

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Код:
    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 Старожил Пользователь

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

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

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

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

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

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

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

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

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

    Код:
    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 Старожил Девелопер Пользователь

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    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 Старожил Пользователь

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

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

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

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Код:
    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 Старожил Девелопер Пользователь

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

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

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

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

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

Поделиться этой страницей