package at.er.ytbattle.util; import at.er.ytbattle.plugin.BattlePlugin; import at.er.ytbattle.plugin.player.BattlePlayer; import at.er.ytbattle.plugin.team.Team; import com.google.common.base.Functions; import com.google.common.collect.Lists; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scoreboard.DisplaySlot; import org.bukkit.scoreboard.Objective; import org.bukkit.scoreboard.Scoreboard; import java.io.File; import java.util.ArrayList; import java.util.List; public class BattleUtils { public static final String SAVE_FILE_NAME = "savegame.xml"; private static ItemStack[] starterChestContents; private static Scoreboard scoreboardBattle; private static Objective objectiveBattleStats; @SuppressWarnings("deprecation") public static ItemStack[] getStarterChestContents() { if (starterChestContents == null) { List<?> confList = BattlePlugin.configurationHelper().getConfigFile().getList(ConfigurationHelper.GAME_BASEBLOCK_CONTENTS_PATH); ArrayList<ItemStack> contents = new ArrayList<>(); try { List<String> itemIDs = Lists.transform(confList, Functions.toStringFunction()); for (String s : itemIDs) { String[] cont = s.split(":"); if (cont.length > 1) { ItemStack item = new ItemStack(Integer.parseInt(cont[0]), Integer.parseInt(cont[1])); contents.add(item); } else if (cont.length > 0) { ItemStack item = new ItemStack(Integer.parseInt(cont[0])); contents.add(item); } } } catch (Exception ex) { System.err.println("Error occured while loading base block chest content from config"); return null; } starterChestContents = contents.toArray(new ItemStack[contents.size()]); } return starterChestContents; } public static void unsetTags() { for (Player p : Bukkit.getOnlinePlayers()) { p.setPlayerListName(p.getName()); p.setDisplayName(p.getName()); } } public static void setTags() { for (BattlePlayer player : BattlePlugin.game().getBattlePlayerManager().getAllBattlePlayers()) { setDisplayAndListName(player); } } public static void setDisplayAndListName(BattlePlayer player) { if (player != null && player.hasPlayer()) { Team t = BattlePlugin.game().getTeamManager().getTeamByPlayer(player); if (t != null) { String display = t.getTeamColor().getChatColor() + player.getName(); if (display.length() > 15) { display = display.substring(0, 15); } player.setPlayerListName(display); player.setDisplayName(display + ChatColor.RESET); } } } public static Scoreboard getBattleScoreboard() { if (scoreboardBattle == null) { scoreboardBattle = Bukkit.getScoreboardManager().getNewScoreboard(); for (Player p : Bukkit.getOnlinePlayers()) { addToScoreboard(p); } } return scoreboardBattle; } public static Objective getBattleStatsObjective() { if (objectiveBattleStats == null) { objectiveBattleStats = getBattleScoreboard().registerNewObjective("stats", "dummy"); objectiveBattleStats.setDisplaySlot(DisplaySlot.SIDEBAR); } return objectiveBattleStats; } public static void addToScoreboard(Player p) { p.setScoreboard(getBattleScoreboard()); } public static void updateScoreboard() { Scoreboard scoreboard = getBattleScoreboard(); Objective objective = getBattleStatsObjective(); if (!BattlePlugin.game().isStarted()) { if (objective.getDisplayName().equals(ChatColor.BOLD + "Battle Teamstats")) { for (String entry : scoreboard.getEntries()) { scoreboard.resetScores(entry); } } objective.setDisplayName(ChatColor.BOLD + "Battle Infos"); objective.getScore(ChatColor.ITALIC + "Battle v" + getShortVersion()).setScore(9); objective.getScore(ChatColor.ITALIC + "").setScore(8); objective.getScore(ChatColor.ITALIC + "by").setScore(7); objective.getScore(ChatColor.ITALIC + "EXSolo").setScore(6); objective.getScore(ChatColor.ITALIC + "Rene8888").setScore(5); objective.getScore(ChatColor.ITALIC + "").setScore(4); objective.getScore(ChatColor.ITALIC + "Download:").setScore(3); objective.getScore(ChatColor.ITALIC + "bit.ly").setScore(2); objective.getScore(ChatColor.ITALIC + "/battleplugin").setScore(1); } else { if (objective.getDisplayName().equals(ChatColor.BOLD + "Battle Infos")) { for (String entry : scoreboard.getEntries()) { scoreboard.resetScores(entry); } } objective.setDisplayName(ChatColor.BOLD + "Battle Teamstats"); for (Team t : BattlePlugin.game().getTeamManager().getTeams()) { if (t.getPlayers().size() > 0) { objective.getScore(t.getTeamColor().getChatColor() + "Team " + t.getTeamColor().getLongName()).setScore(t.getLifes()); } else { scoreboard.resetScores(t.getTeamColor().getChatColor() + "Team " + t.getTeamColor().getLongName()); } } } } public static ItemStack removeEnchants(ItemStack input) { for (Enchantment enchantment : input.getEnchantments().keySet()) { input.removeEnchantment(enchantment); } return input; } public static void respawnPlayer(final Player player, int delay) { new BukkitRunnable() { @Override public void run() { try { Object nmsPlayer = player.getClass().getMethod("getHandle").invoke(player); Object packet = Class.forName(nmsPlayer.getClass().getPackage().getName() + ".PacketPlayInClientCommand").newInstance(); Class<?> enumClass = Class.forName(nmsPlayer.getClass().getPackage().getName() + ".EnumClientCommand"); for (Object ob : enumClass.getEnumConstants()) { if (ob.toString().equals("PERFORM_RESPAWN")) { packet = packet.getClass().getConstructor(enumClass).newInstance(ob); } } Object con = nmsPlayer.getClass().getField("playerConnection").get(nmsPlayer); con.getClass().getMethod("a", packet.getClass()).invoke(con, packet); } catch (Exception e) { e.printStackTrace(); } } }.runTaskLater(BattlePlugin.instance(), delay); } public static File getSaveFile() { return new File(BattlePlugin.instance().getDataFolder(), SAVE_FILE_NAME); } public static String getShortVersion() { String version = BattlePlugin.instance().getDescription().getVersion(); version = version.substring(0, version.indexOf('-')); return version; } }