Issue with a toggle

Discussion in 'Plugin Development' started by __Sour, Feb 23, 2015.

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

    __Sour

    I have a issue with my custom guard plugin I am making and, it seems a toggle for checking if I am off and on duty isn't working right.
    http://puu.sh/g9QiB/b29d579906.png
    As you can see in the picture above it puts me on duty twice. Rather is is supposed to put on duty then off.
    The toggling happens in this part
    Code:
    public void startPending(Player player) {
            this.player = player;
            if (pending) {
                plugin.getMessages().send(player, Message.GUARD_CANNOT);
                return;
            }
            if (getGuardManager().onDuty(player)) {
                plugin.getMessages().broadcast(Message.GUARD_PENDING_OFF, player.getName());
                this.pending = true;
                plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new DelayedDuty(player), 200);
            } else {
                plugin.getMessages().broadcast(Message.GUARD_PENDING_ON, player.getName());
                this.pending = true;
                plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new DelayedDuty(player), 200);
            }
        }
    
        public void change(Player player) {
            this.player = player;
            GuardGear gg = new GuardGear(player);
            if (getGuardManager().onDuty(player)) {
                gg.clean();
                gg.debuff();
                load(player);
                reset();
                this.swap = false;
                plugin.getMessages().broadcast(Message.GUARD_OFF, player.getName());
            } else {
                save(player);
                gg.clean();
                gg.give();
                gg.buff();
                this.swap = true;
                plugin.getMessages().broadcast(Message.GUARD_ON, player.getName());
            }
        }
    Here is the full class if needed to see other meathods.
    Code:
    package bukkit.prison.guard;
    
    import java.util.ArrayList;
    
    import org.bukkit.GameMode;
    import org.bukkit.entity.Player;
    import org.bukkit.inventory.ItemStack;
    
    import bukkit.prison.Message;
    import bukkit.prison.Prison;
    
    public class GuardPlayer {
       
        Prison plugin;
        Player player;
       
        public GuardPlayer(Prison plugin) {
            this.plugin = plugin;
        }
       
        ItemStack[] armor;
        ItemStack[] items;
        int food;
        int level;
        float exp;
        int fire;
        GameMode gamemode;
        boolean swap;
        boolean pending;
       
        public Player getPlayer() {
            return player;
        }
    
        public void save(Player player) {
            this.player = player;
            armor = player.getInventory().getArmorContents();
            items = player.getInventory().getContents();
            food = player.getFoodLevel();
            level = player.getLevel();
            exp = player.getExp();
            fire = player.getFireTicks();
            gamemode = player.getGameMode();
        }
    
        public void reset() {
            armor = null;
            items = null;
            food = 0;
            level = 0;
            exp = 0.0F;
            fire = 0;
        }
    
        public void load(Player player) {
            this.player = player;
            player.getInventory().setArmorContents(armor);
            player.getInventory().setContents(items);
            player.setFoodLevel(food);
            player.setLevel(level);
            player.setExp(exp);
            player.setFireTicks(fire);
            player.setGameMode(gamemode);
            player.updateInventory();
        }
    
        public void startPending(Player player) {
            this.player = player;
            if (pending) {
                plugin.getMessages().send(player, Message.GUARD_CANNOT);
                return;
            }
            if (getGuardManager().onDuty(player)) {
                plugin.getMessages().broadcast(Message.GUARD_PENDING_OFF, player.getName());
                this.pending = true;
                plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new DelayedDuty(player), 200);
            } else {
                plugin.getMessages().broadcast(Message.GUARD_PENDING_ON, player.getName());
                this.pending = true;
                plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new DelayedDuty(player), 200);
            }
        }
    
        public void change(Player player) {
            this.player = player;
            GuardGear gg = new GuardGear(player);
            if (getGuardManager().onDuty(player)) {
                gg.clean();
                gg.debuff();
                load(player);
                reset();
                this.swap = false;
                plugin.getMessages().broadcast(Message.GUARD_OFF, player.getName());
            } else {
                save(player);
                gg.clean();
                gg.give();
                gg.buff();
                this.swap = true;
                plugin.getMessages().broadcast(Message.GUARD_ON, player.getName());
            }
        }
       
        public class GuardManager {
           
            private ArrayList<GuardPlayer> guardss = new ArrayList<GuardPlayer>();
             
            public GuardPlayer getGuard(Player player) {
                for (GuardPlayer guard : guardss) {
                    if (guard.getPlayer().equals(player)) {
                        return guard;
                    }
                }
                return null;
            }
    
            public int getGuardsOnDuty() {
                if (!guardss.isEmpty()) {
                    return guardss.size();
                } else {
                    return 0;
                }
            }
    
            public boolean onDuty(Player player) {
                return getGuard(player) != null;
            }
           
            public void runSwap(Player player) {
                if (onDuty(player)) {
                    getGuard(player).change(player);
                    guardss.remove(getGuard(player));
                } else {
                    GuardPlayer guard = new GuardPlayer(plugin);
                    guard.change(player);
                    guardss.add(guard);
                }
            }
           
        }
       
        private class DelayedDuty implements Runnable {
           
            private Player player;
           
            public DelayedDuty(Player player) {
                this.player = player;
            }
           
            public void run() {
                GuardManager gm = new GuardManager();
                gm.runSwap(player);
               
                pending = false;
            }
           
        }
       
        public GuardManager getGuardManager() {
            GuardManager gm = new GuardManager();
            return gm;
        }
    
    }
     
Thread Status:
Not open for further replies.

Share This Page