Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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(), то будет ошибка.
 
Java:
 public void onBreak (BlockBreakEvent event){
Block b = event.getBlock();
event.getPlayer().sendMessage(ChatColor.GREEN + event.getPlayer().getName() + ChatColor.GOLD +" сломал блок "+b);
}
 
Java:
public void onBreak (BlockBreakEvent event){
Block b = event.getBlock();
event.getPlayer().sendMessage(ChatColor.GREEN + event.getPlayer().getName() + ChatColor.GOLD +" сломал блок "+b);
}
Спасибо. А вот у меня при запуске такая ошибка. С чем это может быть связано?
Код:
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
 
Неправильно главный класс в plugin.yml написал
 
Неправильно главный класс в plugin.yml написал
Вот сейчас, вроде, правильно. Но появилась другая ошибка)
Код:
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);
       
      }
}
 
Изучи вначале языка java, прочитай парочку инструкций, а за тем задавай вопросы.
По последнему куску кода у тебя явная ошибка: ты не реализовал интерфейс слушателя.
Делал по этой инструкции.
 
Есть офф документация, есть википедия - пользуй их.
И я уже сказал - реализуй слушателя.
 
Есть офф документация, есть википедия - пользуй их.
И я уже сказал - реализуй слушателя.
Так. Вообще убрал
Код:
@Override
 
      public void onEnable() {
 
          _log.info("Enable");
 
          Bukkit.getPluginManager().registerEvents((Listener) this, this);
 
      }
Теперь плагин вроде как запускается, даже отображается в /plugins. Но не работает ;)
Т.е. я ломаю блок и мне ничего не пишет.
 
Так. Вообще убрал
Код:
@Override
 
      public void onEnable() {
 
          _log.info("Enable");
 
          Bukkit.getPluginManager().registerEvents((Listener) this, this);
 
      }
Теперь плагин вроде как запускается, даже отображается в /plugins. Но не работает ;)
Т.е. я ломаю блок и мне ничего не пишет.

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

Чтобы ивент работал, необходимо его реализовать и добавить атрибут к тому методу, которые обрабатывает события, чтобы он считался обработчиком.
Если это так сложно понять и сделать, то нужно подучить java.
Все, разобрался я. Спасибо.
Теперь все работает. http://puu.sh/39Egf.jpg
Ура ^_^
Получается, что когда мы запрашиваем инфу о блоке, возвращается массив?
Если я напишу вот так b[type] - я получу название?
 
Для блока есть методы .getSOMETHING(),
Какой, мягко говоря, черезжопский язык.
А вот если мне писать в чат инфу, только если ломают листву. Мне как преобразование типов сделать?
 
Какой, мягко говоря, черезжопский язык.
А вот если мне писать в чат инфу, только если ломают листву. Мне как преобразование типов сделать?
Проверяешь что айди сломанного блока == айди листвы и только тогда выводишь.
 
Проверяешь что айди сломанного блока == айди листвы и только тогда выводишь.
И снова спасибо.
Теперь появился новый вопрос)
Как мне из BlockBreakEvent установить опыт, который должен выпасть?
Получать опыт который должен выпасть я научился) int p = event.getExpToDrop();
А как устанавливать не понимаю. setExpToDrop
 

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

Назад
Верх