public void testQueue() { MatchParams mp = loadParams("Arena"); Player p1 = new TestBukkitPlayer("p1"); Player p2 = new TestBukkitPlayer("p2"); ArenaPlayer ap1 = BattleArena.toArenaPlayer(p1); ArenaPlayer ap2 = BattleArena.toArenaPlayer(p2); String[] args = new String[] {""}; BAExecutor exec = new BAExecutor(); exec.join(ap1, mp, args); exec.join(ap2, mp, args); for (MatchParams params : ParamController.getAllParams()) { System.out.println("param = " + params); } delay(50); assertTrue(bac.isInQue(ap1)); }
public static ArenaTeam getTeam(Player player) { Hero hero = getHero(player); if (hero == null) return null; HeroParty party = hero.getParty(); if (party == null) return null; ArenaTeam t = TeamFactory.createCompositeTeam(); Hero leader = party.getLeader(); if (leader != null) t.addPlayer(BattleArena.toArenaPlayer(leader.getPlayer())); Set<Hero> members = party.getMembers(); if (members != null) { for (Hero h : members) { t.addPlayer(BattleArena.toArenaPlayer(h.getPlayer())); } } return t.size() > 0 ? t : null; }
public static void respawnClick( PlayerInteractEvent event, PlayerHolder am, Map<String, Integer> respawnTimer) { ArenaPlayer ap = BattleArena.toArenaPlayer(event.getPlayer()); Integer id = respawnTimer.remove(ap.getName()); Bukkit.getScheduler().cancelTask(id); Location loc = am.getSpawn( am.getTeam(ap).getIndex(), am.getParams().hasOptionAt(MatchState.ONSPAWN, TransitionOption.RANDOMRESPAWN)); TeleportController.teleport(ap.getPlayer(), loc); }
@ArenaEventHandler(suppressCastWarnings = true, priority = EventPriority.LOW) public void onEntityDamageEvent(EntityDamageEvent event) { if (!(event.getEntity() instanceof Player)) return; final TransitionOptions to = transitionOptions.getOptions(match.getMatchState()); if (to == null) return; final PVPState pvp = to.getPVP(); if (pvp == null) return; final ArenaPlayer target = BattleArena.toArenaPlayer((Player) event.getEntity()); if (pvp == PVPState.INVINCIBLE) { /// all damage is cancelled target.setFireTicks(0); handler.setDamage(event, 0); event.setCancelled(true); return; } if (!(event instanceof EntityDamageByEntityEvent)) { return; } final Entity damagerEntity = ((EntityDamageByEntityEvent) event).getDamager(); ArenaPlayer damager; switch (pvp) { case ON: ArenaTeam targetTeam = match.getTeam(target); if (targetTeam == null || !targetTeam.hasAliveMember(target)) // / We dont care about dead players return; damager = DmgDeathUtil.getPlayerCause(damagerEntity); if (damager == null) { // / damage from some source, its not pvp though. so we dont care return; } ArenaTeam t = match.getTeam(damager); if (t != null && t.hasMember(target)) { // / attacker is on the same team event.setCancelled(true); } else { /// different teams... lets make sure they can actually hit event.setCancelled(false); } break; case OFF: damager = DmgDeathUtil.getPlayerCause(damagerEntity); if (damager != null) { // / damage done from a player handler.setDamage(event, 0); event.setCancelled(true); } break; default: break; } }
private void readyClick(PlayerInteractEvent event) { if (!Defaults.ENABLE_PLAYER_READY_BLOCK) return; final ArenaPlayer ap = BattleArena.toArenaPlayer(event.getPlayer()); if (!isInWaitRoomState()) { return; } final Action action = event.getAction(); if (action == Action.LEFT_CLICK_BLOCK) { // / Dont let them break the block event.setCancelled(true); } if (ap.isReady()) return; ap.setReady(true); MessageUtil.sendMessage(ap, "&2You ready yourself for the arena"); callEvent(new ArenaPlayerReadyEvent(ap, true)); }
public static DuelOptions parseOptions(MatchParams params, ArenaPlayer challenger, String[] args) throws InvalidOptionException { DuelOptions dop = new DuelOptions(); dop.options.putAll(defaultOptions.options); Map<DuelOption, Object> ops = dop.options; for (int i = 0; i < args.length; i++) { String op = args[i]; Player p = ServerUtil.findPlayer(op); if (p != null) { if (!p.isOnline()) throw new InvalidOptionException( "&cPlayer &6" + p.getDisplayName() + "&c is not online!"); if (challenger != null && p.getName().equals(challenger.getName())) throw new InvalidOptionException("&cYou can't challenge yourself!"); if (p.hasPermission(Permissions.DUEL_EXEMPT) && !Defaults.DUEL_CHALLENGE_ADMINS) { throw new InvalidOptionException("&cThis player can not be challenged!"); } dop.challengedPlayers.add(BattleArena.toArenaPlayer(p)); continue; } Object obj = null; DuelOption to = null; String val; if (op.contains("=")) { String[] split = op.split("="); op = split[0]; val = split[1]; } else { val = i + 1 < args.length ? args[i + 1] : null; } to = parseOp(op, val); switch (to) { case RATED: if (!Defaults.DUEL_ALLOW_RATED) throw new InvalidOptionException("&cRated formingDuels are not allowed!"); break; default: break; } if (!to.needsValue) { ops.put(to, null); continue; } i++; /// another increment to get past the value switch (to) { case MONEY: Double money = null; try { money = Double.valueOf(val); } catch (Exception e) { throw new InvalidOptionException("&cmoney needs to be a number! Example: &6money=100"); } if (!MoneyController.hasEconomy()) { if (challenger != null) MessageUtil.sendMessage( challenger, "&cignoring duel option money as there is no economy!"); Log.warn("[BA Error] ignoring duel option money as there is no economy!"); continue; } obj = money; break; case ARENA: Arena a = BattleArena.getBAController().getArena(val); if (a == null) { throw new InvalidOptionException("&cCouldnt find the arena &6" + val); } if (params != null && !a.getArenaType().matches(params.getType())) { throw new InvalidOptionException("&cThe arena is used for a different type!"); } obj = a; default: break; } ops.put(to, obj); } if (challenger != null && dop.challengedPlayers.isEmpty()) { throw new InvalidOptionException("&cYou need to challenge at least one player!"); } return dop; }
public void collect(Player player, List<ItemStack> itemDrops, EntityDeathEvent event) { if (itemDrops.isEmpty() && !levelAllow(player) && !expAllow(player)) { return; } if (plugin.config.dropOnPVPDeath() && player.getKiller() instanceof Player) { plugin.message(player, plugin.config.msgPVPDeath()); return; } if (plugin.config.residence()) { ClaimedResidence res = Residence.getResidenceManager().getByLoc(player.getLocation()); if (res != null) { ResidencePermissions perms = res.getPermissions(); if (perms.playerHas(player.getName(), plugin.config.resFlag(), true)) { plugin.logDebug( "Player '" + player.getName() + "' is not allowed to use Scavenger in this residence. Items will be dropped."); plugin.message(player, plugin.config.msgInsideRes()); return; } else { plugin.logDebug( "Player '" + player.getName() + "' is allowed to use Scavenger in this residence."); } } } if (plugin.config.factionEnemyDrops() && plugin.factionHook != null) { if (plugin.factionHook.isPlayerInEnemyFaction(player)) { return; } } if (plugin.config.dungeonMazeDrops() && plugin.dmHook != null) { plugin.logDebug("Checking if '" + player.getName() + "' is in DungeonMaze."); if (plugin.dmHook.isPlayerInDungeon(player)) { plugin.logDebug("Player '" + player.getName() + "' is in DungeonMaze."); plugin.message(player, plugin.config.msgInsideDungeonMaze()); return; } } if (plugin.getWorldGuard() != null) { plugin.logDebug("Checking region support for '" + player.getWorld().getName() + "'"); if (plugin.getWorldGuard().getRegionManager(player.getWorld()) != null) { try { RegionManager regionManager = plugin.getWorldGuard().getRegionManager(player.getWorld()); ApplicableRegionSet set = regionManager.getApplicableRegions(player.getLocation()); if (set.allows(DefaultFlag.PVP) && plugin.config.wgPVPIgnore()) { plugin.logDebug( "This is a WorldGuard PVP zone and WorldGuardPVPIgnore is " + plugin.config.wgPVPIgnore()); if (!plugin.config.msgInsideWGPVP().isEmpty()) { plugin.message(player, plugin.config.msgInsideWGPVP()); } return; } if (!set.allows(DefaultFlag.PVP) && plugin.config.wgGuardPVPOnly()) { plugin.logDebug( "This is NOT a WorldGuard PVP zone and WorldGuardPVPOnly is " + plugin.config.wgGuardPVPOnly()); if (!plugin.config.msgInsideWGPVP().isEmpty()) { plugin.message(player, plugin.config.msgInsideWGPVPOnly()); } return; } } catch (NullPointerException ex) { plugin.logDebug(ex.getMessage()); } } else { plugin.logDebug("Region support disabled for '" + player.getWorld().getName() + "'"); } } if (plugin.getUltimateArena() != null) { if (UltimateArenaAPI.hookIntoUA(plugin).isInArena(player)) { if (!plugin.config.msgInsideUA().isEmpty()) { plugin.message(player, plugin.config.msgInsideUA()); } return; } } if (plugin.maHandler != null && plugin.maHandler.isPlayerInArena(player)) { if (!plugin.config.msgInsideMA().isEmpty()) { plugin.message(player, plugin.config.msgInsideMA()); } return; } if (plugin.pvpHandler != null && !PVPArenaAPI.getArenaName(player).equals("")) { String x = plugin.config.msgInsidePA(); if (!x.isEmpty()) { x = x.replace("%ARENA%", PVPArenaAPI.getArenaName(player)); plugin.message(player, x); } return; } if (plugin.battleArena) { mc.alk.arena.objects.ArenaPlayer ap = mc.alk.arena.BattleArena.toArenaPlayer(player); if (ap != null) { Match match = BattleArena.getBAController().getMatch(ap); if (match != null) { if (match.isInMatch(ap)) { String x = plugin.config.msgInsideBA(); if (!x.isEmpty()) { plugin.message(player, x); } return; } } } } if (plugin.minigames != null) { if (plugin.minigames.playerInMinigame(player)) { plugin.logDebug( "Player '" + player.getName() + "' is in a Minigame. Not recovering items."); return; } } if (hasRestoration(player)) { plugin.error(player, "Restoration already exists, ignoring."); return; } if (plugin.getEconomy() != null && !(player.hasPermission(PERM_FREE) || (player.isOp() && plugin.config.opsAllPerms())) && plugin.config.economyEnabled()) { NumberFormat formatter = NumberFormat.getInstance(new Locale(plugin.config.countryCode())); formatter.setMaximumFractionDigits(plugin.config.decimalPlaces()); double restoreCost = plugin.config.restoreCost(); double withdrawAmount; double playerBalance = plugin.getEconomy().getBalance(player); double percentCost = plugin.config.percentCost(); double minCost = plugin.config.minCost(); double maxCost = plugin.config.maxCost(); EconomyResponse er; String currency; if (plugin.config.percent()) { if (playerBalance < 0) { withdrawAmount = 0; } else { withdrawAmount = playerBalance * (percentCost / 100.0); } plugin.logDebug("withdrawAmount: " + withdrawAmount); plugin.logDebug("playeBalance: " + playerBalance); plugin.logDebug("percentCost: " + percentCost + "(" + (percentCost / 100.0) + ")"); if (plugin.config.addMin()) { withdrawAmount = withdrawAmount + minCost; plugin.logDebug("withdrawAmount (addMin): " + withdrawAmount); } else if (withdrawAmount < minCost) { withdrawAmount = minCost; } if (withdrawAmount > maxCost && maxCost > 0) { withdrawAmount = maxCost; } } else { withdrawAmount = restoreCost; } er = plugin.getEconomy().withdrawPlayer(player, withdrawAmount); if (er.transactionSuccess()) { plugin.logDebug("Withdraw success!"); if (withdrawAmount == 1) { currency = plugin.getEconomy().currencyNameSingular(); } else { currency = plugin.getEconomy().currencyNamePlural(); } String x = plugin.config.msgSaveForFee(); if (!x.isEmpty()) { x = x.replace("%COST%", formatter.format(withdrawAmount)); x = x.replace("%CURRENCY%", currency); plugin.message(player, x); } if (!plugin.config.depositDestination().isEmpty()) { plugin.logDebug("DepositDesination: " + plugin.config.depositDestination()); if (plugin.config.depositType().equalsIgnoreCase("bank")) { plugin.logDebug("DepositType: BANK"); if (plugin.getEconomy().hasBankSupport()) { plugin.logDebug("Bank support is enabled"); plugin.getEconomy().bankDeposit(plugin.config.depositDestination(), withdrawAmount); } else { plugin.logDebug("Bank support is NOT enabled"); } } else if (plugin.config.depositType().equalsIgnoreCase("player")) { plugin.logDebug("DepositType: PLAYER"); plugin.logDebug("DepositDestination: " + plugin.config.depositDestination()); if (plugin.getEconomy().hasAccount(plugin.config.depositDestination())) { plugin.logDebug("DepositDestination: VALID"); plugin.getEconomy().depositPlayer(plugin.config.depositDestination(), withdrawAmount); } else { plugin.logDebug("DepositDestination: INVALID"); } } else { plugin.logDebug("DepositType: INVALID"); } } else { plugin.logDebug("No deposit destination!"); } } else { plugin.logDebug("Withdraw fail! " + er.errorMessage); if (playerBalance == 1) { currency = plugin.getEconomy().currencyNameSingular(); } else { currency = plugin.getEconomy().currencyNamePlural(); } String x = plugin.config.msgNotEnoughMoney(); if (!x.isEmpty()) { x = x.replace("%BALANCE%", formatter.format(playerBalance)); x = x.replace("%COST%", formatter.format(withdrawAmount)); x = x.replace("%CURRENCY%", currency); x = x.replace("%ERRORMESSAGE%", er.errorMessage); plugin.message(player, x); } return; } } else { plugin.message(player, plugin.config.msgSaving()); } Restoration restoration = new Restoration(); restoration.enabled = false; // temporary fix for 1.9 restoration.inventory = Arrays.copyOfRange(player.getInventory().getContents(), 0, 36); restoration.armour = player.getInventory().getArmorContents(); if (plugin.isMc19or110()) { restoration.offHand = player.getInventory().getItemInOffHand(); } restoration.playerName = player.getDisplayName(); itemDrops.clear(); if (levelAllow(player)) { plugin.logDebug("Collecting level " + player.getLevel() + " for " + player.getName()); restoration.level = player.getLevel(); } if (expAllow(player)) { plugin.logDebug("Collecting exp " + player.getExp() + " for " + player.getName()); restoration.exp = player.getExp(); event.setDroppedExp(0); } String deathCause = "NULL"; if (player.getLastDamageCause() != null) { if (player.getLastDamageCause().getCause() != null) { deathCause = player.getLastDamageCause().getCause().toString(); } } String deathCausePermission = PERM_SCAVENGE_PREFIX + deathCause; plugin.logDebug( "[p:" + player.getName() + "] [" + PERM_SCAVENGE + ":" + player.hasPermission(PERM_SCAVENGE) + "]" + " [" + deathCausePermission + ":" + player.hasPermission(deathCausePermission) + "]"); if (player.hasPermission(PERM_SCAVENGE) || player.hasPermission(deathCausePermission)) { plugin.logDebug("Permissions are okay. Time to scavenge..."); if (plugin.config.chanceToDrop() > 0 && !player.hasPermission(PERM_NO_CHANCE)) { checkChanceToDropItems(restoration.armour, itemDrops); checkChanceToDropItems(restoration.inventory, itemDrops); if (plugin.isMc19or110()) { checkChanceToDropItems(restoration.offHand, itemDrops); } } if (plugin.config.singleItemDrops()) { checkSingleItemDrops(player, restoration.armour, itemDrops); checkSingleItemDrops(player, restoration.inventory, itemDrops); checkSingleItemDrops(player, restoration.offHand, itemDrops); } else if (plugin.config.singleItemKeeps()) { checkSingleItemKeeps(player, "armour", restoration.armour, itemDrops); checkSingleItemKeeps(player, "inv", restoration.inventory, itemDrops); if (plugin.isMc19or110()) { checkSingleItemKeeps(player, "offhand", restoration.offHand, itemDrops, 1); } } else if (plugin.config.slotBasedRecovery()) { checkSlots(player, "armour", restoration.armour, itemDrops); checkSlots(player, "inv", restoration.inventory, itemDrops); if (plugin.isMc19or110()) { checkSlots(player, "offhand", restoration.offHand, itemDrops, 1); } } } else { plugin.logDebug("Permissions are NOT okay. Dropping items..."); dropItems(restoration.armour, itemDrops); dropItems(restoration.inventory, itemDrops); dropItem(restoration.offHand, itemDrops); } addRestoration(player, restoration); }