Advertisement
Guest User

Untitled

a guest
Jan 19th, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.98 KB | None | 0 0
  1. private int lobbyTask;
  2. private int startingTask;
  3. private int gameEndTask;
  4. private int gameResetTask;
  5. private int playerSpreadTask;
  6.  
  7. private net.vexar.vexarspleef.map.Map currentMap;
  8.  
  9. private VexarSpleef spleef;
  10. private GameStatus gameStatus;
  11.  
  12. private List<UUID> humans = new ArrayList<>();
  13. private List<UUID> winner = new ArrayList<>();
  14.  
  15. private Map<UUID, Integer> coinsEarned = new HashMap<>();
  16. private Map<UUID, Integer> closeEncounters = new HashMap<>();
  17. public List<BlockState> blocklist = new ArrayList<BlockState>();
  18.  
  19.  
  20. public GameManager(VexarSpleef spleef) {
  21. this.spleef = spleef;
  22. gameStatus = GameStatus.IN_LOBBY;
  23. lobbyTask = spleef.getServer().getScheduler().scheduleSyncRepeatingTask(spleef, new GameLobbyTask(spleef), 0L, 20L);
  24. currentMap = new net.vexar.vexarspleef.map.Map(spleef.getConfigFile().getString("map"));
  25. updateGame(spleef.getConfigFile().getString("db-server"),spleef.getConfigFile().getString("bungee-server"),gameStatus.toString().toUpperCase(), Bukkit.getOnlinePlayers().size(), spleef.getConfigFile().getConfig().getInt("maxPlayers") );
  26.  
  27. }
  28.  
  29. public void startGameCountdown() {
  30. gameStatus = GameStatus.START_COUNTDOWN;
  31. updateGame(spleef.getConfigFile().getString("db-server"),spleef.getConfigFile().getString("bungee-server"),gameStatus.toString().toUpperCase(), Bukkit.getOnlinePlayers().size(), spleef.getConfigFile().getConfig().getInt("maxPlayers") );
  32.  
  33. spleef.getServer().getScheduler().cancelTask(lobbyTask);
  34. startingTask = spleef.getServer().getScheduler().scheduleSyncRepeatingTask(spleef, new GameStartingTask(spleef), 0L, 20L);
  35. updateScoreboards();
  36. for (Player p : Bukkit.getOnlinePlayers()) {
  37. if (!humans.contains(p.getUniqueId())) {
  38. humans.add(p.getUniqueId());
  39. }
  40. }
  41. }
  42.  
  43. public void resetLobby() {
  44. for (Player p : Bukkit.getOnlinePlayers()) {
  45. p.sendMessage(spleef.getLang().getMessage("lobbyReset"));
  46. /*
  47. Teleport to hub server
  48. */
  49. }
  50. gameStatus = GameStatus.IN_LOBBY;
  51. updateGame(spleef.getConfigFile().getString("db-server"),spleef.getConfigFile().getString("bungee-server"),gameStatus.toString().toUpperCase(), Bukkit.getOnlinePlayers().size(), spleef.getConfigFile().getConfig().getInt("maxPlayers") );
  52. spleef.getServer().getScheduler().cancelTask(startingTask);
  53. lobbyTask = spleef.getServer().getScheduler().scheduleSyncRepeatingTask(spleef, new GameLobbyTask(spleef), 0L, 20L);
  54. updateScoreboards();
  55. }
  56.  
  57.  
  58. public void startGame() {
  59. gameStatus = GameStatus.STARTING;
  60. updateGame(spleef.getConfigFile().getString("db-server"),spleef.getConfigFile().getString("bungee-server"),gameStatus.toString().toUpperCase(), Bukkit.getOnlinePlayers().size(), spleef.getConfigFile().getConfig().getInt("maxPlayers") );
  61. spleef.getServer().getScheduler().cancelTask(startingTask);
  62. for (Player p : Bukkit.getOnlinePlayers()) {
  63. p.sendMessage(spleef.getLang().getMessage("gameStarting"));
  64. addPlayerCoins(p.getUniqueId());
  65. coinsEarned.put(p.getUniqueId(), 0);
  66. p.getInventory().clear();
  67. p.teleport(spleef.getDataManager().getMapByName(spleef.getConfigFile().getString("map")).getGameSpawn());
  68. spleef.getKit(VexarCore.getInstance().getUserManager().getUser(p).getVexarRank()).giveKit(p);
  69. addPlayerEncounters(p.getUniqueId());
  70. }
  71. updateScoreboards();
  72. playerSpreadTask = spleef.getServer().getScheduler().scheduleSyncRepeatingTask(spleef, new PlayerSpreadTask(spleef), 0L, 20L);
  73. }
  74.  
  75. public void gameOn() {
  76. gameStatus = GameStatus.IN_GAME;
  77. updateGame(spleef.getConfigFile().getString("db-server"),spleef.getConfigFile().getString("bungee-server"),gameStatus.toString().toUpperCase(), Bukkit.getOnlinePlayers().size(), spleef.getConfigFile().getConfig().getInt("maxPlayers") );
  78. spleef.getServer().getScheduler().cancelTask(playerSpreadTask);
  79.  
  80. for (Player p : Bukkit.getOnlinePlayers()) {
  81. if (p != null) {
  82. if (!humans.contains(p.getUniqueId())) {
  83. humans.add(p.getUniqueId());
  84. }
  85. p.playSound(p.getLocation(), Sound.AMBIENCE_THUNDER, 1f, 1f);
  86. p.setGameMode(GameMode.SURVIVAL);
  87.  
  88. }
  89. }
  90. updateScoreboards();
  91. gameEndTask = spleef.getServer().getScheduler().scheduleSyncRepeatingTask(spleef, new GameEndTask(spleef), 0L, 20L);
  92. }
  93.  
  94.  
  95. public void doReset() {
  96. for (BlockState block: blocklist){
  97. block.update(true);
  98. }
  99. blocklist.clear();
  100. for (Player p : Bukkit.getOnlinePlayers()) {
  101. /*
  102. SEND TO HUB
  103. */
  104. p.setExp(0);
  105. p.setLevel(0);
  106. p.getInventory().clear();
  107. p.getActivePotionEffects().clear();
  108. p.setHealth(20L);
  109. p.getInventory().setArmorContents(null);
  110. p.setGameMode(GameMode.ADVENTURE);
  111. for (int i = 0; i <= 8; i++) {
  112. if (spleef.getIdToItem().containsKey("hotbarslot" + i)) {
  113. p.getInventory().setItem(i, spleef.getIdToItem().get("hotbarslot" + i).getItem());
  114. }
  115. }
  116. }
  117. spleef.getServer().getScheduler().cancelTask(gameResetTask);
  118. spleef.getServer().getScheduler().cancelTasks(spleef);
  119. gameStatus = GameStatus.IN_LOBBY;
  120. updateGame(spleef.getConfigFile().getString("db-server"),spleef.getConfigFile().getString("bungee-server"),gameStatus.toString().toUpperCase(), Bukkit.getOnlinePlayers().size(), spleef.getConfigFile().getConfig().getInt("maxPlayers") );
  121. lobbyTask = spleef.getServer().getScheduler().scheduleSyncRepeatingTask(spleef, new GameLobbyTask(spleef), 0L, 20L);
  122. humans.clear();
  123. currentMap = null;
  124. winner.clear();
  125. closeEncounters.clear();
  126. coinsEarned.clear();
  127. }
  128.  
  129. public void endGame(GameEnd reason) {
  130. gameStatus = GameStatus.RESETTING;
  131. updateGame(spleef.getConfigFile().getString("db-server"),spleef.getConfigFile().getString("bungee-server"),gameStatus.toString().toUpperCase(), Bukkit.getOnlinePlayers().size(), spleef.getConfigFile().getConfig().getInt("maxPlayers") );
  132. spleef.getServer().getScheduler().cancelTask(gameEndTask);
  133. for (Player p : Bukkit.getOnlinePlayers()) {
  134. User user = VexarCore.getInstance().getUserManager().getUser(p);
  135. /*
  136. SEND TO HUB
  137. */
  138. switch (reason) {
  139. case WINNER:
  140. if (winner.isEmpty()) {
  141. if (!humans.isEmpty()) {
  142. winner.add(Bukkit.getOnlinePlayers().iterator().next().getUniqueId());
  143. } else {
  144. Random r = new Random();
  145. int d = r.nextInt(humans.size());
  146. winner.add(humans.get(d));
  147. }
  148.  
  149. }
  150. if (winner.contains(p.getUniqueId())) {
  151. VexarCore.getInstance().getUserManager().getUser(p).addCoins(25);
  152. System.out.println(VexarCore.getInstance().getUserManager().getUser(p).getCoins());
  153. p.sendMessage(spleef.getLang().getMessageComplex("winner-reward", new Object[]{15}));
  154. p.teleport(spleef.getLocManager().getLocation("lobby"));
  155. if (user.hasStat(new WinStat(0))) {
  156. user.setStat(new WinStat(1 + (int) user.getCurrentStat(new WinStat(0)).getValue()));
  157. } else {
  158. user.setStat(new WinStat(1));
  159. }
  160. if (user.hasStat(new PointStat(0))) {
  161. user.setStat(new PointStat(20 + (int) user.getCurrentStat(new PointStat(0)).getValue()));
  162. } else {
  163. user.setStat(new PointStat(20));
  164. }
  165. VexarCore.getInstance().getUserManager().saveUsers();
  166. } else {
  167. p.sendMessage(spleef.getLang().getMessageComplex("loser-reward", new Object[]{5}));
  168. VexarCore.getInstance().getUserManager().getUser(p).addCoins(5);
  169. System.out.println(VexarCore.getInstance().getUserManager().getUser(p).getCoins());
  170. User humU = VexarCore.getInstance().getUserManager().getUser(p);
  171. if (humU.hasStat(new LossStat(0))) {
  172. humU.setStat(new LossStat(1 + (int) humU.getCurrentStat(new LossStat(0)).getValue()));
  173. } else {
  174. humU.setStat(new LossStat(1));
  175. }
  176. if (user.hasStat(new PointStat(0))) {
  177. user.setStat(new PointStat(5 + (int) user.getCurrentStat(new PointStat(0)).getValue()));
  178. } else {
  179. user.setStat(new PointStat(5));
  180. }
  181. VexarCore.getInstance().getUserManager().saveUsers();
  182. }
  183. break;
  184. }
  185. }
  186. gameResetTask = spleef.getServer().getScheduler().scheduleSyncRepeatingTask(spleef, new GameOverTask(spleef), 0L, 20L);
  187. }
  188.  
  189. public void updateScoreboards() {
  190. for (Player p : Bukkit.getOnlinePlayers()) {
  191. if (gameStatus == GameStatus.IN_LOBBY || gameStatus == GameStatus.STARTING || gameStatus == GameStatus.START_COUNTDOWN) {
  192. doLobbyScoreboard(p);
  193. } else if (gameStatus == GameStatus.IN_GAME) {
  194. doInGameScoreboard(p);
  195. } else {
  196. p.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
  197. }
  198. }
  199. }
  200.  
  201. private void doInGameScoreboard(Player p) {
  202. // Scoreboard part
  203. ScoreboardManager manager = Bukkit.getScoreboardManager();
  204. Scoreboard board = manager.getNewScoreboard();
  205. Objective obj = board.registerNewObjective("Game", "dummy");
  206. HashMap<String, String> data = new HashMap<>();
  207. new BukkitRunnable()
  208. {
  209. @Override
  210. public void run() {
  211. data.put("TIME_LEFT", TimeUtil.getFormatedTime(GameEndTask.timeleft));
  212. String s = spleef.getScoreboards().getString("inGameSb.title");
  213. s = StrSubstitutor.replace(s, data, "{", "}");
  214. obj.setDisplayName(Color.color(s));
  215. }
  216. }.runTaskTimerAsynchronously(spleef, 0L, 10L);
  217. obj.setDisplayName(Color.color(spleef.getScoreboards().getString("inGameSb.title")));
  218. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
  219.  
  220. data.put("ME", p.getName());
  221. data.put("M_E", String.valueOf(0));
  222. data.put("COINS", "" + getCoinsEarned().get(p.getUniqueId()));
  223.  
  224. for (Player online : Bukkit.getOnlinePlayers()) {
  225. if (online != p) {
  226. data.put("TARGET",online.getName());
  227. }
  228. }
  229.  
  230.  
  231. int i = 15;
  232. if (p.getScoreboard() != board) {
  233. for (String str : spleef.getScoreboards().getConfig().getStringList("inGameSb.lines")) {
  234. if (i - 1 >= 1) {
  235. i--;
  236. if (str.contains("{")) {
  237. str = StrSubstitutor.replace(str, data, "{", "}");
  238. }
  239. str = Color.color(str);
  240. Team team;
  241. if (str.length() >= 16) {
  242. team = board.registerNewTeam(str.substring(0, 16));
  243. team.addEntry(str.substring(0, 16));
  244. team.setPrefix(str.substring(16));
  245. } else {
  246. team = board.registerNewTeam(str);
  247. team.addEntry(str);
  248. team.setPrefix("");
  249. }
  250. team.setSuffix("");
  251. obj.getScore(str).setScore(i);
  252. }
  253. }
  254. p.setScoreboard(board);
  255. }
  256. }
  257.  
  258. private void doLobbyScoreboard(Player p) {
  259. // Scoreboard part
  260. ScoreboardManager manager = Bukkit.getScoreboardManager();
  261. Scoreboard board = manager.getNewScoreboard();
  262. Objective obj = board.registerNewObjective("Lobby", "dummy");
  263. HashMap<String, String> data = new HashMap<>();
  264. new BukkitRunnable()
  265. {
  266. @Override
  267. public void run() {
  268. data.put("TIME_LEFT", TimeUtil.getFormatedTime(GameStartingTask.timer));
  269. String s = spleef.getScoreboards().getString("inLobbySb.title");
  270. s = StrSubstitutor.replace(s, data, "{", "}");
  271. obj.setDisplayName(Color.color(s));
  272. }
  273. }.runTaskTimerAsynchronously(spleef, 0L, 10L);
  274. obj.setDisplayName(Color.color(spleef.getScoreboards().getString("inLobbySb.title")));
  275. obj.setDisplaySlot(DisplaySlot.SIDEBAR);
  276.  
  277.  
  278. if (p.getScoreboard() != board) {
  279. int i = 15;
  280.  
  281. data.put("O", String.valueOf(Bukkit.getOnlinePlayers().size()));
  282. data.put("N", String.valueOf(spleef.getConfigFile().getConfig().getInt("minPlayers")));
  283. for (String str : spleef.getScoreboards().getConfig().getStringList("inLobbySb.lines")) {
  284. if (i - 1 >= 1) {
  285. i--;
  286. if (str.contains("{")) {
  287. str = StrSubstitutor.replace(str, data, "{", "}");
  288. }
  289. str = Color.color(str);
  290. Team team;
  291. if (str.length() >= 16) {
  292. team = board.registerNewTeam(str.substring(0, 16));
  293. team.addEntry(str.substring(0, 16));
  294. team.setPrefix(str.substring(16));
  295. } else {
  296. team = board.registerNewTeam(str);
  297. team.addEntry(str);
  298. team.setPrefix("");
  299. }
  300. team.setSuffix("");
  301. obj.getScore(str).setScore(i);
  302. }
  303. }
  304. p.setScoreboard(board);
  305. }
  306. }
  307.  
  308. public void addBlock(Block block) {
  309. blocklist.add(block.getState());
  310. }
  311.  
  312.  
  313. public boolean isAttached(Block base, Block attached) {
  314. MaterialData bs = attached.getState().getData();
  315.  
  316. if (!(bs instanceof Attachable)) return false;
  317.  
  318. Attachable at = (Attachable) bs;
  319.  
  320. if (attached.getRelative(at.getAttachedFace()).equals(base))
  321. return true;
  322.  
  323. return false;
  324. }
  325.  
  326. public List<UUID> getHumans() {
  327. return humans;
  328. }
  329.  
  330. public List<UUID> getWinner() {
  331. return winner;
  332. }
  333.  
  334. public void addPlayerCoins(UUID id) {
  335. coinsEarned.put(id, 0);
  336. }
  337.  
  338. public void addPlayerEncounters(UUID id) {
  339. closeEncounters.put(id, 0);
  340. }
  341.  
  342. public void addPlayerEncountersInt(UUID id, int i) {
  343. closeEncounters.put(id, (closeEncounters.get(id) + i));
  344. }
  345.  
  346. public int getCloseEncounters(UUID id) {
  347. return closeEncounters.get(id);
  348. }
  349.  
  350. public int getLobbyTask() {
  351. return lobbyTask;
  352. }
  353.  
  354. public int getStartingTask() {
  355. return startingTask;
  356. }
  357.  
  358. public int getGameEndTask() {
  359. return gameEndTask;
  360. }
  361.  
  362. public int getGameResetTask() {
  363. return gameResetTask;
  364. }
  365.  
  366. public int getPlayerSpreadTask() {
  367. return playerSpreadTask;
  368. }
  369.  
  370. public net.vexar.vexarspleef.map.Map getCurrentMap() {
  371. return currentMap;
  372. }
  373.  
  374. public VexarSpleef getSpleef() {
  375. return spleef;
  376. }
  377.  
  378. public GameStatus getGameStatus() {
  379. return gameStatus;
  380. }
  381.  
  382. public Map<UUID, Integer> getCoinsEarned() {
  383. return coinsEarned;
  384. }
  385.  
  386.  
  387. public void updateGame(String id, String name, String status, int online, int max) {
  388. String query = "UPDATE `minigames` SET `id` = ? `name` = ? `status` = ?, online = ?, `max` = ?";
  389. try {
  390. PreparedStatement stmt = VexarCore.getInstance().getDb().getConnection().prepareStatement(query);
  391. stmt.setString(1, id);
  392. stmt.setString(2, name);
  393. stmt.setString(3, status);
  394. stmt.setInt(4, online);
  395. stmt.setInt(5, max);
  396. stmt.executeUpdate();
  397. } catch (SQLException ex) {
  398. ex.printStackTrace();
  399. }
  400. }
  401. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement