um im committing this cuz idk wtf i did

This commit is contained in:
2vb 2024-07-02 19:35:58 -07:00
parent c34a2a4d55
commit 38101ea022
7 changed files with 76 additions and 413 deletions

View File

@ -9,6 +9,7 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.plugin.java.JavaPlugin;
import xyz.twovb.sgm.commands.handlers.InvalidArgsHandler;
import xyz.twovb.sgm.commands.handlers.NoPermissionsHandler;
import xyz.twovb.sgm.commands.impl.GameCommand;
import xyz.twovb.sgm.commands.impl.LevelCommand;
import xyz.twovb.sgm.commands.impl.SGMCommand;
import xyz.twovb.sgm.games.GameManager;
@ -36,6 +37,8 @@ public final class SGM extends JavaPlugin {
@Getter
private GameManager gameManager;
@Getter
private LevelManager levelManager;
@Override
@ -44,6 +47,7 @@ public final class SGM extends JavaPlugin {
cLogger = new CustomLogger(this);
configManager = new ConfigManager(this);
gameManager = new GameManager();
levelManager = new LevelManager();
Messages = configManager.loadConfig("messages.yml");
BuildInfo = new YamlConfiguration();
try {
@ -53,7 +57,7 @@ public final class SGM extends JavaPlugin {
registerCommands();
registerGames();
registerPlaceholders();
LevelManager.loadLevels();
levelManager.loadLevels();
}
private void registerPlaceholders() {
@ -65,14 +69,11 @@ public final class SGM extends JavaPlugin {
}
private void registerCommands() {
LiteCommandsBukkit.builder().commands(new SGMCommand(), new LevelCommand()).invalidUsage(new InvalidArgsHandler()).missingPermission(new NoPermissionsHandler()).message(LiteBukkitMessages.PLAYER_NOT_FOUND, input -> Messages.getString("commands.invalid-player").replace("%player%", input)).message(LiteBukkitMessages.PLAYER_ONLY, input -> Messages.getString("commands.player-only")).build();
LiteCommandsBukkit.builder().commands(new SGMCommand(), new LevelCommand(), new GameCommand()).invalidUsage(new InvalidArgsHandler()).missingPermission(new NoPermissionsHandler()).message(LiteBukkitMessages.PLAYER_NOT_FOUND, input -> Messages.getString("commands.invalid-player").replace("%player%", input)).message(LiteBukkitMessages.PLAYER_ONLY, input -> Messages.getString("commands.player-only")).build();
}
private void registerGames() {
gameManager.registerGame(new TestGame());
gameManager.registerGame(new TestGame1());
gameManager.registerGame(new TestGame2());
gameManager.registerGame(new TestGame3());
}
@Override

View File

@ -0,0 +1,33 @@
package xyz.twovb.sgm.commands.impl;
/*
* Created by 2vb - 2/7/2024
*/
/*
* Created by 2vb - 2/7/2024
*/
import dev.rollczi.litecommands.annotations.argument.Arg;
import dev.rollczi.litecommands.annotations.command.Command;
import dev.rollczi.litecommands.annotations.context.Context;
import dev.rollczi.litecommands.annotations.execute.Execute;
import dev.rollczi.litecommands.annotations.permission.Permission;
import org.bukkit.World;
import org.bukkit.entity.Player;
import xyz.twovb.sgm.SGM;
import xyz.twovb.sgm.levels.LevelManager;
import xyz.twovb.toolbox.api.CustomPlayer;
@Command(name = "game")
public class GameCommand {
@Execute(name = "start")
@Permission("sgm.games.start")
void game(@Context Player player, @Arg("name") String name) {
CustomPlayer cPlayer = new CustomPlayer(player);
cPlayer.sendMessage(SGM.getInstance().getGameManager().enabledLevels.toString());
}
}

View File

@ -68,6 +68,9 @@ public class GameManager {
registeredGames.add(game.getName().toLowerCase());
SGM.getInstance().getCLogger().log("Registered game " + game.getName());
SGM.getInstance().getCLogger().log(registeredGames);
registeredGames.add("testgame1");
registeredGames.add("testgame2");
registeredGames.add("testgame3");
}
}

View File

@ -1,129 +0,0 @@
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();
}
}
}

View File

@ -1,129 +0,0 @@
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 TestGame2 implements Minigame {
final static String name = "TestGame2";
private final UUID uuid;
private CommandSender owner;
private GameState state;
private final List<Player> players;
public TestGame2() {
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();
}
}
}

View File

@ -1,129 +0,0 @@
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 TestGame3 implements Minigame {
final static String name = "TestGame3";
private final UUID uuid;
private CommandSender owner;
private GameState state;
private final List<Player> players;
public TestGame3() {
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();
}
}
}

View File

@ -14,34 +14,16 @@ import xyz.twovb.sgm.SGM;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class LevelManager {
public static final String path = SGM.getInstance().getDataFolder().getPath() + "/levels/";
public static void loadLevels() {
// List all files (worlds) in the folder
File folder = new File(path);
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// Check if sgm.yml exists in the world directory
File configFile = new File(file, "sgm.yml");
if (configFile.exists()) {
YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile);
SGM.getInstance().getGameManager().enabledLevels.put(config.getString("game"), config.getString("name"));
// Load the world if sgm.yml exists
loadWorld(file.getName());
} else {
SGM.getInstance().getCLogger().log("Skipping directory " + file.getName() + ": sgm.yml not found.");
}
}
}
}
}
public HashMap<String, List<String>> enabledMaps = new HashMap<>();
private static void loadWorld(String worldName) {
// Check if the world is already loaded
@ -82,10 +64,12 @@ public class LevelManager {
world.setSpawnLocation(location);
world.setSpawnFlags(false, false);
genDataFile(level, name, game.toLowerCase());
SGM.getInstance().getGameManager().enabledLevels.put(game, name);
return CreationResult.SUCCESS;
}
private static void genDataFile(File path, String name, String game) {
// these are opposite
Map<String, Object> data = new HashMap<>();
data.put("name", name);
data.put("game", game);
@ -104,6 +88,35 @@ public class LevelManager {
return Bukkit.getWorld(new NamespacedKey(SGM.getInstance(), "level_" + name));
}
public void loadLevels() {
for (String game : SGM.getInstance().getGameManager().getRegisteredGames()) {
enabledMaps.put(game, new ArrayList<>()); // Initialize an empty ArrayList for each game
}
// List all files (worlds) in the folder
File folder = new File(path);
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// Check if sgm.yml exists in the world directory
File configFile = new File(file, "sgm.yml");
if (configFile.exists()) {
YamlConfiguration config = YamlConfiguration.loadConfiguration(configFile);
String game = config.getString("game");
String name = config.getString("name");
if (enabledMaps.containsKey(game)) {
enabledMaps.get(game).add(name);
// Load the world if sgm.yml exists
loadWorld(file.getName());
}
} else {
SGM.getInstance().getCLogger().log("Skipping directory " + file.getName() + ": sgm.yml not found.");
}
}
}
}
}
public enum CreationResult {
SUCCESS, WORLD_EXISTS, INVALID_ARGS, UNKNOWN
}