diff --git a/pom.xml b/pom.xml
index fa81e02..8afb07a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,7 +116,7 @@
io.papermc.paper
paper-api
- 1.20.6-R0.1-SNAPSHOT
+ 1.21-R0.1-SNAPSHOT
provided
@@ -145,8 +145,15 @@
xyz.twovb
Toolbox
- 0.2
+ 0.2-FIX
+
+
+ org.yaml
+ snakeyaml
+ 2.2
+
+
diff --git a/src/main/java/xyz/twovb/sgm/SGM.java b/src/main/java/xyz/twovb/sgm/SGM.java
index 1330440..471a950 100644
--- a/src/main/java/xyz/twovb/sgm/SGM.java
+++ b/src/main/java/xyz/twovb/sgm/SGM.java
@@ -45,27 +45,17 @@ public final class SGM extends JavaPlugin {
configManager = new ConfigManager(this);
gameManager = new GameManager();
Messages = configManager.loadConfig("messages.yml");
- this.saveDefaultConfig();
+// this.saveDefaultConfig();
BuildInfo = new YamlConfiguration();
try {
BuildInfo.load(Objects.requireNonNull(this.getTextResource("build-info.yml")));
} catch (IOException | InvalidConfigurationException ignored) {
}
registerCommands();
+ registerGames();
registerPlaceholders();
-// connectToDatabase();
}
-// 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);
-// }
-// }
-
private void registerPlaceholders() {
PlaceholderManager pm = new PlaceholderManager();
pm.registerPlaceholder("%commit.id%", BuildInfo.getString("commit.id"));
@@ -82,6 +72,16 @@ public final class SGM extends JavaPlugin {
gameManager.registerGame(new TestGame());
}
+// 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 {
diff --git a/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java b/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java
index 74e0029..9458be1 100644
--- a/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java
+++ b/src/main/java/xyz/twovb/sgm/commands/impl/LevelCommand.java
@@ -9,9 +9,14 @@ 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.Bukkit;
+import org.bukkit.NamespacedKey;
+import org.bukkit.World;
import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
import xyz.twovb.sgm.SGM;
import xyz.twovb.sgm.levels.LevelManager;
+import xyz.twovb.toolbox.api.CustomPlayer;
import xyz.twovb.toolbox.managers.PlaceholderManager;
import xyz.twovb.toolbox.utils.ChatUtils;
@@ -19,18 +24,38 @@ import java.util.Optional;
import java.util.UUID;
@Command(name = "level")
+@Permission("sgm.levels")
public class LevelCommand {
@Execute(name = "create")
@Permission("sgm.levels.create")
- void create(@Context CommandSender sender, @Arg("name") Optional LevelName, @Arg("game") String game) {
- LevelManager mm = new LevelManager();
+ void create(@Context CommandSender sender, @Arg("game") String game, @Arg("name") Optional LevelName) {
String name = LevelName.orElse(UUID.randomUUID().toString());
-// if (mm.createLevel(name, game)) {
-// sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.level.new"), sender).replace("%level%", name)));
-// } else {
-// sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.level.exists"), sender).replace("%level%", name)));
-// }
+ LevelManager.CreationResult result = LevelManager.createLevel(name, game);
+ switch (result) {
+ case SUCCESS:
+ sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.level.new"), sender).replace("%level%", name)));
+ break;
+ case WORLD_EXISTS:
+ sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.level.exists"), sender).replace("%level%", name)));
+ break;
+ case INVALID_ARGS:
+ sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("sgm.game.not-found"), sender)));
+ break;
+ case UNKNOWN:
+ default:
+ sender.sendMessage(ChatUtils.translate(PlaceholderManager.setPlaceholders(SGM.getInstance().getMessages().getString("commands.unknown-error"), sender).replace("%error%", "(UNKNOWN)")));
+ break;
+ }
+ }
+
+ @Execute(name = "edit")
+ @Permission("sgm.levels.edit")
+ void edit(@Context Player player, @Arg("name") String name) {
+ CustomPlayer cPlayer = new CustomPlayer(player);
+ World world = LevelManager.getLevel(name);
+ player.teleport(world.getSpawnLocation());
+ cPlayer.sendMessage("tele&aport");
}
}
diff --git a/src/main/java/xyz/twovb/sgm/games/GameManager.java b/src/main/java/xyz/twovb/sgm/games/GameManager.java
index 8d1876e..17b8fd4 100644
--- a/src/main/java/xyz/twovb/sgm/games/GameManager.java
+++ b/src/main/java/xyz/twovb/sgm/games/GameManager.java
@@ -7,17 +7,20 @@ package xyz.twovb.sgm.games;
import lombok.Getter;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import xyz.twovb.sgm.SGM;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class GameManager {
@Getter
- private static Map activeGames;
+ private static Map activeGames = new HashMap();
@Getter
- private Map registeredGames;
+ private ArrayList registeredGames = new ArrayList<>();
public static Minigame findGame(UUID gameId) {
return activeGames.get(gameId);
@@ -59,7 +62,9 @@ public class GameManager {
}
public void registerGame(Minigame game) {
- registeredGames.put(game.getName().toLowerCase(), game);
+ registeredGames.add(game.getName().toLowerCase());
+ SGM.getInstance().getCLogger().log("Registered game " + game.getName());
+ SGM.getInstance().getCLogger().log(registeredGames);
}
}
\ No newline at end of file
diff --git a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java
index 0a6a616..2fefda6 100644
--- a/src/main/java/xyz/twovb/sgm/levels/LevelManager.java
+++ b/src/main/java/xyz/twovb/sgm/levels/LevelManager.java
@@ -6,43 +6,66 @@ package xyz.twovb.sgm.levels;
import org.bukkit.*;
import org.bukkit.block.Block;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.Yaml;
import xyz.twovb.sgm.SGM;
-import xyz.twovb.sgm.games.Minigame;
import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
public class LevelManager {
- public enum Result {
- SUCCESS,
- WORLD_EXISTS,
- INVALID_ARGS,
- UNKNOWN
- }
+ public static final String path = SGM.getInstance().getDataFolder().getPath() + "/levels/";
- private final String path = SGM.getInstance().getDataFolder().getPath() + "/levels/";
-
- public Result createLevel(String name, String game) {
- if (SGM.getInstance().getGameManager().getRegisteredGames().containsKey(game.toLowerCase())) {
- return Result.INVALID_ARGS;
+ public static CreationResult createLevel(String name, String game) {
+ File level = new File(path + name);
+ if (!SGM.getInstance().getGameManager().getRegisteredGames().contains(game.toLowerCase())) {
+ return CreationResult.INVALID_ARGS;
}
WorldCreator wc = new WorldCreator(path + name, new NamespacedKey(SGM.getInstance(), "level_" + name));
- if (new File(path + name).exists()) {
- return Result.WORLD_EXISTS;
+ if (level.exists()) {
+ return CreationResult.WORLD_EXISTS;
}
wc.type(WorldType.FLAT);
wc.generatorSettings("{\"layers\": [{\"block\": \"air\", \"height\": 1}], \"biome\":\"plains\"}");
wc.generateStructures(false);
World world = wc.createWorld();
if (world == null) {
- return Result.UNKNOWN;
+ return CreationResult.UNKNOWN;
}
Location location = new Location(world, 0, 0, 0);
Block block = location.subtract(0, 1, 0).getBlock();
block.setType(Material.STONE);
world.setSpawnLocation(location);
world.setSpawnFlags(false, false);
- return Result.SUCCESS;
+ genDataFile(level, name, game.toLowerCase());
+ return CreationResult.SUCCESS;
+ }
+
+ private static void genDataFile(File path, String name, String game) {
+ Map data = new HashMap<>();
+ data.put("name", name);
+ data.put("game", game);
+ DumperOptions options = new DumperOptions();
+ options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
+ Yaml yaml = new Yaml(options);
+ File yamlFile = new File(path + "/sgm.yml");
+ try (FileWriter writer = new FileWriter(yamlFile)) {
+ yaml.dump(data, writer);
+ } catch (IOException e) {
+ SGM.getInstance().getCLogger().error(e);
+ }
+ }
+
+ public static World getLevel(String name) {
+ return Bukkit.getWorld(new NamespacedKey(SGM.getInstance(), "level_" + name));
+ }
+
+ public enum CreationResult {
+ SUCCESS, WORLD_EXISTS, INVALID_ARGS, UNKNOWN
}
// public void deleteLevel(String name) {
diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml
index 01071d1..94a8ae6 100644
--- a/src/main/resources/messages.yml
+++ b/src/main/resources/messages.yml
@@ -8,6 +8,7 @@ commands:
player-only: "&7You must be a player to run this command."
no-permissions: "&7You do not have the required permission &e%permission%&7 to do this."
wrong-args: "&7Invalid command usage. %usage%"
+ unknown-error: "&7An unknown error has occurred. %error%"
sgm:
game:
new: "&7A new %game% has started and can now be joined!"
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index ae7acc2..0126022 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -2,7 +2,7 @@ name: '${project.name}'
version: 'Git-${git.commit.id.abbrev}-${project.version}'
main: '${project.mainClass}'
author: '2vb'
-api-version: '1.20'
+api-version: '1.21'
softdepend: [PlaceholderAPI]
permissions:
sgm.levels: