Solved Help With Plugin Coding onDeath Event

Discussion in 'Plugin Development' started by YoYoNoYo555, Jan 20, 2017.

Thread Status:
Not open for further replies.
  1. Offline

    YoYoNoYo555

    So anyways, I am trying to make a custom plugin for my server that does everything however I am getting issues with the onDeath event. Everything is working perfectly fine in game, but on the console, I get an error whenever a player dies in anyway except for 1 player killing another player. This is more a behind the scenes thing since everything is working fine in game how I would like it to, however the errors are not good. I been searching online for a solution for like 6 hours. I have 2 classes, a main and a listener so I will give you the code.
    Main Class:
    Code:
    package me.YoYoNoYo555;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.Material;
    import org.bukkit.World;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemStack;
    import org.bukkit.inventory.PlayerInventory;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Main extends JavaPlugin{
    
        double x;
        double y;
        double z;
        float yaw;
        float pitch;
        String world;
    
        @Override
        public void onEnable(){
        
            new PListener(this);
        
        
            this.getConfig().addDefault("x", x);
            this.getConfig().options().copyDefaults(true);
            this.getConfig().addDefault("y", y);
            this.getConfig().options().copyDefaults(true);
            this.getConfig().addDefault("z", z);
            this.getConfig().options().copyDefaults(true);
            this.getConfig().addDefault("yaw", yaw);
            this.getConfig().options().copyDefaults(true);
            this.getConfig().addDefault("pitch", pitch);
            this.getConfig().options().copyDefaults(true);
            this.getConfig().addDefault("world", world);
            this.getConfig().options().copyDefaults(true);
        
            saveConfig();
            getLogger().info(ChatColor.GREEN+"KitPvP Started");
        }
        @Override
        public void onDisable(){
            getLogger().info(ChatColor.RED+"KitPvP Stopped");
            saveConfig();
        
        }
    
    
    
        public void clearInventory(PlayerInventory inv){
            inv.clear();
            inv.setHelmet(null);
            inv.setChestplate(null);
            inv.setLeggings(null);
            inv.setBoots(null);
        }
    
    
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
            Player player = (Player) sender;
        
        
        
            if(cmd.getName().equalsIgnoreCase("stats")){
                if(args.length==0){
                    double kills = getConfig().getInt("Players."+player.getUniqueId().toString()+".Kills");
                    double deaths = getConfig().getInt("Players."+player.getUniqueId().toString()+".Deaths");
                    if(deaths>0){
                        double kdr = kills/deaths;
            
                    player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                    player.sendMessage(ChatColor.GREEN+"Kills: "+ kills);
                    player.sendMessage(ChatColor.RED+"Deaths: "+ deaths);
                    player.sendMessage(ChatColor.YELLOW+"Kill To Death Ratio: "+ kdr);
                    player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                    }else{
                        player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                        player.sendMessage(ChatColor.GREEN+"Kills: "+ kills);
                        player.sendMessage(ChatColor.RED+"Deaths: "+ deaths);
                        player.sendMessage(ChatColor.YELLOW+"Kill To Death Ratio: 0");
                        player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                    }
            
            }else if(args.length==1){
    
    
                    @SuppressWarnings("deprecation")
                    Player t = player.getServer().getPlayer(args[0]);
                    if (t.isOnline()==false){
                        player.sendMessage(ChatColor.RED+"This Player Is Not Online!");
                    }else{
                    String uuid = t.getUniqueId().toString();
            
                    if(getConfig().contains("Players."+uuid)){
                
                
                
                
                    double kills = getConfig().getInt("Players."+uuid+".Kills");
                    double deaths = getConfig().getInt("Players."+uuid+".Deaths");
                    if(deaths>0){
                        double kdr = kills/deaths;
                
                    player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                    player.sendMessage(ChatColor.GREEN+"Kills: "+ kills);
                    player.sendMessage(ChatColor.RED+"Deaths: "+ deaths);
                    player.sendMessage(ChatColor.YELLOW+"Kill To Death Ratio: "+ kdr);
                    player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                    }else if(deaths==0){
                        player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                        player.sendMessage(ChatColor.GREEN+"Kills: "+ kills);
                        player.sendMessage(ChatColor.RED+"Deaths: "+ deaths);
                        player.sendMessage(ChatColor.YELLOW+"Kill To Death Ratio: 0");
                        player.sendMessage(ChatColor.GOLD+"~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                
                        }
                
                    
                
                        }
                    }
                
                
                }
            }
        
        
        
        
            if(cmd.getName().equalsIgnoreCase("kit")||cmd.getName().equalsIgnoreCase("kits")&& sender instanceof Player){
                if(args.length==0){
            
                            player.sendMessage(ChatColor.GREEN+"Kits Available");
                            player.sendMessage(ChatColor.WHITE+"Knight");
                            return true;
                }else if(args.length==1){
                    if(args[0].equalsIgnoreCase("knight")){
                        clearInventory(player.getInventory());
                        player.getInventory().setHelmet(new ItemStack(Material.GOLD_HELMET, 1));
                        player.getInventory().setChestplate(new ItemStack(Material.LEATHER_CHESTPLATE, 1));
                        player.getInventory().setLeggings(new ItemStack(Material.GOLD_LEGGINGS, 1));
                        player.getInventory().setBoots(new ItemStack(Material.GOLD_BOOTS, 1));
                        player.getInventory().addItem(new ItemStack(Material.GOLD_SWORD));
                        player.sendMessage(ChatColor.GOLD+"You have Chosen Kit Knight");
                    }else if(args[0].equalsIgnoreCase("Archer")){
                
                    }else{
                        player.sendMessage(ChatColor.RED+"Invalid Kit");
                    }
                                            
                }
            }
        
        
        
        
            if(cmd.getName().equalsIgnoreCase("set")&& sender instanceof Player){
                //if(!sender.hasPermission("kitpvp.setspawn")){
                        if(args[0].equalsIgnoreCase("spawn")){
                            x = player.getLocation().getX();
                            y = player.getLocation().getY();
                            z = player.getLocation().getZ();
                            yaw = player.getLocation().getYaw();
                            pitch = player.getLocation().getPitch();
                            world = player.getLocation().getWorld().getName();
            
                            getConfig().set("x", x);
                            getConfig().set("y", y);
                            getConfig().set("z", z);
                            getConfig().set("yaw", yaw);
                            getConfig().set("pitch", pitch);
                            getConfig().set("world", world);
                            saveConfig();
            
                        player.sendMessage(ChatColor.GREEN+"Spawn Set");
                            }
                    }
                //}else{
                    //player.sendMessage(ChatColor.RED+"YOU DO NOT HAVE PERMISSION");
                    //}
        
        
            if(cmd.getName().equalsIgnoreCase("spawn")&& sender instanceof Player){
                //if(!sender.hasPermission("kitpvp.spawn")){
                    World world = Bukkit.getWorld(getConfig().getString("world"));
                    Location spawn = new Location(world, getConfig().getDouble("x"), getConfig().getDouble("y"), getConfig().getDouble("z"),(float) getConfig().getDouble("yaw"), (float) getConfig().getDouble("pitch"));
                    player.teleport(spawn);
                    player.sendMessage(ChatColor.GREEN+"You Have Been Sent to Spawn");
                //}else{
                    //player.sendMessage(ChatColor.RED+"You DO NOT HAVE PERMISSION");
                //}
            }
        
        
            return false;
        }
    
    
    
    
    
    
    
    
    
    }
    
    
    Listener Class:
    Code:
    package me.YoYoNoYo555;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Location;
    import org.bukkit.World;
    import org.bukkit.entity.Entity;
    import org.bukkit.entity.Player;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.entity.PlayerDeathEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerRespawnEvent;
    
    public class PListener implements Listener{
    
        Main configGetter;
    
        public PListener(Main plugin){
            plugin.getServer().getPluginManager().registerEvents(this, plugin);
            configGetter = plugin;
        }
    
    
    
        @EventHandler
        public void onPlayerJoin(PlayerJoinEvent event){
            Player player= event.getPlayer();
            player.sendMessage(ChatColor.GOLD+"Hello "+player.getName()+", Welcome To Yoshi KitPvP");
            if(!configGetter.getConfig().contains("Players."+player.getUniqueId().toString())){
                configGetter.getConfig().addDefault("Players."+player.getUniqueId().toString()+".Kills", 0);
                configGetter.getConfig().addDefault("Players."+player.getUniqueId().toString()+".Deaths", 0);
                configGetter.saveConfig();
            }
        }
        @EventHandler
        public void onPlayerDeath(PlayerDeathEvent event){
            String killed = event.getEntity().getName();
            String killer = event.getEntity().getKiller().getName();
            Bukkit.broadcastMessage(ChatColor.DARK_PURPLE+killed+" Has Been Killed By "+killer);
            Entity deathEntity = (Player)event.getEntity();
            Entity killerEntity = (Player)event.getEntity().getKiller();
            if(killerEntity instanceof Player && deathEntity instanceof Player){
                Player killer1 = (Player) killerEntity;
                Player death1 = (Player)deathEntity;
                int kills = configGetter.getConfig().getInt("Players."+killer1.getUniqueId().toString()+".Kills");
                int deaths = configGetter.getConfig().getInt("Players."+death1.getUniqueId().toString()+".Deaths");
                configGetter.getConfig().set("Players."+killer1.getUniqueId().toString()+".Kills", kills+1);
                configGetter.getConfig().set("Players."+death1.getUniqueId().toString()+".Deaths", deaths+1);
                event.setDeathMessage(null);
            }
        }
        @EventHandler
        public void onDeath(PlayerDeathEvent event){
            Player p = (Player)event.getEntity();
            if(p.isDead()&& !(event.getEntity().getKiller() instanceof Player)){
                String killed = event.getEntity().getName();
                Entity deathEntity2 = (Player)event.getEntity();
                int deaths2s = configGetter.getConfig().getInt("Players."+deathEntity2.getUniqueId().toString()+".Deaths");
                configGetter.getConfig().set("Players."+deathEntity2.getUniqueId().toString()+".Deaths", deaths2s+1);
                Bukkit.broadcastMessage(ChatColor.DARK_PURPLE+killed+" Has Died");
                event.setDeathMessage(null);
            }
        
        
        }
    
    
    
        @EventHandler
        public void onPlayerRespawn(PlayerRespawnEvent event){
            World world = Bukkit.getWorld(configGetter.getConfig().getString("world"));
            Location spawn = new Location(world, configGetter.getConfig().getDouble("x"), configGetter.getConfig().getDouble("y"), configGetter.getConfig().getDouble("z"),(float) configGetter.getConfig().getDouble("yaw"), (float) configGetter.getConfig().getDouble("pitch"));
            event.setRespawnLocation(spawn);
        }
    
    
    
    
    
    
    
    }
    
    
    Error message on console from when I jumped off a cliff and killed myself:
    Code:
    [00:14:50 ERROR]: Could not pass event PlayerDeathEvent to KitPvP v1.0
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:302) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
    a:62) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
    ava:501) [craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
    ava:486) [craftbukkit.jar:git-Bukkit-18fbb24]
            at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerDeat
    hEvent(CraftEventFactory.java:379) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityPlayer.die(EntityPlayer.java:402)
    [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityLiving.damageEntity(EntityLiving.j
    ava:802) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityHuman.damageEntity(EntityHuman.jav
    a:794) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityPlayer.damageEntity(EntityPlayer.j
    ava:481) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityLiving.e(EntityLiving.java:929) [c
    raftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityHuman.e(EntityHuman.java:1434) [cr
    aftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.Block.fallOn(Block.java:636) [craftbukki
    t.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.Entity.a(Entity.java:794) [craftbukkit.j
    ar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityLiving.a(EntityLiving.java:151) [c
    raftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.EntityPlayer.a(EntityPlayer.java:606) [c
    raftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java
    :441) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInFlying.a(SourceFile:126) [cr
    aftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PacketPlayInFlying$PacketPlayInPosition.
    a(SourceFile:57) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:1
    3) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:51
    1) [?:1.8.0_25]
            at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_25]
    
            at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukki
    t.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:6
    73) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:3
    35) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:6
    29) [craftbukkit.jar:git-Bukkit-18fbb24]
            at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java
    :537) [craftbukkit.jar:git-Bukkit-18fbb24]
            at java.lang.Thread.run(Thread.java:745) [?:1.8.0_25]
    Caused by: java.lang.NullPointerException
            at me.YoYoNoYo555.PListener.onPlayerDeath(PListener.java:39) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0
    _25]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
    java:62) ~[?:1.8.0_25]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
    sorImpl.java:43) ~[?:1.8.0_25]
            at java.lang.reflect.Method.invoke(Method.java:483) ~[?:1.8.0_25]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
    va:300) ~[craftbukkit.jar:git-Bukkit-18fbb24]
            ... 26 more
    [00:14:50 INFO]: YoYoNoYo555 Has Died
    
    Thanks For Your Help If You Can Help Me
    I also forgot to say, When i do /stats and another player not online, I get an error also, I know whats wrong that though I just cannot figure a way around it, if you have ideas for that too also, that would be nice!
     
  2. Online

    timtower Administrator Administrator Moderator

    @YoYoNoYo555 There might not always be a killer.
    Don't make multiple events listeners for the same event either.
     
  3. Offline

    YoYoNoYo555

    WOW... Thank you I am really stupid now, I did not even realize I had the same event...
     
  4. Offline

    Zombie_Striker

    @YoYoNoYo555
    If your problem has been solved ,mark this thread as solved.
     
Thread Status:
Not open for further replies.

Share This Page