我有一个枚举,当我选择一个特定的(例如:Rank.MOD
)时,我想对MOD
上方的其他枚举启用特定权限。
例如,Bukkit命令需要Rank.MOD
。如果玩家是Rank.ADMIN
,我也需要允许执行此命令。
public enum Rank {
STARTER("Starter", 0, false),
PRODUCER("Producer", 20000, false),
DEALER("Dealer", 50000, false),
SMUGGLER("Smuggler", 100000, false),
POLICE("Police", 0, false),
MOD("Mod", 0, true),
ADMIN("Admin", 0, true),
OWNER("Owner", 0, true);
private String rankName;
private int rankCost;
private boolean staff;
Rank(String rankName, int rankCost, boolean staff) {
this.rankName = rankName;
this.staff = staff;
}
public String getName() {
return this.rankName;
}
public int getCost() {
return this.rankCost;
}
public boolean isStaff() {
return this.staff;
}
}
这是我检查等级的地方。
if ( !PlayerData.get().getRank(this.cmdSender).equals(this.rank.getName())) {
cmdSender.sendMessage(F.parse("Permission", "You need the " +
C.rank("[" + this.rank.getName()+ "]") +
" rank to execute this command."));
return false;
}
答案 0 :(得分:2)
您可以使用Enum类的ordinal()
方法返回枚举数组中的索引,例如:
Rank.ADMIN.ordinal() < Rank.OWNER.ordinal() // true
通过这种方式,您可以根据所需的权限和某人的等级进行检查,如果他允许他做任何他想做的事情。假设您在枚举实现中将排名从最低特权到最高特权排序,这将起作用。
答案 1 :(得分:1)
有几个选择:
您可以向每个排名添加一个或多个允许其作为的排名,并检查所需的排名是否在您所拥有的排名列表中。
创建单独的权限枚举并在安全检查中使用它们(类似于上面的那个)
添加&#34;安全级别&#34;要排名的号码,并检查您的排名的排名是否高于所需的排名
卢卡斯的想法很有意思,但不允许比单一主干更复杂的层次结构