mirror of
https://github.com/SunNetservers/MiniGames.git
synced 2025-07-21 07:24:43 +02:00
Implements #37 and improves material tab-completion
This commit is contained in:
@ -7,6 +7,10 @@ import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* An abstract arena edit command, implementing input validation
|
||||
*/
|
||||
@ -110,4 +114,15 @@ public abstract class EditArenaCommand implements CommandExecutor {
|
||||
return material;
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits the given string on comma, and returns a set of its parts
|
||||
*
|
||||
* @param input <p>The input string to get as a set</p>
|
||||
* @return <p>The resulting string set</p>
|
||||
*/
|
||||
@NotNull
|
||||
protected Set<String> asSet(@NotNull String input) {
|
||||
return new HashSet<>(List.of(input.split(",")));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -19,7 +19,18 @@ import java.util.UUID;
|
||||
|
||||
import static net.knarcraft.knarlib.util.TabCompletionHelper.filterMatchingContains;
|
||||
|
||||
public abstract class GroupListCommand<K extends ArenaHandler<L, M>, L extends Arena, M extends ArenaGroup<L, M>> implements TabExecutor {
|
||||
/**
|
||||
* A command for listing the arenas in a group
|
||||
*
|
||||
* @param <K> <p>The type of arena handler to get arenas from</p>
|
||||
* @param <L> <p>The type of arena to list</p>
|
||||
* @param <M> <p>The type of arena group to list</p>
|
||||
*/
|
||||
public abstract class GroupListCommand<
|
||||
K extends ArenaHandler<L, M>,
|
||||
L extends Arena,
|
||||
M extends ArenaGroup<L, M>
|
||||
> implements TabExecutor {
|
||||
|
||||
/**
|
||||
* Displays all currently existing dropper arena groups
|
||||
@ -29,7 +40,7 @@ public abstract class GroupListCommand<K extends ArenaHandler<L, M>, L extends A
|
||||
*/
|
||||
protected void displayExistingGroups(@NotNull K arenaHandler, @NotNull CommandSender sender) {
|
||||
StringFormatter stringFormatter = MiniGames.getInstance().getStringFormatter();
|
||||
StringBuilder builder = new StringBuilder(stringFormatter.getUnformattedMessage(
|
||||
StringBuilder builder = new StringBuilder(stringFormatter.getUnFormattedMessage(
|
||||
MiniGameMessage.SUCCESS_GROUPS)).append("\n");
|
||||
arenaHandler.getAllGroups().stream().sorted().forEachOrdered((group) ->
|
||||
builder.append("- ").append(group.getGroupName()).append("\n"));
|
||||
|
@ -7,6 +7,7 @@ import net.knarcraft.minigames.arena.dropper.DropperArenaEditableProperty;
|
||||
import net.knarcraft.minigames.command.EditArenaCommand;
|
||||
import net.knarcraft.minigames.config.DropperConfiguration;
|
||||
import net.knarcraft.minigames.config.MiniGameMessage;
|
||||
import net.knarcraft.minigames.util.InputValidationHelper;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -90,6 +91,10 @@ public class EditDropperArenaCommand extends EditArenaCommand {
|
||||
case NAME -> arena.setName(value);
|
||||
case EXIT_LOCATION -> arena.setExitLocation(parseLocation(player, value));
|
||||
case MAX_PLAYERS -> arena.setMaxPlayers(parseMaxPlayers(value));
|
||||
case ALLOWED_DAMAGE_CAUSES ->
|
||||
arena.setAllowedDamageCauses(InputValidationHelper.parseDamageCauses(asSet(value)));
|
||||
case LOSS_TRIGGER_DAMAGE_CAUSES ->
|
||||
arena.setLossTriggerDamageCauses(InputValidationHelper.parseDamageCauses(asSet(value)));
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.knarcraft.minigames.command.dropper;
|
||||
|
||||
import net.knarcraft.minigames.arena.EditablePropertyType;
|
||||
import net.knarcraft.minigames.arena.dropper.DropperArenaEditableProperty;
|
||||
import net.knarcraft.minigames.util.TabCompleteHelper;
|
||||
import org.bukkit.command.Command;
|
||||
@ -30,8 +31,14 @@ public class EditDropperArenaTabCompleter implements TabCompleter {
|
||||
if (property == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return filterMatchingContains(TabCompleteHelper.getTabCompleteSuggestions(property.getPropertyType()),
|
||||
arguments[2]);
|
||||
EditablePropertyType propertyType = property.getPropertyType();
|
||||
|
||||
if (propertyType == EditablePropertyType.MATERIAL_LIST ||
|
||||
propertyType == EditablePropertyType.DAMAGE_CAUSE_LIST) {
|
||||
return TabCompleteHelper.getListCompleteSuggestions(propertyType, arguments[2]);
|
||||
} else {
|
||||
return filterMatchingContains(TabCompleteHelper.getTabCompleteSuggestions(propertyType), arguments[2]);
|
||||
}
|
||||
} else {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
@ -6,14 +6,12 @@ import net.knarcraft.minigames.arena.parkour.ParkourArena;
|
||||
import net.knarcraft.minigames.arena.parkour.ParkourArenaEditableProperty;
|
||||
import net.knarcraft.minigames.command.EditArenaCommand;
|
||||
import net.knarcraft.minigames.config.MiniGameMessage;
|
||||
import net.knarcraft.minigames.util.InputValidationHelper;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The command for editing an existing dropper arena
|
||||
*/
|
||||
@ -96,9 +94,13 @@ public class EditParkourArenaCommand extends EditArenaCommand {
|
||||
case WIN_LOCATION -> arena.setWinLocation(parseLocation(player, value));
|
||||
case CHECKPOINT_ADD -> arena.addCheckpoint(parseLocation(player, value));
|
||||
case CHECKPOINT_CLEAR -> arena.clearCheckpoints();
|
||||
case KILL_PLANE_BLOCKS -> arena.setKillPlaneBlocks(new HashSet<>(List.of(value.split(","))));
|
||||
case OBSTACLE_BLOCKS -> arena.setObstacleBlocks(new HashSet<>(List.of(value.split(","))));
|
||||
case KILL_PLANE_BLOCKS -> arena.setKillPlaneBlocks(asSet(value));
|
||||
case OBSTACLE_BLOCKS -> arena.setObstacleBlocks(asSet(value));
|
||||
case MAX_PLAYERS -> arena.setMaxPlayers(parseMaxPlayers(value));
|
||||
case ALLOWED_DAMAGE_CAUSES ->
|
||||
arena.setAllowedDamageCauses(InputValidationHelper.parseDamageCauses(asSet(value)));
|
||||
case LOSS_TRIGGER_DAMAGE_CAUSES ->
|
||||
arena.setLossTriggerDamageCauses(InputValidationHelper.parseDamageCauses(asSet(value)));
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package net.knarcraft.minigames.command.parkour;
|
||||
|
||||
import net.knarcraft.minigames.arena.EditablePropertyType;
|
||||
import net.knarcraft.minigames.arena.parkour.ParkourArenaEditableProperty;
|
||||
import net.knarcraft.minigames.util.TabCompleteHelper;
|
||||
import org.bukkit.command.Command;
|
||||
@ -30,8 +31,14 @@ public class EditParkourArenaTabCompleter implements TabCompleter {
|
||||
if (property == null) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return filterMatchingContains(TabCompleteHelper.getTabCompleteSuggestions(property.getPropertyType()),
|
||||
arguments[2]);
|
||||
EditablePropertyType propertyType = property.getPropertyType();
|
||||
|
||||
if (propertyType == EditablePropertyType.MATERIAL_LIST ||
|
||||
propertyType == EditablePropertyType.DAMAGE_CAUSE_LIST) {
|
||||
return TabCompleteHelper.getListCompleteSuggestions(propertyType, arguments[2]);
|
||||
} else {
|
||||
return filterMatchingContains(TabCompleteHelper.getTabCompleteSuggestions(propertyType), arguments[2]);
|
||||
}
|
||||
} else {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
Reference in New Issue
Block a user