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

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

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

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

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

    Trophy Points:
    103
    Добрый день, проверяю на наличие предмета в руке игрока и в зависимости от предмета произвожу действия. Ошибка вылезает если жму на какой-либо блок без предмета, либо с предметов отличным от тех на которые я проверяю.
    Код:
    Code:
    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
    Данная проблема решена
    Второй вопрос тут
     
    Last edited: Aug 17, 2014
  2. Хостинг MineCraft
    <
  3. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Ну так e.getItem() == null.
     
  4. Reality_SC

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
     
  5. Автор темы
    RedEnergy

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

    Trophy Points:
    103
    Жутко затупил, спасибо
     
  6. Shevchik

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

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

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

    Trophy Points:
    103
    А что тут не так?
     
  8. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Сравнение строк через ==
     
  9. Автор темы
    RedEnergy

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

    Trophy Points:
    103
    "=" - присваивание, "==" - сравнение. Разве не так?[DOUBLEPOST=1408302489,1408302438][/DOUBLEPOST]Можно конечно через .equils(). Но разве это что-то меняет?
     
  10. serega6531

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

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

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

    Trophy Points:
    103
    Хорошо, спасибо за инфу[DOUBLEPOST=1408302732,1408302638][/DOUBLEPOST]Дабы не создавать новую тему напишу тут. Суть: Если в стаке больше одной вещи, нужно каждую секунду отнимать по одному предмету от стака. Никаких ивентов отвечающих за временной промежуток не нашел.
     
  12. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Шелудер.
     
  13. Автор темы
    RedEnergy

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

    Trophy Points:
    103
    Нагуглил только вот это http://wiki.bukkit.org/Scheduler_Programming#Repeating_Example
    Сделал так:
    Code:
    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());
                    }*/
                }
            }
        }
    
    Но что-то идет не так и
    Code:
    [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
     
  14. Code

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

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

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

    Trophy Points:
    103
    Какой-то бред, решил разбить скилы по классам. Теперь все работает, но очень и очень криво. Во-первых, кол-во не уменьшается если курсор не на предмете, во-вторых, с каждым разом уменьшается все быстрее и быстрее. Я абсолютно не понимаю как это работает :([DOUBLEPOST=1408308276,1408308136][/DOUBLEPOST]Прилагаю все исходнки.
    Code:
    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.bukkit.inventory.Inventory;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.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 + "Посох Волшебника", "Посылает огенный шар");
                    }
            }
        }
    
    }
    
    Code:
    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());
                    }
                }
            }
        }
    }
    
    Code:
    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());
                    }
                }
            }
        }
    
    }
    
     
  16. Code

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

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

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

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

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

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

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

    Trophy Points:
    103
    Как насчет onEnable?
     
  20. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Можно туда.
     
  21. Автор темы
    RedEnergy

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

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

Share This Page