138 lines
3.5 KiB
Java
138 lines
3.5 KiB
Java
package xyz.twovb.sgm.games.impl;
|
|
|
|
|
|
/*
|
|
* Created by 2vb - 5/7/2024
|
|
*/
|
|
|
|
/*
|
|
* Created by 2vb - 26/6/2024
|
|
*/
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.World;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
|
import org.bukkit.event.player.PlayerQuitEvent;
|
|
import xyz.twovb.sgm.SGM;
|
|
import xyz.twovb.sgm.games.GameManager;
|
|
import xyz.twovb.sgm.games.Minigame;
|
|
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.UUID;
|
|
|
|
public class TestGame implements Minigame {
|
|
|
|
final static String name = "TestGame";
|
|
private final UUID uuid;
|
|
private final List<Player> players;
|
|
private World gameWorld;
|
|
private GameState state;
|
|
|
|
public TestGame() {
|
|
this.uuid = UUID.randomUUID();
|
|
this.state = GameState.PRESTART;
|
|
this.players = new ArrayList<>();
|
|
}
|
|
|
|
public void init(CommandSender owner, String world) throws IOException {
|
|
// Perform initialization logic here
|
|
Bukkit.getPluginManager().registerEvents(this, SGM.getInstance());
|
|
gameWorld = createGameWorld(world, uuid);
|
|
state = GameState.READY;
|
|
owner.sendMessage("A new " + name + " instance with ID " + uuid + " has been created and is now ready!");
|
|
}
|
|
|
|
@Override
|
|
public void start() {
|
|
if (state == GameState.READY) {
|
|
state = GameState.STARTED;
|
|
sendMessageToAllPlayers("The game has started!");
|
|
for (Player player : players) {
|
|
player.teleport(player.getWorld().getSpawnLocation());
|
|
}
|
|
Bukkit.getScheduler().runTaskTimer(SGM.getInstance(), this::onTick, 0L, 1L);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void stop() {
|
|
// Stop game logic
|
|
state = GameState.ENDING;
|
|
Player winner;
|
|
if (players.size() <= 1) {
|
|
winner = players.get(0);
|
|
winner.sendMessage("Congratulations on winning the game!");
|
|
}
|
|
players.clear(); // Clear player list
|
|
GameManager.getActiveGames().remove(uuid);
|
|
}
|
|
|
|
@Override
|
|
public void addPlayer(Player player) {
|
|
players.add(player);
|
|
player.teleport(gameWorld.getSpawnLocation());
|
|
sendMessageToAllPlayers(player.getName() + " has joined the game!");
|
|
}
|
|
|
|
@Override
|
|
public void removePlayer(Player player) {
|
|
players.remove(player);
|
|
}
|
|
|
|
@EventHandler
|
|
void onPlayerQuit(PlayerQuitEvent event) {
|
|
Player player = event.getPlayer();
|
|
if (players.contains(player)) {
|
|
removePlayer(event.getPlayer());
|
|
}
|
|
}
|
|
|
|
@EventHandler
|
|
void onPlayerDeath(PlayerDeathEvent event) {
|
|
Player player = event.getPlayer();
|
|
if (players.contains(player) && state == GameState.STARTED) {
|
|
sendMessageToAllPlayers(player.getName() + " was eliminated!");
|
|
event.setDeathMessage("");
|
|
removePlayer(player);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public List<Player> getPlayers() {
|
|
return players;
|
|
}
|
|
|
|
@Override
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
@Override
|
|
public UUID getGameId() {
|
|
return uuid;
|
|
}
|
|
|
|
@Override
|
|
public GameState getState() {
|
|
return state;
|
|
}
|
|
|
|
|
|
@Override
|
|
public World getWorld() {
|
|
return gameWorld;
|
|
}
|
|
|
|
@Override
|
|
public void onTick() {
|
|
if (state == GameState.STARTED && players.size() <= 1) {
|
|
this.stop();
|
|
}
|
|
}
|
|
|
|
} |