public void doCrate(boolean force, Player p, Block b) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException{
            if (!force){
            pl.found = true;
            }
            b.setType(Material.AIR);
            Random rand = new Random();
            boolean good = true;
            int random = rand.nextInt(4);
            if (random == 1){
                good = false;
            }
            Crate foundAppropriate = null;
            while (foundAppropriate == null) {
                int crateSeed = rand.nextInt(pl.getDataInst().getCrates().size());
                Crate result = pl.getDataInst().getCrates().get(crateSeed);
                if (result.isGood() == good) {
                    foundAppropriate = result;
                }
            }
            if (foundAppropriate != null) {
                foundAppropriate.onActivate(b.getLocation(), p);
                Bukkit.broadcastMessage(ChatColor.GRAY + "[" + ChatColor.GOLD + "EntityCrates" + ChatColor.GRAY + "]" + ChatColor.RED + " " + p.getName() + ChatColor.GREEN + " has found a crate.");
                for (Player pl : Bukkit.getOnlinePlayers()) {
                    if (pl != p) {
                        pl.sendMessage(ChatColor.GRAY + "[" + ChatColor.GOLD + "EntityCrates" + ChatColor.GRAY + "]" + ChatColor.RED + " Better luck next time!");
                    }
                }
                if (good){
                    p.sendMessage(ChatColor.GRAY + "[" + ChatColor.GOLD + "EntityCrates" + ChatColor.GRAY + "]" + ChatColor.GREEN + " You found a good crate!");
                    NMS.doFirework(b.getLocation(), getFW(true));
                } else {
                    p.sendMessage(ChatColor.GRAY + "[" + ChatColor.GOLD + "EntityCrates" + ChatColor.GRAY + "]" + ChatColor.RED + " You found a bad crate!");
                    NMS.doFirework(b.getLocation(), getFW(false));
                }
            }
    }