Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package vanhester.MiniGamePlugin;
- import java.util.ArrayList;
- import java.util.List;
- import net.md_5.bungee.api.ProxyServer;
- import net.md_5.bungee.api.connection.ProxiedPlayer;
- import org.bukkit.Bukkit;
- import org.bukkit.ChatColor;
- import org.bukkit.Location;
- import org.bukkit.command.*;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.Listener;
- import org.bukkit.event.entity.PlayerDeathEvent;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.scoreboard.DisplaySlot;
- import org.bukkit.scoreboard.Objective;
- import org.bukkit.scoreboard.Scoreboard;
- import org.bukkit.scoreboard.ScoreboardManager;
- import org.bukkit.scoreboard.Team;
- import javax.annotation.meta.*;
- public class MiniGamePlugin extends JavaPlugin implements Listener {
- private List<Player> team1Players = new ArrayList<>();
- private List<Player> team2Players = new ArrayList<>();
- private int team1Score = 0;
- private int team2Score = 0;
- private int maxScore = 5;
- private boolean gameStarted = false;
- private ScoreboardManager scoreboardManager;
- private Scoreboard scoreboard;
- private Objective objective;
- private ProxyServer proxyServer = ProxyServer.getInstance();
- private int numPlayers = 0;
- private int teleportDelay = 60;
- private List<Player> players = new ArrayList<>();
- private List<Player> team1 = new ArrayList<>();
- private List<Player> team2 = new ArrayList<>();
- private int timerId = -1;
- private int gameMode = 0;
- private int timeLimit = 0;
- private int lives = 0;
- @Override
- public void onEnable() {
- getServer().getPluginManager().registerEvents(this, this);
- scoreboardManager = Bukkit.getScoreboardManager();
- scoreboard = scoreboardManager.getNewScoreboard();
- objective = scoreboard.registerNewObjective("scoreboard", "dummy", ChatColor.GREEN + "Scoreboard");
- objective.setDisplaySlot(DisplaySlot.SIDEBAR);
- objective.getScore(ChatColor.BLUE + "Team 1:").setScore(team1Score);
- objective.getScore(ChatColor.RED + "Team 2:").setScore(team2Score);
- }
- public void startTeleportTimer() {
- if (numPlayers == 2) {
- timerId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
- public void run() {
- teleportPlayers();
- }
- }, teleportDelay * 20);
- } else if (numPlayers == 3) {
- Bukkit.getScheduler().cancelTask(timerId);
- timerId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, new Runnable() {
- public void run() {
- teleportPlayers();
- }
- }, 10 * 20);
- }
- }
- public void teleportPlayers() {
- if (numPlayers == 2 || numPlayers == 3) {
- for (Player p : players) {
- if (team1Players.contains(p)) {
- p.teleport(new Location(p.getWorld(), 0, 64, 0));
- } else if (team2Players.contains(p)) {
- p.teleport(new Location(p.getWorld(), 100, 64, 100));
- }
- }
- }
- }
- @Override
- public void onDisable() {
- if (team1Score >= maxScore) {
- endGame(team1Players);
- } else if (team2Score >= maxScore) {
- endGame(team2Players);
- }
- for (Player p : team1Players) {
- p.getInventory().clear();
- p.teleport(p.getWorld().getSpawnLocation());
- }
- for (Player p : team2Players) {
- p.getInventory().clear();
- p.teleport(p.getWorld().getSpawnLocation());
- }
- team1Players.clear();
- team2Players.clear();
- team1Score = 0;
- team2Score = 0;
- gameStarted = false;
- }
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent event) {
- Player player = event.getPlayer();
- if (team1Players.size() <= team2Players.size()) {
- team1Players.add(player);
- player.sendMessage(ChatColor.BLUE + "You have joined Team 1.");
- Team team = scoreboard.registerNewTeam("team1");
- team.addEntry(player.getName());
- team.setPrefix(ChatColor.BLUE.toString());
- } else {
- team2Players.add(player);
- player.sendMessage(ChatColor.RED + "You have joined Team 2.");
- Team team = scoreboard.registerNewTeam("team2");
- team.addEntry(player.getName());
- team.setPrefix(ChatColor.RED.toString());
- }
- player.setScoreboard(scoreboard);
- }
- @EventHandler
- public void onPlayerDeath(PlayerDeathEvent event) {
- Player player = event.getEntity();
- if (team1Players.contains(player)) {
- team2Score++;
- player.sendMessage(ChatColor.RED + "You have been eliminated.");
- if (team2Score >= maxScore) {
- endGame(team2Players);
- }
- } else if (team2Players.contains(player)) {
- team1Score++;
- player.sendMessage(ChatColor.RED + "You have been eliminated.");
- if (team1Score >= maxScore) {
- endGame(team1Players);
- }
- }
- updateScoreboard();
- }
- @Override
- ChatGPTBot, [30.05.2023 1:33]
- 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:
- private int playerCounter = 0;
- private int teleportTaskId = -1;
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent event) {
- Player player = event.getPlayer();
- playerCounter++;
- if (team1Players.size() <= team2Players.size()) {
- team1Players.add(player);
- player.sendMessage(ChatColor.BLUE + "You have joined Team 1.");
- Team team = scoreboard.registerNewTeam("team1");
- team.addEntry(player.getName());
- team.setPrefix(ChatColor.BLUE.toString());
- } else {
- team2Players.add(player);
- player.sendMessage(ChatColor.RED + "You have joined Team 2.");
- Team team = scoreboard.registerNewTeam("team2");
- team.addEntry(player.getName());
- team.setPrefix(ChatColor.RED.toString());
- }
- player.setScoreboard(scoreboard);
- if (playerCounter == 2) {
- teleportTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
- // Teleport players to a certain location
- playerCounter = 0;
- }, 60 * 20);
- } else if (playerCounter == 3) {
- Bukkit.getScheduler().cancelTask(teleportTaskId);
- teleportTaskId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, () -> {
- // Teleport players to a certain location
- playerCounter = 0;
- }, 10 * 20);
- }
- }
- 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:
- private Objective playerCounterObjective;
- public void onEnable() {
- // Initialize scoreboard and playerCounterObjective
- playerCounterObjective = scoreboard.registerNewObjective("playerCounter", "dummy", "Players Joined");
- }
- @EventHandler
- public void onPlayerJoin(PlayerJoinEvent event) {
- Player player = event.getPlayer();
- playerCounter++;
- playerCounterObjective.getScore(player.getName()).setScore(playerCounter);
- // Rest of the code
- }
- public void updateScoreboard() {
- for (Player player : players) {
- player.setScoreboard(scoreboard);
- }
- }
- 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:
- private int gameMode = 0; // 0 = Normal, 1 = Time-based, 2 = Life-based
- private int timeLimit = 0; // In seconds
- private int lives = 0;
- public void startGame(int mode, int limit, int numLives) {
- gameMode = mode;
- timeLimit = limit;
- lives = numLives;
- // Rest of the code
- }
- @Override
- public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
- if (command.getName().equalsIgnoreCase("startgame")) {
- if (gameStarted) {
- sender.sendMessage(ChatColor.RED + "Game already started!");
- return true;
- }
- if (players.size() < 2) {
- sender.sendMessage(ChatColor.RED + "Not enough players to start the game!");
- return true;
- }
- if (args.length >= 1) {
- try {
- gameMode = Integer.parseInt(args[0]);
- } catch (NumberFormatException e) {
- sender.sendMessage(ChatColor.RED + "Invalid game mode!");
- return true;
- }
- }
- if (args.length >= 2) {
- try {
- timeLimit = Integer.parseInt(args[1]);
- } catch (NumberFormatException e) {
- sender.sendMessage(ChatColor.RED + "Invalid time limit!");
- return true;
- }
- }
- if (args.length >= 3) {
- try {
- lives = Integer.parseInt(args[2]);
- } catch (NumberFormatException e) {
- sender.sendMessage(ChatColor.RED + "Invalid number of lives!");
- return true;
- }
- }
- if (gameMode == 1) {
- sender.sendMessage(ChatColor.GREEN + "Starting game with time limit " + timeLimit + " seconds...");
- timerId = Bukkit.getScheduler().scheduleSyncDelayedTask(this, this::endGame, timeLimit * 20);
- } else {
- sender.sendMessage(ChatColor.GREEN + "Starting game...");
- }
- gameStarted = true;
- startGame(gameMode, time
- private void endGame(List<Player> winners) {
- gameStarted = false;
- for (Player p : winners) {
- ProxiedPlayer proxiedPlayer = proxyServer.getPlayer(p.getUniqueId());
- if (proxiedPlayer != null) {
- proxiedPlayer.connect(proxyServer.getServerInfo("lobby"));
- }
- p.sendMessage(ChatColor.GREEN + "Congratulations! You have won the game!");
- }
- for (Player p : team1Players) {
- p.getInventory().clear();
- p.teleport(p.getWorld().getSpawnLocation());
- }
- for (Player p : team2Players) {
- p.getInventory().clear();
- p.teleport(p.getWorld().getSpawnLocation());
- }
- team1Players.clear();
- team2Players.clear();
- team1Score = 0;
- team2Score = 0;
- updateScoreboard();
- }
- private void startGame() {
- gameStarted = true;
- for (Player p : team1Players) {
- p.teleport(new Location(p.getWorld(), -10, 70, 0));
- p.sendMessage(ChatColor.GREEN + "The game has started! Eliminate the other team to win!");
- }
- for (Player p : team2Players) {
- p.teleport(new Location(p.getWorld(), 10, 70, 0));
- p.sendMessage(ChatColor.GREEN + "The game has started! Eliminate the other team to win!");
- }
- }
- private void updateScoreboard() {
- objective.getScore(ChatColor.BLUE + "Team 1:").setScore(team1Score);
- objective.getScore(ChatColor.RED + "Team 2:").setScore(team2Score);
- for (Player p : team1Players) {
- p.setScoreboard(scoreboard);
- }
- for (Player p : team2Players) {
- p.setScoreboard(scoreboard);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment