Войти или зарегистрироваться

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

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
Данная проблема решена
Второй вопрос тут
 
Последнее редактирование:
p.getMetadata("playerClass").get(0).asString() == "mage"
Вот за это тебя убить мало.
 
== сравнивает указатели, а equals - строки.
Хорошо, спасибо за инфу
Дабы не создавать новую тему напишу тут. Суть: Если в стаке больше одной вещи, нужно каждую секунду отнимать по одному предмету от стака. Никаких ивентов отвечающих за временной промежуток не нашел.
 
Хорошо, спасибо за инфу
Дабы не создавать новую тему напишу тут. Суть: Если в стаке больше одной вещи, нужно каждую секунду отнимать по одному предмету от стака. Никаких ивентов отвечающих за временной промежуток не нашел.
Шелудер.
 
Нагуглил только вот это 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
 
new Main() зря сделал. если надо объект класса Main, но бери тот, что уже создан.
 
Какой-то бред, решил разбить скилы по классам. Теперь все работает, но очень и очень криво. Во-первых, кол-во не уменьшается если курсор не на предмете, во-вторых, с каждым разом уменьшается все быстрее и быстрее. Я абсолютно не понимаю как это работает :(
Прилагаю все исходнки.
Код:
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());
                }
            }
        }
    }

}
 
Назад
Верх