Island.java
import org.bukkit.Location; public class Island { private Location spawnLocation; public Island(Location spawnLocation) { this.spawnLocation = spawnLocation; } public Location getSpawnLocation() { return spawnLocation; } }
Arena.java
import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.util.ArrayList; import java.util.List; public class Arena { private String name; private Location lobbyLocation; private List<Player> players; private boolean isRunning; private List<Island> islands; private int gameTimer; private int taskId; public Arena(String name, Location lobbyLocation) { this.name = name; this.lobbyLocation = lobbyLocation; this.players = new ArrayList<>(); this.isRunning = false; this.islands = new ArrayList<>(); // Здесь можно создать острова и добавить их в список islands.add(new Island(new Location(lobbyLocation.getWorld(), x1, y1, z1))); islands.add(new Island(new Location(lobbyLocation.getWorld(), x2, y2, z2))); // Добавьте остальные острова } public String getName() { return name; } public Location getLobbyLocation() { return lobbyLocation; } public List<Player> getPlayers() { return players; } public boolean isRunning() { return isRunning; } public void addPlayer(Player player) { if (!players.contains(player)) { players.add(player); player.teleport(lobbyLocation); player.sendMessage("Вы присоединились к арене " + name); if (players.size() >= 2 && !isRunning) { startGame(); } } else { player.sendMessage("Вы уже находитесь на этой арене."); } } public void removePlayer(Player player) { if (players.contains(player)) { players.remove(player); if (isRunning) { // Добавьте код для обработки выхода игрока во время игры } if (players.size() <= 1 && isRunning) { endGame(); } } else { player.sendMessage("Вы не находитесь на этой арене."); } } public void startGame() { if (players.size() >= 2 && !isRunning) { isRunning = true; distributePlayers(); // Запуск таймера (например, на 60 секунд) перед началом игры gameTimer = 60; // 60 секунд taskId = Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() { @Override public void run() { if (gameTimer > 0) { // Обновление таймера и обработка событий во время игры gameTimer--; } else { endGame(); // Завершение игры, когда время истекло Bukkit.getScheduler().cancelTask(taskId); } } }, 0L, 20L); // Запуск каждую секунду (20 тиков в секунде) } else { // Добавьте сообщение об ошибке, если игроков недостаточно для начала игры } } public void endGame() { if (isRunning) { isRunning = false; // Здесь добавьте код для подсчета победителей и выдачи наград Player winner = determineWinner(); // Реализуйте метод для определения победителя if (winner != null) { Bukkit.broadcastMessage("Игра завершена. Победитель: " + winner.getName()); // Раздайте награды победителю и другим игрокам, если необходимо } else { Bukkit.broadcastMessage("Игра завершена. Нет победителей."); // Обработайте случай, если нет победителей (например, ничья) } // Добавьте другую логику завершения игры, такую как очистка островов и т. д. } } // Реализуйте метод для определения победителя private Player determineWinner() { // Добавьте здесь код для определения победителя, основываясь на вашей логике SkyWars // Например, вы можете проверить, кто остался в живых или имеет наибольшее количество убийств и так далее. // Верните игрока, который становится победителем, или null, если нет победителя. return null; } }