mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-12-30 21:17:49 +01:00
Subcommand interfaces
This commit is contained in:
parent
70af3ed7e1
commit
ba96fc3d90
@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.djrapitops.plan.commands;
|
package com.djrapitops.plan.commands;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -62,4 +63,10 @@ public class Arguments {
|
|||||||
public List<String> asList() {
|
public List<String> asList() {
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Arguments removeFirst() {
|
||||||
|
List<String> copy = new ArrayList<>(args);
|
||||||
|
if (!copy.isEmpty()) copy.remove(0);
|
||||||
|
return new Arguments(copy);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Player Analytics (Plan).
|
||||||
|
*
|
||||||
|
* Plan is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Plan is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.djrapitops.plan.commands.use;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public interface CMDSender {
|
||||||
|
|
||||||
|
MessageBuilder buildMessage();
|
||||||
|
|
||||||
|
Optional<String> getPlayerName();
|
||||||
|
|
||||||
|
boolean hasPermission(String permission);
|
||||||
|
|
||||||
|
Optional<UUID> getUUID();
|
||||||
|
|
||||||
|
void send(String message);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Player Analytics (Plan).
|
||||||
|
*
|
||||||
|
* Plan is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Plan is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.djrapitops.plan.commands.use;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
public interface MessageBuilder {
|
||||||
|
|
||||||
|
MessageBuilder defineColorCharacter(char colorChar);
|
||||||
|
|
||||||
|
MessageBuilder append(String msg);
|
||||||
|
|
||||||
|
MessageBuilder link(String address);
|
||||||
|
|
||||||
|
MessageBuilder click(Supplier<UUID> clicker);
|
||||||
|
|
||||||
|
MessageBuilder hover(String text);
|
||||||
|
|
||||||
|
MessageBuilder hover(String... text);
|
||||||
|
|
||||||
|
MessageBuilder indent(int spaces);
|
||||||
|
|
||||||
|
MessageBuilder tabular(CharSequence columnSeparator);
|
||||||
|
|
||||||
|
void send();
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,133 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Player Analytics (Plan).
|
||||||
|
*
|
||||||
|
* Plan is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Plan is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.djrapitops.plan.commands.use;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.commands.Arguments;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
|
public class Subcommand {
|
||||||
|
|
||||||
|
private final Set<String> aliases;
|
||||||
|
private final Set<String> requiredPermissions;
|
||||||
|
private final List<String> inDepthDescription;
|
||||||
|
private String primaryAlias;
|
||||||
|
private String description;
|
||||||
|
private BiConsumer<CMDSender, Arguments> executor;
|
||||||
|
private BiFunction<CMDSender, Arguments, List<String>> argumentResolver;
|
||||||
|
|
||||||
|
private Subcommand() {
|
||||||
|
aliases = new HashSet<>();
|
||||||
|
requiredPermissions = new HashSet<>();
|
||||||
|
inDepthDescription = new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SubcommandBuilder builder() {
|
||||||
|
return new Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPrimaryAlias() {
|
||||||
|
return primaryAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getAliases() {
|
||||||
|
return aliases;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getRequiredPermissions() {
|
||||||
|
return requiredPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescription() {
|
||||||
|
return description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getInDepthDescription() {
|
||||||
|
return inDepthDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiConsumer<CMDSender, Arguments> getExecutor() {
|
||||||
|
return executor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BiFunction<CMDSender, Arguments, List<String>> getArgumentResolver() {
|
||||||
|
return argumentResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Builder implements SubcommandBuilder {
|
||||||
|
private Subcommand subcommand;
|
||||||
|
|
||||||
|
private Builder() {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubcommandBuilder alias(String alias) {
|
||||||
|
subcommand.aliases.add(alias);
|
||||||
|
if (subcommand.primaryAlias == null) subcommand.primaryAlias = alias;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubcommandBuilder aliases(String... aliases) {
|
||||||
|
for (String alias : aliases) {
|
||||||
|
alias(alias);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubcommandBuilder requirePermission(String permission) {
|
||||||
|
subcommand.requiredPermissions.add(permission);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubcommandBuilder description(String description) {
|
||||||
|
subcommand.description = description;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubcommandBuilder inDepthDescription(String... lines) {
|
||||||
|
subcommand.inDepthDescription.addAll(Arrays.asList(lines));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubcommandBuilder onCommand(BiConsumer<CMDSender, Arguments> executor) {
|
||||||
|
subcommand.executor = executor;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SubcommandBuilder onTabComplete(BiFunction<CMDSender, Arguments, List<String>> resolver) {
|
||||||
|
subcommand.argumentResolver = resolver;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Subcommand build() {
|
||||||
|
if (subcommand.executor == null) throw new IllegalStateException("Command executor not defined.");
|
||||||
|
if (subcommand.primaryAlias == null || subcommand.aliases.isEmpty()) {
|
||||||
|
throw new IllegalStateException("Command aliases not defined.");
|
||||||
|
}
|
||||||
|
return subcommand;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* This file is part of Player Analytics (Plan).
|
||||||
|
*
|
||||||
|
* Plan is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License v3 as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Plan is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Plan. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.djrapitops.plan.commands.use;
|
||||||
|
|
||||||
|
import com.djrapitops.plan.commands.Arguments;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
|
public interface SubcommandBuilder {
|
||||||
|
|
||||||
|
SubcommandBuilder alias(String alias);
|
||||||
|
|
||||||
|
SubcommandBuilder aliases(String... aliases);
|
||||||
|
|
||||||
|
SubcommandBuilder requirePermission(String permission);
|
||||||
|
|
||||||
|
SubcommandBuilder description(String description);
|
||||||
|
|
||||||
|
default SubcommandBuilder inDepthDescription(String inDepthDescription) {
|
||||||
|
return inDepthDescription(StringUtils.split(inDepthDescription, '\n'));
|
||||||
|
}
|
||||||
|
|
||||||
|
SubcommandBuilder inDepthDescription(String... lines);
|
||||||
|
|
||||||
|
SubcommandBuilder onCommand(BiConsumer<CMDSender, Arguments> executor);
|
||||||
|
|
||||||
|
SubcommandBuilder onTabComplete(BiFunction<CMDSender, Arguments, List<String>> resolver);
|
||||||
|
|
||||||
|
Subcommand build();
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user