private void logInvocationError(Exception e, MethodWrapper mwrapper, Arguments newArgs) { System.err.println( "[" + BattleArena.getNameAndVersion() + " Error] " + mwrapper.method + " : " + mwrapper.obj + " : " + newArgs); if (newArgs != null && newArgs.args != null) { for (Object o : newArgs.args) System.err.println("[Error] object=" + o); } System.err.println("[Error] Cause=" + e.getCause()); if (e.getCause() != null) { e.getCause().printStackTrace(); Log.printStackTrace(e.getCause()); } System.err.println("[Error] Trace Continued "); Log.printStackTrace(e); }
@Override public void invokeEvent(final Event event) { /// For each ArenaListener class that is listening for (RListener rl : getRegisteredListeners()) { try { rl.getMethod() .getMethod() .invoke(rl.getListener(), event); // / Invoke the listening arenalisteners method } catch (Exception e) { Log.printStackTrace(e); } } }
@Override public void broadcast(String msg) { if (msg == null || msg.isEmpty()) return; try { MessageUtil.broadcastMessage(MessageUtil.colorChat(msg)); } catch (Throwable e) { /// getting this a lot of concurrency and null pointer errors from bukkit when stress // testing... /// so ignore errors from bukkit if (!Defaults.DEBUG_STRESS) { Log.printStackTrace(e); } } }
static { Class<?>[] args = {}; try { Version version = Util.getCraftBukkitVersion(); if (version.compareTo("v1_6_1") >= 0) { final Class<?> clazz = Class.forName("mc.alk.arena.util.compat.v1_6_1.EventHelper"); handler = (IEventHelper) clazz.getConstructor(args).newInstance((Object[]) args); } else { final Class<?> clazz = Class.forName("mc.alk.arena.util.compat.pre.EventHelper"); handler = (IEventHelper) clazz.getConstructor(args).newInstance((Object[]) args); } } catch (Exception e) { Log.printStackTrace(e); } }
@ArenaEventHandler(bukkitPriority = org.bukkit.event.EventPriority.MONITOR) public void onPlayerDeath(ArenaPlayerDeathEvent event) { final ArenaPlayer target = event.getPlayer(); if (state == MatchState.ONCANCEL || state == MatchState.ONCOMPLETE) { return; } final ArenaTeam t = event.getTeam(); Integer nDeaths = t.addDeath(target); boolean exiting = event.isExiting() || !respawns || nDeaths >= nLivesPerPlayer; event.setExiting(exiting); final boolean trueDeath = event.getPlayerDeathEvent() != null; if (nLivesPerPlayer != ArenaSize.MAX) { int curLives = nLivesPerPlayer - nDeaths; SEntry e = scoreboard.getEntry(target.getPlayer()); if (e != null) scoreboard.setEntryNameSuffix(e, curLives <= 1 ? "" : "&4(" + curLives + ")"); } if (trueDeath) { PlayerDeathEvent pde = event.getPlayerDeathEvent(); if (cancelExpLoss) pde.setKeepLevel(true); /// Handle Drops from bukkitEvent if (clearsInventoryOnDeath || keepsInventory) { // / clear the drops try { pde.getDrops().clear(); } catch (Exception e) { if (!Defaults.DEBUG_VIRTUAL) Log.printStackTrace(e); } } else if (woolTeams) { /// Get rid of the wool from teams so it doesnt drop final int index = t.getIndex(); ItemStack teamHead = TeamUtil.getTeamHead(index); List<ItemStack> items = pde.getDrops(); for (ItemStack is : items) { if (is.getType() == teamHead.getType() && is.getDurability() == teamHead.getDurability()) { final int amt = is.getAmount(); if (amt > 1) is.setAmount(amt - 1); else is.setType(Material.AIR); break; } } } /// If keepInventory is specified, but not restoreAll, then we have a case /// where we need to give them back the current Inventory they have on them /// even if they log out if (keepsInventory) { boolean restores = getParams().hasOptionAt(MatchState.ONLEAVE, TransitionOption.RESTOREITEMS); /// Restores and exiting, means clear their match inventory so they won't /// get their match and their already stored inventory if (restores && exiting) { psc.clearMatchItems(target); } else { /// keep their current inv psc.storeMatchItems(target); } } /// We can't let them just sit on the respawn screen... schedule them to lose /// We will cancel this onRespawn final ArenaMatch am = this; Integer timer = deathTimer.get(target.getName()); if (timer != null) { Bukkit.getScheduler().cancelTask(timer); } timer = Bukkit.getScheduler() .scheduleSyncDelayedTask( BattleArena.getSelf(), new Runnable() { @Override public void run() { PerformTransition.transition(am, MatchState.ONCOMPLETE, target, t, true); checkAndHandleIfTeamDead(t); } }, 15 * 20L); deathTimer.put(target.getName(), timer); } if (exiting) { PerformTransition.transition(this, MatchState.ONCOMPLETE, target, t, true); checkAndHandleIfTeamDead(t); } }