SGM/src/main/java/xyz/twovb/sgm/games/impl/TestGame1.java
2vb c34a2a4d55
Some checks are pending
Build plugin / build (push) Waiting to run
levels save and load properly
2024-07-02 19:17:45 -07:00

129 lines
3.3 KiB
Java

package xyz.twovb.sgm.games.impl;
/*
* Created by 2vb - 26/6/2024
*/
import org.bukkit.Bukkit;
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.util.ArrayList;
import java.util.List;
import java.util.UUID;
public class TestGame1 implements Minigame {
final static String name = "TestGame1";
private final UUID uuid;
private CommandSender owner;
private GameState state;
private final List<Player> players;
public TestGame1() {
this.uuid = UUID.randomUUID();
this.state = GameState.PRESTART;
this.players = new ArrayList<>();
}
public void init(CommandSender owner) {
// Perform initialization logic here
Bukkit.getPluginManager().registerEvents(this, SGM.getInstance());
this.owner = owner;
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.PRESTART) {
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);
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)) {
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 CommandSender getOwner() {
return owner;
}
@Override
public void onTick() {
if (state == GameState.STARTED && players.size() <= 1) {
this.stop();
}
}
}