Maintenance changes

Updates KnarLib
Updates Spigot
Updates code for message generation
This commit is contained in:
EpicKnarvik97
2025-11-26 13:40:11 +01:00
parent 430f340fd4
commit b55f122148
37 changed files with 287 additions and 406 deletions

View File

@@ -1,5 +1,6 @@
package net.knarcraft.minigames.command.dropper;
import net.knarcraft.knarlib.formatting.FormatBuilder;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.minigames.arena.dropper.DropperArena;
import net.knarcraft.minigames.arena.dropper.DropperArenaHandler;
@@ -20,8 +21,7 @@ public class CreateDropperArenaCommand implements CommandExecutor {
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] arguments) {
if (!(commandSender instanceof Player player)) {
MiniGames.getInstance().getStringFormatter().displayErrorMessage(commandSender,
MiniGameMessage.ERROR_PLAYER_ONLY);
new FormatBuilder(MiniGameMessage.ERROR_PLAYER_ONLY).error(commandSender);
return false;
}
@@ -41,15 +41,13 @@ public class CreateDropperArenaCommand implements CommandExecutor {
DropperArenaHandler arenaHandler = MiniGames.getInstance().getDropperArenaHandler();
DropperArena existingArena = arenaHandler.getArena(arenaName);
if (existingArena != null) {
MiniGames.getInstance().getStringFormatter().displayErrorMessage(commandSender,
MiniGameMessage.ERROR_ARENA_NAME_COLLISION);
new FormatBuilder(MiniGameMessage.ERROR_ARENA_NAME_COLLISION).error(commandSender);
return false;
}
DropperArena arena = new DropperArena(arenaName, player.getLocation(), arenaHandler);
arenaHandler.addArena(arena);
MiniGames.getInstance().getStringFormatter().displaySuccessMessage(commandSender,
MiniGameMessage.SUCCESS_ARENA_CREATED);
new FormatBuilder(MiniGameMessage.SUCCESS_ARENA_CREATED).success(commandSender);
return true;
}

View File

@@ -1,5 +1,6 @@
package net.knarcraft.minigames.command.dropper;
import net.knarcraft.knarlib.formatting.FormatBuilder;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.minigames.arena.dropper.DropperArena;
import net.knarcraft.minigames.arena.dropper.DropperArenaGroup;
@@ -35,8 +36,7 @@ public class DropperGroupSetCommand implements TabExecutor {
DropperArena specifiedArena = arenaHandler.getArena(arguments[0]);
if (specifiedArena == null) {
MiniGames.getInstance().getStringFormatter().displayErrorMessage(commandSender,
MiniGameMessage.ERROR_ARENA_NOT_FOUND);
new FormatBuilder(MiniGameMessage.ERROR_ARENA_NOT_FOUND).error(commandSender);
return false;
}
@@ -58,8 +58,7 @@ public class DropperGroupSetCommand implements TabExecutor {
arenaHandler.setGroup(specifiedArena.getArenaId(), arenaGroup);
MiniGames.getInstance().getStringFormatter().displaySuccessMessage(commandSender,
MiniGameMessage.SUCCESS_ARENA_GROUP_UPDATED);
new FormatBuilder(MiniGameMessage.SUCCESS_ARENA_GROUP_UPDATED).success(commandSender);
return true;
}

View File

@@ -1,107 +1,19 @@
package net.knarcraft.minigames.command.dropper;
import net.knarcraft.knarlib.formatting.StringFormatter;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.minigames.arena.ArenaHandler;
import net.knarcraft.minigames.arena.dropper.DropperArena;
import net.knarcraft.minigames.arena.dropper.DropperArenaGroup;
import net.knarcraft.minigames.arena.dropper.DropperArenaHandler;
import net.knarcraft.minigames.config.MiniGameMessage;
import org.bukkit.command.Command;
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;
import java.util.UUID;
import static net.knarcraft.knarlib.util.TabCompletionHelper.filterMatchingContains;
import net.knarcraft.minigames.command.ArenaGroupSwapCommand;
/**
* The command for swapping the order of two arenas in a group
*/
public class DropperGroupSwapCommand implements TabExecutor {
public class DropperGroupSwapCommand extends ArenaGroupSwapCommand<DropperArena, DropperArenaGroup> {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] arguments) {
if (arguments.length < 2) {
return false;
}
StringFormatter stringFormatter = MiniGames.getInstance().getStringFormatter();
DropperArenaHandler arenaHandler = MiniGames.getInstance().getDropperArenaHandler();
DropperArena arena1 = arenaHandler.getArena(arguments[0]);
if (arena1 == null) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_ARENA_1_NOT_FOUND);
return false;
}
DropperArena arena2 = arenaHandler.getArena(arguments[1]);
if (arena2 == null) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_ARENA_2_NOT_FOUND);
return false;
}
DropperArenaGroup arena1Group = arenaHandler.getGroup(arena1.getArenaId());
DropperArenaGroup arena2Group = arenaHandler.getGroup(arena2.getArenaId());
if (arena1Group == null || !arena1Group.equals(arena2Group)) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_SWAP_DIFFERENT_GROUPS);
return false;
}
arena1Group.swapArenas(arena1Group.getArenas().indexOf(arena1.getArenaId()),
arena1Group.getArenas().indexOf(arena2.getArenaId()));
stringFormatter.displaySuccessMessage(commandSender, MiniGameMessage.SUCCESS_ARENAS_SWAPPED);
return true;
}
@Nullable
@Override
public List<String> onTabComplete(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] arguments) {
DropperArenaHandler arenaHandler = MiniGames.getInstance().getDropperArenaHandler();
if (arguments.length == 1) {
List<String> arenaNames = new ArrayList<>();
for (DropperArena dropperArena : arenaHandler.getArenasInAGroup()) {
arenaNames.add(dropperArena.getArenaName());
}
return filterMatchingContains(arenaNames, arguments[0]);
} else if (arguments.length == 2) {
return filterMatchingContains(getArenaNamesInSameGroup(arguments[0]), arguments[1]);
} else {
return new ArrayList<>();
}
}
/**
* Gets the names of all arenas in the same group as the specified arena
*
* @param arenaName <p>The name of the specified arena</p>
* @return <p>The names of the arenas in the same group</p>
*/
private List<String> getArenaNamesInSameGroup(String arenaName) {
DropperArenaHandler arenaHandler = MiniGames.getInstance().getDropperArenaHandler();
DropperArena arena1 = arenaHandler.getArena(arenaName);
if (arena1 == null) {
return new ArrayList<>();
}
// Only display other arenas in the selected group
List<String> arenaNames = new ArrayList<>();
DropperArenaGroup group = arenaHandler.getGroup(arena1.getArenaId());
if (group == null) {
return new ArrayList<>();
}
for (UUID arenaId : group.getArenas()) {
DropperArena arena = arenaHandler.getArena(arenaId);
if (arena != null && arena.getArenaId() != arena1.getArenaId()) {
arenaNames.add(arena.getArenaName());
}
}
return arenaNames;
protected ArenaHandler<DropperArena, DropperArenaGroup> getArenaHandler() {
return MiniGames.getInstance().getDropperArenaHandler();
}
}

View File

@@ -1,6 +1,6 @@
package net.knarcraft.minigames.command.dropper;
import net.knarcraft.knarlib.formatting.StringFormatter;
import net.knarcraft.knarlib.formatting.FormatBuilder;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.minigames.arena.dropper.DropperArena;
import net.knarcraft.minigames.arena.dropper.DropperArenaEditableProperty;
@@ -30,9 +30,8 @@ public class EditDropperArenaCommand extends EditArenaCommand {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] arguments) {
StringFormatter stringFormatter = MiniGames.getInstance().getStringFormatter();
if (!(commandSender instanceof Player player)) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_PLAYER_ONLY);
new FormatBuilder(MiniGameMessage.ERROR_PLAYER_ONLY).error(commandSender);
return false;
}
@@ -42,31 +41,30 @@ public class EditDropperArenaCommand extends EditArenaCommand {
DropperArena specifiedArena = MiniGames.getInstance().getDropperArenaHandler().getArena(arguments[0]);
if (specifiedArena == null) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_ARENA_NOT_FOUND);
new FormatBuilder(MiniGameMessage.ERROR_ARENA_NOT_FOUND).error(commandSender);
return false;
}
DropperArenaEditableProperty editableProperty = DropperArenaEditableProperty.getFromArgumentString(arguments[1]);
if (editableProperty == null) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_UNKNOWN_PROPERTY);
new FormatBuilder(MiniGameMessage.ERROR_UNKNOWN_PROPERTY).error(commandSender);
return false;
}
if (arguments.length < 3) {
// Print the current value of the property
String value = editableProperty.getCurrentValueAsString(specifiedArena);
stringFormatter.displaySuccessMessage(commandSender, stringFormatter.replacePlaceholders(
MiniGameMessage.SUCCESS_CURRENT_VALUE, new String[]{"{property}", "{value}"},
new String[]{editableProperty.getArgumentString(), value}));
new FormatBuilder(MiniGameMessage.SUCCESS_CURRENT_VALUE).
replace("{property}", editableProperty.getArgumentString()).
replace("{value}", value).success(commandSender);
return true;
} else {
boolean successful = changeValue(specifiedArena, editableProperty, arguments[2], player);
if (successful) {
stringFormatter.displaySuccessMessage(player, stringFormatter.replacePlaceholder(
MiniGameMessage.SUCCESS_PROPERTY_CHANGED, "{property}",
editableProperty.getArgumentString()));
new FormatBuilder(MiniGameMessage.SUCCESS_PROPERTY_CHANGED).
replace("{property}", editableProperty.getArgumentString()).success(player);
} else {
stringFormatter.displayErrorMessage(player, MiniGameMessage.ERROR_PROPERTY_INPUT_INVALID);
new FormatBuilder(MiniGameMessage.ERROR_PROPERTY_INPUT_INVALID).error(player);
}
return successful;
}

View File

@@ -1,6 +1,6 @@
package net.knarcraft.minigames.command.dropper;
import net.knarcraft.knarlib.formatting.StringFormatter;
import net.knarcraft.knarlib.formatting.FormatBuilder;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.minigames.arena.ArenaPlayerRegistry;
import net.knarcraft.minigames.arena.dropper.DropperArena;
@@ -26,9 +26,8 @@ public class JoinDropperArenaCommand implements CommandExecutor {
@Override
public boolean onCommand(@NotNull CommandSender commandSender, @NotNull Command command, @NotNull String s,
@NotNull String[] arguments) {
StringFormatter stringFormatter = MiniGames.getInstance().getStringFormatter();
if (!(commandSender instanceof Player player)) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_PLAYER_ONLY);
new FormatBuilder(MiniGameMessage.ERROR_PLAYER_ONLY).error(commandSender);
return false;
}
@@ -37,33 +36,33 @@ public class JoinDropperArenaCommand implements CommandExecutor {
}
if (GeyserHelper.isGeyserPlayer(player)) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_GEYSER_DROPPER);
new FormatBuilder(MiniGameMessage.ERROR_GEYSER_DROPPER).error(commandSender);
return true;
}
// Disallow joining if the player is already in a mini-game arena
if (MiniGames.getInstance().getSession(player.getUniqueId()) != null) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_ALREADY_PLAYING);
new FormatBuilder(MiniGameMessage.ERROR_ALREADY_PLAYING).error(commandSender);
return true;
}
// Make sure the arena exists
DropperArena specifiedArena = MiniGames.getInstance().getDropperArenaHandler().getArena(arguments[0]);
if (specifiedArena == null) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_ARENA_NOT_FOUND);
new FormatBuilder(MiniGameMessage.ERROR_ARENA_NOT_FOUND).error(commandSender);
return false;
}
// Deny vehicles as allowing this is tricky, and will cause problems in some cases
if (player.isInsideVehicle() || !player.getPassengers().isEmpty()) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_JOIN_IN_VEHICLE_OR_PASSENGER);
new FormatBuilder(MiniGameMessage.ERROR_JOIN_IN_VEHICLE_OR_PASSENGER).error(commandSender);
return true;
}
// Deny joining full arenas
int playingNow = MiniGames.getInstance().getDropperArenaPlayerRegistry().getPlayingPlayers(specifiedArena).size();
if (specifiedArena.getMaxPlayers() > 0 && playingNow >= specifiedArena.getMaxPlayers()) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_JOIN_ARENA_FULL);
new FormatBuilder(MiniGameMessage.ERROR_JOIN_ARENA_FULL).error(commandSender);
return true;
}
@@ -93,13 +92,11 @@ public class JoinDropperArenaCommand implements CommandExecutor {
return;
}
StringFormatter stringFormatter = MiniGames.getInstance().getStringFormatter();
// Make sure the player has beaten the arena once in normal mode before playing another mode
if (MiniGames.getInstance().getDropperConfiguration().mustDoNormalModeFirst() &&
gameMode != DropperArenaGameMode.DEFAULT &&
specifiedArena.getData().hasNotCompleted(DropperArenaGameMode.DEFAULT, player)) {
stringFormatter.displayErrorMessage(player, MiniGameMessage.ERROR_NORMAL_MODE_REQUIRED);
new FormatBuilder(MiniGameMessage.ERROR_NORMAL_MODE_REQUIRED).error(player);
return;
}
@@ -114,14 +111,14 @@ public class JoinDropperArenaCommand implements CommandExecutor {
// Try to teleport the player to the arena
boolean teleported = PlayerTeleporter.teleportPlayer(player, specifiedArena.getSpawnLocation(), false, false);
if (!teleported) {
stringFormatter.displayErrorMessage(player, MiniGameMessage.ERROR_ARENA_TELEPORT_FAILED);
new FormatBuilder(MiniGameMessage.ERROR_ARENA_TELEPORT_FAILED).error(player);
newSession.triggerQuit(false, true);
} else {
// Update the player's state to follow the arena's rules
newSession.getEntryState().setArenaState();
player.getInventory().addItem(GUIHelper.getGUIOpenItem(player));
stringFormatter.displaySuccessMessage(player, MiniGameMessage.SUCCESS_ARENA_JOINED);
new FormatBuilder(MiniGameMessage.SUCCESS_ARENA_JOINED).success(player);
}
}
@@ -136,19 +133,18 @@ public class JoinDropperArenaCommand implements CommandExecutor {
*/
private boolean doGroupChecks(@NotNull DropperArena dropperArena, @NotNull DropperArenaGroup arenaGroup,
@NotNull DropperArenaGameMode arenaGameMode, @NotNull Player player) {
StringFormatter stringFormatter = MiniGames.getInstance().getStringFormatter();
DropperConfiguration configuration = MiniGames.getInstance().getDropperConfiguration();
// Require that players beat all arenas in the group in the normal game-mode before trying challenge modes
if (configuration.mustDoNormalModeFirst() && arenaGameMode != DropperArenaGameMode.DEFAULT &&
!arenaGroup.hasBeatenAll(DropperArenaGameMode.DEFAULT, player)) {
stringFormatter.displayErrorMessage(player, MiniGameMessage.ERROR_GROUP_NORMAL_MODE_REQUIRED);
new FormatBuilder(MiniGameMessage.ERROR_GROUP_NORMAL_MODE_REQUIRED).error(player);
return false;
}
// Require that the player has beaten the previous arena on the same game-mode before trying this one
if (configuration.mustDoGroupedInSequence() &&
arenaGroup.cannotPlay(arenaGameMode, player, dropperArena.getArenaId())) {
stringFormatter.displayErrorMessage(player, MiniGameMessage.ERROR_PREVIOUS_ARENA_REQUIRED);
new FormatBuilder(MiniGameMessage.ERROR_PREVIOUS_ARENA_REQUIRED).error(player);
return false;
}

View File

@@ -1,6 +1,6 @@
package net.knarcraft.minigames.command.dropper;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.knarlib.formatting.FormatBuilder;
import net.knarcraft.minigames.config.MiniGameMessage;
import net.knarcraft.minigames.util.TabCompleteHelper;
import org.bukkit.command.Command;
@@ -20,12 +20,11 @@ public class ListDropperArenaCommand implements TabExecutor {
@Override
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label,
@NotNull String[] arguments) {
StringBuilder builder = new StringBuilder(MiniGames.getInstance().getTranslator().getTranslatedMessage(
MiniGameMessage.SUCCESS_DROPPER_ARENAS_LIST));
FormatBuilder builder = new FormatBuilder(MiniGameMessage.SUCCESS_DROPPER_ARENAS_LIST);
for (String arenaName : TabCompleteHelper.getDropperArenas()) {
builder.append("\n").append(arenaName);
}
MiniGames.getInstance().getStringFormatter().displaySuccessMessage(sender, builder.toString());
builder.success(sender);
return true;
}

View File

@@ -1,6 +1,6 @@
package net.knarcraft.minigames.command.dropper;
import net.knarcraft.knarlib.formatting.StringFormatter;
import net.knarcraft.knarlib.formatting.FormatBuilder;
import net.knarcraft.minigames.MiniGames;
import net.knarcraft.minigames.arena.dropper.DropperArena;
import net.knarcraft.minigames.config.MiniGameMessage;
@@ -22,18 +22,16 @@ public class RemoveDropperArenaCommand implements CommandExecutor {
return false;
}
StringFormatter stringFormatter = MiniGames.getInstance().getStringFormatter();
// Get the specified arena
DropperArena targetArena = MiniGames.getInstance().getDropperArenaHandler().getArena(arguments[0]);
if (targetArena == null) {
stringFormatter.displayErrorMessage(commandSender, MiniGameMessage.ERROR_ARENA_NOT_FOUND);
new FormatBuilder(MiniGameMessage.ERROR_ARENA_NOT_FOUND).error(commandSender);
return false;
}
// Remove the arena
MiniGames.getInstance().getDropperArenaHandler().removeArena(targetArena);
stringFormatter.displaySuccessMessage(commandSender, MiniGameMessage.SUCCESS_ARENA_REMOVED);
new FormatBuilder(MiniGameMessage.SUCCESS_ARENA_REMOVED).success(commandSender);
return true;
}