2014-08-28 98 views
-2

我有一个枚举,当我选择一个特定的(例如:Rank.MOD)时,我想对MOD以上的其他枚举启用特定权限。检查Enum对象是否在另一个Enum对象之后顺序检查?

例如,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; 
} 
+1

只是为了确保我正确地理解你的问题 - 你想办法做到“这个级别或以上“检查? – Deltharis 2014-08-28 11:09:52

+0

没错。 :) – Biskotaki 2014-08-28 11:13:04

回答

2

可以使用枚举类ordinal()方法将在枚举数组中返回索引,以便例如:

Rank.ADMIN.ordinal() < Rank.OWNER.ordinal() // true 

这样,如果他让你可以查看基于所需的权限和别人的等级做他想做的事。假设您将枚举实现中的等级从最低特权级别改为最高特权级别,这将会起作用。

1

有几个选项:

  • 您可以添加到每个排名表或排名,它被允许作为,并检查所需要的等级是否在你的排名列表。

  • 创建单独的权限枚举并使用这些安全检查(类似于上面的一个)

  • 添加一个“安全级别”数量排名,并检查您的排名有排名是否高于所需排名

Lucass想法很有趣,但不允许用于更复杂的层次结构比单干线