mirror of
https://github.com/plexusorg/Plex.git
synced 2025-06-29 14:56:43 +00:00
- Fix world permissions handling and add more customization
This commit is contained in:
@ -1,24 +0,0 @@
|
||||
package dev.plex.rank;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import dev.plex.rank.enums.Rank;
|
||||
import java.util.List;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class DefaultRankObj
|
||||
{
|
||||
private final String prefix;
|
||||
private final String loginMSG;
|
||||
private final String readableName;
|
||||
private final List<String> permissions;
|
||||
|
||||
public DefaultRankObj(Rank rank)
|
||||
{
|
||||
this.prefix = rank.getPrefix();
|
||||
this.loginMSG = rank.getLoginMSG();
|
||||
this.readableName = rank.getReadableString();
|
||||
this.permissions = Lists.newArrayList();
|
||||
permissions.add("example.permission");
|
||||
}
|
||||
}
|
@ -1,22 +1,24 @@
|
||||
package dev.plex.rank;
|
||||
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.gson.Gson;
|
||||
import dev.plex.Plex;
|
||||
import dev.plex.player.PlexPlayer;
|
||||
import dev.plex.rank.enums.Rank;
|
||||
import dev.plex.util.PlexLog;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import dev.plex.rank.enums.Title;
|
||||
import dev.plex.util.PlexUtils;
|
||||
import lombok.SneakyThrows;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONTokener;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class RankManager
|
||||
{
|
||||
private final File defaultRanks;
|
||||
private final File options;
|
||||
|
||||
public RankManager()
|
||||
{
|
||||
@ -26,41 +28,23 @@ public class RankManager
|
||||
ranksFolder.mkdir();
|
||||
}
|
||||
|
||||
defaultRanks = new File(ranksFolder, "default-ranks.json");
|
||||
options = new File(ranksFolder, "options.json");
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
public void generateDefaultRanks()
|
||||
{
|
||||
if (defaultRanks.exists())
|
||||
if (options.exists())
|
||||
{
|
||||
return;
|
||||
}
|
||||
try
|
||||
{
|
||||
defaultRanks.createNewFile();
|
||||
|
||||
Map<String, DefaultRankObj> rankMap = Maps.newHashMap();
|
||||
for (Rank rank : Rank.values())
|
||||
{
|
||||
rankMap.put(rank.name().toUpperCase(), new DefaultRankObj(rank));
|
||||
}
|
||||
|
||||
JSONObject obj = new JSONObject();
|
||||
if (obj.length() == 0)
|
||||
{
|
||||
obj.put("ranks", rankMap);
|
||||
|
||||
FileWriter writer = new FileWriter(defaultRanks);
|
||||
writer.append(obj.toString(4));
|
||||
writer.flush();
|
||||
writer.close();
|
||||
PlexLog.log("Generating default-ranks.json");
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
JSONObject object = new JSONObject();
|
||||
object.put("ranks", new JSONArray().putAll(Arrays.stream(Rank.values()).map(Rank::toJSON).collect(Collectors.toList())));
|
||||
object.put("titles", new JSONArray().putAll(Arrays.stream(Title.values()).map(Title::toJSON).collect(Collectors.toList())));
|
||||
FileWriter writer = new FileWriter(options);
|
||||
writer.append(object.toString(4));
|
||||
writer.flush();
|
||||
writer.close();
|
||||
}
|
||||
|
||||
public Rank getRankFromString(String rank)
|
||||
@ -70,34 +54,60 @@ public class RankManager
|
||||
|
||||
public void importDefaultRanks()
|
||||
{
|
||||
if (!defaultRanks.exists())
|
||||
if (!options.exists())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
try (FileInputStream fis = new FileInputStream(options))
|
||||
{
|
||||
FileInputStream stream = new FileInputStream(defaultRanks);
|
||||
JSONTokener tokener = new JSONTokener(stream);
|
||||
JSONTokener tokener = new JSONTokener(fis);
|
||||
JSONObject object = new JSONObject(tokener);
|
||||
JSONObject rankObj = object.getJSONObject("ranks");
|
||||
for (Rank rank : Rank.values())
|
||||
{
|
||||
if (rankObj.isNull(rank.name().toUpperCase()))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
rank.setLoginMessage(rankObj.getJSONObject(rank.name().toUpperCase()).getString("loginMSG"));
|
||||
rank.setPrefix(rankObj.getJSONObject(rank.name().toUpperCase()).getString("prefix")); //should i even be doing this
|
||||
rank.setHumanReadableString(rankObj.getJSONObject(rank.name().toUpperCase()).getString("readableName")); // i dont know
|
||||
rank.setPermissions(rankObj.getJSONObject(rank.name().toUpperCase()).getJSONArray("permissions").toList().stream().map(Object::toString).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
catch (IOException e)
|
||||
|
||||
JSONArray ranks = object.getJSONArray("ranks");
|
||||
ranks.forEach(r -> {
|
||||
JSONObject rank = new JSONObject(r.toString());
|
||||
String key = rank.keys().next();
|
||||
Rank.valueOf(key).setLoginMessage(rank.getJSONObject(key).getString("loginMessage"));
|
||||
Rank.valueOf(key).setPrefix(rank.getJSONObject(key).getString("prefix"));
|
||||
});
|
||||
|
||||
JSONArray titles = object.getJSONArray("titles");
|
||||
titles.forEach(t -> {
|
||||
JSONObject title = new JSONObject(t.toString());
|
||||
String key = title.keys().next();
|
||||
Title.valueOf(key).setLoginMessage(title.getJSONObject(key).getString("loginMessage"));
|
||||
Title.valueOf(key).setPrefix(title.getJSONObject(key).getString("prefix"));
|
||||
});
|
||||
} catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public String getPrefix(PlexPlayer player)
|
||||
{
|
||||
if (!player.getPrefix().isEmpty())
|
||||
{
|
||||
return player.getPrefix();
|
||||
}
|
||||
if (Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(player.getName()))
|
||||
{
|
||||
return Title.OWNER.getPrefix();
|
||||
}
|
||||
if (PlexUtils.DEVELOPERS.contains(player.getUuid())) // don't remove or we will front door ur mother
|
||||
{
|
||||
return Title.DEV.getPrefix();
|
||||
}
|
||||
if (Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(player.getName()))
|
||||
{
|
||||
return Title.MASTER_BUILDER.getPrefix();
|
||||
}
|
||||
if (Plex.get().getSystem().equalsIgnoreCase("ranks") && isAdmin(player))
|
||||
{
|
||||
return player.getRankFromString().getPrefix();
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public boolean isAdmin(PlexPlayer plexPlayer)
|
||||
|
@ -1,23 +1,36 @@
|
||||
package dev.plex.rank.enums;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import java.util.List;
|
||||
import org.bukkit.ChatColor;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@Getter
|
||||
public enum Rank
|
||||
{
|
||||
IMPOSTOR(-1, ChatColor.AQUA + "an " + ChatColor.YELLOW + "Impostor", "Impostor", ChatColor.YELLOW + "[Imp]"),
|
||||
NONOP(0, "a " + ChatColor.WHITE + "Non-Op", "Non-Op", ChatColor.WHITE + ""),
|
||||
OP(1, "an " + ChatColor.GREEN + "Operator", "Operator", ChatColor.GREEN + "[OP]"),
|
||||
ADMIN(2, "an " + ChatColor.DARK_GREEN + "Admin", "Admin", ChatColor.DARK_GREEN + "[Admin]"),
|
||||
SENIOR_ADMIN(3, "a " + ChatColor.GOLD + "Senior Admin", "Senior Admin", ChatColor.GOLD + "[SrA]"),
|
||||
EXECUTIVE(4, "an " + ChatColor.RED + "Executive", "Executive", ChatColor.RED + "[Exec]");
|
||||
IMPOSTOR(-1, ChatColor.AQUA + "an " + ChatColor.YELLOW + "Impostor", "Impostor", "&8[&eImp&8]"),
|
||||
NONOP(0, "a " + ChatColor.WHITE + "Non-Op", "Non-Op", ""),
|
||||
OP(1, "an " + ChatColor.GREEN + "Operator", "Operator", "&8[&aOp&8]"),
|
||||
ADMIN(2, "an " + ChatColor.DARK_GREEN + "Admin", "Admin", "&8[&2Admin&8]"),
|
||||
SENIOR_ADMIN(3, "a " + ChatColor.GOLD + "Senior Admin", "Senior Admin", "&8[&6SrA&8]"),
|
||||
EXECUTIVE(4, "an " + ChatColor.RED + "Executive", "Executive", "&8[&cExec&8]");
|
||||
|
||||
private final int level;
|
||||
|
||||
@Setter
|
||||
private String loginMessage;
|
||||
|
||||
@Setter
|
||||
private String readable;
|
||||
|
||||
@Setter
|
||||
private String prefix;
|
||||
private List<String> permissions;
|
||||
|
||||
Rank(int level, String loginMessage, String readable, String prefix)
|
||||
{
|
||||
@ -25,56 +38,18 @@ public enum Rank
|
||||
this.loginMessage = loginMessage;
|
||||
this.readable = readable;
|
||||
this.prefix = prefix;
|
||||
this.permissions = Lists.newArrayList();
|
||||
}
|
||||
|
||||
public String getPrefix()
|
||||
{
|
||||
return ChatColor.translateAlternateColorCodes('&', prefix);
|
||||
}
|
||||
|
||||
public String getLoginMSG()
|
||||
{
|
||||
return ChatColor.translateAlternateColorCodes('&', loginMessage);
|
||||
}
|
||||
|
||||
public int getLevel()
|
||||
{
|
||||
return level;
|
||||
}
|
||||
|
||||
public String getReadableString()
|
||||
{
|
||||
return readable;
|
||||
}
|
||||
|
||||
public void setLoginMessage(String msg)
|
||||
{
|
||||
this.loginMessage = msg;
|
||||
}
|
||||
|
||||
public void setPrefix(String prefix)
|
||||
{
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public void setHumanReadableString(String readable)
|
||||
{
|
||||
this.readable = readable;
|
||||
}
|
||||
|
||||
public boolean isAtLeast(Rank rank)
|
||||
{
|
||||
return getLevel() >= rank.getLevel();
|
||||
return this.level >= rank.getLevel();
|
||||
}
|
||||
|
||||
public List<String> getPermissions()
|
||||
public JSONObject toJSON()
|
||||
{
|
||||
return permissions;
|
||||
}
|
||||
|
||||
public void setPermissions(List<String> permissions)
|
||||
{
|
||||
this.permissions = permissions;
|
||||
JSONObject object = new JSONObject();
|
||||
object.put("prefix", this.prefix);
|
||||
object.put("loginMessage", this.loginMessage);
|
||||
return new JSONObject().put(this.name(), object);
|
||||
}
|
||||
}
|
||||
|
@ -1,23 +1,41 @@
|
||||
package dev.plex.rank.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.json.JSONObject;
|
||||
|
||||
@Getter
|
||||
public enum Title
|
||||
{
|
||||
MASTER_BUILDER(0, ChatColor.AQUA + "a " + ChatColor.DARK_AQUA + "Master Builder", "Master Builder", ChatColor.DARK_AQUA + "[MB]"),
|
||||
DEV(1, ChatColor.AQUA + "a " + ChatColor.DARK_PURPLE + "Developer", "Developer", ChatColor.DARK_PURPLE + "[DEV]"),
|
||||
OWNER(2, ChatColor.AQUA + "an " + ChatColor.BLUE + "Owner", "Owner", ChatColor.BLUE + "[Owner]");
|
||||
MASTER_BUILDER(0, ChatColor.AQUA + "a " + ChatColor.DARK_AQUA + "Master Builder", "Master Builder", "&8[&3Master Builder&8]"),
|
||||
DEV(1, ChatColor.AQUA + "a " + ChatColor.DARK_PURPLE + "Developer", "Developer", "&8[&5Developer&8]"),
|
||||
OWNER(2, ChatColor.AQUA + "an " + ChatColor.BLUE + "Owner", "Owner", "&8[&9Owner&8]");
|
||||
|
||||
private int level;
|
||||
private String loginMSG;
|
||||
private final int level;
|
||||
|
||||
@Setter
|
||||
private String loginMessage;
|
||||
|
||||
@Setter
|
||||
private String readable;
|
||||
|
||||
@Setter
|
||||
private String prefix;
|
||||
|
||||
Title(int level, String loginMSG, String readable, String prefix)
|
||||
Title(int level, String loginMessage, String readable, String prefix)
|
||||
{
|
||||
this.level = level;
|
||||
this.loginMSG = loginMSG;
|
||||
this.loginMessage = loginMessage;
|
||||
this.readable = readable;
|
||||
this.prefix = prefix;
|
||||
}
|
||||
|
||||
public JSONObject toJSON()
|
||||
{
|
||||
JSONObject object = new JSONObject();
|
||||
object.put("prefix", this.prefix);
|
||||
object.put("loginMessage", this.loginMessage);
|
||||
return new JSONObject().put(this.name(), object);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user