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

Помогите Разобраться с документацией

Тема в разделе "Разработка плагинов для новичков", создана пользователем Iggi6666, 6 июн 2013.

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

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Всем привет. Решил написать какой-нибудь плагин. По книгам не занимаюсь принципиально, потому что все знания получаются только на практике. К тому же так быстрее и интереснее)
    У меня появился вопрос. Вот, значит, написал кеповский плагин.
    Код:
    package ru.Iggi.bukkit.tutorial;
     
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class Iggi extends JavaPlugin implements Listener {
      public static final Logger _log = Logger.getLogger("Minecraft");
     
      @Override
      public void onEnable() {
          _log.info("Plugin enabled)");
          Bukkit.getPluginManager().registerEvents(this, this);
      }
     
      @EventHandler
      public void onBreak (BlockBreakEvent event){
          event.getPlayer().sendMessage(ChatColor.GREEN + event.getPlayer().getName() + ChatColor.GOLD +" сломал блок!");
      }
     
    }
    Теперь хочу добавить функцию, которая будет узнавать, что за блок сломал игрок. Открываю документацию, и вижу там это.
    Собсно вопрос. Что теперь с этим делать? Если просто вставить public final Block getBlock(), то будет ошибка.
     
  2. Хостинг MineCraft
    <
  3. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Код:
     public void onBreak (BlockBreakEvent event){
    Block b = event.getBlock();
    event.getPlayer().sendMessage(ChatColor.GREEN + event.getPlayer().getName() + ChatColor.GOLD +" сломал блок "+b);
    }
     
    ВремяПриключений и Iggi6666 нравится это.
  4. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Спасибо. А вот у меня при запуске такая ошибка. С чем это может быть связано?
    Код:
    2013-06-06 14:40:27 [SEVERE] Could not load 'plugins/azaza.jar' in folder 'plugins'
    org.bukkit.plugin.InvalidPluginException: java.lang.ClassNotFoundException: ru.iggi.bukkit.tutorial.Iggi
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:184)
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:305)
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:230)
        at org.bukkit.craftbukkit.v1_5_R3.CraftServer.loadPlugins(CraftServer.java:239)
        at org.bukkit.craftbukkit.v1_5_R3.CraftServer.<init>(CraftServer.java:217)
        at net.minecraft.server.v1_5_R3.PlayerList.<init>(PlayerList.java:55)
        at net.minecraft.server.v1_5_R3.DedicatedPlayerList.<init>(SourceFile:11)
        at net.minecraft.server.v1_5_R3.DedicatedServer.init(DedicatedServer.java:106)
        at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:382)
        at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
    Caused by: java.lang.ClassNotFoundException: ru.iggi.bukkit.tutorial.Iggi
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader.java:80)
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:53)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:173)
        ... 9 more
    
     
  5. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Неправильно главный класс в plugin.yml написал
     
    Iggi6666 нравится это.
  6. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Вот сейчас, вроде, правильно. Но появилась другая ошибка)
    Код:
    2013-06-06 15:15:39 [SEVERE] Error occurred while enabling First Plugin (Is it up to date?)
    java.lang.ClassCastException: ru.iga.bukkit.tutorial.iga cannot be cast to org.bukkit.event.Listener
        at ru.iga.bukkit.tutorial.iga.onEnable(iga.java:18)
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:217)
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:457)
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:381)
        at org.bukkit.craftbukkit.v1_5_R3.CraftServer.loadPlugin(CraftServer.java:282)
        at org.bukkit.craftbukkit.v1_5_R3.CraftServer.enablePlugins(CraftServer.java:264)
        at net.minecraft.server.v1_5_R3.MinecraftServer.j(MinecraftServer.java:304)
        at net.minecraft.server.v1_5_R3.MinecraftServer.e(MinecraftServer.java:283)
        at net.minecraft.server.v1_5_R3.MinecraftServer.a(MinecraftServer.java:243)
        at net.minecraft.server.v1_5_R3.DedicatedServer.init(DedicatedServer.java:151)
        at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:382)
        at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
    Код плагина:
    Код:
    package ru.iga.bukkit.tutorial;
     
    import java.util.logging.Logger;
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.block.Block;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.plugin.java.JavaPlugin;
     
    public class iga extends JavaPlugin{
          public static final Logger _log = Logger.getLogger("Minecraft");
     
          @Override
          public void onEnable() {
              _log.info("Enable"); 
              Bukkit.getPluginManager().registerEvents((Listener) this, this);
          }
         
          @EventHandler
          public void onBreak (BlockBreakEvent event){
              Block b = event.getBlock();
              event.getPlayer().sendMessage(ChatColor.GREEN + event.getPlayer().getName() + ChatColor.GOLD +" сломал блок "+b);
           
          }
    }
    
     
  7. ptnk

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

    Баллы:
    173
    Изучи вначале языка java, прочитай парочку инструкций, а за тем задавай вопросы.
    По последнему куску кода у тебя явная ошибка: ты не реализовал интерфейс слушателя.
     
  8. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Делал по этой инструкции.
     
  9. ptnk

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

    Баллы:
    173
    Есть офф документация, есть википедия - пользуй их.
    И я уже сказал - реализуй слушателя.
     
  10. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Так. Вообще убрал
    Код:
    @Override
     
          public void onEnable() {
     
              _log.info("Enable");
     
              Bukkit.getPluginManager().registerEvents((Listener) this, this);
     
          }
    Теперь плагин вроде как запускается, даже отображается в /plugins. Но не работает ;)
    Т.е. я ломаю блок и мне ничего не пишет.
     
  11. ptnk

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

    Баллы:
    173
    Ты не пробовал искать и читать нормальный туториалы?
    Я писал :
    Чтобы ивент работал, необходимо его реализовать и добавить атрибут к тому методу, которые обрабатывает события, чтобы он считался обработчиком.
    Если это так сложно понять и сделать, то нужно подучить java.
     
    Iggi6666 нравится это.
  12. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Все, разобрался я. Спасибо.
    Теперь все работает. http://puu.sh/39Egf.jpg
    Ура ^_^[DOUBLEPOST=1370532708,1370532615][/DOUBLEPOST]Получается, что когда мы запрашиваем инфу о блоке, возвращается массив?
    Если я напишу вот так b[type] - я получу название?
     
  13. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Для блока есть методы .getSOMETHING(),
     
  14. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    Какой, мягко говоря, черезжопский язык.
    А вот если мне писать в чат инфу, только если ломают листву. Мне как преобразование типов сделать?
     
    ВремяПриключений нравится это.
  15. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Проверяешь что айди сломанного блока == айди листвы и только тогда выводишь.
     
    I-Am-Black-Overlord и Iggi6666 нравится это.
  16. Автор темы
    Iggi6666

    Iggi6666 Участник

    Баллы:
    28
    Имя в Minecraft:
    iggi666
    И снова спасибо.
    Теперь появился новый вопрос)
    Как мне из BlockBreakEvent установить опыт, который должен выпасть?
    Получать опыт который должен выпасть я научился) int p = event.getExpToDrop();
    А как устанавливать не понимаю. setExpToDrop
     
    Сникерсни нравится это.

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