Adds a lot of small improvements

Makes the type of block players have to hit to win configurable
Separates the velocity option into vertical and horizontal velocities
Reduces some redundancy when getting an arena from an arena name
Partially implements the list command
Tries to improve the handling of players exiting in the middle of a session
Adds missing comments to ArenaStorageKey
This commit is contained in:
2023-03-25 23:18:03 +01:00
parent 6385b4c5e8
commit 0c58860026
13 changed files with 199 additions and 81 deletions

View File

@ -2,7 +2,6 @@ package net.knarcraft.dropper.command;
import net.knarcraft.dropper.Dropper;
import net.knarcraft.dropper.arena.DropperArena;
import net.knarcraft.dropper.util.ArenaStorageHelper;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@ -27,19 +26,15 @@ public class CreateArenaCommand implements CommandExecutor {
return false;
}
String arenaName = arguments[0];
String sanitized = ArenaStorageHelper.sanitizeArenaName(arenaName);
for (DropperArena arena : Dropper.getInstance().getArenaHandler().getArenas()) {
if (sanitized.equals(ArenaStorageHelper.sanitizeArenaName(arena.getArenaName()))) {
commandSender.sendMessage("There already exists a dropper arena with that name!");
return false;
}
DropperArena existingArena = Dropper.getInstance().getArenaHandler().getArena(arguments[0]);
if (existingArena != null) {
commandSender.sendMessage("There already exists a dropper arena with that name!");
return false;
}
//TODO: Make sure the arena name doesn't contain any unwanted characters
DropperArena arena = new DropperArena(arenaName, player.getLocation());
DropperArena arena = new DropperArena(arguments[0], player.getLocation());
Dropper.getInstance().getArenaHandler().addArena(arena);
commandSender.sendMessage("The arena was successfully created!");
return true;

View File

@ -1,8 +1,11 @@
package net.knarcraft.dropper.command;
import net.knarcraft.dropper.Dropper;
import net.knarcraft.dropper.arena.DropperArena;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
/**
@ -12,8 +15,18 @@ public class EditArenaCommand implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] strings) {
//TODO: Make sure the console cannot run this
@NotNull String[] arguments) {
if (!(commandSender instanceof Player)) {
commandSender.sendMessage("This command must be used by a player");
return false;
}
DropperArena specifiedArena = Dropper.getInstance().getArenaHandler().getArena(arguments[0]);
if (specifiedArena == null) {
commandSender.sendMessage("Unable to find the specified dropper arena.");
return false;
}
//TODO: If an arena name and a property is given, display the current value
//TODO: If an arena name, a property and a value is given, check if it's valid, and update the property
return false;

View File

@ -5,7 +5,6 @@ import net.knarcraft.dropper.arena.DropperArena;
import net.knarcraft.dropper.arena.DropperArenaPlayerRegistry;
import net.knarcraft.dropper.arena.DropperArenaSession;
import net.knarcraft.dropper.property.ArenaGameMode;
import net.knarcraft.dropper.util.ArenaStorageHelper;
import net.knarcraft.dropper.util.PlayerTeleporter;
import org.bukkit.GameMode;
import org.bukkit.command.Command;
@ -45,14 +44,7 @@ public class JoinArenaCommand implements CommandExecutor {
}
// Make sure the arena exists
String arenaName = ArenaStorageHelper.sanitizeArenaName(arguments[0]);
DropperArena specifiedArena = null;
for (DropperArena arena : Dropper.getInstance().getArenaHandler().getArenas()) {
if (ArenaStorageHelper.sanitizeArenaName(arena.getArenaName()).equals(arenaName)) {
specifiedArena = arena;
break;
}
}
DropperArena specifiedArena = Dropper.getInstance().getArenaHandler().getArena(arguments[0]);
if (specifiedArena == null) {
commandSender.sendMessage("Unable to find the specified dropper arena.");
return false;

View File

@ -21,7 +21,8 @@ public class LeaveArenaCommand implements CommandExecutor {
return false;
}
DropperArenaSession existingSession = Dropper.getInstance().getPlayerRegistry().getArenaSession(player.getUniqueId());
DropperArenaSession existingSession = Dropper.getInstance().getPlayerRegistry().getArenaSession(
player.getUniqueId());
if (existingSession == null) {
commandSender.sendMessage("You are not in a dropper arena!");
return false;

View File

@ -1,20 +1,37 @@
package net.knarcraft.dropper.command;
import net.knarcraft.dropper.util.TabCompleteHelper;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
/**
* A command for listing existing dropper arenas
*/
public class ListArenaCommand implements CommandExecutor {
public class ListArenaCommand implements TabExecutor {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label,
@NotNull String[] args) {
//TODO: List all existing arenas, and possibly information about a specified arena
return false;
@NotNull String[] arguments) {
sender.sendMessage("Dropper arenas:");
for (String arenaName : TabCompleteHelper.getArenas()) {
sender.sendMessage(arenaName);
}
//TODO: Allow displaying information about each arena (possibly admin-only)
return true;
}
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] arguments) {
return new ArrayList<>();
}
}

View File

@ -2,7 +2,6 @@ package net.knarcraft.dropper.command;
import net.knarcraft.dropper.Dropper;
import net.knarcraft.dropper.arena.DropperArena;
import net.knarcraft.dropper.util.ArenaStorageHelper;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@ -17,15 +16,7 @@ public class RemoveArenaCommand implements CommandExecutor {
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] arguments) {
// Get the specified arena
String arenaName = arguments[0];
String sanitized = ArenaStorageHelper.sanitizeArenaName(arenaName);
DropperArena targetArena = null;
for (DropperArena arena : Dropper.getInstance().getArenaHandler().getArenas()) {
if (sanitized.equals(ArenaStorageHelper.sanitizeArenaName(arena.getArenaName()))) {
targetArena = arena;
}
}
DropperArena targetArena = Dropper.getInstance().getArenaHandler().getArena(arguments[0]);
if (targetArena == null) {
commandSender.sendMessage("Unable to find the specified arena");
return false;