levels save and load properly
Some checks are pending
Build plugin / build (push) Waiting to run

This commit is contained in:
2vb 2024-07-02 19:17:45 -07:00
parent 894b9c2fe0
commit c34a2a4d55
9 changed files with 452 additions and 26 deletions

View File

@ -145,7 +145,7 @@
<dependency>
<groupId>xyz.twovb</groupId>
<artifactId>Toolbox</artifactId>
<version>0.2-FIX</version>
<version>0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.yaml/snakeyaml -->
<dependency>
@ -153,7 +153,6 @@
<artifactId>snakeyaml</artifactId>
<version>2.2</version>
</dependency>
</dependencies>
</project>

View File

@ -12,7 +12,9 @@ import xyz.twovb.sgm.commands.handlers.NoPermissionsHandler;
import xyz.twovb.sgm.commands.impl.LevelCommand;
import xyz.twovb.sgm.commands.impl.SGMCommand;
import xyz.twovb.sgm.games.GameManager;
import xyz.twovb.sgm.games.impl.TestGame;
//import xyz.twovb.sgm.games.impl.TestGame;
import xyz.twovb.sgm.games.impl.*;
import xyz.twovb.sgm.levels.LevelManager;
import xyz.twovb.toolbox.managers.ConfigManager;
import xyz.twovb.toolbox.managers.PlaceholderManager;
import xyz.twovb.toolbox.utils.CustomLogger;
@ -25,14 +27,12 @@ public final class SGM extends JavaPlugin {
@Getter
private static SGM instance;
private FileConfiguration BuildInfo;
@Getter
private FileConfiguration Messages;
@Getter
private CustomLogger cLogger;
@Getter
private ConfigManager configManager;
// @Getter
// private DatabaseManager databaseManager;
@Getter
private GameManager gameManager;
@ -45,7 +45,6 @@ public final class SGM extends JavaPlugin {
configManager = new ConfigManager(this);
gameManager = new GameManager();
Messages = configManager.loadConfig("messages.yml");
// this.saveDefaultConfig();
BuildInfo = new YamlConfiguration();
try {
BuildInfo.load(Objects.requireNonNull(this.getTextResource("build-info.yml")));
@ -54,6 +53,7 @@ public final class SGM extends JavaPlugin {
registerCommands();
registerGames();
registerPlaceholders();
LevelManager.loadLevels();
}
private void registerPlaceholders() {
@ -70,26 +70,14 @@ public final class SGM extends JavaPlugin {
private void registerGames() {
gameManager.registerGame(new TestGame());
gameManager.registerGame(new TestGame1());
gameManager.registerGame(new TestGame2());
gameManager.registerGame(new TestGame3());
}
// private void connectToDatabase() {
// databaseManager = new DatabaseManager();
// try {
// databaseManager.connect(DatabaseManager.DatabaseType.SQLITE, this, "sgm");
// cLogger.log("Connected to database!");
// } catch (SQLException | ClassNotFoundException e) {
// throw new RuntimeException(e);
// }
// }
// @Override
// public void onDisable() {
// try {
// databaseManager.close();
// } catch (SQLException e) {
// cLogger.error(e);
// }
// }
@Override
public void onDisable() {
}
}

View File

@ -15,11 +15,20 @@ public class SGMCommand {
@Execute
void command(@Context CommandSender sender) {
StringBuilder builder = new StringBuilder();
StringBuilder gameBuilder = new StringBuilder();
builder.insert(0, SGM.getInstance().getMessages().getString("main-command.lines.1"));
builder.append("\n");
builder.append(SGM.getInstance().getMessages().getString("main-command.lines.2"));
builder.append("\n");
builder.append(SGM.getInstance().getMessages().getString("main-command.lines.3"));
builder.append("\n");
builder.append("Enabled games:");
builder.append("\n");
for (String game : SGM.getInstance().getGameManager().getRegisteredGames()) {
gameBuilder.append(game);
gameBuilder.append(", ");
}
builder.append(gameBuilder.toString());
String string = builder.toString();
sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(string, sender)));
}

View File

@ -20,7 +20,10 @@ public class GameManager {
private static Map<UUID, Minigame> activeGames = new HashMap<UUID, Minigame>();
@Getter
private ArrayList<String> registeredGames = new ArrayList<>();
private ArrayList<String> registeredGames = new ArrayList<String>();
@Getter
public Map<String, String> enabledLevels = new HashMap<String, String>();
public static Minigame findGame(UUID gameId) {
return activeGames.get(gameId);

View File

@ -0,0 +1,129 @@
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

@ -0,0 +1,129 @@
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

@ -0,0 +1,129 @@
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

@ -6,6 +6,7 @@ package xyz.twovb.sgm.levels;
import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.configuration.file.YamlConfiguration;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;
import xyz.twovb.sgm.SGM;
@ -20,6 +21,45 @@ 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.");
}
}
}
}
}
private static void loadWorld(String worldName) {
// Check if the world is already loaded
if (Bukkit.getWorld(worldName) != null) {
SGM.getInstance().getCLogger().log("World " + worldName + " is already loaded.");
return;
}
// Load the world
WorldCreator wc = new WorldCreator(path + worldName, new NamespacedKey(SGM.getInstance(), "level_" + worldName));
World world = wc.createWorld();
if (world != null) {
SGM.getInstance().getCLogger().log("Loaded world: " + worldName);
} else {
SGM.getInstance().getCLogger().error("Failed to load world: " + worldName);
}
}
public static CreationResult createLevel(String name, String game) {
File level = new File(path + name);
if (!SGM.getInstance().getGameManager().getRegisteredGames().contains(game.toLowerCase())) {