Move SystemComandMap From ChatScene to Its Own Component #74
@@ -0,0 +1,39 @@
 | 
			
		||||
package envoy.client.data.commands;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This interface defines an action that should be performed when a system
 | 
			
		||||
 * command gets called.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Leon Hofmeister
 | 
			
		||||
 * @since Envoy Client v0.2-beta
 | 
			
		||||
 */
 | 
			
		||||
public interface Callable {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Performs the instance specific action when a {@link SystemCommand} has been
 | 
			
		||||
	 * called.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param arguments the arguments that should be passed to the
 | 
			
		||||
	 *                  {@link SystemCommand}
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
	 */
 | 
			
		||||
	void call(List<String> arguments);
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Performs the instance specific action when a {@link SystemCommand} has been
 | 
			
		||||
	 * called and additionally enables the user to execute his own action once it
 | 
			
		||||
	 * has been called.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param arguments        the arguments that should be passed to the
 | 
			
		||||
	 *                         {@link SystemCommand}
 | 
			
		||||
	 * @param additionalAction the action to perform when this system command has
 | 
			
		||||
	 *                         been called
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
	 */
 | 
			
		||||
	default void call(List<String> arguments, Runnable additionalAction) {
 | 
			
		||||
		call(arguments);
 | 
			
		||||
		additionalAction.run();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,30 +0,0 @@
 | 
			
		||||
package envoy.client.data.commands;
 | 
			
		||||
 | 
			
		||||
import java.util.function.Supplier;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This interface defines an action that should be performed when a system
 | 
			
		||||
 * command gets called.
 | 
			
		||||
 *
 | 
			
		||||
 * @author Leon Hofmeister
 | 
			
		||||
 * @since Envoy Client v0.2-beta
 | 
			
		||||
 */
 | 
			
		||||
public interface OnCall {
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Performs class specific actions when a {@link SystemCommand} has been called.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
	 */
 | 
			
		||||
	void onCall();
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Performs actions that can only be performed by classes that are not
 | 
			
		||||
	 * {@link SystemCommand}s when a SystemCommand has been called.
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param consumer the action to perform when this {@link SystemCommand} has
 | 
			
		||||
	 *                 been called
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
	 */
 | 
			
		||||
	void onCall(Supplier<Void> consumer);
 | 
			
		||||
}
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
package envoy.client.data.commands;
 | 
			
		||||
 | 
			
		||||
import java.util.*;
 | 
			
		||||
import java.util.function.*;
 | 
			
		||||
import java.util.function.Consumer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class is the base class of all {@code SystemCommands} and contains an
 | 
			
		||||
@@ -17,7 +17,7 @@ import java.util.function.*;
 | 
			
		||||
 * @author Leon Hofmeister
 | 
			
		||||
 * @since Envoy Client v0.2-beta
 | 
			
		||||
 */
 | 
			
		||||
public final class SystemCommand implements OnCall {
 | 
			
		||||
public final class SystemCommand implements Callable {
 | 
			
		||||
 | 
			
		||||
	protected int relevance;
 | 
			
		||||
 | 
			
		||||
@@ -55,12 +55,6 @@ public final class SystemCommand implements OnCall {
 | 
			
		||||
		this.description		= description;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @return the action that should be performed
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
	 */
 | 
			
		||||
	public Consumer<List<String>> getAction() { return action; }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * @return the argument count of the command
 | 
			
		||||
	 * @since Envoy Client v0.2-beta
 | 
			
		||||
@@ -85,20 +79,10 @@ public final class SystemCommand implements OnCall {
 | 
			
		||||
	 */
 | 
			
		||||
	public void setRelevance(int relevance) { this.relevance = relevance; }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Increments the relevance of this {@code SystemCommand}.
 | 
			
		||||
	 */
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onCall() { relevance++; }
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Increments the relevance of this {@code SystemCommand} and executes the
 | 
			
		||||
	 * supplier.
 | 
			
		||||
	 */
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onCall(Supplier<Void> consumer) {
 | 
			
		||||
		onCall();
 | 
			
		||||
		consumer.get();
 | 
			
		||||
	public void call(List<String> arguments) {
 | 
			
		||||
		action.accept(arguments);
 | 
			
		||||
		++relevance;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
 
 | 
			
		||||
@@ -155,14 +155,7 @@ public final class SystemCommandMap {
 | 
			
		||||
			final var arguments = extractArguments(input, systemCommand);
 | 
			
		||||
			// Executing the function
 | 
			
		||||
			try {
 | 
			
		||||
				systemCommand.getAction().accept(arguments);
 | 
			
		||||
				systemCommand.onCall();
 | 
			
		||||
			} catch (final IndexOutOfBoundsException e) {
 | 
			
		||||
				logger.log(Level.SEVERE,
 | 
			
		||||
						String.format(
 | 
			
		||||
								"System command %s threw an IndexOutOfBoundsException. The most likely cause is a lower number of arguments than expected. It could also be a problem of the action performed: ",
 | 
			
		||||
								command),
 | 
			
		||||
						e);
 | 
			
		||||
				systemCommand.call(arguments);
 | 
			
		||||
			} catch (final NumberFormatException e) {
 | 
			
		||||
				logger.log(Level.INFO,
 | 
			
		||||
						String.format(
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user