-
Notifications
You must be signed in to change notification settings - Fork 497
/
SubCommand.java
134 lines (109 loc) · 3.07 KB
/
SubCommand.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
* Copyright (c) 2011-2015, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
* <p/>
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.core.lib.commands;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
import net.minecraft.command.ICommand;
import net.minecraft.command.ICommandSender;
public abstract class SubCommand implements IModCommand {
public enum PermLevel {
EVERYONE(0), ADMIN(2), SERVER_ADMIN(3);
int permLevel;
PermLevel(int permLevel) {
this.permLevel = permLevel;
}
}
private final String name;
private final List<String> aliases = new ArrayList<String>();
private PermLevel permLevel = PermLevel.EVERYONE;
private IModCommand parent;
private final SortedSet<SubCommand> children = new TreeSet<SubCommand>(new Comparator<SubCommand>() {
@Override
public int compare(SubCommand o1, SubCommand o2) {
return o1.compareTo(o2);
}
});
public SubCommand(String name) {
this.name = name;
}
@Override
public final String getCommandName() {
return name;
}
public SubCommand addChildCommand(SubCommand child) {
child.setParent(this);
children.add(child);
return this;
}
void setParent(IModCommand parent) {
this.parent = parent;
}
@Override
public SortedSet<SubCommand> getChildren() {
return children;
}
public void addAlias(String alias) {
aliases.add(alias);
}
@Override
public List<String> getCommandAliases() {
return aliases;
}
@Override
public List<?> addTabCompletionOptions(ICommandSender sender, String[] text) {
return null;
}
@Override
public final void processCommand(ICommandSender sender, String[] args) {
if (!CommandHelpers.processStandardCommands(sender, this, args)) {
processSubCommand(sender, args);
}
}
public void processSubCommand(ICommandSender sender, String[] args) {
CommandHelpers.throwWrongUsage(sender, this);
}
public SubCommand setPermLevel(PermLevel permLevel) {
this.permLevel = permLevel;
return this;
}
@Override
public final int getRequiredPermissionLevel() {
return permLevel.permLevel;
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender sender) {
return sender.canCommandSenderUseCommand(getRequiredPermissionLevel(), getCommandName());
}
@Override
public boolean isUsernameIndex(String[] args, int index) {
return false;
}
@Override
public String getCommandUsage(ICommandSender sender) {
return "/" + getFullCommandString() + " help";
}
@Override
public void printHelp(ICommandSender sender) {
CommandHelpers.printHelp(sender, this);
}
@Override
public String getFullCommandString() {
return parent.getFullCommandString() + " " + getCommandName();
}
public int compareTo(ICommand command) {
return this.getCommandName().compareTo(command.getCommandName());
}
@Override
public int compareTo(Object command) {
return this.compareTo((ICommand) command);
}
}