Solved boolean problem

Discussion in 'Plugin Development' started by TheFl4me, Jun 26, 2015.

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

    TheFl4me

    Im having a problem with my afk code:

    ePlayer class:
    Code:
    public boolean AFK = false;
    Code:
    public boolean isAFK() {
            return AFK = true;
        }
    AFK class:

    Code:
    @EventHandler
        public void playerMove(PlayerMoveEvent e) {
            ePlayer p = new ePlayer(e.getPlayer());
            if(Chat.getPlugin().getPermissions().CmdAFK(p)) {
                if(p.isAFK()) {
                    removeAFK(p);
                }
                if(Chat.getPlugin().getAfkListener().pending.containsKey(p.getUniqueId())) {
                    Chat.getPlugin().getAfkListener().pending.get(p.getUniqueId()).cancel();
                    Chat.getPlugin().getAfkListener().pending.remove(p.getUniqueId());
                    AfkpendingTimer(p);
                }
            }
        }
    Code:
    private void removeAFK(ePlayer p) {
            String notafk_msg = Chat.getPlugin().getLanguage().AFK_notafk.replaceAll("%p", p.getChatName());
            p.AFK = false;
            Bukkit.broadcastMessage(notafk_msg);
            AfkpendingTimer(p);       
        }
    The porblem is everytime i move i am getting spammed with the "notafk_msg" because somehow AFK is not being set to false.

    any ideas?
     
  2. Code:
    public boolean isAFK() {
            return AFK = true;
        }
    
    I'm not sure if you know the basics of Java? It's "== true" not "= true". Also, you might as well just type "return AFK;".

    By the way, please sort your method and variable names out. "ePlayer" should be "EPlayer". "AfkpendingTimer" should be "afkPendingTimer".
     
  3. Offline

    TheFl4me

    Thx, fixed that but now i can no longer get out of AFK (set it back to false)

    Code:
    public void toggleAFK(ePlayer p) {
            if (!p.isAFK()) {
                setAFK(p);
            } else {
                removeAFK(p);
            }
        }
     
  4. Print out the result of p.isAFK(), maybe for some reason it's always false. Or, if it's always true, Afkpendingtimer() method may set it to true instantly again (after setting it to false), so your timer method may be broken?
     
  5. Offline

    TheFl4me

    here's the entire class to make things simpler:
    Code:
    package elite.minecraft.plugin.chat.listeners;
    
    import java.util.HashMap;
    import java.util.UUID;
    
    import org.bukkit.Bukkit;
    import org.bukkit.event.EventHandler;
    import org.bukkit.event.Listener;
    import org.bukkit.event.player.AsyncPlayerChatEvent;
    import org.bukkit.event.player.PlayerJoinEvent;
    import org.bukkit.event.player.PlayerMoveEvent;
    import org.bukkit.event.player.PlayerQuitEvent;
    import org.bukkit.scheduler.BukkitRunnable;
    
    import elite.minecraft.plugin.admin.ePlayer;
    import elite.minecraft.plugin.chat.Chat;
    
    public class AFKEventsListener implements Listener {
       
        HashMap<UUID, BukkitRunnable> pending = new HashMap<UUID, BukkitRunnable>();
       
        @EventHandler
        public void playerMove(PlayerMoveEvent e) {
            ePlayer p = new ePlayer(e.getPlayer());
            if(Chat.getPlugin().getPermissions().CmdAFK(p)) {
                if(p.isAFK()) {
                    removeAFK(p);
                }
                if(Chat.getPlugin().getAfkListener().pending.containsKey(p.getUniqueId())) {
                    Chat.getPlugin().getAfkListener().pending.get(p.getUniqueId()).cancel();
                    Chat.getPlugin().getAfkListener().pending.remove(p.getUniqueId());
                    AfkpendingTimer(p);
                }
            }
        }
       
        @EventHandler
        public void onChatRemoveAFK(AsyncPlayerChatEvent e) {
            ePlayer p = new ePlayer(e.getPlayer());
            if(p.isAFK()) {
                removeAFK(p);
            }
        }
       
        @EventHandler
        public void AFKLeave(PlayerQuitEvent e) {
            ePlayer p = new ePlayer(e.getPlayer());
            if (pending.containsKey(p.getUniqueId())) {
                Chat.getPlugin().getAfkListener().pending.get(p.getUniqueId()).cancel();
                Chat.getPlugin().getAfkListener().pending.remove(p.getUniqueId());
            }
        }
       
        @EventHandler
        public void AFKJoin(PlayerJoinEvent e) {
            ePlayer p = new ePlayer(e.getPlayer());
            if(Chat.getPlugin().getPermissions().CmdAFK(p)) {
                Chat.getPlugin().getAfkListener().AfkpendingTimer(p);
            }
        }
       
        public void AfkpendingTimer(final ePlayer p) {
            Chat.getPlugin().getAfkListener().pending.put(p.getUniqueId(), new BukkitRunnable() {
                public void run() {
                    if(!p.isAFK()) {
                        setAFK(p);
                    }
                }
            });
            Chat.getPlugin().getAfkListener().pending.get(p.getUniqueId()).runTaskLater(Chat.getPlugin(), 1200);
        }
       
        public void toggleAFK(ePlayer p) {
            if (!p.isAFK()) {
                setAFK(p);
            } else {
                removeAFK(p);
            }
        }
       
        private void removeAFK(ePlayer p) {
            String notafk_msg = Chat.getPlugin().getLanguage().AFK_notafk.replaceAll("%p", p.getChatName());
            p.AFK = false;
            Bukkit.broadcastMessage(notafk_msg);
            AfkpendingTimer(p);       
        }
       
        private void setAFK(ePlayer p) {
            String afk_msg = Chat.getPlugin().getLanguage().AFK_afk.replaceAll("%p", p.getChatName());
            p.AFK = true;
            Bukkit.broadcastMessage(afk_msg);
            if(Chat.getPlugin().getAfkListener().pending.containsKey(p.getUniqueId())) {
                Chat.getPlugin().getAfkListener().pending.get(p.getUniqueId()).cancel();
                Chat.getPlugin().getAfkListener().pending.remove(p.getUniqueId());
            }   
        }
    }
    the timer looks fine to me? It used to be that instead of having a boolean i had a arraylist and p.isAFK used to return afk.contains(p);

    this only stopped working once i replaced it with the boolean
     
  6. Show your ePlayer class. And also, don't make classes that start with a lower case, that is one of the main java naming convention rules :/
     
  7. Offline

    TheFl4me

    all related code with the ePlayer class is in my first post. I know about the conventions but made an exception with the ePlayer class.
     
  8. I'm not sure, but maybe it's the fact you're creating a new ePlayer instance every time a player moves therefore the 'afk' variable always resets? Why aren't you putting the ePlayer in a Map or something and then getting it from there (if it exists, if not, create a new instance and add it)?
     
  9. Offline

    TheFl4me

    Ok tired that but now nothing is working anymore here an example when i try to do a command:

    Code:
    [16:52:44 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'admin' in plugin eAdmin v2.1.9
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:140) ~[craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:621) ~[craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1079) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:939) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:37) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(SourceFile:9) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0_71]
        at java.util.concurrent.FutureTask.run(FutureTask.java:262) [?:1.7.0_71]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SystemUtils.java:19) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:676) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:632) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:540) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at java.lang.Thread.run(Thread.java:745) [?:1.7.0_71]
    Caused by: java.lang.NullPointerException
        at elite.minecraft.plugin.admin.Permissions.CmdAdmin(Permissions.java:16) ~[?:?]
        at elite.minecraft.plugin.admin.commands.AdminCommand.onCommand(AdminCommand.java:20) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        ... 15 more
    
    Permissions class (line 16 in stacktrace is line 2 here):

    Code:
    public boolean CmdAdmin(ePlayer p) {
            return p.getPlayer().hasPermission(prefix + ".admin");
        }
    And here the complete (new) ePlayer class:

    Code:
    package elite.minecraft.plugin.admin;
    
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;
    
    import org.bukkit.entity.Player;
    
    import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
    import com.sk89q.worldguard.protection.ApplicableRegionSet;
    import com.sk89q.worldguard.protection.regions.ProtectedRegion;
    
    public class ePlayer {
     
        public static Map<String, ePlayer> Players = Collections.synchronizedMap(new HashMap<String, ePlayer>());
     
        private String rank = "Rank";
        private Player player;
     
        public boolean AdminMode = false;
        public boolean Watching = false;
        public boolean Building = false;
        public boolean Flying = false;
        public boolean AFK = false;
        public boolean showAlerts = true;
     
        public static ePlayer Get(Player player) {
            return Get(player.getName());
        }
        public static ePlayer Get(String name) {
            ePlayer result = Players.get(name);
            if(result == null) {
                return new ePlayer();
            }
            return result;
        }
        public static ePlayer Join(Player player) {
            ePlayer p = new ePlayer();
            Players.put(player.getName(), p);
            return p;
        }
     
        public Player getPlayer() {
            return player;
        } 
        public String getName() {
            return getPlayer().getName();
        } 
        public String getChatName() {
            return getPlayer().getDisplayName();
        }
        public UUID getUniqueId() {
            return getPlayer().getUniqueId();
        }
        public String getIP() {
            return getPlayer().getAddress().getAddress().getHostAddress();
        }
     
        public void setChatName(String name) {
            getPlayer().setDisplayName(name);
        }
        public void setTabName(String name) {
            getPlayer().setPlayerListName(name);
        }
     
        public boolean isOnline() {
            return getPlayer() != null;
        }
        public boolean isAdminMode() {
            return AdminMode == true;
        }
        public boolean isWatching() {
            return Watching == true;
        }
        public boolean isInvis() {
            return Admin.getPlugin().getInvisListener().Invis.containsKey(getPlayer().getUniqueId());
        }
        public boolean isBuilding() {
            return Building == true;
        }
        public boolean isFlying() {
            return Flying == true;
        }
        public boolean isAFK() {
            return AFK == true;
        }
        public boolean CanViewAlerts() {
            return showAlerts == true;
        }
     
        public boolean isAdmin() {
            return getPlayer().hasPermission(rank + ".admin");
        }
        public boolean isModPlus() {
            return getPlayer().hasPermission(rank + ".modplus") || isAdmin();
        }
        public boolean isMod() {
            return getPlayer().hasPermission(rank + ".mod") || isAdmin() || isModPlus();
        }
        public boolean isTrialMod() {
            return getPlayer().hasPermission(rank + ".trialmod") || isAdmin() || isModPlus() || isMod();
        }
        public boolean isBuilder() {
            return getPlayer().hasPermission(rank + ".builder") || isAdmin() || isModPlus() || isMod() || isTrialMod();
        }
        public boolean isYouTuber() {
            return getPlayer().hasPermission(rank + ".youtuber") || isAdmin() || isModPlus() || isMod() || isTrialMod() || isBuilder();
        }
        public boolean isPro() {
            return getPlayer().hasPermission(rank + ".pro") || isAdmin() || isModPlus() || isMod() || isTrialMod() || isBuilder() || isYouTuber();
        }
        public boolean isMVP() {
            return getPlayer().hasPermission(rank + ".mvp") || isAdmin() || isModPlus() || isMod() || isTrialMod() || isBuilder() || isYouTuber() || isPro();
        }
        public boolean isVIP() {
            return getPlayer().hasPermission(rank + ".vip") || isAdmin() || isModPlus() || isMod() || isTrialMod() || isBuilder() || isYouTuber() || isPro() || isMVP();
        }
     
        public boolean isInRegion(String region) {
            WorldGuardPlugin wgp = WorldGuardPlugin.inst();
            ApplicableRegionSet ars = wgp.getRegionManager(this.player.getWorld()).getApplicableRegions(this.player.getLocation());
            for (ProtectedRegion prg : ars) {
                if (prg.getId().equals(region)) {
                    return true;
                }
            }
            return false;
        }
    }
    my guess is the the getPlayer() is not working anymore
     
  10. Same, I think getPlayer() isn't working too. Print out a message in hasPermission, with the following:
    Code:
    System.out.println(e != null);
    System.out.println(e.getPlayer() != null);
    
    Tell me the results.

    Edit: OBVIOUSLY it won't work. "player" is always null, you never set it. Make a constructor:
    Code:
    public ePlayer(Player player) {
        this.player = player;
    }
    
    Then start using: new ePlayer(p);

    By the way, since you're storing the Player object, make sure to remove the player from the Map when they quit, otherwise there can be serious issues.
     
  11. Offline

    TheFl4me

    My bad i already had that before i must have deleted it by accident when updating the class. I added it again and now everything works only problem i seem to be having now, is that im having trouble when a players joins right after i reload the server, i get this error (if i logout without reloading and join again i don't get the error):

    Code:
    [20:21:41 ERROR]: Could not pass event PlayerJoinEvent to eBan v1.5.0
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:501) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:486) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.PlayerList.onPlayerJoin(PlayerList.java:282) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.PlayerList.a(PlayerList.java:142) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.LoginListener.b(LoginListener.java:115) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.LoginListener.c(LoginListener.java:53) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.NetworkManager.a(NetworkManager.java:222) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.ServerConnection.c(SourceFile:168) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:748) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:632) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:540) [craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        at java.lang.Thread.run(Thread.java:745) [?:1.7.0_71]
    Caused by: java.lang.NullPointerException
        at elite.minecraft.plugin.ban.listeners.JoinQuitEventsListener.onJoin(JoinQuitEventsListener.java:21) ~[?:?]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_71]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0_71]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0_71]
        at java.lang.reflect.Method.invoke(Method.java:606) ~[?:1.7.0_71]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[craftbukkit-1.8.6.jar:git-Bukkit-e8c6403]
        ... 14 more
    
    class (line 21 is line 4 here):

    Code:
    @EventHandler
        public void onJoin(PlayerJoinEvent e) {      
            ePlayer p = ePlayer.Get(e.getPlayer());
            File userdata = new File(Ban.directory_userdata + File.separator + p.getUniqueId() + ".yml");
     
  12. Because the player's not even in the ePlayer Map when they join? You're meant to add them to the Map when they join by creating a new instance.
     
  13. Offline

    TheFl4me

    Thank you very much for helping me, everything works now :)
     
  14. You're welcome!
     
Thread Status:
Not open for further replies.

Share This Page