From 3f9850ce26576fa5a8b28e838f54c0aba89d0079 Mon Sep 17 00:00:00 2001 From: jojo Date: Wed, 30 Dec 2020 16:40:39 +0100 Subject: [PATCH] Simplify ArgumentUtils Remove unused Argument Types Add SWCommand.lastArgRepeatable --- .../src/de/steamwar/command/Argument.java | 5 ---- .../de/steamwar/command/ArgumentUtils.java | 17 +----------- .../src/de/steamwar/command/SWCommand.java | 26 ++++++++++++++----- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/SpigotCore_Main/src/de/steamwar/command/Argument.java b/SpigotCore_Main/src/de/steamwar/command/Argument.java index aeffb72..fe0ee2f 100644 --- a/SpigotCore_Main/src/de/steamwar/command/Argument.java +++ b/SpigotCore_Main/src/de/steamwar/command/Argument.java @@ -62,11 +62,6 @@ public class Argument { } return null; }, Objects::nonNull, GameMode.class); - public static final Argument MATERIAL = new Argument<>(Material::valueOf, Objects::nonNull, Material.class); - public static final Argument PARTICLE = new Argument<>(Particle::valueOf, Objects::nonNull, Particle.class); - public static final Argument ENTITY = new Argument<>(EntityType::valueOf, Objects::nonNull, EntityType.class); - public static final Argument SOUND = new Argument<>(Sound::valueOf, Objects::nonNull, Sound.class); - public static final Argument SOUND_CATEGORY = new Argument<>(SoundCategory::valueOf, Objects::nonNull, SoundCategory.class); private Function mapper; private Predicate constraint; diff --git a/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java b/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java index 52f8c16..16738c1 100644 --- a/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java +++ b/SpigotCore_Main/src/de/steamwar/command/ArgumentUtils.java @@ -21,16 +21,13 @@ package de.steamwar.command; import java.util.Arrays; -import java.util.function.BiConsumer; import java.util.function.BiPredicate; import java.util.function.Predicate; import java.util.stream.Stream; public class ArgumentUtils { - private ArgumentUtils() { - throw new IllegalStateException("Utility class"); - } + private ArgumentUtils() {} private static boolean contains(String[] arguments, String string, BiPredicate predicate) { for (String arg : arguments) if (predicate.test(string, arg)) return true; @@ -67,18 +64,6 @@ public class ArgumentUtils { return new Argument<>(Integer::parseInt, predicate, tabCompletes(Arrays.stream(tabValues).boxed(), predicate)); } - public static Argument between(long minValue, long maxValue, long... tabValues) { - Predicate predicate = l -> l >= minValue && l <= maxValue; - return new Argument<>(Long::parseLong, predicate, tabCompletes(Arrays.stream(tabValues).boxed(), predicate)); - } - - public static Argument between(float minValue, float maxValue, float... tabValues) { - Predicate predicate = f -> f >= minValue && f <= maxValue; - String[] array = new String[tabValues.length]; - for (int i = 0; i < tabValues.length; i++) if (predicate.test(tabValues[i])) array[i] = tabValues[i] + ""; - return new Argument<>(Float::parseFloat, predicate, array); - } - public static Argument between(double minValue, double maxValue, double... tabValues) { Predicate predicate = d -> d >= minValue && d <= maxValue; return new Argument<>(Double::parseDouble, predicate, tabCompletes(Arrays.stream(tabValues).boxed(), predicate)); diff --git a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java index 47a4abf..6c56ade 100644 --- a/SpigotCore_Main/src/de/steamwar/command/SWCommand.java +++ b/SpigotCore_Main/src/de/steamwar/command/SWCommand.java @@ -21,7 +21,6 @@ package de.steamwar.command; import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; @@ -32,20 +31,35 @@ public class SWCommand { private Argument[] arguments; private BiConsumer executor; + private boolean lastArgRepeatable = false; public SWCommand(BiConsumer executor, Argument... arguments) { this.executor = executor; this.arguments = arguments; } + public SWCommand(BiConsumer executor, boolean lastArgRepeatable, Argument... arguments) { + this(executor, arguments); + this.lastArgRepeatable = lastArgRepeatable; + } + public boolean execute(T sender, String[] args) { if (args.length != arguments.length) return false; Object[] objects = new Object[args.length]; - for (int i = 0; i < args.length; i++) { + for (int i = 0; i < (lastArgRepeatable ? arguments.length - 1 : arguments.length); i++) { Optional optional = arguments[i].valueSupplier(args[i]); if (!optional.isPresent()) return false; objects[i] = optional.get(); } + if (lastArgRepeatable) { + Object[] lastArg = new Object[args.length - arguments.length + 1]; + for (int i = arguments.length - 1; i < args.length; i++) { + Optional optional = arguments[i].valueSupplier(args[i]); + if (!optional.isPresent()) return false; + lastArg[i] = optional.get(); + } + objects[objects.length - 1] = lastArg; + } executor.accept(sender, new ArgumentMap(objects)); return true; } @@ -59,14 +73,14 @@ public class SWCommand { return arguments[index].tabCompleteSupplier(args[index]).orElseGet(ArrayList::new); } - public static boolean execute(List> swCommandList, Player player, String[] args) { - for (SWCommand swCommand : swCommandList) { - if (swCommand.execute(player, args)) return true; + public static boolean execute(List> swCommandList, T sender, String[] args) { + for (SWCommand swCommand : swCommandList) { + if (swCommand.execute(sender, args)) return true; } return false; } - public static List tabComplete(List> swCommandList, String[] args) { + public static List tabComplete(List> swCommandList, String[] args) { List strings = new ArrayList<>(); swCommandList.forEach(swCommand -> strings.addAll(swCommand.tabComplete(args))); return strings;