Added a Ranks Manager

This commit is contained in:
Tastybento 2018-01-28 12:47:17 -08:00
parent eec4e99172
commit 417f767705
4 changed files with 217 additions and 14 deletions

View File

@ -15,6 +15,7 @@ import us.tastybento.bskyblock.managers.AddonsManager;
import us.tastybento.bskyblock.managers.CommandsManager;
import us.tastybento.bskyblock.managers.FlagsManager;
import us.tastybento.bskyblock.managers.LocalesManager;
import us.tastybento.bskyblock.managers.RanksManager;
/**
* Main BSkyBlock class - provides an island minigame in the sky
@ -38,6 +39,7 @@ public class BSkyBlock extends JavaPlugin {
private AddonsManager addonsManager;
private FlagsManager flagsManager;
private IslandWorld islandWorldManager;
private RanksManager ranksManager;
// Settings
Settings settings;
@ -67,6 +69,7 @@ public class BSkyBlock extends JavaPlugin {
playersManager = new PlayersManager(this);
islandsManager = new IslandsManager(this);
ranksManager = new RanksManager(this);
// Load metrics
metrics = new Metrics(plugin);
@ -250,4 +253,13 @@ public class BSkyBlock extends JavaPlugin {
return islandWorldManager;
}
/**
* @return the ranksManager
*/
public RanksManager getRanksManager() {
return ranksManager;
}
}

View File

@ -166,6 +166,10 @@ public class Settings implements ISettings<Settings> {
@ConfigEntry(path = "island.deaths.sum-team")
private boolean deathsSumTeam = false;
// Ranks
@ConfigEntry(path = "island.customranks")
private HashMap<String, Integer> customRanks = new HashMap<>();
// ---------------------------------------------
/* PROTECTION */
@ -288,6 +292,12 @@ public class Settings implements ISettings<Settings> {
public EntityType getCompanionType() {
return companionType;
}
/**
* @return the customRanks
*/
public HashMap<String, Integer> getCustomRanks() {
return customRanks;
}
/**
* @return the databaseBackupPeriod
*/
@ -839,6 +849,12 @@ public class Settings implements ISettings<Settings> {
public void setCompanionType(EntityType 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
*/
@ -1109,6 +1125,7 @@ public class Settings implements ISettings<Settings> {
public void setRemoveMobsOnIsland(boolean removeMobsOnIsland) {
this.removeMobsOnIsland = removeMobsOnIsland;
}
/**
* @param removeMobsOnLogin the removeMobsOnLogin to set
*/
@ -1121,7 +1138,6 @@ public class Settings implements ISettings<Settings> {
public void setRemoveMobsWhitelist(List<String> removeMobsWhitelist) {
this.removeMobsWhitelist = removeMobsWhitelist;
}
/**
* @param resetConfirmation the resetConfirmation to set
*/

View File

@ -85,7 +85,8 @@ public class Island implements DataObject {
//// Team ////
private UUID owner;
private HashMap<UUID, Integer> ranks = new HashMap<>();
private HashMap<UUID, Integer> members = new HashMap<>();
//// State ////
private boolean locked = false;
private boolean spawn = false;
@ -101,7 +102,7 @@ public class Island implements DataObject {
public Island(Location location, UUID owner, int protectionRange) {
this.owner = owner;
this.ranks.put(owner, OWNER_RANK);
this.members.put(owner, OWNER_RANK);
this.createdDate = System.currentTimeMillis();
this.updatedDate = System.currentTimeMillis();
this.world = location.getWorld();
@ -119,7 +120,7 @@ public class Island implements DataObject {
* @param 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) {
// TODO fire ban event
ranks.put(targetUUID, BANNED_RANK);
members.put(targetUUID, BANNED_RANK);
return true;
}
@ -139,7 +140,7 @@ public class Island implements DataObject {
*/
public Set<UUID> getBanned() {
Set<UUID> result = new HashSet<>();
for (Entry<UUID, Integer> member: ranks.entrySet()) {
for (Entry<UUID, Integer> member: members.entrySet()) {
if (member.getValue() <= BANNED_RANK) {
result.add(member.getKey());
}
@ -187,7 +188,7 @@ public class Island implements DataObject {
*/
public Set<UUID> getMembers(){
Set<UUID> result = new HashSet<>();
for (Entry<UUID, Integer> member: ranks.entrySet()) {
for (Entry<UUID, Integer> member: members.entrySet()) {
if (member.getValue() >= MEMBER_RANK) {
result.add(member.getKey());
}
@ -311,7 +312,7 @@ public class Island implements DataObject {
* @return Returns true if target is banned on this island
*/
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) {
// TODO fire unban event
ranks.remove(targetUUID);
members.remove(targetUUID);
return true;
}
@ -465,7 +466,7 @@ public class Island implements DataObject {
*/
public void setOwner(UUID 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) {
ranks.remove(playerUUID);
members.remove(playerUUID);
}
/**
@ -627,20 +628,29 @@ public class Island implements DataObject {
* @return rank integer
*/
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
*/
public HashMap<UUID, Integer> getRanks() {
return ranks;
return members;
}
/**
* @param ranks the ranks to set
*/
public void setRanks(HashMap<UUID, Integer> ranks) {
this.ranks = ranks;
this.members = ranks;
}
}

View 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;
}
}