Implement first pass at config loading, /join, /leave commands, tab completion (broken)

This commit is contained in:
2022-05-10 21:35:25 +02:00
parent 75debe1905
commit a4b110773e
17 changed files with 410 additions and 110 deletions

View File

@@ -18,8 +18,12 @@ public class AddPlayerCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
String worldName = args[0];
GameRunner runner = m_plugin.getRunnerForWorld(m_plugin.getServer().getWorld(worldName));
String arenaName = args[0];
GameRunner runner = m_plugin.getRunnerForArenaName(arenaName);
if (runner == null) {
sender.sendMessage("No such arena '" + arenaName + "'");
return true;
}
Player player = m_plugin.getServer().getPlayer(args[1]);
runner.addPlayer(player);
return true;

View File

@@ -0,0 +1,56 @@
package gg.malloc.defense.commands;
import org.bukkit.command.Command;
import org.bukkit.command.TabExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import gg.malloc.defense.engine.GameRunner;
import gg.malloc.defense.Plugin;
import java.util.ArrayList;
import java.util.List;
public class JoinGameCommand implements TabExecutor {
Plugin m_plugin;
public JoinGameCommand(Plugin plugin) {
m_plugin = plugin;
}
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
ArrayList<String> ret = new ArrayList<>();
if (args.length == 1) {
String proposal = args[0].toLowerCase();
for(String arena : m_plugin.arenaNames()) {
if (proposal.startsWith(arena.toLowerCase())) {
ret.add(arena);
}
}
}
return ret;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
if (args.length != 1) {
sender.sendMessage("Usage: join <game>");
return true;
}
if (sender instanceof Player) {
Player player = (Player)sender;
String arenaName = args[0];
sender.sendMessage("Joining arena '" + arenaName + "'...");
GameRunner runner = m_plugin.getRunnerForArenaName(arenaName);
if (runner == null) {
sender.sendMessage("No such arena '" + arenaName + "'");
return true;
}
m_plugin.addPlayerToArena(arenaName, player);
} else {
sender.sendMessage("Only players may use htis command.");
}
return true;
}
}

View File

@@ -0,0 +1,35 @@
package gg.malloc.defense.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import gg.malloc.defense.engine.GameRunner;
import gg.malloc.defense.Plugin;
public class LeaveGameCommand implements CommandExecutor {
Plugin m_plugin;
public LeaveGameCommand(Plugin plugin) {
m_plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
if (sender instanceof Player) {
Player player = (Player)sender;
GameRunner runner = m_plugin.getRunnerForPlayer(player);
if (runner == null) {
sender.sendMessage("You ae not currently in a game.");
return true;
}
runner.removePlayer(player);
} else {
sender.sendMessage("Only players may use htis command.");
}
return true;
}
}

View File

@@ -0,0 +1,35 @@
package gg.malloc.defense.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import gg.malloc.defense.engine.GameRunner;
import gg.malloc.defense.Plugin;
public class ListGamesCommand implements CommandExecutor {
Plugin m_plugin;
public ListGamesCommand(Plugin plugin) {
m_plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
sender.sendMessage("Available games:");
for(String arenaName : m_plugin.arenaNames()) {
String arenaDescription = arenaName + ": ";
if (m_plugin.hasRunnerForArenaName(arenaName)) {
GameRunner runner = m_plugin.getRunnerForArenaName(arenaName);
arenaDescription += runner.getStage().toString();
} else {
arenaDescription += "Loadable";
}
sender.sendMessage(arenaDescription);
}
return true;
}
}

View File

@@ -20,9 +20,12 @@ public class PlayerReadyCommand implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
if (sender instanceof Player) {
Player player = (Player)sender;
GameRunner runner = m_plugin.getRunnerForWorld(player.getLocation().getWorld());
runner.addPlayer(player);
runner.togglePlayerReady(player);
GameRunner runner = m_plugin.getRunnerForPlayer(player);
if (runner != null) {
runner.togglePlayerReady(player);
} else {
sender.sendMessage("You are not part of any game.");
}
return true;
} else {
sender.sendMessage("You must be a player to use this command.");

View File

@@ -1,25 +1,56 @@
package gg.malloc.defense.commands;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.World;
import gg.malloc.defense.engine.GameRunner;
import gg.malloc.defense.Plugin;
public class SetStageCommand implements CommandExecutor {
import java.util.ArrayList;
import java.util.List;
public class SetStageCommand implements TabExecutor {
Plugin m_plugin;
public SetStageCommand(Plugin plugin) {
m_plugin = plugin;
}
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
ArrayList<String> ret = new ArrayList<>();
if (args.length == 1) {
String proposal = args[0];
for(String arena : m_plugin.arenaNames()) {
if (proposal.startsWith(arena)) {
ret.add(arena);
}
}
} else if (args.length == 2) {
String proposal = args[1].toLowerCase();
GameRunner.Stage stages[] = GameRunner.Stage.Idle.getDeclaringClass().getEnumConstants();
for(GameRunner.Stage stage : stages) {
if (proposal.startsWith(stage.toString().toLowerCase())) {
ret.add(stage.toString());
}
}
}
return ret;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
World world = m_plugin.getServer().getWorld(args[1]);
GameRunner runner = m_plugin.getRunnerForWorld(world);
if (args.length != 2) {
sender.sendMessage("Usage: setstage <stage> <arena>");
return true;
}
GameRunner runner = m_plugin.getRunnerForArenaName(args[1]);
if (runner == null) {
sender.sendMessage("Unknown arena " + args[1]);
return true;
}
String stateName = args[0].toLowerCase();
boolean ret = false;
GameRunner.Stage decodedStage = null;