Made modOnly optional and inherited
Also accidentally fixed an issue, probably (getClass instead of getValue.getClass) Also testing in production
This commit is contained in:
parent
c0e4a9e065
commit
25f770849f
4 changed files with 35 additions and 8 deletions
|
@ -61,8 +61,7 @@ public class CommandCaller implements CommandExecutor {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
if (cmd.getClass().getAnnotation(CommandClass.class).modOnly()
|
||||
&& !MainPlugin.permission.has(sender, "tbmc.admin")) {
|
||||
if (cmd.isModOnly() && !MainPlugin.permission.has(sender, "tbmc.admin")) {
|
||||
sender.sendMessage("§cYou need to be a mod to use this command.");
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -8,7 +8,8 @@ import java.lang.annotation.Target;
|
|||
|
||||
/**
|
||||
* <b>Abstract classes with no {@link CommandClass} annotations will be ignored.</b> Classes that are not abstract or have the annotation will be included in the command path unless
|
||||
* {@link #excludeFromPath()} is true.
|
||||
* {@link #excludeFromPath()} is true.<br>
|
||||
* <i>All commands with no modOnly set will <u>not be mod only</u></i>
|
||||
*
|
||||
* @author NorbiPeti
|
||||
*
|
||||
|
@ -18,11 +19,12 @@ import java.lang.annotation.Target;
|
|||
@Inherited
|
||||
public @interface CommandClass {
|
||||
/**
|
||||
* Determines whether the command can only be used by mods and above or regular players can use it as well.
|
||||
* Determines whether the command can only be used by mods and above or regular players can use it as well.<br>
|
||||
* <b>If not set, the command will <u>not</u> be mod only</b>
|
||||
*
|
||||
* @return If the command is mod only
|
||||
*/
|
||||
public boolean modOnly();
|
||||
public boolean modOnly() default false;
|
||||
|
||||
/**
|
||||
* The command's path, or name if top-level command.<br>
|
||||
|
|
|
@ -66,8 +66,7 @@ public class TBMCChatAPI {
|
|||
if (cmd.getKey().startsWith(command + " ")) {
|
||||
if (cmd.getValue().isPlayerOnly() && !(sender instanceof Player))
|
||||
continue;
|
||||
if (cmd.getClass().getAnnotation(CommandClass.class).modOnly()
|
||||
&& !MainPlugin.permission.has(sender, "tbmc.admin"))
|
||||
if (cmd.getValue().isModOnly() && !MainPlugin.permission.has(sender, "tbmc.admin"))
|
||||
continue;
|
||||
int ind = cmd.getKey().indexOf(' ', command.length() + 2);
|
||||
if (ind >= 0) {
|
||||
|
|
|
@ -18,13 +18,14 @@ public abstract class TBMCCommandBase {
|
|||
|
||||
public TBMCCommandBase() {
|
||||
path = getcmdpath();
|
||||
modonly = ismodonly();
|
||||
}
|
||||
|
||||
public abstract boolean OnCommand(CommandSender sender, String alias, String[] args);
|
||||
|
||||
public abstract String[] GetHelpText(String alias);
|
||||
|
||||
private String path = null;
|
||||
private final String path;
|
||||
|
||||
/**
|
||||
* The command's path, or name if top-level command.<br>
|
||||
|
@ -77,4 +78,30 @@ public abstract class TBMCCommandBase {
|
|||
? getClass().getAnnotation(OptionallyPlayerCommandClass.class).playerOnly() : true
|
||||
: false;
|
||||
}
|
||||
|
||||
private final boolean modonly;
|
||||
|
||||
/**
|
||||
* Returns true if this class' or any superclass' modOnly property is set to true.
|
||||
*/
|
||||
public final boolean isModOnly() {
|
||||
return modonly;
|
||||
}
|
||||
|
||||
private final boolean ismodonly() {
|
||||
if (!getClass().isAnnotationPresent(CommandClass.class))
|
||||
throw new RuntimeException(
|
||||
"No @CommandClass annotation on command class " + getClass().getSimpleName() + "!");
|
||||
boolean modOnly = getClass().getAnnotation(CommandClass.class).modOnly();
|
||||
for (Class<?> cl = getClass().getSuperclass(); cl != null
|
||||
&& !cl.getPackage().getName().equals(TBMCCommandBase.class.getPackage().getName()); cl = cl
|
||||
.getSuperclass()) { //
|
||||
if (cl.isAnnotationPresent(CommandClass.class) && !modOnly
|
||||
&& cl.getAnnotation(CommandClass.class).modOnly()) {
|
||||
modOnly = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return modOnly;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue