mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2025-02-23 07:41:39 +01:00
Added a Ranks Manager
This commit is contained in:
parent
eec4e99172
commit
417f767705
src/main/java/us/tastybento/bskyblock
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -165,6 +165,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<>();
|
||||
|
||||
// ---------------------------------------------
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
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