1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Ошибка на PlayerInteractEvent

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

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

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

    Баллы:
    103
    Добрый день, проверяю на наличие предмета в руке игрока и в зависимости от предмета произвожу действия. Ошибка вылезает если жму на какой-либо блок без предмета, либо с предметов отличным от тех на которые я проверяю.
    Код:
    Код:
    package server.hopeworld.classes;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Material;
    import org.bukkit.entity.Fireball;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.PlayerInteractEvent;
    
    public class Spells implements Listener{
        @EventHandler
        public void skills(PlayerInteractEvent e)
        {
            Player p = e.getPlayer();
            if(p.getMetadata("playerClass").get(0).asString() == "mage")
            {
                if(e.getItem().getType() == Material.BLAZE_ROD)
                {
                    Fireball fire = p.getWorld().spawn(e.getPlayer().getLocation(), Fireball.class);
                    fire.setShooter(p);
                    Logger.getLogger("HopeWorld").info("Mage " + p.getName() + " used Fireball spell at: "+ p.getLocation().getX() + "," + p.getLocation().getY() + "," + p.getLocation().getZ());
                } else if (e.getItem().getType() == Material.TNT)
                {
                    p.getWorld().createExplosion(p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), 5, false, false);
                    Logger.getLogger("HopeWorld").info("Mage " + p.getName() + " used Explosion spell at: "+ p.getLocation().getX() + "," + p.getLocation().getY() + "," + p.getLocation().getZ());
                }
            }
        }
    }
    
    [20:52:50] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to Classes v0.0.1
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:225) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.PlayerInteractManager.interact(PlayerInteractManager.java:374) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:630) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.PacketPlayInBlockPlace.a(SourceFile:60) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.PacketPlayInBlockPlace.handle(SourceFile:9) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    Caused by: java.lang.NullPointerException
    at server.hopeworld.classes.Spells.skills(Spells.java:22) ~[?:?]
    at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source) ~[?:?]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_60]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_60]
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    ... 15 more
    Данная проблема решена
    Второй вопрос тут
     
    Последнее редактирование: 17 авг 2014
  2. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Ну так e.getItem() == null.
     
  3. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
     
  4. Автор темы
    RedEnergy

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

    Баллы:
    103
    Жутко затупил, спасибо
     
  5. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    p.getMetadata("playerClass").get(0).asString() == "mage"
    Вот за это тебя убить мало.
     
  6. Автор темы
    RedEnergy

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

    Баллы:
    103
    А что тут не так?
     
  7. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Сравнение строк через ==
     
  8. Автор темы
    RedEnergy

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

    Баллы:
    103
    "=" - присваивание, "==" - сравнение. Разве не так?
    Можно конечно через .equils(). Но разве это что-то меняет?
     
  9. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    == сравнивает указатели, а equals - строки.
     
  10. Автор темы
    RedEnergy

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

    Баллы:
    103
    Хорошо, спасибо за инфу
    Дабы не создавать новую тему напишу тут. Суть: Если в стаке больше одной вещи, нужно каждую секунду отнимать по одному предмету от стака. Никаких ивентов отвечающих за временной промежуток не нашел.
     
  11. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Шелудер.
     
  12. Автор темы
    RedEnergy

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

    Баллы:
    103
    Нагуглил только вот это http://wiki.bukkit.org/Scheduler_Programming#Repeating_Example
    Сделал так:
    Код:
    package server.hopeworld.classes;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.entity.Fireball;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.scheduler.BukkitScheduler;
    import org.bukkit.util.Vector;
    
    public class Spells implements Listener{
        @EventHandler
        public void skills(PlayerInteractEvent e)
        {
            final Player p = e.getPlayer();
            if(p.getMetadata("playerClass").get(0).asString().equals("mage"))
            {
                if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
                if(p.getItemInHand().getType()== null)
                {
                    return;
                }
                if(p.getItemInHand().getType() == Material.BLAZE_ROD)
                {
                    BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
                   scheduler.scheduleSyncRepeatingTask(new Main(), new Runnable() {
                       @Override
                       public void run() {
                           if (p.getItemInHand().getAmount() > 1){
                              p.getItemInHand().setAmount(p.getItemInHand().getAmount() - 1);
                       }
                      }
                   }, 0L, 20L);
               }
                    if(p.getItemInHand().getAmount() > 1){
                          p.sendMessage("Восстановление умение еще " + p.getItemInHand().getAmount());
                    } else {
                   Fireball fire = p.getWorld().spawn(e.getPlayer().getLocation().add(new Vector(0.0D, 1.0D, 0.0D)), Fireball.class);
                   fire.setFireTicks(0);
                   fire.setShooter(p);
                   p.getItemInHand().setAmount(p.getItemInHand().getAmount() + 1);
                   Logger.getLogger("HopeWorld").info("Mage " + p.getName() + " used Fireball spell at: "+ p.getLocation().getX() + "," + p.getLocation().getY() + "," + p.getLocation().getZ());
                    }
                } /**else if (p.getItemInHand().getType() == Material.TNT) 
                {
                   
                    if(p.getItemInHand().getAmount() > 1){
                        p.sendMessage("Восстановление умение еще " + p.getItemInHand().getAmount());
                    } else {
                    p.getItemInHand().setAmount(60);
                    p.getWorld().createExplosion(p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), 5, false, false); 
                    p.getItemInHand().setAmount(p.getItemInHand().getAmount() + 1);
                   Logger.getLogger("HopeWorld").info("Mage " + p.getName() + " used Explosion spell at: "+ p.getLocation().getX() + "," + p.getLocation().getY() + "," + p.getLocation().getZ());
                    }*/
                }
            }
        }
    
    Но что-то идет не так и
    Код:
    [23:30:25] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to Classes v0.0.1
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:225) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.craftbukkit.v1_7_R4.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:195) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.PlayerConnection.a(PlayerConnection.java:606) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.PacketPlayInBlockPlace.a(SourceFile:60) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.PacketPlayInBlockPlace.handle(SourceFile:9) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.NetworkManager.a(NetworkManager.java:157) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.ServerConnection.c(SourceFile:134) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:258) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
    Caused by: java.lang.IllegalArgumentException: Plugin already initialized!
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:98) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at server.hopeworld.classes.Main.<init>(Main.java:25) ~[?:?]
        at server.hopeworld.classes.Spells.skills(Spells.java:31) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_60]
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_60]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_60]
        at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_60]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        ... 15 more
    Caused by: java.lang.IllegalStateException: Initial initialization
        at org.bukkit.plugin.java.PluginClassLoader.initialize(PluginClassLoader.java:101) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.java.JavaPlugin.<init>(JavaPlugin.java:66) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at server.hopeworld.classes.Main.<init>(Main.java:25) ~[?:?]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.7.0_60]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.7.0_60]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.7.0_60]
        at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.7.0_60]
        at java.lang.Class.newInstance(Unknown Source) ~[?:1.7.0_60]
        at org.bukkit.plugin.java.PluginClassLoader.<init>(PluginClassLoader.java:52) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:127) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:328) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:251) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.craftbukkit.v1_7_R4.CraftServer.loadPlugins(CraftServer.java:364) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at org.bukkit.craftbukkit.v1_7_R4.CraftServer.<init>(CraftServer.java:326) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.PlayerList.<init>(PlayerList.java:68) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.DedicatedPlayerList.<init>(SourceFile:14) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.DedicatedServer.init(DedicatedServer.java:133) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:436) ~[craftbukkit-1.7.10.jar:git-Bukkit-1.7.9-R0.2-18-ga04b586-b3107jnks]
        ... 1 more
     
  13. Code

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

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    new Main() зря сделал. если надо объект класса Main, но бери тот, что уже создан.
     
  14. Автор темы
    RedEnergy

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

    Баллы:
    103
    Какой-то бред, решил разбить скилы по классам. Теперь все работает, но очень и очень криво. Во-первых, кол-во не уменьшается если курсор не на предмете, во-вторых, с каждым разом уменьшается все быстрее и быстрее. Я абсолютно не понимаю как это работает :(
    Прилагаю все исходнки.
    Код:
    package server.hopeworld.classes;
    
    import java.util.ArrayList;
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.enchantments.Enchantment;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.BlockPlaceEvent;
    import org.bukkit.event.inventory.InventoryClickEvent;
    import org.bukkit.event.player.PlayerDropItemEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.*********ventory.Inventory;
    import org.*********ventory.ItemStack;
    import org.*********ventory.meta.ItemMeta;
    import org.bukkit.metadata.FixedMetadataValue;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.scheduler.BukkitRunnable;
    
    public class Main extends JavaPlugin implements Listener{
        Logger log = Logger.getLogger("HopeWorld");
        public static Inventory classChoose = Bukkit.createInventory(null, 9, "Выберите ваш класс:");
       
    
       
        public static void createDisplay(Material material, Inventory inv, int Slot, String name, String lore) {
            ItemStack item = new ItemStack(material);
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(name);
            ArrayList<String> Lore = new ArrayList<String>();
            Lore.add(lore);
            meta.setLore(Lore);
            item.setItemMeta(meta);
            inv.setItem(Slot, item);
            }
        public void addCustomItem(Material material, Player player, Enchantment ench, int enchlvl, String name, String lore)
        {
            ItemStack item = new ItemStack(material);
            ItemMeta meta = item.getItemMeta();
            meta.setDisplayName(name);
            ArrayList<String> Lore = new ArrayList<String>();
            Lore.add(lore);
            meta.setLore(Lore);
            item.setItemMeta(meta);
            item.addUnsafeEnchantment(ench, enchlvl);
            player.getInventory().addItem(item);
        }
       
        static
        {
            createDisplay(Material.NETHER_STAR, classChoose, 2, "Воин", "==== \nЖизни: 35");
            createDisplay(Material.EMERALD, classChoose, 4, "Лучник", "==== \nЖизни: 25");
            createDisplay(Material.DIAMOND, classChoose, 6, "Волшебник", "==== \nЖизни: 25");
        }
       
        public void onEnable()
        {
            getConfig().options().copyDefaults(true);
            saveConfig();
            log.info("Classes has been enabled");
            getServer().getPluginManager().registerEvents(this, this);
            getServer().getPluginManager().registerEvents(new SpellFireball(), this);
            getServer().getPluginManager().registerEvents(new SpellExplosion(), this);
        }
        public void onDisable()
        {
            log.info("Classes has been disabled");
        }
       
        @EventHandler
        public void onLeave(PlayerQuitEvent e)
        {
            Player p = e.getPlayer();
            p.removeMetadata("playerClass", this);
        }
        @EventHandler
        public void BlockPlaceDeprecetion(BlockPlaceEvent e)
        {
            e.setCancelled(true);
        }
        @EventHandler
        public void DropDeprecation(PlayerDropItemEvent e)
        {
            e.setCancelled(true);
        }
        @EventHandler
        public void onPlayerFirstJoin(final PlayerJoinEvent e)
        {
            new BukkitRunnable() {
                @Override
                public void run(){
                        e.getPlayer().openInventory(classChoose);
                }
            }.runTaskLater(this, 20);
        }
        @EventHandler
        public void onInventoryClick(InventoryClickEvent event) {
            Player player = (Player) event.getWhoClicked();
            ItemStack clicked = event.getCurrentItem();
            Inventory inventory = event.getInventory();
            if (inventory.getName().equals(classChoose.getName()))
            {
                if(clicked.getType() == Material.NETHER_STAR)
                {
                    event.setCancelled(true);
                    player.closeInventory();
                    player.sendMessage("Вы выбрали класс" + ChatColor.DARK_PURPLE +" Воин" + ChatColor.RESET + "!");
                    log.info("Player " + player.getName() + " choosed classs Warrior");
                    player.setMetadata("playerClass", new FixedMetadataValue(this, "warrior"));
                    player.getInventory().clear();
                    player.setMaxHealth(30);
                    player.setHealth(35);
                    this.addCustomItem(Material.DIAMOND_SWORD, player, Enchantment.DAMAGE_ALL, 1 , ChatColor.GOLD + "Меч Война", null);
                    player.getInventory().addItem( new ItemStack(Material.ICE, 1));
                }
                if(clicked.getType() == Material.EMERALD)
                {
                    event.setCancelled(true);
                    player.closeInventory();
                    player.sendMessage("Вы выбрали класс" + ChatColor.DARK_PURPLE +" Лучник" + ChatColor.RESET + "!");
                    log.info("Player " + player.getName() + " choosed classs Archer");
                    player.setMetadata("playerClass", new FixedMetadataValue(this, "archer"));
                    player.getInventory().clear();
                    player.setMaxHealth(20);
                    player.getInventory().addItem(new ItemStack(Material.ARROW, 1));
                    this.addCustomItem(Material.BOW, player, Enchantment.ARROW_INFINITE, 1, ChatColor.GOLD + "Прямой луук", null);
                }
                if(clicked.getType() == Material.DIAMOND)
                {
                    event.setCancelled(true);
                    player.closeInventory();
                    player.sendMessage("Вы выбрали класс" + ChatColor.DARK_PURPLE +" Волшебник" + ChatColor.RESET + "!");
                    log.info("Player " + player.getName() + " choosed classs Mage");
                    player.getInventory().clear();
                    player.setMetadata("playerClass", new FixedMetadataValue(this, "mage"));
                    player.setMaxHealth(20);
                    this.addCustomItem(Material.TNT, player, Enchantment.KNOCKBACK, 1, ChatColor.RED + "Суицид", "Создает взрыв на вашем месте");
                    this.addCustomItem(Material.BLAZE_ROD, player, Enchantment.FIRE_ASPECT, 1, ChatColor.GOLD + "Посох Волшебника", "Посылает огенный шар");
                    }
            }
        }
    
    }
    
    Код:
    package server.hopeworld.classes;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.entity.Fireball;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.scheduler.BukkitScheduler;
    import org.bukkit.util.Vector;
    
    public class SpellFireball implements Listener{
    
        @EventHandler
        public void fireball(PlayerInteractEvent e)
        {
            final Player p = e.getPlayer();
            if(p.getMetadata("playerClass").get(0).asString().equals("mage"))
            {
                if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
                if(!(p.getItemInHand().getType() == Material.BLAZE_ROD))
                {
                    return;
                }
                if(p.getItemInHand().getType() == Material.BLAZE_ROD)
                {
                    BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
                    scheduler.scheduleSyncRepeatingTask(Main.getPlugin(Main.class), new Runnable() {
                        @Override
                        public void run() {
                            if (p.getItemInHand().getAmount() > 1){
                                p.getItemInHand().setAmount(p.getItemInHand().getAmount() - 1);
                        }
                       }
                    }, 0L, 20L);
                }
                    if(p.getItemInHand().getAmount() > 1){
                          p.sendMessage("Восстановление умение еще " + p.getItemInHand().getAmount());
                    } else {
                    Fireball fire = p.getWorld().spawn(e.getPlayer().getLocation().add(new Vector(0.0D, 1.0D, 0.0D)), Fireball.class);
                    fire.setFireTicks(0);
                    fire.setShooter(p);
                    p.getItemInHand().setAmount(p.getItemInHand().getAmount() + 20);
                    Logger.getLogger("HopeWorld").info("Mage " + p.getName() + " used Fireball spell at: "+ p.getLocation().getX() + "," + p.getLocation().getY() + "," + p.getLocation().getZ());
                    }
                }
            }
        }
    }
    
    Код:
    package server.hopeworld.classes;
    
    import java.util.logging.Logger;
    
    import org.bukkit.Bukkit;
    import org.bukkit.Material;
    import org.bukkit.entity.Fireball;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    import org.bukkit.scheduler.BukkitScheduler;
    
    public class SpellExplosion implements Listener {
       
        @EventHandler
        public void skills(PlayerInteractEvent e)
        {
            final Player p = e.getPlayer();
            if(p.getMetadata("playerClass").get(0).asString().equals("mage"))
            {
                if(e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK){
                if(!(p.getItemInHand().getType() == Material.TNT))
                {
                    return;
                }
                if(p.getItemInHand().getType() == Material.TNT)
                {
                    BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
                    scheduler.scheduleSyncRepeatingTask(Main.getPlugin(Main.class), new Runnable() {
                        @Override
                        public void run() {
                            if (p.getItemInHand().getAmount() > 1){
                                p.getItemInHand().setAmount(p.getItemInHand().getAmount() - 1);
                        }
                       }
                    }, 0L, 20L);
                }
                    if(p.getItemInHand().getAmount() > 1){
                          p.sendMessage("Восстановление умение еще " + p.getItemInHand().getAmount());
                    } else {
                        p.getWorld().createExplosion(p.getLocation().getX(), p.getLocation().getY(), p.getLocation().getZ(), 5, false, false);
                        p.getItemInHand().setAmount(p.getItemInHand().getAmount() + 60);
                        Logger.getLogger("HopeWorld").info("Mage " + p.getName() + " used Explosion spell at: "+ p.getLocation().getX() + "," + p.getLocation().getY() + "," + p.getLocation().getZ());
                    }
                }
            }
        }
    
    }
    
     
  15. Code

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

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    repeating task-и накапливаются, вот и уменьшается все быстрее и быстрее)
     
  16. Автор темы
    RedEnergy

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

    Баллы:
    103
    Куда мне засунуть repeating task чтобы оно выполнялось, но не накапливалось?
     
  17. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Туда, что выполняется один раз.
     
  18. Автор темы
    RedEnergy

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

    Баллы:
    103
    Как насчет onEnable?
     
  19. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Можно туда.
     
  20. Автор темы
    RedEnergy

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

    Баллы:
    103
    Вот только в onEnable никак не получить игрока
     

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