package me.totalfreedom.plex.rank; import com.google.common.collect.Maps; import me.totalfreedom.plex.Plex; import me.totalfreedom.plex.player.PlexPlayer; import me.totalfreedom.plex.rank.enums.Rank; import me.totalfreedom.plex.util.PlexLog; import org.json.JSONObject; import org.json.JSONTokener; 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; public class RankManager { private final File defaultRanks; public RankManager() { File ranksFolder = new File(Plex.get().getDataFolder() + File.separator + "ranks"); if (!ranksFolder.exists()) { ranksFolder.mkdir(); } defaultRanks = new File(ranksFolder, "default-ranks.json"); } public void generateDefaultRanks() { if (defaultRanks.exists()) { return; } try { defaultRanks.createNewFile(); Map 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(); } } public void importDefaultRanks() { if (!defaultRanks.exists()) { return; } try { FileInputStream stream = new FileInputStream(defaultRanks); JSONTokener tokener = new JSONTokener(stream); 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.setPermissions(rankObj.getJSONObject(rank.name().toUpperCase()).getJSONArray("permissions").toList().stream().map(Object::toString).collect(Collectors.toList())); } } catch (IOException e) { e.printStackTrace(); } } public boolean isAdmin(PlexPlayer plexPlayer) { return !plexPlayer.getRank().isEmpty() && plexPlayer.getRankFromString().isAtleast(Rank.ADMIN); } }