package org.mafagafogigante.dungeon.commands; import org.jetbrains.annotations.NotNull; /** * Command abstract class that defines a type for command objects. * * <p>Make anonymous classes from this one to define commands. */ public abstract class Command { private final CommandDescription description; /** * Creates a new Command object with the provided name and info. * * @param name a String for name, lowercase * @param info a String for info */ Command(@NotNull String name, @NotNull String info) { description = new CommandDescription(name, info); } public CommandDescription getDescription() { return description; } /** * Indicates whether a Command is "equal to" this one. * * <p>Two Commands are considered to be equal when their names are equal. */ @Override public boolean equals(Object object) { if (this == object) { return true; } if (object == null || getClass() != object.getClass()) { return false; } Command command = (Command) object; return description.getName().equals(command.description.getName()); } @Override public int hashCode() { return description.getName().hashCode(); } /** * Executes this Command, given an IssuedCommand object. */ public abstract void execute(@NotNull String[] arguments); @Override public String toString() { return description.toString(); } }