Permission based world configs added + UseWorldBorder slightly ignores maxRadius

This commit is contained in:
SuperRonanCraft 2020-09-23 17:41:04 -04:00
parent 82cba7cef6
commit c8a00751fa
8 changed files with 142 additions and 14 deletions

View File

@ -6,7 +6,7 @@
<groupId>me.SuperRonanCraft</groupId>
<artifactId>BetterRTP</artifactId>
<version>2.13.1</version>
<version>2.13.2</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>

View File

@ -116,4 +116,9 @@ public class Main extends JavaPlugin {
eco.load();
perms.register();
}
public static void debug(String str) {
if (getInstance().getSettings().debug)
getInstance().getLogger().info(str);
}
}

View File

@ -21,6 +21,7 @@ public class RTP {
private final RTPTeleport teleport = new RTPTeleport();
private final RTPPluginValidation softDepends = new RTPPluginValidation();
private final RTPPermConfigs permConfig = new RTPPermConfigs();
//Cache
public HashMap<String, RTPWorld> customWorlds = new HashMap<>();
public HashMap<String, String> overriden = new HashMap<>();
@ -83,15 +84,15 @@ public class RTP {
}
if (getPl().getSettings().debug)
for (String world : world_type.keySet())
getPl().getLogger().info("- World Type for '" + world + "' set to '" + world_type.get(world) + "'");
Main.debug("- World Type for '" + world + "' set to '" + world_type.get(world) + "'");
} catch (Exception e) {
e.printStackTrace();
//No World Types
}
loadWorldSettings();
teleport.load(); //Load teleporting stuff
permConfig.load(); //Load permission configs
}
public void loadWorldSettings() {
@ -105,7 +106,7 @@ public class RTP {
for (Map.Entry<?, ?> entry : m.entrySet()) {
customWorlds.put(entry.getKey().toString(), new WorldCustom(entry.getKey().toString()));
if (getPl().getSettings().debug)
getPl().getLogger().info("- Custom World '" + entry.getKey() + "' registered");
Main.debug("- Custom World '" + entry.getKey() + "' registered");
}
} catch (Exception e) {
//No Custom Worlds
@ -161,6 +162,20 @@ public class RTP {
getPl().getCmd().cooldowns.remove(p.getUniqueId());
return;
}
// Permission Configs
RTPPermConfigs.RTPPermConfiguration config = permConfig.getGroup(p);
if (config != null) {
for (RTPPermConfigs.RTPPermConfigurationWorld world : config.worlds) {
if (pWorld.getWorld().getName().equals(world.name)) {
if (world.maxRad != -1)
pWorld.setMinRad(world.maxRad);
if (world.minRad != -1)
pWorld.setMinRad(world.minRad);
if (world.price != -1)
pWorld.setPrice(world.price);
}
}
}
// Delaying? Else, just go
getPl().getCmd().rtping.put(p.getUniqueId(), true); //Cache player so they cant run '/rtp' again while rtp'ing
if (getPl().getSettings().delayEnabled && delay) {

View File

@ -1,12 +1,108 @@
package me.SuperRonanCraft.BetterRTP.player.rtp;
import java.util.ArrayList;
import java.util.List;
import com.sun.org.apache.xerces.internal.xs.StringList;
import me.SuperRonanCraft.BetterRTP.Main;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import java.util.*;
@SuppressWarnings("rawtypes")
public class RTPPermConfigs {
private List<String> groups = new ArrayList<>();
private List<RTPPermConfiguration> groups = new ArrayList<>();
public RTPPermConfiguration getGroup(Player p) {
for (RTPPermConfiguration group : groups)
if (Main.getInstance().getPerms().getConfig(p, group.name))
return group;
return null;
}
public void load() {
for (RTPPermConfiguration group : groups)
group.worlds.clear();
groups.clear();
YamlConfiguration config = Main.getInstance().getFiles().getType(FileBasics.FILETYPE.CONFIG).getConfig();
List<Map<?, ?>> list = config.getMapList("PermissionConfigs");
for (Map<?, ?> m : list)
for (Map.Entry<?, ?> entry : m.entrySet()) {
RTPPermConfiguration group = new RTPPermConfiguration(entry);
if (group.isValid()) {
groups.add(group);
Main.debug("- Group " + group.name + " has " + group.worlds.size() + " worlds setup, permission: 'betterrtp.config." + group.name + "'");
for (RTPPermConfigurationWorld world : group.worlds) {
Main.debug(" - World '" + world.name + "' MaxRad = " + world.maxRad + ", MinRad = " + world.minRad);
}
} else {
Main.debug("ERROR! Group " + group.name + " was not setup correctly!");
}
}
}
public static class RTPPermConfiguration {
boolean valid;
String name;
List<RTPPermConfigurationWorld> worlds = new ArrayList<>();
RTPPermConfiguration(Map.Entry<?, ?> fields) {
String group = fields.getKey().toString();
Object value = fields.getValue();
for (Object worlds : ((ArrayList) value)) {
for (Object hash : ((HashMap) worlds).entrySet()) {
RTPPermConfigurationWorld worldConfig = new RTPPermConfigurationWorld(hash, group);
if (worldConfig.isValid())
this.worlds.add(worldConfig);
else
Main.debug("ERROR! Group " + group + " world " + worldConfig.name + " was not setup correctly!");
}
}
this.name = group;
valid = worlds.size() > 0 && group != null;
}
boolean isValid() {
return valid;
}
}
public static class RTPPermConfigurationWorld {
boolean valid = true;
int maxRad = -1;
int minRad = -1;
int price = -1;
String name;
RTPPermConfigurationWorld(Object hash, String group) {
Map.Entry world = (Map.Entry) hash;
this.name = world.getKey().toString();
//Main.getInstance().getLogger().info("World added to '" + group +"': '" + world.getKey() + "'");
for (Object hash2 : ((HashMap) world.getValue()).entrySet()) {
Map.Entry hash3 = (Map.Entry) hash2;
String field = hash3.getKey().toString();
if (field.equalsIgnoreCase("MaxRadius")) { //MaxRadius
maxRad = getInt(hash3.getValue().toString());
} else if (field.equalsIgnoreCase("MinRadius")) { //MinRadius
minRad = getInt(hash3.getValue().toString());
} else if (field.equalsIgnoreCase("Price")) { //MinRadius
price = getInt(hash3.getValue().toString());
}
}
//Main.getInstance().getLogger().info("World MaxRad '" + world.getKey() + "' is " + maxRad);
//Main.getInstance().getLogger().info("World MinRad '" + world.getKey() + "' is " + minRad);
valid = this.name != null && (minRad != -1 || maxRad != -1);
}
private int getInt(String input) {
return Integer.parseInt(input);
}
boolean isValid() {
return valid;
}
}
}

View File

@ -87,6 +87,10 @@ public class Permissions {
return perm(pre + "edit", sendi);
}
public boolean getConfig(CommandSender sendi, String group) {
return perm(pre + "config." + group, sendi);
}
private boolean perm(String str, CommandSender sendi) {
return depPerms.hasPerm(str, sendi);
}

View File

@ -47,7 +47,9 @@ public class WorldPlayer implements RTPWorld {
World world = getWorld();
if (getUseWorldborder()) {
WorldBorder border = world.getWorldBorder();
borderRad = (int) border.getSize() / 2;
int _borderRad = (int) border.getSize() / 2;
if (borderRad > _borderRad)
borderRad = _borderRad;
CenterX = border.getCenter().getBlockX();
CenterZ = border.getCenter().getBlockZ();
}
@ -138,15 +140,16 @@ public class WorldPlayer implements RTPWorld {
CenterZ = z;
}
private void setMaxRad(int max) {
//Modifiable
public void setMaxRad(int max) {
maxBorderRad = max;
}
private void setMinRad(int min) {
public void setMinRad(int min) {
minBorderRad = min;
}
private void setPrice(int price) {
public void setPrice(int price) {
this.price = price;
}
@ -154,6 +157,7 @@ public class WorldPlayer implements RTPWorld {
this.attempts++;
}
//
private void setBiomes(List<String> biomes) {
this.Biomes = biomes;
}

View File

@ -42,7 +42,7 @@ Default:
Biomes: []
MaxRadius: 1000
MinRadius: 10
## If "UseWorldBorder" is set to true above, these values WILL be ignored! Except Biomes! #
## If "UseWorldBorder" is set to true above, Center X and Z will be ignored! #
CenterX: 0
CenterZ: 0
@ -102,13 +102,17 @@ PermissionConfigs: #Player requires "betterrtp.config.<world_name>" to trigger t
- Build_World: #World named "Build_World"
MaxRadius: 10000
MinRadius: 1000
Price: 100
- Survival_World:
MaxRadius: 5000
MinRadius: 1000
Price: 10
- vip2:
- Build_World:
MaxRadius: 25000
MinRadius: 10000
Price: 15
- Survival_World:
MaxRadius: 15000
MinRadius: 1000
Price: 20

View File

@ -1,5 +1,5 @@
main: me.SuperRonanCraft.BetterRTP.Main
version: '2.13.1'
version: '2.13.2'
name: BetterRTP
author: SuperRonanCraft
softdepend: [Vault, WorldGuard, GriefPrevention, Towny, Factions, RedProtect]