Solved Arraylisted players can't bypass cancelled events

Discussion in 'Plugin Development' started by Kingbluesapphire, Aug 17, 2015.

Thread Status:
Not open for further replies.
  1. I've been working on this game plugin which players cannot break blocks, however admin can /bypass to bypass it, but for some reason it won't let them break blocks. It says they were added to the Arraylist but doesn't let them.

    Code:

    Code:
    public class Terrain implements Listener, CommandExecutor{
       
        private ArrayList<Player> admin = new ArrayList<Player>();
       
        @EventHandler
        public void blockBreak(BlockBreakEvent event){
            Player player = event.getPlayer();
            if(admin.contains(player)){
                return;
            }
            if(!admin.contains(player)){
                event.setCancelled(true);
                return;
            }
        }
       
        @EventHandler
        public void onPlace(BlockPlaceEvent event){
            Player player = event.getPlayer();
            if(admin.contains(player)){
                return;
            }
            if(!admin.contains(player)){
                event.setCancelled(true);
                return;
            }
        }
       
        @EventHandler
        public void onPickup(PlayerPickupItemEvent event){
            Player player = event.getPlayer();
            if(admin.contains(player)){
                return;
            }
            if(!admin.contains(player)){
                event.setCancelled(true);
                return;
            }
        }
       
        @EventHandler
        public void onOpen(PlayerInteractEvent event){
            if(event.getClickedBlock().getType() == Material.CHEST || event.getClickedBlock().getType() == Material.FURNACE || event.getClickedBlock().getType() == Material.WORKBENCH){
                Player player = event.getPlayer();
                if(admin.contains(player)){
                    return;
                }
                if(!admin.contains(player)){
                    event.setCancelled(true);
                    return;
                }
            }
        }
       
        @EventHandler
        public void damage(EntityDamageEvent event){
            Player player = (Player) event.getEntity();
            if(admin.contains(player)){
                event.setCancelled(true);
                return;
            }
            if(!admin.contains(player)){
                return;
            }
        }
    
        @Override
        public boolean onCommand(CommandSender sender, Command arg1, String label, String[] arg3) {
            Player player = (Player) sender;
            if(label.equalsIgnoreCase("bypass")){
                if(player.hasPermission("game.command.admin")){
                    if(admin.contains(player)){
                        admin.remove(player);
                        player.sendMessage(ChatColor.RED + ">> " + ChatColor.GREEN + "Admin bypass mode disabled.");
                        return true;
                    }
                    if(!admin.contains(player)){
                        admin.add(player);
                        player.sendMessage(ChatColor.RED + ">> " + ChatColor.GREEN + "Admin bypass mode enabled.");
                        return true;
                    }
                }
            }
            return true;
        }
       
        @EventHandler
        public void leave(PlayerQuitEvent event){
            admin.remove(event.getPlayer());
        }
    
    }
    In the main class i registered it using:
    Code:
    getCommand("bypass").setExecutor(new Terrain());
    Code:
    Bukkit.getPluginManager().registerEvents(new Terrain(), this);
     
  2. Offline

    CraftCreeper6

    @Kingbluesapphire
    e.setCancelled(false);?

    EDIT: I realise this is stupid but it's worth a try...
     
    Kingbluesapphire likes this.
  3. Offline

    Jakeeeee

    What I added is for (Player onlinep : Bukkit.getServer().getOnlinePlayers()) {
    So it gets everyone online and if they are not in the arraylist it cancels the event.
    Untested, if it doesn't work please reply.
     
    Last edited: Aug 18, 2015
    Kingbluesapphire likes this.
  4. Offline

    CraftCreeper6

  5. Offline

    Jakeeeee

    Just tested it and it works...
     
    Kingbluesapphire likes this.
  6. Offline

    CraftCreeper6

    @Jakeeeee
    There's no difference in the code except adding an unnecessary loop.
     
  7. Offline

    SkyleTyler1337

    Code:
    if (!admin.contains(player)){
    event.setCancelled(true);
    }elae {
      return;
    [
    the else statement is optional.

    @Jakeeeee

    Does that work with two people or more online?
    Because your getting all the players on the server. If one or more player/s is not in the list it's cancelled.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 11, 2016
  8. Offline

    xTrollxDudex

    @Kingbluesapphire
    Register the command and listener to the same instance of Terrain
     
  9. Offline

    caderape

    @Kingbluesapphire
    Actually you have two classes Terrain. One for the command, one for the event.
    The arrayslist for the event and the command is not the same. when you had it for your command, it's stil lempty for your event.

    Terrain terrain = new Terrains();
    getCommand("bypass").setExecutor(terrain);
    Bukkit.getPluginManager().registerEvents(terrain, this);

    Try this and it should work.
     
    Kingbluesapphire likes this.
  10. I tried @caderape 's code and it worked also set the thread to Solved
    Code (open)

    Terrain terrain = new Terrains();
    getCommand("bypass").setExecutor(terrain);
    Bukkit.getPluginManager().registerEvents(terrain, this);
     
Thread Status:
Not open for further replies.

Share This Page