@@ -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