@ArenaEventHandler public void matchComplete(MatchCompletedEvent event) { Match match = event.getMatch(); Matchup matchup = matchups.remove(match); if (matchup == null) return; Duel d = ongoingDuels.remove(matchup); if (d == null) return; MatchResult mr = match.getResult(); Double money = (Double) d.getDuelOptionValue(DuelOption.MONEY); if (money != null) { if (mr.hasVictor()) { Collection<ArenaTeam> winningTeams = mr.getVictors(); int winningSize = 0; for (ArenaTeam winTeam : winningTeams) { winningSize += winTeam.size(); } final double split = d.getTotalMoney() / winningSize; for (ArenaTeam winTeam : winningTeams) { for (ArenaPlayer ap : winTeam.getPlayers()) { MessageUtil.sendMessage( ap, "&4[Duel] &eYou have won &6" + split + " " + Defaults.MONEY_STR + "&e for your victory!"); MoneyController.add(ap.getName(), split); } } } else { refundMoney(money, mr.getDrawers()); } } }
@MatchEventHandler public void matchCompleted(MatchCompletedEvent event) { Match am = event.getMatch(); MatchResult r = am.getResult(); Matchup m = null; if (r.getVictors() != null && !r.getVictors().isEmpty()) { m = getMatchup(r.getVictors().iterator().next(), round); } else if (r.getLosers() != null && !r.getLosers().isEmpty()) { m = getMatchup(r.getLosers().iterator().next(), round); } else if (r.getDrawers() != null && !r.getDrawers().isEmpty()) { m = getMatchup(r.getDrawers().iterator().next(), round); } if (m == null) { // / This match wasnt in our tournament return; } if (am.getState() == MatchState.ONCANCEL) { endEvent(); return; } Team victor = null; if (r.isDraw()) { // / match was a draw, pick a random lucky winner victor = pickRandomWinner(r, r.getDrawers()); } else if (r.hasVictor() && r.getVictors().size() != 1) { victor = pickRandomWinner(r, r.getVictors()); } else if (r.hasVictor()) { victor = r.getVictors().iterator().next(); // / single winner } m.setResult(r); for (Team t : r.getLosers()) { super.removeTeam(t); } aliveTeams.removeAll(r.getLosers()); if (roundFinished()) { TimeUtil.testClock(); if (Defaults.DEBUG) System.out.println("ROUND FINISHED !!!!! " + aliveTeams); if (round + 1 == nrounds || isFinished()) { Server server = Bukkit.getServer(); Team t = aliveTeams.get(0); server.broadcastMessage( Log.colorChat( eventParams.getPrefix() + "&e Congratulations to &6" + t.getDisplayName() + "&e for winning!")); HashSet<Team> losers = new HashSet<Team>(competingTeams); losers.remove(victor); Set<Team> victors = new HashSet<Team>(Arrays.asList(victor)); eventVictory(victors, losers); PerformTransition.transition(am, MatchState.FIRSTPLACE, t, false); PerformTransition.transition(am, MatchState.PARTICIPANTS, losers, false); eventCompleted(); } else { makeNextRound(); startRound(); } } }
public AllKills(Match match) { super(match); kills = new ArenaObjective("allkills", "All Kills", 5); kills.setDisplayName(MessageUtil.colorChat("&4All Kills")); boolean isRated = match.getParams().isRated(); boolean soloRating = !match.getParams().isTeamRating(); sc = (isRated && soloRating) ? new StatController(match.getParams()) : null; }
@ArenaEventHandler public void matchCancelled(MatchCancelledEvent event) { Match match = event.getMatch(); Matchup matchup = matchups.remove(match); if (matchup == null) return; Duel d = ongoingDuels.remove(matchup); if (d == null) return; Double money = (Double) d.getDuelOptionValue(DuelOption.MONEY); if (money != null) { refundMoney(money, match.getTeams()); } }
@EventHandler public void matchCancelled(MatchCancelledEvent event) { if (!isRunning()) /// Tournament isnt even going on, definitely not our match return; Match am = event.getMatch(); Matchup m = getMatchup(am.getTeams().get(0), round); // System.out.println("victor ===" + victor + " am= " +am + " losers=" + am.getLosers() +" m // = " + m +" am.result="+am.getResult()); if (m == null) { // / This match wasnt in our tournament return; } eventCancelled(); }
private static ArenaLocation getArenaLocation( PlayerHolder am, ArenaTeam team, ArenaPlayer player, TransitionOptions mo, int teamIndex) { final MatchParams mp = am.getParams(); final boolean randomRespawn = mo.hasOption(TransitionOption.RANDOMRESPAWN); Location l; final boolean teleportWaitRoom = mo.shouldTeleportWaitRoom(); final boolean teleportLobby = mo.shouldTeleportLobby(); final boolean teleportSpectate = mo.shouldTeleportSpectate(); final LocationType type; final PlayerHolder ph; if (Defaults.DEBUG_TRACE) Log.info(" teamindex = " + teamIndex + " " + am.getClass().getSimpleName() + " " + am); if (teleportWaitRoom) { if (mo.hasOption(TransitionOption.TELEPORTMAINWAITROOM)) { teamIndex = Defaults.MAIN_SPAWN; } ph = (am instanceof Match) ? ((Match) am).getArena().getWaitroom() : am; type = LocationType.WAITROOM; l = jitter(ph.getSpawn(teamIndex, randomRespawn), teamIndex); } else if (teleportLobby) { if (mo.hasOption(TransitionOption.TELEPORTMAINLOBBY)) { teamIndex = Defaults.MAIN_SPAWN; } ph = RoomController.getLobby(mp.getType()); type = LocationType.LOBBY; l = jitter(RoomController.getLobbySpawn(teamIndex, mp.getType(), randomRespawn), 0); } else if (teleportSpectate) { ph = (am instanceof Match) ? ((Match) am).getArena().getSpectatorRoom() : am; type = LocationType.SPECTATE; l = jitter(ph.getSpawn(teamIndex, randomRespawn), teamIndex); } else { // They should teleportIn, aka to the Arena final Arena arena; if (am instanceof Arena) { arena = (Arena) am; } else if (am instanceof Match) { Match m = (Match) am; arena = m.getArena(); } else { throw new IllegalStateException("[BA Error] Instance is " + am.getClass().getSimpleName()); } ph = am; type = LocationType.ARENA; l = arena.getSpawn(teamIndex, false); } return new ArenaLocation(ph, l, type); }
@MatchEventHandler public void matchCancelled(MatchCancelledEvent event) { Match am = event.getMatch(); Matchup m = getMatchup(am.getTeams().get(0), round); System.out.println( "victor === am= " + am + " losers=" + am.getLosers() + " m = " + m + " am.result=" + am.getResult()); if (m == null) { // / This match wasnt in our tournament return; } eventCancelled(); }
public HighestKills(Match match) { super(match); pkills = new PlayerKills(match); match.addArenaListener(pkills); }
@EventHandler public void matchCompleted(MatchCompletedEvent event) { if (!isRunning()) return; Match am = event.getMatch(); Team victor = am.getVictor(); Matchup m; if (victor == null) m = getMatchup(am.getResult().getLosers().iterator().next(), round); else m = getMatchup(victor, round); // System.out.println("victor ===" + victor + " am= " +am + " losers=" + am.getLosers() +" m // = " + m +" am.result="+am.getResult()); if (m == null) { // / This match wasnt in our tournament return; } if (am.getState() == MatchState.ONCANCEL) { endEvent(); return; } MatchResult r = am.getResult(); if (victor == null) { // / match was a draw, pick a random lucky winner List<Team> ls = new ArrayList<Team>(am.getResult().getLosers()); if (ls.isEmpty()) { Log.err("[BattleArena] Tournament found a match with no players, cancelling tournament"); this.cancelEvent(); return; } victor = ls.get(rand.nextInt(ls.size())); victor.sendMessage("&2You drew your match but have been randomly selected as the winner!"); r.setVictor(victor); Set<Team> losers = new HashSet<Team>(ls); losers.remove(victor); r.setLosers(losers); for (Team l : losers) { l.sendMessage( "&cYou drew your match but someone else has been randomly selected as the winner!"); } } m.setResult(r); for (Team t : r.getLosers()) { super.removeTeam(t); } aliveTeams.removeAll(r.getLosers()); if (roundFinished()) { TimeUtil.testClock(); if (Defaults.DEBUG) System.out.println("ROUND FINISHED !!!!! " + aliveTeams); if (round + 1 == nrounds || isFinished()) { Server server = Bukkit.getServer(); Team t = aliveTeams.get(0); server.broadcastMessage( Log.colorChat( eventParams.getPrefix() + "&e Congratulations to &6" + t.getDisplayName() + "&e for winning!")); HashSet<Team> losers = new HashSet<Team>(competingTeams); losers.remove(victor); eventVictory(victor, losers); PerformTransition.transition(am, MatchState.FIRSTPLACE, t, false); PerformTransition.transition(am, MatchState.PARTICIPANTS, losers, false); eventCompleted(); } else { makeNextRound(); startRound(); } } }
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); }