aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorsowgro <tpoke.ferrari@gmail.com>2024-06-10 00:42:55 -0400
committersowgro <tpoke.ferrari@gmail.com>2024-06-10 00:42:55 -0400
commit2aa28e390b8a9fa763baef30e204af78e1a28456 (patch)
treec5cffbcfb36419633263bc68d5a1c239df540a56 /src/main
parent8cb97b0bc66f6d29770e6994ee19cd0c3835055c (diff)
downloadTumble-2aa28e390b8a9fa763baef30e204af78e1a28456.tar.gz
Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.tar.bz2
Tumble-2aa28e390b8a9fa763baef30e204af78e1a28456.zip
Add config comand and file writing
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/commands/Config.java89
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/commands/Leave.java17
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/game/Arena.java2
-rw-r--r--src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java42
-rw-r--r--src/main/resources/plugin.yml6
5 files changed, 137 insertions, 19 deletions
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Config.java b/src/main/java/com/MylesAndMore/Tumble/commands/Config.java
index d91a5b5..256b45e 100644
--- a/src/main/java/com/MylesAndMore/Tumble/commands/Config.java
+++ b/src/main/java/com/MylesAndMore/Tumble/commands/Config.java
@@ -1,5 +1,7 @@
package com.MylesAndMore.Tumble.commands;
+import com.MylesAndMore.Tumble.game.Arena;
+import com.MylesAndMore.Tumble.plugin.ConfigManager;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -9,6 +11,7 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class Config implements CommandExecutor, TabCompleter {
@@ -24,12 +27,96 @@ public class Config implements CommandExecutor, TabCompleter {
return false;
}
- sender.sendMessage(ChatColor.RED + "Not implemented yet"); // TODO
+ if (args.length < 2 || args[0] == null || args[1] == null) {
+ sender.sendMessage(ChatColor.RED + "Missing arguments");
+ return false;
+ }
+
+ switch (args[0]) {
+ case "add" -> {
+ String arenaName = args[1];
+ ConfigManager.arenas.put(arenaName, new Arena(arenaName, ((Player)sender).getLocation()));
+ sender.sendMessage(ChatColor.GREEN + "Arena added.");
+ }
+ case "set" -> {
+ String world = args[1];
+ if (ConfigManager.arenas.containsKey(world)) {
+ ConfigManager.arenas.get(world).location = ((Player)sender).getLocation();
+ }
+ else if (world.equals("waitArea")) {
+ ConfigManager.waitArea = ((Player)sender).getLocation();
+ }
+ else if (world.equals("lobbySpawn")) {
+ ConfigManager.lobby = ((Player)sender).getLocation();
+ }
+ else if (world.equals("winnerLobbySpawn")) {
+ ConfigManager.winnerLobby = ((Player)sender).getLocation();
+ }
+ else {
+ sender.sendMessage(ChatColor.RED + "Invalid parameter");
+ return false;
+ }
+ sender.sendMessage(ChatColor.GREEN + "Location set.");
+ }
+ case "disable" -> {
+ String world = args[1];
+ if (world.equals("waitArea")) {
+ ConfigManager.waitArea = null;
+ }
+ else if (world.equals("winnerLobbySpawn")) {
+ ConfigManager.winnerLobby = null;
+ }
+ else {
+ sender.sendMessage(ChatColor.RED + "Invalid parameter");
+ return false;
+ }
+ sender.sendMessage(ChatColor.GREEN + "World disabled.");
+ }
+ case "remove" -> {
+ String world = args[1];
+ if (ConfigManager.arenas.containsKey(world)) {
+ ConfigManager.arenas.remove(world);
+ }
+ else {
+ sender.sendMessage(ChatColor.RED + "Invalid parameter");
+ return false;
+ }
+ sender.sendMessage(ChatColor.GREEN + "Location set");
+ }
+ default -> {
+ sender.sendMessage(ChatColor.RED + "Invalid parameter");
+ return false;
+ }
+ }
+
+ ConfigManager.WriteConfig();
+ sender.sendMessage(ChatColor.GREEN + "Wrote changes to file.");
return true;
}
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
+ if (args.length == 1) {
+ return new ArrayList<>(Arrays.asList("add", "set", "disable", "remove"));
+ }
+ if (args.length == 2) {
+ switch (args[0]) {
+ case "set" -> {
+ ArrayList<String> temp = new ArrayList<>(ConfigManager.arenas.keySet());
+ temp.addAll(Arrays.asList("waitArea", "lobbySpawn", "winnerLobbySpawn"));
+ return temp;
+ }
+ case "disable" -> {
+ return Arrays.asList("waitArea", "winnerLobbySpawn");
+ }
+ case "delete" -> {
+ return ConfigManager.arenas.keySet().stream().toList();
+ }
+ default -> {
+ return new ArrayList<>();
+ }
+ }
+ }
return new ArrayList<>();
}
}
diff --git a/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java b/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java
index abf0592..1d00ca4 100644
--- a/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java
+++ b/src/main/java/com/MylesAndMore/Tumble/commands/Leave.java
@@ -27,16 +27,10 @@ public class Leave implements CommandExecutor, TabCompleter {
return false;
}
- Game game;
- if (args.length < 1 || args[0] == null) {
- game = ConfigManager.findGamePlayerIsIn((Player)sender);
- if (game == null) {
- sender.sendMessage(ChatColor.RED + "Missing arena name");
- return false;
- }
- }
- else {
- game = ConfigManager.arenas.get(args[0]).game;
+ Game game = ConfigManager.findGamePlayerIsIn((Player)sender);
+ if (game == null) {
+ sender.sendMessage(ChatColor.RED + "You are not in a game.");
+ return false;
}
game.removePlayer((Player) sender);
@@ -46,9 +40,6 @@ public class Leave implements CommandExecutor, TabCompleter {
@Override
public List<String> onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
- if (args.length == 1) {
- return ConfigManager.arenas.keySet().stream().toList();
- }
return new ArrayList<>();
}
} \ No newline at end of file
diff --git a/src/main/java/com/MylesAndMore/Tumble/game/Arena.java b/src/main/java/com/MylesAndMore/Tumble/game/Arena.java
index ef477d2..499fa6c 100644
--- a/src/main/java/com/MylesAndMore/Tumble/game/Arena.java
+++ b/src/main/java/com/MylesAndMore/Tumble/game/Arena.java
@@ -10,7 +10,7 @@ import org.jetbrains.annotations.NotNull;
public class Arena {
public Game game = null;
public final World world;
- public final Location location;
+ public Location location;
public final String name;
/**
diff --git a/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java b/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java
index dae6dd5..3207e1b 100644
--- a/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java
+++ b/src/main/java/com/MylesAndMore/Tumble/plugin/ConfigManager.java
@@ -52,7 +52,7 @@ public class ConfigManager {
Result<Location>res = readWorld(config.getConfigurationSection("lobby-spawn"));
if (!res.success) {
plugin.getLogger().warning("Failed to load lobby: "+res.error);
- plugin.getLogger().severe("^ THIS IS REQUIRED, PLEASE FIX TO AVOID UNDEFINED BEHAVIOR");
+ plugin.getLogger().severe("Lobby world is required. Run '/tumble:config set lobbyWorld' ASAP");
}
lobby = res.value;
@@ -136,6 +136,46 @@ public class ConfigManager {
return res;
}
+ public static void WriteConfig() {
+ if (waitArea != null) {
+ WriteWorld(plugin.getConfig().getConfigurationSection("wait-area"), waitArea);
+ plugin.getConfig().set("enable-wait-area", true);
+ }
+ else {
+ plugin.getConfig().set("enable-wait-area", false);
+ }
+
+ if (lobby != null) {
+ WriteWorld(plugin.getConfig().getConfigurationSection("lobby-spawn"), lobby);
+ }
+
+ if (winnerLobby != null) {
+ WriteWorld(plugin.getConfig().getConfigurationSection("winner-spawn"), winnerLobby);
+ plugin.getConfig().set("enable-winner-lobby", true);
+ }
+ else {
+ plugin.getConfig().set("enable-winner-lobby", true);
+ }
+
+ for (String arenaName: arenas.keySet()) {
+ ConfigurationSection c = plugin.getConfig().getConfigurationSection("arenas."+arenaName);
+ if (c == null) {
+ c = plugin.getConfig().createSection("arenas."+arenaName);
+ }
+ WriteWorld(c, arenas.get(arenaName).location);
+ }
+
+ plugin.saveConfig();
+
+ }
+
+ private static void WriteWorld(ConfigurationSection section, Location location) {
+ section.set("x", location.getX());
+ section.set("y", location.getY());
+ section.set("z", location.getZ());
+ section.set("world", Objects.requireNonNull(location.getWorld()).getName());
+ }
+
/**
* Searches all arenas for a game that player p is in
* @param p Player to search for
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index a890bdd..0d9b70c 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -13,7 +13,7 @@ commands:
permission: tumble.join
leave:
description: Quits a Tumble match.
- usage: '§cUsage: /tumble:leave [arenaName]'
+ usage: '§cUsage: /tumble:leave'
permission: tumble.leave
forcestart:
description: Force starts a Tumble match.
@@ -24,8 +24,8 @@ commands:
usage: '§cUsage: /tumble:forcestop [arenaName]'
permission: tumble.forcestop
config:
- description: Modify arenas and settings
- usage: '§cUsage: /tumble:config *not implemented yet*'
+ description: Modify arenas and worlds.
+ usage: '§cUsage: /tumble:config <add|set|disable|delete> <data>'
permission: tumble.config
reload:
description: Reloads the plugin's config.