Remove method won't remove players from arena, and I can't check for players on a team using !=null

Discussion in 'Plugin Development' started by Creeoer, Aug 21, 2014.

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

    Creeoer

    Hello, for some reason whenever my code is supposed to remove the player from the arena, it throws me an expection,I will give you my remove method and the expection I have, help is appreciated.

    Remove method:

    Code:
        public void removePlayer(Player p) {
            Arena a = null;
     
            // Searches each arena for the player
            for (Arena arena : this.arenas) {
                if (arena.getPlayers().contains(p.getUniqueId()))
                    a = arena;
            }
     
            // Check arena validity
            if (a == null) {
                p.sendMessage("Invalid operation!");
                return;
            }
     
            // Remove from arena player lost
            a.getPlayers().remove(p.getName());
     
            // Remove inventory acquired during the game
            p.getInventory().clear();
            p.getInventory().setArmorContents(null);
     
            // Restore inventory and armor
            p.getInventory().setContents(inv.get(p.getName()));
            p.getInventory().setArmorContents(armor.get(p.getName()));
     
            // Remove player data entries
            inv.remove(p.getUniqueId());
            armor.remove(p.getUniqueId());
     
            // Teleport to original location, remove it too
            p.teleport(locs.get(p.getUniqueId()));
            locs.remove(p.getUniqueId());
         
            //Hunter Remove/Runner Remove
            Runners.getRunners().remove(p.getName());
            Hunters.getHunters().remove(p.getName());
        }
    
    Where the player should be removed, (I've created a scheduler that ininatates if the people on the runner team are still in-tact):

    Code:
     if(Hunters.isPlayerHunting(p)){
                    ArenaManager.getManager().removePlayer(p);
                    Bukkit.getServer().broadcastMessage(ChatColor.BLACK + "[DeathCavallo]" + ChatColor.GOLD + "A hunter has died!");
    The expection I get:

    Code:
    [19:04:02 ERROR]: Could not pass event PlayerRespawnEvent to DeathCavalllo v0.3
    org.bukkit.event.EventException
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:294) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.PlayerList.moveToWorld(PlayerList.java:494) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.PlayerList.moveToWorld(PlayerList.java:433) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.PlayerConnection.a(PlayerConnection.java:1141) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.PacketPlayInClientCommand.a(SourceFile:50) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.PacketPlayInClientCommand.handle(SourceFile:8) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.NetworkManager.a(NetworkManager.java:157) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.ServerConnection.c(SourceFile:134) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.v(MinecraftServer.java:667) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.DedicatedServer.v(DedicatedServer.java:260) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.u(MinecraftServer.java:558) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.MinecraftServer.run(MinecraftServer.java:469) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at net.minecraft.server.v1_7_R3.ThreadServerApplication.run(SourceFile:628) [craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
    Caused by: java.lang.NullPointerException
            at org.bukkit.craftbukkit.v1_7_R3.inventory.CraftInventory.setContents(CraftInventory.java:66) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            at me.creeoer.commands.ArenaManager.removePlayer(ArenaManager.java:217) ~[?:?]
            at me.creeoer.listeners.GameListener.onRespawn(GameListener.java:45) ~[?:?]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_67]
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_67]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_67]
            at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_67]
            at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:292) ~[craftbukkit.jar:git-Bukkit-1.7.9-R0.2-11-g3fd9db2-b3098jnks]
            ... 15 more
    IMPORTANT NOTE:

    Can someone please help me checking whether or not a player is on the hunter or runner team, checking if it's null or not is futile so can get some help?

    Hunter class (same as runner, different names):

    Code:
    package me.creeoer.teams;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import org.bukkit.ChatColor;
    import org.bukkit.entity.Player;
     
    public class Hunters {
     
       
       
       
    private static List<Player> hunters = new ArrayList<Player>();
       
        public void addHunter(Player player){
            if(hunters.contains(player)){
                return;
            }
            hunters.add(player);
            player.setDisplayName(ChatColor.RED + player.getName());
       
           
            }
        public static List<Player> getHunters(){
            return hunters;
        }
        public void removeHunter(Player player){
            if(hunters.contains(player)){
                hunters.remove(player);
            }
        }
           
        public static boolean isPlayerHunting(Player player){
            if (hunters.contains(player)){
                return true;
            } else
                return false;
       
           
        }
       
           
        }
        

    check:
    Code:
    if (Runners.isPlayerRunning(p) && Hunters.getHunters() != null){
     
  2. Offline

    skyrimfan1

    // Restore inventory and armor
    p.getInventory().setContents(inv.get(p.getName()));
    p.getInventory().setArmorContents(armor.get(p.getName()));

    // Remove player data entries
    inv.remove(p.getUniqueId());
    armor.remove(p.getUniqueId());

    That's the only possible error I found. Looks to me like you're doing everything else fine.

    EDIT: You should probably cache player.getUniqueId() as a variable to avoid keep calling it (readability). In addition, it's better to store UUIDs rather than names. If you need a name from a UUID, you can just translate the UUID to a player (Bukkit.getPlayer(UUID uuid)) and then find their name.
     
Thread Status:
Not open for further replies.

Share This Page