public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { Gamer gamer = pm.getGamer(sender.getName()); if (!gamer.isAlive()) { if (args.length > 0) { if (Bukkit.getPlayer(args[0]) != null) { gamer.getPlayer().eject(); gamer .getPlayer() .teleport(sender.getServer().getPlayer(args[0]).getLocation().add(0, 0.1, 0)); return true; } else if (args[0].equalsIgnoreCase(cm.getCommandGotoNameOfFeast())) { Location feastLoc = LibsFeastManager.getFeastManager().getFeastLocation(); if (feastLoc.getBlockY() > 0) { gamer.getPlayer().eject(); gamer .getPlayer() .teleport( feastLoc .getWorld() .getHighestBlockAt(feastLoc) .getLocation() .clone() .add(0.5, 1, 0.5)); } else sender.sendMessage(cm.getCommandGotoFeastFailed()); return true; } else sender.sendMessage(cm.getCommandGotoPlayerDoesntExist()); } else sender.sendMessage(cm.getCommandGotoNotEnoughArgs()); } else sender.sendMessage(cm.getCommandGotoNotSpectator()); return true; }
private String formatDeathMessage(String deathMessage, Player p) { String playerKit = cm.getKillMessageNoKit(); if (kits.getKitByPlayer(p) != null) playerKit = kits.getKitByPlayer(p).getName(); String killMessage = cm.getKillMessageFormatPlayerKit(); if (killMessage.contains("%Player%") || killMessage.contains("%Kit%")) { playerKit = killMessage.replace("%Player%", p.getName()).replace("%Kit%", playerKit); } else { playerKit = String.format(killMessage, p.getName(), playerKit); } return deathMessage.replace(p.getName(), playerKit); }
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { if (args.length == 0) sender.sendMessage(tm.getCommandMessageNoArgs()); else if (args.length > 1) { Player player = Bukkit.getPlayer(args[0]); if (player == null) { sender.sendMessage(tm.getCommandMessageNoReceiver()); return true; } chat.sendMessage(sender, player, StringUtils.join(args, " ").substring(args[0].length() + 1)); } else sender.sendMessage(tm.getCommandMessagePlayerNoArgs()); return true; }
public void onDisable() { for (Player p : Bukkit.getOnlinePlayers()) { p.kickPlayer(translationsConfig.getKickGameShutdownUnexpected()); PlayerQuitEvent event = new PlayerQuitEvent(p, "He came, he saw, he conquered"); playerListener.onQuit(event); } HungergamesApi.getMySqlManager().getPlayerJoinThread().mySqlDisconnect(); HungergamesApi.getMySqlManager().getPlayerJoinThread().stop(); }
public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { Gamer gamer = pm.getGamer(sender.getName()); if (!gamer.isAlive()) { pm.sendToSpawn(gamer); return true; } else { ((Player) sender).setCompassTarget(HungergamesApi.getHungergames().world.getSpawnLocation()); gamer.getPlayer().sendMessage(cm.getCommandSpawnPointingToSpawn()); } return true; }
public String returnTime(Integer i) { i = Math.abs(i); int remainder = i % 3600, minutes = remainder / 60, seconds = remainder % 60; if (seconds == 0 && minutes == 0) return translationsConfig.getTimeFormatNoTime(); if (minutes == 0) { if (seconds == 1) return String.format(translationsConfig.getTimeFormatSecond(), seconds); return String.format(translationsConfig.getTimeFormatSeconds(), seconds); } if (seconds == 0) { if (minutes == 1) return String.format(translationsConfig.getTimeFormatMinute(), minutes); return String.format(translationsConfig.getTimeFormatMinutes(), minutes); } if (seconds == 1) { if (minutes == 1) return String.format(translationsConfig.getTimeFormatSecondAndMinute(), minutes, seconds); return String.format(translationsConfig.getTimeFormatSecondAndMinutes(), minutes, seconds); } if (minutes == 1) { return String.format(translationsConfig.getTimeFormatSecondsAndMinute(), minutes, seconds); } return String.format(translationsConfig.getTimeFormatSecondsAndMinutes(), minutes, seconds); }
public void checkWinner() { if (doSeconds) { List<Gamer> aliveGamers = pm.getAliveGamers(); if (aliveGamers.size() == 1) { doSeconds = false; final Gamer winner = aliveGamers.get(0); Bukkit.getPluginManager().callEvent(new PlayerWinEvent(winner)); int reward = getPrize(1); if (reward > 0) winner.addBalance(reward); winner.getPlayer().setAllowFlight(true); Bukkit.getScheduler() .scheduleSyncRepeatingTask( this, new Runnable() { public void run() { Bukkit.broadcastMessage( String.format( translationsConfig.getBroadcastWinnerWon(), winner.getName())); } }, 0, mainConfig.getWonBroadcastsDelay() * 20); Bukkit.getScheduler() .scheduleSyncDelayedTask( this, new Runnable() { public void run() { String kick = String.format(translationsConfig.getKickMessageWon(), winner.getName()); shutdown(kick); } }, mainConfig.getGameShutdownDelay() * 20); } else if (aliveGamers.size() == 0) { doSeconds = false; shutdown(translationsConfig.getKickNobodyWonMessage()); } } }
public void manageDeath(PlayerKilledEvent event) { Gamer killed = event.getKilled(); final Player p = killed.getPlayer(); p.setHealth(20); if (event.isCancelled()) return; for (HumanEntity human : p.getInventory().getViewers()) human.closeInventory(); p.leaveVehicle(); p.eject(); p.setLevel(0); p.setExp(0F); if (event.getDeathMessage().equals(ChatColor.stripColor(event.getDeathMessage()))) event.setDeathMessage(ChatColor.DARK_RED + event.getDeathMessage()); event.setDeathMessage( this.formatDeathMessage( event.getDeathMessage().replace("%Remaining%", "" + (getAliveGamers().size() - 1)), p)); if (event.getKillerPlayer() != null) { event.getKillerPlayer().addKill(); event.setDeathMessage( this.formatDeathMessage(event.getDeathMessage(), event.getKillerPlayer().getPlayer())); } Bukkit.broadcastMessage(event.getDeathMessage()); int reward = hg.getPrize(getAliveGamers().size()); if (reward > 0) killed.addBalance(reward); hg.cannon(); killed.clearInventory(); World world = p.getWorld(); for (ItemStack item : event.getDrops()) { if (item == null || item.getType() == Material.AIR || item.containsEnchantment(EnchantmentManager.UNLOOTABLE)) continue; else if (item.hasItemMeta()) world .dropItemNaturally(event.getDropsLocation(), item.clone()) .getItemStack() .setItemMeta(item.getItemMeta()); else world.dropItemNaturally(event.getDropsLocation(), item); } setSpectator(killed); ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, cm.getScoreboardPlayersLength(), getAliveGamers().size()); hg.checkWinner(); p.setVelocity(new Vector()); for (PotionEffect effect : p.getActivePotionEffects()) p.removePotionEffect(effect.getType()); p.teleport(p.getWorld().getHighestBlockAt(p.getLocation()).getLocation().clone().add(0, 10, 0)); p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 40, 9), true); p.sendBlockChange(p.getLocation(), Material.PORTAL.getId(), (byte) 0); p.sendBlockChange(p.getLocation(), Material.AIR.getId(), (byte) 0); for (Entity entity : p.getWorld().getEntities()) { if (entity instanceof Tameable && ((Tameable) entity).isTamed() && ((Tameable) entity).getOwner().getName().equals(p.getName())) { if (entity instanceof Wolf) ((Wolf) entity).setSitting(true); else if (entity instanceof Ocelot) ((Ocelot) entity).setSitting(true); else entity.remove(); } if (entity instanceof Creature && ((Creature) entity).getTarget() == p) ((Creature) entity).setTarget(null); } if (HungergamesApi.getConfigManager().getMainConfig().isKickOnDeath() && !p.hasPermission("hungergames.spectate")) p.kickPlayer(String.format(cm.getKickDeathMessage(), event.getDeathMessage())); HungergamesApi.getAbilityManager().unregisterPlayer(p); HungergamesApi.getInventoryManager().updateSpectatorHeads(); }
public void startGame() { currentTime = 0; for (Kit kit : HungergamesApi.getKitManager().getKits()) { final int amount = kit.getPlayerSize(); if (amount <= 0) continue; metrics .getKitsUsed() .addPlotter( new Metrics.Plotter(kit.getName()) { @Override public int getValue() { return amount; } }); } ScoreboardManager.hideScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreBoardGameStartingIn()); ScoreboardManager.makeScore("Main", DisplaySlot.PLAYER_LIST, "", 0); if (mainConfig.getTimeForInvincibility() > 0) { ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreboardInvincibleRemaining(), mainConfig.getTimeForInvincibility()); } else { Bukkit.getPluginManager().callEvent(new InvincibilityWearOffEvent()); } Bukkit.broadcastMessage(translationsConfig.getBroadcastGameStartedMessage()); if (mainConfig.getTimeForInvincibility() > 0) Bukkit.broadcastMessage( String.format( translationsConfig.getBroadcastInvincibiltyWearsOffIn(), returnTime(mainConfig.getTimeForInvincibility() - currentTime))); for (Gamer gamer : pm.getGamers()) { if (mainConfig.isKitSelectorEnabled()) gamer .getPlayer() .getInventory() .remove(HungergamesApi.getInventoryManager().getKitSelector()); gamer.seeInvis(false); gamer.setAlive(true); if (mainConfig.isTeleportToSpawnLocationPregame() && mainConfig.isPreventMovingFromSpawnUsingPotions()) { gamer.getPlayer().removePotionEffect(PotionEffectType.SLOW); gamer.getPlayer().removePotionEffect(PotionEffectType.JUMP); } pm.sendToSpawn(gamer); } world.setGameRuleValue("doDaylightCycle", "true"); world.setTime(mainConfig.getTimeOfDay()); world.playSound(world.getSpawnLocation(), Sound.AMBIENCE_THUNDER, 1, 0.8F); Bukkit.getScheduler() .scheduleSyncDelayedTask( this, new Runnable() { public void run() { for (Gamer gamer : pm.getAliveGamers()) gamer.getPlayer().getInventory().addItem(new ItemStack(Material.COMPASS)); for (me.libraryaddict.Hungergames.Types.Kit kit : HungergamesApi.getKitManager().getKits()) kit.giveKit(); HungergamesApi.getAbilityManager().registerAbilityListeners(); Bukkit.getPluginManager().callEvent(new GameStartEvent()); for (Location l : entitysToSpawn.keySet()) l.getWorld().spawnEntity(l, entitysToSpawn.get(l)); entitysToSpawn.clear(); } }); checkWinner(); HungergamesApi.getInventoryManager().updateSpectatorHeads(); ScoreboardManager.doStage(); }
private void onSecond() { currentTime++; if (currentTime < 0) { world.setTime(0); ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreBoardGameStartingIn(), -currentTime); if (mainConfig.isTeleportToSpawnLocationPregame() && -currentTime == mainConfig.getSecondsToTeleportPlayerToSpawn()) { for (Gamer gamer : HungergamesApi.getPlayerManager().getGamers()) { HungergamesApi.getPlayerManager().sendToSpawn(gamer); if (mainConfig.isPreventMovingFromSpawnUsingPotions()) { for (Player player : Bukkit.getOnlinePlayers()) { player.addPotionEffect( new PotionEffect(PotionEffectType.JUMP, Integer.MAX_VALUE, 200), true); player.addPotionEffect( new PotionEffect(PotionEffectType.SLOW, Integer.MAX_VALUE, 200), true); } } } } if (mainConfig.isGameStarting(currentTime)) Bukkit.broadcastMessage( String.format( translationsConfig.getBroadcastGameStartingIn(), returnTime(currentTime))); } else if (currentTime == 0) { if (pm.getGamers().size() < mainConfig.getMinPlayersForGameStart()) { currentTime = -90; ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreBoardGameStartingIn(), -currentTime); Bukkit.broadcastMessage(translationsConfig.getBroadcastNotEnoughPlayers()); } else { startGame(); return; } } else if (mainConfig.getAmountBorderClosesInPerSecond() > 0 && currentTime > mainConfig.getBorderStartsClosingIn()) { double borderSize = mainConfig.getBorderSize() - mainConfig.getAmountBorderClosesInPerSecond(); if (borderSize < 0) borderSize = 0; mainConfig.setBorderSize(borderSize); ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreboardBorderSize(), (int) mainConfig.getBorderSize()); } for (Gamer gamer : pm.getGamers()) { this.doBorder(gamer); } if (mainConfig.getTimeForInvincibility() > 0 && currentTime <= mainConfig.getTimeForInvincibility() && currentTime >= 0) { ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreboardInvincibleRemaining(), mainConfig.getTimeForInvincibility() - currentTime); if (currentTime == mainConfig.getTimeForInvincibility()) { Bukkit.broadcastMessage(translationsConfig.getBroadcastInvincibilityWornOff()); ScoreboardManager.hideScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreboardInvincibleRemaining()); Bukkit.getPluginManager().callEvent(new InvincibilityWearOffEvent()); } else if (mainConfig.advertiseInvincibility(currentTime)) { Bukkit.broadcastMessage( String.format( translationsConfig.getBroadcastInvincibiltyWearsOffIn(), returnTime(mainConfig.getTimeForInvincibility() - currentTime))); } } ScoreboardManager.doStage(); }
private void doBorder(Gamer gamer) { Player p = gamer.getPlayer(); Location pLoc = p.getLocation().clone(); Location sLoc = world.getSpawnLocation().clone(); double border = mainConfig.getBorderSize(); if (mainConfig.isRoundedBorder()) { sLoc.setY(pLoc.getY()); double fromSpawn = pLoc.distance(sLoc); if (fromSpawn >= border - 20) { // Warn p.sendMessage(translationsConfig.getMessagePlayerApproachingBorder()); if (fromSpawn >= border) { // Punish if (gamer.isAlive()) { // Damage and potentially kill. double dmg = HungergamesApi.getConfigManager().getMainConfig().getDamageBorderDeals(); if (p.getHealth() - dmg > 0) { p.damage(0); p.setHealth(p.getHealth() - dmg); } else { pm.killPlayer( gamer, null, pLoc, gamer.getInventory(), String.format( translationsConfig.getKillMessageKilledByBorder(), gamer.getName())); } } else if (border > 10) { // Hmm. Preferably I tp them back inside. // May as well just tp to spawn. No harm done. pm.sendToSpawn(gamer); } } } } else { Location tpTo = pLoc.clone(); int xDist = pLoc.getBlockX() - sLoc.getBlockX(); if (Math.abs(xDist) > border - 20) { if (xDist > 0) { tpTo.setX(border - 2 + sLoc.getBlockX()); } else { tpTo.setX(border + 2 + sLoc.getBlockX()); } } int zDist = pLoc.getBlockZ() - sLoc.getBlockZ(); if (Math.abs(zDist) > border - 20) { if (zDist > 0) { tpTo.setZ(border - 2 + sLoc.getBlockZ()); } else { tpTo.setZ(border + 2 + sLoc.getBlockZ()); } } if (!pLoc.equals(tpTo)) p.sendMessage(translationsConfig.getMessagePlayerApproachingBorder()); if (tpTo.getBlockX() != pLoc.getBlockX() || tpTo.getBlockZ() != pLoc.getBlockZ()) { if (gamer.isAlive()) { // Damage and potentially kill. double dmg = HungergamesApi.getConfigManager().getMainConfig().getDamageBorderDeals(); if (p.getHealth() - dmg > 0) { p.damage(0); p.setHealth(p.getHealth() - dmg); } else { pm.killPlayer( gamer, null, pLoc, gamer.getInventory(), String.format(translationsConfig.getKillMessageKilledByBorder(), gamer.getName())); } } else if (border > 10) { gamer.getPlayer().teleport(tpTo); } } } }
private void onSecond() { currentTime++; if (currentTime < 0) { world.setTime(0); ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreBoardGameStartingIn(), -currentTime); if (mainConfig.isGameStarting(currentTime)) Bukkit.broadcastMessage( String.format( translationsConfig.getBroadcastGameStartingIn(), returnTime(currentTime))); } else if (currentTime == 0) { if (pm.getGamers().size() < mainConfig.getMinPlayersForGameStart()) { currentTime = -90; ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreBoardGameStartingIn(), -currentTime); Bukkit.broadcastMessage(translationsConfig.getBroadcastNotEnoughPlayers()); } else { startGame(); return; } } else if (mainConfig.getAmountBorderClosesInPerSecond() > 0 && currentTime > mainConfig.getBorderStartsClosingIn()) { mainConfig.setBorderSize( mainConfig.getBorderSize() - mainConfig.getAmountBorderClosesInPerSecond()); ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreboardBorderSize(), (int) mainConfig.getBorderSize()); } for (Gamer gamer : pm.getGamers()) { this.doBorder(gamer); } if (mainConfig.getTimeForInvincibility() > 0 && currentTime <= mainConfig.getTimeForInvincibility() && currentTime >= 0) { ScoreboardManager.makeScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreboardInvincibleRemaining(), mainConfig.getTimeForInvincibility() - currentTime); if (currentTime == mainConfig.getTimeForInvincibility()) { Bukkit.broadcastMessage(translationsConfig.getBroadcastInvincibilityWornOff()); ScoreboardManager.hideScore( "Main", DisplaySlot.SIDEBAR, translationsConfig.getScoreboardInvincibleRemaining()); Bukkit.getPluginManager().callEvent(new InvincibilityWearOffEvent()); } else if (mainConfig.advertiseInvincibility(currentTime)) { Bukkit.broadcastMessage( String.format( translationsConfig.getBroadcastInvincibiltyWearsOffIn(), returnTime(mainConfig.getTimeForInvincibility() - currentTime))); } } ScoreboardManager.doStage(); }
private void doBorder(Gamer gamer) { Player p = gamer.getPlayer(); Location loc = p.getLocation().clone(); Location sLoc = world.getSpawnLocation().clone(); double border = mainConfig.getBorderSize(); if (mainConfig.isRoundedBorder()) { sLoc.setY(loc.getY()); double fromBorder = loc.distance(sLoc) - border; if (fromBorder - 20 > 0) { // Warn p.sendMessage(translationsConfig.getMessagePlayerApproachingBorder()); if (fromBorder > 0) { // Punish if (gamer.isAlive()) { // Damage and potentially kill. if (p.getHealth() - 2 > 0) { p.damage(0); p.setHealth(p.getHealth() - 2); } else { pm.killPlayer( gamer, null, loc, gamer.getInventory(), String.format( translationsConfig.getKillMessageKilledByBorder(), gamer.getName())); } } else if (border > 10) { // Hmm. Preferably I tp them back inside. // May as well just tp to spawn. No harm done. pm.sendToSpawn(gamer); } } } } else { Location tpTo = loc.clone(); int fromSpawn = loc.getBlockX() - sLoc.getBlockX(); if (fromSpawn > border - 20) { tpTo.setX(((border - 2) + sLoc.getBlockX())); } if (fromSpawn < -(border - 20)) { tpTo.setX((-(border - 2) + sLoc.getBlockX())); } boolean hurt = Math.abs(fromSpawn) >= border; fromSpawn = loc.getBlockZ() - sLoc.getBlockZ(); if (fromSpawn > (border - 20)) { tpTo.setZ(((border - 2) + sLoc.getBlockZ())); } if (fromSpawn < -(border - 20)) { tpTo.setZ((-(border - 2) + sLoc.getBlockZ())); } if (!hurt) hurt = Math.abs(fromSpawn) >= border; if (!loc.equals(tpTo)) p.sendMessage(translationsConfig.getMessagePlayerApproachingBorder()); if (hurt) { if (gamer.isAlive()) { // Damage and potentially kill. if (p.getHealth() - 2 > 0) { p.damage(0); p.setHealth(p.getHealth() - 2); } else { pm.killPlayer( gamer, null, loc, gamer.getInventory(), String.format(translationsConfig.getKillMessageKilledByBorder(), gamer.getName())); } } else if (border > 10) { gamer.getPlayer().teleport(tpTo); } } } }