mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-09-26 22:02:38 +02:00
Added a Ranks Manager
This commit is contained in:
parent
eec4e99172
commit
417f767705
@ -15,6 +15,7 @@ import us.tastybento.bskyblock.managers.AddonsManager;
|
|||||||
import us.tastybento.bskyblock.managers.CommandsManager;
|
import us.tastybento.bskyblock.managers.CommandsManager;
|
||||||
import us.tastybento.bskyblock.managers.FlagsManager;
|
import us.tastybento.bskyblock.managers.FlagsManager;
|
||||||
import us.tastybento.bskyblock.managers.LocalesManager;
|
import us.tastybento.bskyblock.managers.LocalesManager;
|
||||||
|
import us.tastybento.bskyblock.managers.RanksManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main BSkyBlock class - provides an island minigame in the sky
|
* Main BSkyBlock class - provides an island minigame in the sky
|
||||||
@ -38,6 +39,7 @@ public class BSkyBlock extends JavaPlugin {
|
|||||||
private AddonsManager addonsManager;
|
private AddonsManager addonsManager;
|
||||||
private FlagsManager flagsManager;
|
private FlagsManager flagsManager;
|
||||||
private IslandWorld islandWorldManager;
|
private IslandWorld islandWorldManager;
|
||||||
|
private RanksManager ranksManager;
|
||||||
|
|
||||||
// Settings
|
// Settings
|
||||||
Settings settings;
|
Settings settings;
|
||||||
@ -67,6 +69,7 @@ public class BSkyBlock extends JavaPlugin {
|
|||||||
|
|
||||||
playersManager = new PlayersManager(this);
|
playersManager = new PlayersManager(this);
|
||||||
islandsManager = new IslandsManager(this);
|
islandsManager = new IslandsManager(this);
|
||||||
|
ranksManager = new RanksManager(this);
|
||||||
|
|
||||||
// Load metrics
|
// Load metrics
|
||||||
metrics = new Metrics(plugin);
|
metrics = new Metrics(plugin);
|
||||||
@ -250,4 +253,13 @@ public class BSkyBlock extends JavaPlugin {
|
|||||||
return islandWorldManager;
|
return islandWorldManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the ranksManager
|
||||||
|
*/
|
||||||
|
public RanksManager getRanksManager() {
|
||||||
|
return ranksManager;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -166,6 +166,10 @@ public class Settings implements ISettings<Settings> {
|
|||||||
@ConfigEntry(path = "island.deaths.sum-team")
|
@ConfigEntry(path = "island.deaths.sum-team")
|
||||||
private boolean deathsSumTeam = false;
|
private boolean deathsSumTeam = false;
|
||||||
|
|
||||||
|
// Ranks
|
||||||
|
@ConfigEntry(path = "island.customranks")
|
||||||
|
private HashMap<String, Integer> customRanks = new HashMap<>();
|
||||||
|
|
||||||
// ---------------------------------------------
|
// ---------------------------------------------
|
||||||
|
|
||||||
/* PROTECTION */
|
/* PROTECTION */
|
||||||
@ -288,6 +292,12 @@ public class Settings implements ISettings<Settings> {
|
|||||||
public EntityType getCompanionType() {
|
public EntityType getCompanionType() {
|
||||||
return companionType;
|
return companionType;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @return the customRanks
|
||||||
|
*/
|
||||||
|
public HashMap<String, Integer> getCustomRanks() {
|
||||||
|
return customRanks;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @return the databaseBackupPeriod
|
* @return the databaseBackupPeriod
|
||||||
*/
|
*/
|
||||||
@ -839,6 +849,12 @@ public class Settings implements ISettings<Settings> {
|
|||||||
public void setCompanionType(EntityType companionType) {
|
public void setCompanionType(EntityType companionType) {
|
||||||
this.companionType = companionType;
|
this.companionType = companionType;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param customRanks the customRanks to set
|
||||||
|
*/
|
||||||
|
public void setCustomRanks(HashMap<String, Integer> customRanks) {
|
||||||
|
this.customRanks = customRanks;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* @param databaseBackupPeriod the databaseBackupPeriod to set
|
* @param databaseBackupPeriod the databaseBackupPeriod to set
|
||||||
*/
|
*/
|
||||||
@ -1109,6 +1125,7 @@ public class Settings implements ISettings<Settings> {
|
|||||||
public void setRemoveMobsOnIsland(boolean removeMobsOnIsland) {
|
public void setRemoveMobsOnIsland(boolean removeMobsOnIsland) {
|
||||||
this.removeMobsOnIsland = removeMobsOnIsland;
|
this.removeMobsOnIsland = removeMobsOnIsland;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param removeMobsOnLogin the removeMobsOnLogin to set
|
* @param removeMobsOnLogin the removeMobsOnLogin to set
|
||||||
*/
|
*/
|
||||||
@ -1121,7 +1138,6 @@ public class Settings implements ISettings<Settings> {
|
|||||||
public void setRemoveMobsWhitelist(List<String> removeMobsWhitelist) {
|
public void setRemoveMobsWhitelist(List<String> removeMobsWhitelist) {
|
||||||
this.removeMobsWhitelist = removeMobsWhitelist;
|
this.removeMobsWhitelist = removeMobsWhitelist;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param resetConfirmation the resetConfirmation to set
|
* @param resetConfirmation the resetConfirmation to set
|
||||||
*/
|
*/
|
||||||
|
@ -85,7 +85,8 @@ public class Island implements DataObject {
|
|||||||
|
|
||||||
//// Team ////
|
//// Team ////
|
||||||
private UUID owner;
|
private UUID owner;
|
||||||
private HashMap<UUID, Integer> ranks = new HashMap<>();
|
private HashMap<UUID, Integer> members = new HashMap<>();
|
||||||
|
|
||||||
//// State ////
|
//// State ////
|
||||||
private boolean locked = false;
|
private boolean locked = false;
|
||||||
private boolean spawn = false;
|
private boolean spawn = false;
|
||||||
@ -101,7 +102,7 @@ public class Island implements DataObject {
|
|||||||
|
|
||||||
public Island(Location location, UUID owner, int protectionRange) {
|
public Island(Location location, UUID owner, int protectionRange) {
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
this.ranks.put(owner, OWNER_RANK);
|
this.members.put(owner, OWNER_RANK);
|
||||||
this.createdDate = System.currentTimeMillis();
|
this.createdDate = System.currentTimeMillis();
|
||||||
this.updatedDate = System.currentTimeMillis();
|
this.updatedDate = System.currentTimeMillis();
|
||||||
this.world = location.getWorld();
|
this.world = location.getWorld();
|
||||||
@ -119,7 +120,7 @@ public class Island implements DataObject {
|
|||||||
* @param playerUUID
|
* @param playerUUID
|
||||||
*/
|
*/
|
||||||
public void addMember(UUID playerUUID) {
|
public void addMember(UUID playerUUID) {
|
||||||
ranks.put(playerUUID, MEMBER_RANK);
|
members.put(playerUUID, MEMBER_RANK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -130,7 +131,7 @@ public class Island implements DataObject {
|
|||||||
*/
|
*/
|
||||||
public boolean addToBanList(UUID targetUUID) {
|
public boolean addToBanList(UUID targetUUID) {
|
||||||
// TODO fire ban event
|
// TODO fire ban event
|
||||||
ranks.put(targetUUID, BANNED_RANK);
|
members.put(targetUUID, BANNED_RANK);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +140,7 @@ public class Island implements DataObject {
|
|||||||
*/
|
*/
|
||||||
public Set<UUID> getBanned() {
|
public Set<UUID> getBanned() {
|
||||||
Set<UUID> result = new HashSet<>();
|
Set<UUID> result = new HashSet<>();
|
||||||
for (Entry<UUID, Integer> member: ranks.entrySet()) {
|
for (Entry<UUID, Integer> member: members.entrySet()) {
|
||||||
if (member.getValue() <= BANNED_RANK) {
|
if (member.getValue() <= BANNED_RANK) {
|
||||||
result.add(member.getKey());
|
result.add(member.getKey());
|
||||||
}
|
}
|
||||||
@ -187,7 +188,7 @@ public class Island implements DataObject {
|
|||||||
*/
|
*/
|
||||||
public Set<UUID> getMembers(){
|
public Set<UUID> getMembers(){
|
||||||
Set<UUID> result = new HashSet<>();
|
Set<UUID> result = new HashSet<>();
|
||||||
for (Entry<UUID, Integer> member: ranks.entrySet()) {
|
for (Entry<UUID, Integer> member: members.entrySet()) {
|
||||||
if (member.getValue() >= MEMBER_RANK) {
|
if (member.getValue() >= MEMBER_RANK) {
|
||||||
result.add(member.getKey());
|
result.add(member.getKey());
|
||||||
}
|
}
|
||||||
@ -311,7 +312,7 @@ public class Island implements DataObject {
|
|||||||
* @return Returns true if target is banned on this island
|
* @return Returns true if target is banned on this island
|
||||||
*/
|
*/
|
||||||
public boolean isBanned(UUID targetUUID) {
|
public boolean isBanned(UUID targetUUID) {
|
||||||
return ranks.containsKey(targetUUID) && ranks.get(targetUUID) == BANNED_RANK ? true : false;
|
return members.containsKey(targetUUID) && members.get(targetUUID) == BANNED_RANK ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -359,7 +360,7 @@ public class Island implements DataObject {
|
|||||||
*/
|
*/
|
||||||
public boolean removeFromBanList(UUID targetUUID) {
|
public boolean removeFromBanList(UUID targetUUID) {
|
||||||
// TODO fire unban event
|
// TODO fire unban event
|
||||||
ranks.remove(targetUUID);
|
members.remove(targetUUID);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,7 +466,7 @@ public class Island implements DataObject {
|
|||||||
*/
|
*/
|
||||||
public void setOwner(UUID owner){
|
public void setOwner(UUID owner){
|
||||||
this.owner = owner;
|
this.owner = owner;
|
||||||
this.ranks.put(owner, OWNER_RANK);
|
this.members.put(owner, OWNER_RANK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -618,7 +619,7 @@ public class Island implements DataObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void removeMember(UUID playerUUID) {
|
public void removeMember(UUID playerUUID) {
|
||||||
ranks.remove(playerUUID);
|
members.remove(playerUUID);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -627,20 +628,29 @@ public class Island implements DataObject {
|
|||||||
* @return rank integer
|
* @return rank integer
|
||||||
*/
|
*/
|
||||||
public int getRank(User user) {
|
public int getRank(User user) {
|
||||||
return ranks.containsKey(user.getUniqueId()) ? ranks.get(user.getUniqueId()) : VISITOR_RANK;
|
return members.containsKey(user.getUniqueId()) ? members.get(user.getUniqueId()) : VISITOR_RANK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set user's rank to an arbitrary rank value
|
||||||
|
* @param user
|
||||||
|
* @param rank
|
||||||
|
*/
|
||||||
|
public void setRank(User user, int rank) {
|
||||||
|
members.put(user.getUniqueId(), rank);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the ranks
|
* @return the ranks
|
||||||
*/
|
*/
|
||||||
public HashMap<UUID, Integer> getRanks() {
|
public HashMap<UUID, Integer> getRanks() {
|
||||||
return ranks;
|
return members;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param ranks the ranks to set
|
* @param ranks the ranks to set
|
||||||
*/
|
*/
|
||||||
public void setRanks(HashMap<UUID, Integer> ranks) {
|
public void setRanks(HashMap<UUID, Integer> ranks) {
|
||||||
this.ranks = ranks;
|
this.members = ranks;
|
||||||
}
|
}
|
||||||
}
|
}
|
165
src/main/java/us/tastybento/bskyblock/managers/RanksManager.java
Normal file
165
src/main/java/us/tastybento/bskyblock/managers/RanksManager.java
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
package us.tastybento.bskyblock.managers;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import us.tastybento.bskyblock.BSkyBlock;
|
||||||
|
|
||||||
|
public class RanksManager {
|
||||||
|
|
||||||
|
// Constants that define the hard coded rank values
|
||||||
|
private static final String OWNER_RANK_REF = "ranks.owner";
|
||||||
|
private static final String MEMBER_RANK_REF = "ranks.member";
|
||||||
|
private static final String VISITOR_RANK_REF = "ranks.visitor";
|
||||||
|
private static final String BANNED_RANK_REF = "ranks.banned";
|
||||||
|
private static final Integer OWNER_RANK = 1000;
|
||||||
|
private static final Integer MEMBER_RANK = 900;
|
||||||
|
private static final Integer VISITOR_RANK = 0;
|
||||||
|
private static final Integer BANNED_RANK = -1;
|
||||||
|
|
||||||
|
private BSkyBlock plugin;
|
||||||
|
|
||||||
|
// The store of ranks
|
||||||
|
private LinkedHashMap<String, Integer> ranks = new LinkedHashMap<>();
|
||||||
|
{
|
||||||
|
// Hard coded ranks
|
||||||
|
addRank(OWNER_RANK_REF, OWNER_RANK);
|
||||||
|
addRank(MEMBER_RANK_REF, MEMBER_RANK);
|
||||||
|
addRank(VISITOR_RANK_REF, VISITOR_RANK);
|
||||||
|
addRank(BANNED_RANK_REF, BANNED_RANK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param plugin
|
||||||
|
*/
|
||||||
|
public RanksManager(BSkyBlock plugin) {
|
||||||
|
super();
|
||||||
|
this.plugin = plugin;
|
||||||
|
loadCustomRanks();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the custom ranks from the settings
|
||||||
|
*/
|
||||||
|
public void loadCustomRanks() {
|
||||||
|
for (Entry<String, Integer> en : plugin.getSettings().getCustomRanks().entrySet()) {
|
||||||
|
if (!addRank(en.getKey(),en.getValue())) {
|
||||||
|
plugin.getLogger().severe("Error loading custom rank: " + en.getKey() + " " + en.getValue() + " skipping...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to add a new rank. Owner, member, visitor and banned ranks cannot be changed.
|
||||||
|
* @param reference
|
||||||
|
* @param value
|
||||||
|
* @return true if the rank was successfully added
|
||||||
|
*/
|
||||||
|
public boolean addRank(String reference, int value) {
|
||||||
|
if (reference.equalsIgnoreCase(OWNER_RANK_REF)
|
||||||
|
|| reference.equalsIgnoreCase(MEMBER_RANK_REF)
|
||||||
|
|| reference.equalsIgnoreCase(VISITOR_RANK_REF)
|
||||||
|
|| reference.equalsIgnoreCase(BANNED_RANK_REF)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ranks.put(reference, value);
|
||||||
|
// Sort
|
||||||
|
ranks = ranks.entrySet().stream()
|
||||||
|
.sorted(Map.Entry.comparingByValue())
|
||||||
|
.collect(Collectors.toMap(
|
||||||
|
Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Try to remove a rank. Owner, member, visitor and banned ranks cannot be removed.
|
||||||
|
* @param reference
|
||||||
|
* @return true if removed
|
||||||
|
*/
|
||||||
|
public boolean removeRank(String reference) {
|
||||||
|
if (reference.equalsIgnoreCase(OWNER_RANK_REF)
|
||||||
|
|| reference.equalsIgnoreCase(MEMBER_RANK_REF)
|
||||||
|
|| reference.equalsIgnoreCase(VISITOR_RANK_REF)
|
||||||
|
|| reference.equalsIgnoreCase(BANNED_RANK_REF)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ranks.remove(reference) == null ? false : true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the rank value for this reference
|
||||||
|
* @param reference - locale reference to the name of this rank
|
||||||
|
* @return rank value or zero if this is an unknown rank
|
||||||
|
*/
|
||||||
|
public int getRankValue(String reference) {
|
||||||
|
return ranks.getOrDefault(reference, VISITOR_RANK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the ranks. Ranks are listed in ascending order
|
||||||
|
* @return immutable map of ranks
|
||||||
|
*/
|
||||||
|
public LinkedHashMap<String, Integer> getRanks() {
|
||||||
|
return new LinkedHashMap<>(ranks);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the ownerRankRef
|
||||||
|
*/
|
||||||
|
public static String getOwnerRankRef() {
|
||||||
|
return OWNER_RANK_REF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the memberRankRef
|
||||||
|
*/
|
||||||
|
public static String getMemberRankRef() {
|
||||||
|
return MEMBER_RANK_REF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the visitorRankRef
|
||||||
|
*/
|
||||||
|
public static String getVisitorRankRef() {
|
||||||
|
return VISITOR_RANK_REF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the bannedRankRef
|
||||||
|
*/
|
||||||
|
public static String getBannedRankRef() {
|
||||||
|
return BANNED_RANK_REF;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the ownerRank
|
||||||
|
*/
|
||||||
|
public static Integer getOwnerRank() {
|
||||||
|
return OWNER_RANK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the memberRank
|
||||||
|
*/
|
||||||
|
public static Integer getMemberRank() {
|
||||||
|
return MEMBER_RANK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the visitorRank
|
||||||
|
*/
|
||||||
|
public static Integer getVisitorRank() {
|
||||||
|
return VISITOR_RANK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the bannedRank
|
||||||
|
*/
|
||||||
|
public static Integer getBannedRank() {
|
||||||
|
return BANNED_RANK;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user