permission fixes...

This commit is contained in:
SuperRonanCraft
2023-04-09 23:41:37 -04:00
parent 32bc0d6e36
commit fd6002526d
23 changed files with 143 additions and 68 deletions

View File

@@ -1,5 +1,6 @@
package me.SuperRonanCraft.BetterRTP.player.commands;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
@@ -13,8 +14,7 @@ public interface RTPCommand {
List<String> tabComplete(CommandSender sendi, String[] args);
@NotNull
PermissionNode permission();
@NotNull PermissionCheck permission();
String getName();

View File

@@ -6,6 +6,7 @@ import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
import me.SuperRonanCraft.BetterRTP.player.commands.RTP_SETUP_TYPE;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation;
import me.SuperRonanCraft.BetterRTP.player.rtp.effects.RTPEffect_Particles;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP;
import me.SuperRonanCraft.BetterRTP.references.messages.Message;
@@ -185,7 +186,7 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable {
String _true = "&aTrue", _false = "&bFalse";
info.add("&bRTP info for &7" + world.getName() + (player != null ? " &d(personalized)" : ""));
info.add("&7- &eViewing as: &b" + (player != null ? player.getName() : "ADMIN"));
info.add("&7- &6Allowed: " + (player != null ? PermissionNode.getAWorld(player, world.getName()) ? _true : _false : "&cN/A"));
info.add("&7- &6Allowed: " + (player != null ? PermissionCheck.getAWorld(player, world.getName()) ? _true : _false : "&cN/A"));
if (pl.getRTP().getDisabledWorlds().contains(world.getName()) && !pl.getRTP().overriden.containsKey(world.getName())) //World disabled
info.add("&7- &eDisabled: " + _true);
else {

View File

@@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP;
import me.SuperRonanCraft.BetterRTP.references.messages.MessagesCore;
@@ -91,7 +92,7 @@ public class CmdLocation implements RTPCommand, RTPCommandHelpable {
for (Map.Entry<String, RTPWorld> location : BetterRTP.getInstance().getRTP().getRTPworldLocations().entrySet()) {
boolean add = true;
if (needPermission) //Do we need permission to go to this location?
add = PermissionNode.getLocation(sendi, location.getKey());
add = PermissionCheck.getLocation(sendi, location.getKey());
if (add && needSameWorld) //Can be added and needs same world (if not same world, we don't care to check)
add = world == null || location.getValue().getWorld().equals(world);
if (add) //Location can be added to list

View File

@@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandHelpable;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommandType;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP_Info;
@@ -45,7 +46,7 @@ public class CmdWorld implements RTPCommand, RTPCommandHelpable {
for (World w : Bukkit.getWorlds()) {
String _wName = w.getName().replace(" ", "_");
if (w.getName().startsWith(args[1]) && !BetterRTP.getInstance().getRTP().getDisabledWorlds().contains(_wName)
&& PermissionNode.getAWorld(sendi, _wName))
&& PermissionCheck.getAWorld(sendi, _wName))
list.add(_wName);
}
} else if (args.length >= 3) {

View File

@@ -85,7 +85,7 @@ public class RTPTeleport {
effects.getTitles().showTitle(RTPEffect_Titles.RTP_TITLE_TYPE.TELEPORT, p, loc, attempts, 0);
if (effects.getTitles().sendMsg(RTPEffect_Titles.RTP_TITLE_TYPE.TELEPORT))
sendSuccessMsg(p, p.getName(), loc, wPlayer, true, attempts);
getPl().getServer().getPluginManager().callEvent(new RTP_TeleportPostEvent(p, loc, oldLoc, type));
getPl().getServer().getPluginManager().callEvent(new RTP_TeleportPostEvent(p, loc, oldLoc, wPlayer, type));
}
public boolean beforeTeleportInstant(CommandSender sendi, Player p) {

View File

@@ -0,0 +1,60 @@
package me.SuperRonanCraft.BetterRTP.references;
import lombok.Getter;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
public interface PermissionCheck {
static String getPrefix() {
return "betterrtp.";
}
default boolean check(CommandSender sendi) {
if (isDev())
return sendi.getName().equalsIgnoreCase("SuperRonanCraft") || sendi.getName().equalsIgnoreCase("RonanCrafts");
return BetterRTP.getInstance().getPerms().checkPerm(getNode(), sendi);
}
static boolean check(CommandSender sendi, String check) {
return BetterRTP.getInstance().getPerms().checkPerm(check, sendi);
}
static boolean getAWorld(CommandSender sendi, String world) {
return getAWorldText(sendi, world).passed;
}
static PermissionResult getAWorldText(CommandSender sendi, @NotNull String world) {
String perm = getPrefix() + "world.*";
if (check(sendi, perm)) {
return new PermissionResult(perm, true);
} else {
perm = getPrefix() + "world." + world;
if (check(sendi, perm))
return new PermissionResult(perm, true);
}
return new PermissionResult(perm, false);
}
static boolean getLocation(CommandSender sendi, String location) {
return check(sendi, getPrefix() + "location." + location);
}
static boolean getPermissionGroup(CommandSender sendi, String group) {
return check(sendi, getPrefix() + "group." + group);
}
boolean isDev();
String getNode();
class PermissionResult {
@Getter private final boolean passed;
@Getter private final String string;
PermissionResult(String string, boolean passed) {
this.passed = passed;
this.string = string;
}
}
}

View File

@@ -8,7 +8,7 @@ import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
public enum PermissionNode {
public enum PermissionNode implements PermissionCheck {
ADMIN("admin"),
USE("use"),
@@ -31,45 +31,13 @@ public enum PermissionNode {
;
@Getter private final String node;
private static final String prefix = "betterrtp.";
PermissionNode(String node) {
this.node = prefix + node;
this.node = PermissionCheck.getPrefix() + node;
}
public boolean check(CommandSender sendi) {
if (this == DEVELOPER)
return sendi.getName().equalsIgnoreCase("SuperRonanCraft") || sendi.getName().equalsIgnoreCase("RonanCrafts");
return BetterRTP.getInstance().getPerms().checkPerm(node, sendi);
}
public static boolean check(CommandSender sendi, String check) {
return BetterRTP.getInstance().getPerms().checkPerm(check, sendi);
}
public static boolean getAWorld(CommandSender sendi, String world) {
return getAWorldText(sendi, world).passed;
}
public static PermissionResult getAWorldText(CommandSender sendi, @NotNull String world) {
String perm = prefix + "world.*";
if (check(sendi, perm)) {
return new PermissionResult(perm, true);
} else {
perm = prefix + "world." + world;
if (check(sendi, perm))
return new PermissionResult(perm, true);
}
return new PermissionResult(perm, false);
}
public static boolean getLocation(CommandSender sendi, String location) {
return check(sendi, prefix + "location." + location);
}
public static boolean getPermissionGroup(CommandSender sendi, String group) {
return check(sendi, prefix + "group." + group);
@Override public boolean isDev() {
return this == DEVELOPER;
}
public static class PermissionResult {
@@ -81,4 +49,4 @@ public enum PermissionNode {
}
}
}
}

View File

@@ -1,6 +1,7 @@
package me.SuperRonanCraft.BetterRTP.references.customEvents;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldPlayer;
import org.bukkit.Location;
import org.bukkit.entity.Player;
@@ -10,12 +11,14 @@ public class RTP_TeleportPostEvent extends RTPEvent {
Location loc;
Location oldLoc;
RTP_TYPE type;
WorldPlayer wPlayer;
public RTP_TeleportPostEvent(Player p, Location loc, Location oldLoc, RTP_TYPE type) {
public RTP_TeleportPostEvent(Player p, Location loc, Location oldLoc, WorldPlayer wPlayer, RTP_TYPE type) {
this.p = p;
this.loc = loc;
this.oldLoc = oldLoc;
this.type = type;
this.wPlayer = wPlayer;
}
public Player getPlayer() {
@@ -33,4 +36,8 @@ public class RTP_TeleportPostEvent extends RTPEvent {
public RTP_TYPE getType() {
return type;
}
public WorldPlayer getWorldPlayer() {
return wPlayer;
}
}

View File

@@ -10,14 +10,14 @@ public class DatabaseHandler {
@Getter private final DatabasePlayers databasePlayers = new DatabasePlayers();
@Getter private final DatabaseCooldowns databaseCooldowns = new DatabaseCooldowns();
@Getter private final DatabaseQueue databaseQueue = new DatabaseQueue();
//@Getter private final DatabaseChunkData databaseChunks = new DatabaseChunkData();
@Getter private final DatabaseChunkData databaseChunks = new DatabaseChunkData();
public void load() {
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> {
databasePlayers.load();
databaseCooldowns.load();
databaseQueue.load();
//databaseChunks.load();
databaseChunks.load();
});
}

View File

@@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.references.depends;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.helpers.*;
import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer;
@@ -103,7 +104,7 @@ public class DepPlaceholderAPI extends PlaceholderExpansion {
if (world == null) return "Invalid World";
world = HelperRTP.getActualWorld(player, world);
//Permission
if (!PermissionNode.getAWorld(player, world.getName()))
if (!PermissionCheck.getAWorld(player, world.getName()))
return BetterRTP.getInstance().getSettings().getPlaceholder_nopermission();
RTPSetupInformation setupInformation = new RTPSetupInformation(world, player, player, true);
WorldPlayer pWorld = HelperRTP.getPlayerWorld(setupInformation);

View File

@@ -6,6 +6,7 @@ import me.SuperRonanCraft.BetterRTP.player.rtp.RTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_ERROR_REQUEST_REASON;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.WarningHandler;
import me.SuperRonanCraft.BetterRTP.references.messages.Message_RTP;
@@ -174,7 +175,7 @@ public class HelperRTP {
for (Map.Entry<String, PermissionGroup> permissionGroup : BetterRTP.getInstance().getRTP().getPermissionGroups().entrySet()) {
for (Map.Entry<String, WorldPermissionGroup> worldPermission : permissionGroup.getValue().getWorlds().entrySet()) {
if (pWorld.getWorld().equals(worldPermission.getValue().getWorld())) {
if (PermissionNode.getPermissionGroup(pWorld.getPlayer(), permissionGroup.getKey())) {
if (PermissionCheck.getPermissionGroup(pWorld.getPlayer(), permissionGroup.getKey())) {
if (group != null) {
if (group.getPriority() < worldPermission.getValue().getPriority())
continue;

View File

@@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.references.helpers;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_ERROR_REQUEST_REASON;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.messages.MessagesCore;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownData;
@@ -17,7 +18,7 @@ public class HelperRTP_Check {
return RTP_ERROR_REQUEST_REASON.IS_RTPING;
}
// Not forced and has 'betterrtp.world.<world>'
if (sendi == player && !PermissionNode.getAWorld(sendi, pWorld.getWorld().getName())) {
if (sendi == player && !PermissionCheck.getAWorld(sendi, pWorld.getWorld().getName())) {
return RTP_ERROR_REQUEST_REASON.NO_PERMISSION;
}
// Check disabled worlds

View File

@@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.references.messages.placeholder;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand;
import me.SuperRonanCraft.BetterRTP.references.PermissionCheck;
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
import me.SuperRonanCraft.BetterRTP.references.helpers.HelperDate;
import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData;
@@ -52,7 +53,7 @@ public class PlaceholderAnalyzer {
private static String perm(String str, CommandSender player, String world) {
if (str.contains(Placeholders.PERMISSION.name))
str = str.replace(Placeholders.PERMISSION.name, PermissionNode.getAWorldText(player, world).getString());
str = str.replace(Placeholders.PERMISSION.name, PermissionCheck.getAWorldText(player, world).getString());
return str;
}
@@ -125,7 +126,7 @@ public class PlaceholderAnalyzer {
return str;
}
private static String permNode(String str, PermissionNode perm) {
private static String permNode(String str, PermissionCheck perm) {
if (str.contains(Placeholders.PERMISSION.name))
str = str.replace(Placeholders.PERMISSION.name, perm.getNode());
return str;