Skip to content

Commit 7207d93

Browse files
committed
Refactor IssuerAwareContextBuilder and add maxArgForAware option
1 parent 82799cd commit 7207d93

File tree

1 file changed

+49
-72
lines changed

1 file changed

+49
-72
lines changed

src/main/java/org/mvplugins/multiverse/core/command/context/issueraware/IssuerAwareContextBuilder.java

Lines changed: 49 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -123,48 +123,8 @@ public IssuerAwareContextBuilder<T> inputOnlyFailMessage(BiFunction<BukkitComman
123123
*/
124124
@ApiStatus.AvailableSince("5.1")
125125
public IssuerAwareContextResolver<T, BukkitCommandExecutionContext> generateContext() {
126-
Objects.requireNonNull(fromPlayer);
127-
Objects.requireNonNull(fromInput);
128-
Objects.requireNonNull(issuerOnlyFailMessage);
129-
Objects.requireNonNull(issuerAwarePlayerFailMessage);
130-
Objects.requireNonNull(issuerAwareInputFailMessage);
131-
Objects.requireNonNull(inputOnlyFailMessage);
132-
133-
return context -> {
134-
BukkitCommandIssuer issuer = context.getIssuer();
135-
String resolve = context.getFlagValue("resolve", "");
136-
137-
if (resolve.equals("issuerOnly")) {
138-
if (issuer.isPlayer()) {
139-
T result = fromPlayer.apply(context, issuer.getPlayer());
140-
if (result != null) {
141-
return result;
142-
}
143-
}
144-
throw new InvalidCommandArgument(issuerOnlyFailMessage.apply(context).formatted(issuer));
145-
}
146-
147-
String input = context.getFirstArg();
148-
T result = fromInput.apply(context, input);
149-
if (result != null) {
150-
context.popFirstArg();
151-
return result;
152-
}
153-
154-
if (resolve.equals("issuerAware")) {
155-
if (issuer.isPlayer()) {
156-
Player player = issuer.getPlayer();
157-
result = fromPlayer.apply(context, player);
158-
if (result != null) {
159-
return result;
160-
}
161-
throw new InvalidCommandArgument(issuerAwarePlayerFailMessage.apply(context, player).formatted(issuer));
162-
}
163-
throw new InvalidCommandArgument(issuerAwareInputFailMessage.apply(context, input).formatted(issuer));
164-
}
165-
166-
throw new InvalidCommandArgument(inputOnlyFailMessage.apply(context, input).formatted(issuer));
167-
};
126+
validateRequiredVariables();
127+
return context -> resolveValue(context, GenericIssuerAwareValue::new).value;
168128
}
169129

170130
/**
@@ -178,49 +138,66 @@ public IssuerAwareContextResolver<T, BukkitCommandExecutionContext> generateCont
178138
*/
179139
@ApiStatus.AvailableSince("5.1")
180140
public <I extends IssuerAwareValue> IssuerAwareContextResolver<I, BukkitCommandExecutionContext> generateContext(BiFunction<Boolean, T, I> createValue) {
181-
// todo: This is a copy and paste from above
141+
validateRequiredVariables();
142+
return context -> resolveValue(context, createValue);
143+
}
182144

145+
private void validateRequiredVariables() {
183146
Objects.requireNonNull(fromPlayer);
184147
Objects.requireNonNull(fromInput);
185148
Objects.requireNonNull(issuerOnlyFailMessage);
186149
Objects.requireNonNull(issuerAwarePlayerFailMessage);
187150
Objects.requireNonNull(issuerAwareInputFailMessage);
188151
Objects.requireNonNull(inputOnlyFailMessage);
152+
}
189153

190-
return context -> {
191-
BukkitCommandIssuer issuer = context.getIssuer();
192-
String resolve = context.getFlagValue("resolve", "");
154+
private <I extends IssuerAwareValue> I resolveValue(BukkitCommandExecutionContext context, BiFunction<Boolean, T, I> createValue) {
155+
BukkitCommandIssuer issuer = context.getIssuer();
156+
String resolve = context.getFlagValue("resolve", "");
193157

194-
if (resolve.equals("issuerOnly")) {
195-
if (issuer.isPlayer()) {
196-
T result = fromPlayer.apply(context, issuer.getPlayer());
197-
if (result != null) {
198-
return createValue.apply(true, result);
199-
}
158+
if (resolve.equals("issuerOnly")) {
159+
if (issuer.isPlayer()) {
160+
T result = fromPlayer.apply(context, issuer.getPlayer());
161+
if (result != null) {
162+
return createValue.apply(true, result);
200163
}
201-
throw new InvalidCommandArgument(issuerOnlyFailMessage.apply(context).formatted(issuer));
202164
}
203-
204-
String input = context.getFirstArg();
205-
T result = fromInput.apply(context, input);
206-
if (result != null) {
207-
context.popFirstArg();
208-
return createValue.apply(false, result);
209-
}
210-
211-
if (resolve.equals("issuerAware")) {
212-
if (issuer.isPlayer()) {
213-
Player player = issuer.getPlayer();
214-
result = fromPlayer.apply(context, player);
215-
if (result != null) {
216-
return createValue.apply(true, result);
217-
}
218-
throw new InvalidCommandArgument(issuerAwarePlayerFailMessage.apply(context, player).formatted(issuer));
165+
throw new InvalidCommandArgument(issuerOnlyFailMessage.apply(context).formatted(issuer));
166+
}
167+
168+
String input = context.getFirstArg();
169+
T result = fromInput.apply(context, input);
170+
if (result != null) {
171+
context.popFirstArg();
172+
return createValue.apply(false, result);
173+
}
174+
175+
int maxArgForAware = context.getFlagValue("maxArgForAware", Integer.MAX_VALUE);
176+
long argLengthWithoutFlags = context.getArgs().stream()
177+
.takeWhile(value -> !value.startsWith("--") && !value.isEmpty())
178+
.count();
179+
180+
if (resolve.equals("issuerAware") && argLengthWithoutFlags <= maxArgForAware) {
181+
if (issuer.isPlayer()) {
182+
Player player = issuer.getPlayer();
183+
result = fromPlayer.apply(context, player);
184+
if (result != null) {
185+
return createValue.apply(true, result);
219186
}
220-
throw new InvalidCommandArgument(issuerAwareInputFailMessage.apply(context, input).formatted(issuer));
187+
throw new InvalidCommandArgument(issuerAwarePlayerFailMessage.apply(context, player).formatted(issuer));
221188
}
189+
throw new InvalidCommandArgument(issuerAwareInputFailMessage.apply(context, input).formatted(issuer));
190+
}
191+
192+
throw new InvalidCommandArgument(inputOnlyFailMessage.apply(context, input).formatted(issuer));
193+
}
194+
195+
private static class GenericIssuerAwareValue<T> extends IssuerAwareValue {
196+
private final T value;
222197

223-
throw new InvalidCommandArgument(inputOnlyFailMessage.apply(context, input).formatted(issuer));
224-
};
198+
public GenericIssuerAwareValue(boolean byIssuer, T value) {
199+
super(byIssuer);
200+
this.value = value;
201+
}
225202
}
226203
}

0 commit comments

Comments
 (0)