diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTP_SETUP_TYPE.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTP_SETUP_TYPE.java index c85447a..4d37991 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTP_SETUP_TYPE.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTP_SETUP_TYPE.java @@ -7,5 +7,6 @@ import java.util.List; public enum RTP_SETUP_TYPE { DEFAULT, CUSTOM_WORLD, - LOCATION + LOCATION, + PERMISSIONGROUP } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java index 86bb398..a32c087 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdInfo.java @@ -34,20 +34,18 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable { infoEffects(sendi); else if (args[1].equalsIgnoreCase(CmdInfoSub.WORLD.name())) { if (args.length > 2 && Bukkit.getWorld(args[2]) != null) { - sendInfoWorld(sendi, infoGetWorld(sendi, Bukkit.getWorld(args[2]), false)); + sendInfoWorld(sendi, infoGetWorld(sendi, Bukkit.getWorld(args[2]), null)); } else if (sendi instanceof Player) { //Personalize with permission groups World world = null; - boolean personal = false; + Player player = null; if (args.length > 2) { - Player player = Bukkit.getPlayer(args[2]); - if (player != null) { + player = Bukkit.getPlayer(args[2]); + if (player != null) world = player.getWorld(); - personal = true; - } } if (world == null) world = ((Player) sendi).getWorld(); - sendInfoWorld(sendi, infoGetWorld(sendi, world, personal)); + sendInfoWorld(sendi, infoGetWorld(sendi, world, player)); } else infoWorld(sendi); } @@ -108,26 +106,26 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable { private void infoWorld(CommandSender sendi) { //All worlds List info = new ArrayList<>(); for (World w : Bukkit.getWorlds()) - info.addAll(infoGetWorld(sendi, w, false)); + info.addAll(infoGetWorld(sendi, w, null)); sendInfoWorld(sendi, info); } - private List infoGetWorld(CommandSender sendi, World w, boolean personal) { //Specific world + private List infoGetWorld(CommandSender sendi, World w, Player player) { //Specific world List info = new ArrayList<>(); BetterRTP pl = BetterRTP.getInstance(); String _true = "&aTrue", _false = "&bFalse"; - info.add("&eWorld Name: &7" + w.getName() + (personal ? " &7(personalized)" : "")); - if (personal) - info.add("&7- &6Allowed: " + (pl.getPerms().getAWorld(sendi, w.getName()) ? _true : _false)); + info.add("&bRTP info for &7" + w.getName() + (player != null ? " &d(personalized)" : "")); + info.add("&7- &eViewing as: &b" + (player != null ? player.getName() : "ADMIN")); + info.add("&7- &6Allowed: " + (player != null ? pl.getPerms().getAWorld(player, w.getName()) ? _true : _false : "&cN/A")); if (pl.getRTP().getDisabledWorlds().contains(w.getName())) //World disabled - info.add("&7- &6Disabled: " + _true); + info.add("&7- &eDisabled: " + _true); else { - info.add("&7- &6Disabled: " + _false); + info.add("&7- &eDisabled: " + _false); if (pl.getRTP().overriden.containsKey(w.getName())) //World Overriden info.add("&7- &6Overriden: " + _true + " &7- target `" + pl.getRTP().overriden.get(w.getName()) + "`"); else { info.add("&7- &6Overriden&7: " + _false); - WorldPlayer _rtpworld = BetterRTP.getInstance().getRTP().getPlayerWorld(new RTPSetupInformation(w.getName(), sendi, null, personal)); + WorldPlayer _rtpworld = BetterRTP.getInstance().getRTP().getPlayerWorld(new RTPSetupInformation(w.getName(), player != null ? player : sendi, player, player != null)); WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld; info.add("&7- &eSetup Type&7: " + _rtpworld.setup_type.name() + getInfo(_rtpworld, worldDefault, "setup")); info.add("&7- &6Use World Border&7: " + (_rtpworld.getUseWorldborder() ? _true : _false)); @@ -141,7 +139,7 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable { info.add("&7- &6Price&7: &f" + _rtpworld.getPrice() + getInfo(_rtpworld, worldDefault, "price")); info.add("&7- &eBiomes&7: &f" + _rtpworld.getBiomes().toString()); info.add("&7- &6Shape&7: &f" + _rtpworld.getShape().toString() + getInfo(_rtpworld, worldDefault, "shape")); - info.add("&7- &ePermission Group&7: " + (_rtpworld.getConfig() != null ? "&e" + _rtpworld.getConfig().getGroupName() : "&cN/A")); + info.add("&7- &ePermission Group&7: " + (_rtpworld.getConfig() != null ? "&a" + _rtpworld.getConfig().getGroupName() : "&cN/A")); } } return info; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java index 1fca1ff..a1637dd 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java @@ -89,8 +89,29 @@ public class RTP { } if (!pWorld.isSetup()) { + WorldPermissionGroup group = null; + if (pWorld.getPlayer() != null) + for (Map.Entry permissionGroup : BetterRTP.getInstance().getRTP().worldPermissionGroups.entrySet()) { + for (Map.Entry worldPermission : permissionGroup.getValue().getWorlds().entrySet()) { + if (pWorld.getWorld().equals(worldPermission.getValue().getWorld())) { + if (BetterRTP.getInstance().getPerms().getPermissionGroup(pWorld.getPlayer(), permissionGroup.getKey())) { + if (group != null) { + if (group.getPriority() < worldPermission.getValue().getPriority()) + continue; + } + group = worldPermission.getValue(); + } + } + } + } + + //Permission Group + if (group != null) { + pWorld.setup(null, group, setup_info.getBiomes(), setup_info.isPersonalized()); + pWorld.config = group; + } //Custom World - if (customWorlds.containsKey(setup_info.getWorld())) { + else if (customWorlds.containsKey(setup_info.getWorld())) { RTPWorld cWorld = customWorlds.get(pWorld.getWorld().getName()); pWorld.setup(null, cWorld, setup_info.getBiomes(), setup_info.isPersonalized()); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java index bf12a4b..16c759d 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPLoader.java @@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.player.rtp; import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; +import me.SuperRonanCraft.BetterRTP.references.rtpinfo.PermissionGroup; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.*; import org.bukkit.Bukkit; import org.bukkit.World; @@ -115,7 +116,7 @@ public class RTPLoader { } } - static void loadPermissionGroups(@NotNull HashMap permissionGroup) { + static void loadPermissionGroups(@NotNull HashMap permissionGroup) { permissionGroup.clear(); FileBasics.FILETYPE config = FileBasics.FILETYPE.CONFIG; if (!config.getBoolean("PermissionGroup.Enabled")) @@ -126,10 +127,10 @@ public class RTPLoader { for (Map m : map) for (Map.Entry entry : m.entrySet()) { String group = entry.getKey().toString(); - permissionGroup.put(group, new WorldPermissionGroup(group)); + permissionGroup.put(group, new PermissionGroup(entry)); } } catch (Exception e) { - //No Custom Worlds + //No Permission Groups } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/PermissionGroup.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/PermissionGroup.java index a2c5366..48938ff 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/PermissionGroup.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/PermissionGroup.java @@ -1,16 +1,45 @@ package me.SuperRonanCraft.BetterRTP.references.rtpinfo; +import lombok.Getter; +import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldPermissionGroup; +import org.bukkit.Bukkit; +import org.bukkit.World; +import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; public class PermissionGroup { String groupName; - HashMap worlds = new HashMap<>(); + @Getter private HashMap worlds = new HashMap<>(); - public PermissionGroup(String group) { + @SuppressWarnings("rawtypes") + public PermissionGroup(Map.Entry fields) { + this.groupName = fields.getKey().toString(); + BetterRTP.debug("- Permission Group: " + groupName); + //Find Location and cache its values + Object value = fields.getValue(); + for (Object worldList : ((ArrayList) value)) { + for (Object hash : ((HashMap) worldList).entrySet()) { + Map.Entry world = (Map.Entry) hash; + BetterRTP.debug("- -- World: " + world.getKey()); + WorldPermissionGroup permissionGroup = new WorldPermissionGroup(groupName, world.getKey().toString(), world); + boolean loaded = false; + for (World realWorld : Bukkit.getWorlds()) { + if (realWorld.getName().equals(permissionGroup.world)) { + this.worlds.put(world.getKey().toString(), permissionGroup); + loaded = true; + break; + } + } + if (!loaded) { + BetterRTP.debug("- - The Permission groups '" + groupName + "'s world '" + world.getKey() + "' does not exist! World info not loaded..."); + } + } + } } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java index de5b0e7..48d6c9a 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPermissionGroup.java @@ -17,114 +17,105 @@ public class WorldPermissionGroup implements RTPWorld, RTPWorld_Defaulted { private boolean useWorldborder; private int centerX, centerZ, maxRad, minRad, price, miny, maxy; private List biomes; - private String world; + public String world; private RTP_SHAPE shape; @Getter private int priority; + @Getter private String groupName; - /*public RTPPermConfiguration getGroup(CommandSender p) { - for (RTPPermConfiguration group : groups) - if (BetterRTP.getInstance().getPerms().getPermissionGroup(p, group.name)) - return group; - return null; - }*/ - - public WorldPermissionGroup(String group) { - FileBasics.FILETYPE config = BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.LOCATIONS); - List> map = config.getMapList("PermissionGroup.Groups"); - + public WorldPermissionGroup(String group, String world, Map.Entry fields) { + this.groupName = group; + this.world = world; setupDefaults(); this.priority = 0; //Find Location and cache its values - for (Map m : map) { - for (Map.Entry entry : m.entrySet()) { - String key = entry.getKey().toString(); - if (!key.equals(group)) - continue; - Map test = ((Map) m.get(key)); - if (test == null) - continue; - if (test.get("Priority") != null) { - if (test.get("Priority").getClass() == Integer.class) - priority = Integer.parseInt((test.get("Priority")).toString()); + for (Object hash2 : ((HashMap) fields.getValue()).entrySet()) { + Map.Entry hash3 = (Map.Entry) hash2; + String field = hash3.getKey().toString(); + if (field.equalsIgnoreCase("Priority")) { + if (hash3.getValue().getClass() == Integer.class) { + priority = Integer.parseInt((hash3.getValue()).toString()); + BetterRTP.debug("- - Priority: " + priority); } - if (test.get("World") != null) { - if (test.get("World").getClass() == String.class) - world = test.get("World").toString(); - } else { - BetterRTP.getInstance().getLogger().warning("Group `" + group + "` does NOT have a World specified!"); - return; - } - if (test.get("UseWorldBorder") != null) { - if (test.get("UseWorldBorder").getClass() == Boolean.class) - useWorldborder = Boolean.parseBoolean(test.get("UseWorldBorder").toString()); - } - if (test.get("CenterX") != null) { - if (test.get("CenterX").getClass() == Integer.class) - centerX = Integer.parseInt((test.get("CenterX")).toString()); - } - if (test.get("CenterZ") != null) { - if (test.get("CenterZ").getClass() == Integer.class) { - centerZ = Integer.parseInt((test.get("CenterZ")).toString()); - } - } - if (test.get("MaxRadius") != null) { - if (test.get("MaxRadius").getClass() == Integer.class) - maxRad = Integer.parseInt((test.get("MaxRadius")).toString()); - if (maxRad <= 0) { - BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), - "WARNING! Group '" + group + "' Maximum radius of '" + maxRad + "' is not allowed! Set to default value!"); - maxRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRadius(); - } - } - if (test.get("MinRadius") != null) { - if (test.get("MinRadius").getClass() == Integer.class) - minRad = Integer.parseInt((test.get("MinRadius")).toString()); - if (minRad < 0 || minRad >= maxRad) { - BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), - "WARNING! Group '" + group + "' Minimum radius of '" + minRad + "' is not allowed! Set to default value!"); - minRad = BetterRTP.getInstance().getRTP().defaultWorld.getMinRadius(); - if (minRad >= maxRad) - maxRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRadius(); - } - } - if (test.get("Biomes") != null) { - if (test.get("Biomes").getClass() == ArrayList.class) - this.biomes = new ArrayList((ArrayList) test.get("Biomes")); - } - if (BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.ECO).getBoolean("Economy.Enabled")) - if (test.get("Price") != null) { - if (test.get("Price").getClass() == Integer.class) - this.price = Integer.parseInt(test.get("Price").toString()); - //else - // price = worldDefault.getPrice(world); - } //else - //price = worldDefault.getPrice(world); - if (test.get("Shape") != null) { - if (test.get("Shape").getClass() == String.class) { - try { - this.shape = RTP_SHAPE.valueOf(test.get("Shape").toString().toUpperCase()); - } catch (Exception e) { - //Invalid shape - } - } - } - if (test.get("UseWorldBorder") != null) { - if (test.get("UseWorldBorder").getClass() == Boolean.class) { - try { - this.useWorldborder = Boolean.parseBoolean(test.get("UseWorldBorder").toString()); - } catch (Exception e) { - //No UseWorldBorder - } - } - } - if (test.get("MinY") != null) - if (test.get("MinY").getClass() == Integer.class) - this.miny = Integer.parseInt(test.get("MinY").toString()); - if (test.get("MaxY") != null) - if (test.get("MaxY").getClass() == Integer.class) - this.maxy = Integer.parseInt(test.get("MaxY").toString()); } + if (field.equalsIgnoreCase("UseWorldBorder")) { + if (hash3.getValue().getClass() == Boolean.class) { + useWorldborder = Boolean.parseBoolean(hash3.getValue().toString()); + BetterRTP.debug("- - UseWorldBorder: " + useWorldborder); + } + } + if (field.equalsIgnoreCase("CenterX")) { + if (hash3.getValue().getClass() == Integer.class) { + centerX = Integer.parseInt((hash3.getValue()).toString()); + BetterRTP.debug("- - CenterX: " + centerX); + } + } + if (field.equalsIgnoreCase("CenterZ")) { + if (hash3.getValue().getClass() == Integer.class) { + centerZ = Integer.parseInt((hash3.getValue()).toString()); + BetterRTP.debug("- - CenterZ: " + centerZ); + } + } + if (field.equalsIgnoreCase("MaxRadius")) { + if (hash3.getValue().getClass() == Integer.class) { + maxRad = Integer.parseInt((hash3.getValue()).toString()); + BetterRTP.debug("- - MaxRadius: " + maxRad); + } + if (maxRad <= 0) { + BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), + "WARNING! Group '" + group + "' Maximum radius of '" + maxRad + "' is not allowed! Set to default value!"); + maxRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRadius(); + } + } + if (field.equalsIgnoreCase("MinRadius")) { + if (hash3.getValue().getClass() == Integer.class) { + minRad = Integer.parseInt((hash3.getValue()).toString()); + BetterRTP.debug("- - MinRadius: " + minRad); + } + if (minRad < 0 || minRad >= maxRad) { + BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), + "WARNING! Group '" + group + "' Minimum radius of '" + minRad + "' is not allowed! Set to default value!"); + minRad = BetterRTP.getInstance().getRTP().defaultWorld.getMinRadius(); + if (minRad >= maxRad) + maxRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRadius(); + } + } + if (field.equalsIgnoreCase("Biomes")) { + if (hash3.getValue().getClass() == ArrayList.class) { + this.biomes = new ArrayList((ArrayList) hash3.getValue()); + BetterRTP.debug("- - Biomes: " + biomes); + } + } + if (BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.ECO).getBoolean("Economy.Enabled")) + if (field.equalsIgnoreCase("Price")) { + if (hash3.getValue().getClass() == Integer.class) { + this.price = Integer.parseInt(hash3.getValue().toString()); + BetterRTP.debug("- - Price: " + price); + } + //else + // price = worldDefault.getPrice(world); + } //else + //price = worldDefault.getPrice(world); + if (field.equalsIgnoreCase("Shape")) { + if (hash3.getValue().getClass() == String.class) { + try { + this.shape = RTP_SHAPE.valueOf(hash3.getValue().toString().toUpperCase()); + BetterRTP.debug("- - Shape: " + shape.name()); + } catch (Exception e) { + //Invalid shape + } + } + } + if (field.equalsIgnoreCase("MinY")) + if (hash3.getValue().getClass() == Integer.class) { + this.miny = Integer.parseInt(hash3.getValue().toString()); + BetterRTP.debug("- - MinY: " + miny); + } + if (field.equalsIgnoreCase("MaxY")) + if (hash3.getValue().getClass() == Integer.class) { + this.maxy = Integer.parseInt(hash3.getValue().toString()); + BetterRTP.debug("- - MaxY: " + maxy); + } } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java index 3c4cb22..42922da 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldPlayer.java @@ -22,7 +22,7 @@ public class WorldPlayer implements RTPWorld, RTPWorld_Defaulted { @Getter private final Player player; private final World world; private WORLD_TYPE world_type; - private WorldPermissionGroup config = null; + public WorldPermissionGroup config = null; private RTP_SHAPE shape; public RTP_SETUP_TYPE setup_type = RTP_SETUP_TYPE.DEFAULT; public String setup_name; @@ -38,8 +38,10 @@ public class WorldPlayer implements RTPWorld, RTPWorld_Defaulted { public void setup(String setup_name, RTPWorld world, List biomes, boolean personal) { if (world instanceof WorldLocations) { setup_type = RTP_SETUP_TYPE.LOCATION; - } else if (world instanceof WorldCustom) + } else if (world instanceof WorldCustom) { setup_type = RTP_SETUP_TYPE.CUSTOM_WORLD; + } else if (world instanceof WorldPermissionGroup) + setup_type = RTP_SETUP_TYPE.PERMISSIONGROUP; this.setup_name = setup_name; setUseWorldBorder(world.getUseWorldborder()); setCenterX(world.getCenterX()); @@ -57,8 +59,8 @@ public class WorldPlayer implements RTPWorld, RTPWorld_Defaulted { list.addAll(biomes); } setBiomes(list); - if (personal) - setupGroup(); + //if (personal && player != null) + // setupGroup(); //Make sure our borders will not cause an invalid integer if (getMaxRadius() <= getMinRadius()) { setMinRadius(BetterRTP.getInstance().getRTP().defaultWorld.getMinRadius()); @@ -81,18 +83,6 @@ public class WorldPlayer implements RTPWorld, RTPWorld_Defaulted { setup = true; } - private void setupGroup() { - for (Map.Entry group : BetterRTP.getInstance().getRTP().worldPermissionGroups.entrySet()) - if (BetterRTP.getInstance().getPerms().getPermissionGroup(player, group.getKey())) - if (getWorld().getName().equals(group.getValue().getWorld().getName())) { - if (this.config != null) - if (this.config.getPriority() < ((WorldPermissionGroup) group).getPriority()) - continue; - this.config = (WorldPermissionGroup) group.getValue(); - setAllFrom(this.config); - } - } - public boolean checkIsValid(Location loc) { //Will check if a previously given location is valid if (loc.getWorld() != getWorld()) return false;