permission groups recode

This commit is contained in:
RonanCraft 2022-03-17 16:38:50 -04:00
parent c91226266d
commit 6700e0bb3f
7 changed files with 169 additions and 138 deletions

View File

@ -7,5 +7,6 @@ import java.util.List;
public enum RTP_SETUP_TYPE {
DEFAULT,
CUSTOM_WORLD,
LOCATION
LOCATION,
PERMISSIONGROUP
}

View File

@ -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<String> 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<String> infoGetWorld(CommandSender sendi, World w, boolean personal) { //Specific world
private List<String> infoGetWorld(CommandSender sendi, World w, Player player) { //Specific world
List<String> 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;

View File

@ -89,8 +89,29 @@ public class RTP {
}
if (!pWorld.isSetup()) {
WorldPermissionGroup group = null;
if (pWorld.getPlayer() != null)
for (Map.Entry<String, PermissionGroup> permissionGroup : BetterRTP.getInstance().getRTP().worldPermissionGroups.entrySet()) {
for (Map.Entry<String, WorldPermissionGroup> 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());
}

View File

@ -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<String, RTPWorld> permissionGroup) {
static void loadPermissionGroups(@NotNull HashMap<String, PermissionGroup> 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
}
}

View File

@ -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<String, WorldPermissionGroup> worlds = new HashMap<>();
@Getter private HashMap<String, WorldPermissionGroup> 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...");
}
}
}
}
}

View File

@ -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<String> 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<?, ?>> 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<String>((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<String>((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);
}
}
}

View File

@ -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<String> 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<String, PermissionGroup> 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;