Ivan_number_one

TeamCommand

May 28th, 2023 (edited)
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.48 KB | None | 0 0
  1. package vanhester.MiniGamePlugin;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import net.md_5.bungee.api.ProxyServer;
  5. import net.md_5.bungee.api.connection.ProxiedPlayer;
  6.  
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.ChatColor;
  9. import org.bukkit.Location;
  10. import org.bukkit.command.*;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.event.EventHandler;
  13. import org.bukkit.event.Listener;
  14. import org.bukkit.event.entity.PlayerDeathEvent;
  15. import org.bukkit.event.player.PlayerJoinEvent;
  16. import org.bukkit.plugin.java.JavaPlugin;
  17. import org.bukkit.scoreboard.DisplaySlot;
  18. import org.bukkit.scoreboard.Objective;
  19. import org.bukkit.scoreboard.Scoreboard;
  20. import org.bukkit.scoreboard.ScoreboardManager;
  21. import org.bukkit.scoreboard.Team;
  22.  
  23. import javax.annotation.meta.*;
  24.  
  25. public class MiniGamePlugin extends JavaPlugin implements Listener {
  26. private List<Player> team1Players = new ArrayList<>();
  27. private List<Player> team2Players = new ArrayList<>();
  28. private int team1Score = 0;
  29. private int team2Score = 0;
  30. private int maxScore = 5;
  31. private boolean gameStarted = false;
  32. private ScoreboardManager scoreboardManager;
  33. private Scoreboard scoreboard;
  34. private Objective objective;
  35. private ProxyServer proxyServer = ProxyServer.getInstance();
  36. private int numPlayers = 0;
  37. private int teleportDelay = 60;
  38. private List<Player> players = new ArrayList<>();
  39. private List<Player> team1 = new ArrayList<>();
  40. private List<Player> team2 = new ArrayList<>();
  41. private int timerId = -1;
  42. private int gameMode = 0;
  43. private int timeLimit = 0;
  44. private int lives = 0;
  45.  
  46. @Override
  47. public void onEnable() {
  48. getServer().getPluginManager().registerEvents(this, this);
  49. scoreboardManager = Bukkit.getScoreboardManager();
  50. scoreboard = scoreboardManager.getNewScoreboard();
  51. objective = scoreboard.registerNewObjective("scoreboard", "dummy", ChatColor.GREEN + "Scoreboard");
  52. objective.setDisplaySlot(DisplaySlot.SIDEBAR);
  53. objective.getScore(ChatColor.BLUE + "Team 1:").setScore(team1Score);
  54. objective.getScore(ChatColor.RED + "Team 2:").setScore(team2Score);
  55. }
  56.  
  57. public void startTeleportTimer() {
  58. if (numPlayers == 2) {
  59. timerId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
  60. public void run() {
  61. teleportPlayers();
  62. }
  63. }, teleportDelay * 20);
  64. } else if (numPlayers == 3) {
  65. Bukkit.getScheduler().cancelTask(timerId);
  66. timerId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
  67. public void run() {
  68. teleportPlayers();
  69. }
  70. }, 10 * 20);
  71. }
  72. }
  73.  
  74. public void teleportPlayers() {
  75. if (numPlayers == 2 || numPlayers == 3) {
  76. for (Player p : players) {
  77. if (team1Players.contains(p)) {
  78. p.teleport(new Location(p.getWorld(), 0, 64, 0));
  79. } else if (team2Players.contains(p)) {
  80. p.teleport(new Location(p.getWorld(), 100, 64, 100));
  81. }
  82. }
  83. }
  84. }
  85.  
  86. @Override
  87. public void onDisable() {
  88. if (team1Score >= maxScore) {
  89. endGame(team1Players);
  90. } else if (team2Score >= maxScore) {
  91. endGame(team2Players);
  92. }
  93. for (Player p : team1Players) {
  94. p.getInventory().clear();
  95. p.teleport(p.getWorld().getSpawnLocation());
  96. }
  97. for (Player p : team2Players) {
  98. p.getInventory().clear();
  99. p.teleport(p.getWorld().getSpawnLocation());
  100. }
  101. team1Players.clear();
  102. team2Players.clear();
  103. team1Score = 0;
  104. team2Score = 0;
  105. gameStarted = false;
  106. }
  107.  
  108. @EventHandler
  109. public void onPlayerJoin(PlayerJoinEvent event) {
  110. Player player = event.getPlayer();
  111. if (team1Players.size() <= team2Players.size()) {
  112. team1Players.add(player);
  113. player.sendMessage(ChatColor.BLUE + "You have joined Team 1.");
  114. Team team = scoreboard.registerNewTeam("team1");
  115. team.addEntry(player.getName());
  116. team.setPrefix(ChatColor.BLUE.toString());
  117. } else {
  118. team2Players.add(player);
  119. player.sendMessage(ChatColor.RED + "You have joined Team 2.");
  120. Team team = scoreboard.registerNewTeam("team2");
  121. team.addEntry(player.getName());
  122. team.setPrefix(ChatColor.RED.toString());
  123. }
  124. player.setScoreboard(scoreboard);
  125. }
  126.  
  127. @EventHandler
  128. public void onPlayerDeath(PlayerDeathEvent event) {
  129. Player player = event.getEntity();
  130. if (team1Players.contains(player)) {
  131. team2Score++;
  132. player.sendMessage(ChatColor.RED + "You have been eliminated.");
  133. if (team2Score >= maxScore) {
  134. endGame(team2Players);
  135. }
  136. } else if (team2Players.contains(player)) {
  137. team1Score++;
  138. player.sendMessage(ChatColor.RED + "You have been eliminated.");
  139. if (team1Score >= maxScore) {
  140. endGame(team1Players);
  141. }
  142. }
  143. updateScoreboard();
  144. }
  145.  
  146. @Override
  147. ChatGPTBot, [30.05.2023 1:33]
  148. To add a timer for teleporting players after two players join the game, you can modify the onPlayerJoin() method to include a counter that increments every time a player joins the game. When the counter reaches 2, you can schedule a task to teleport the players to a certain location after 60 seconds. If a third player joins the game, you can cancel the previous task and schedule a new one to teleport the players after 10 seconds. Here's an example implementation:
  149.  
  150. private int playerCounter = 0;
  151. private int teleportTaskId = -1;
  152.  
  153. @EventHandler
  154. public void onPlayerJoin(PlayerJoinEvent event) {
  155. Player player = event.getPlayer();
  156. playerCounter++;
  157. if (team1Players.size() <= team2Players.size()) {
  158. team1Players.add(player);
  159. player.sendMessage(ChatColor.BLUE + "You have joined Team 1.");
  160. Team team = scoreboard.registerNewTeam("team1");
  161. team.addEntry(player.getName());
  162. team.setPrefix(ChatColor.BLUE.toString());
  163. } else {
  164. team2Players.add(player);
  165. player.sendMessage(ChatColor.RED + "You have joined Team 2.");
  166. Team team = scoreboard.registerNewTeam("team2");
  167. team.addEntry(player.getName());
  168. team.setPrefix(ChatColor.RED.toString());
  169. }
  170. player.setScoreboard(scoreboard);
  171. if (playerCounter == 2) {
  172. teleportTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
  173. // Teleport players to a certain location
  174. playerCounter = 0;
  175. }, 60 * 20);
  176. } else if (playerCounter == 3) {
  177. Bukkit.getScheduler().cancelTask(teleportTaskId);
  178. teleportTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
  179. // Teleport players to a certain location
  180. playerCounter = 0;
  181. }, 10 * 20);
  182. }
  183. }
  184.  
  185.  
  186. To add a scoreboard that shows the number of players who joined the game before the timer starts, you can create a new objective and add a score for each player who joins the game. You can update the score whenever a player joins the game and display the scoreboard to all players. Here's an example implementation:
  187.  
  188. private Objective playerCounterObjective;
  189.  
  190. public void onEnable() {
  191. // Initialize scoreboard and playerCounterObjective
  192. playerCounterObjective = scoreboard.registerNewObjective("playerCounter", "dummy", "Players Joined");
  193. }
  194.  
  195. @EventHandler
  196. public void onPlayerJoin(PlayerJoinEvent event) {
  197. Player player = event.getPlayer();
  198. playerCounter++;
  199. playerCounterObjective.getScore(player.getName()).setScore(playerCounter);
  200. // Rest of the code
  201. }
  202.  
  203. public void updateScoreboard() {
  204. for (Player player : players) {
  205. player.setScoreboard(scoreboard);
  206. }
  207. }
  208.  
  209.  
  210. To add customizable game modes, you can add parameters to the startGame() method that allow you to set the game mode, time limit, and number of lives. You can also modify the onCommand() method to handle commands that set these parameters. Here's an example implementation:
  211.  
  212. private int gameMode = 0; // 0 = Normal, 1 = Time-based, 2 = Life-based
  213. private int timeLimit = 0; // In seconds
  214. private int lives = 0;
  215.  
  216. public void startGame(int mode, int limit, int numLives) {
  217. gameMode = mode;
  218. timeLimit = limit;
  219. lives = numLives;
  220. // Rest of the code
  221. }
  222.  
  223. @Override
  224. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  225. if (command.getName().equalsIgnoreCase("startgame")) {
  226. if (gameStarted) {
  227. sender.sendMessage(ChatColor.RED + "Game already started!");
  228. return true;
  229. }
  230. if (players.size() < 2) {
  231. sender.sendMessage(ChatColor.RED + "Not enough players to start the game!");
  232. return true;
  233. }
  234. if (args.length >= 1) {
  235. try {
  236. gameMode = Integer.parseInt(args[0]);
  237. } catch (NumberFormatException e) {
  238. sender.sendMessage(ChatColor.RED + "Invalid game mode!");
  239. return true;
  240. }
  241. }
  242. if (args.length >= 2) {
  243. try {
  244. timeLimit = Integer.parseInt(args[1]);
  245. } catch (NumberFormatException e) {
  246. sender.sendMessage(ChatColor.RED + "Invalid time limit!");
  247. return true;
  248. }
  249. }
  250. if (args.length >= 3) {
  251. try {
  252. lives = Integer.parseInt(args[2]);
  253. } catch (NumberFormatException e) {
  254. sender.sendMessage(ChatColor.RED + "Invalid number of lives!");
  255. return true;
  256. }
  257. }
  258. if (gameMode == 1) {
  259. sender.sendMessage(ChatColor.GREEN + "Starting game with time limit " + timeLimit + " seconds...");
  260. timerId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, this::endGame, timeLimit * 20);
  261. } else {
  262. sender.sendMessage(ChatColor.GREEN + "Starting game...");
  263. }
  264. gameStarted = true;
  265. startGame(gameMode, time
  266.  
  267. private void endGame(List<Player> winners) {
  268. gameStarted = false;
  269. for (Player p : winners) {
  270. ProxiedPlayer proxiedPlayer = proxyServer.getPlayer(p.getUniqueId());
  271. if (proxiedPlayer != null) {
  272. proxiedPlayer.connect(proxyServer.getServerInfo("lobby"));
  273. }
  274. p.sendMessage(ChatColor.GREEN + "Congratulations! You have won the game!");
  275. }
  276. for (Player p : team1Players) {
  277. p.getInventory().clear();
  278. p.teleport(p.getWorld().getSpawnLocation());
  279. }
  280. for (Player p : team2Players) {
  281. p.getInventory().clear();
  282. p.teleport(p.getWorld().getSpawnLocation());
  283. }
  284. team1Players.clear();
  285. team2Players.clear();
  286. team1Score = 0;
  287. team2Score = 0;
  288. updateScoreboard();
  289. }
  290.  
  291.  
  292. private void startGame() {
  293. gameStarted = true;
  294. for (Player p : team1Players) {
  295. p.teleport(new Location(p.getWorld(), -10, 70, 0));
  296. p.sendMessage(ChatColor.GREEN + "The game has started! Eliminate the other team to win!");
  297. }
  298. for (Player p : team2Players) {
  299. p.teleport(new Location(p.getWorld(), 10, 70, 0));
  300. p.sendMessage(ChatColor.GREEN + "The game has started! Eliminate the other team to win!");
  301. }
  302. }
  303.  
  304.  
  305. private void updateScoreboard() {
  306. objective.getScore(ChatColor.BLUE + "Team 1:").setScore(team1Score);
  307. objective.getScore(ChatColor.RED + "Team 2:").setScore(team2Score);
  308. for (Player p : team1Players) {
  309. p.setScoreboard(scoreboard);
  310. }
  311. for (Player p : team2Players) {
  312. p.setScoreboard(scoreboard);
  313. }
  314. }
  315. }
Advertisement
Add Comment
Please, Sign In to add comment