diff --git a/pom.xml b/pom.xml index 74b6421..ecb570e 100644 --- a/pom.xml +++ b/pom.xml @@ -7,11 +7,12 @@ me.SuperRonanCraft BetterRTP jar - 3.2.4 + 3.3.0 1.8 1.8 + UTF-8 diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTPCommand.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTPCommand.java index 1f46e45..d80b162 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTPCommand.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/RTPCommand.java @@ -1,5 +1,6 @@ package me.SuperRonanCraft.BetterRTP.player.commands; +import me.SuperRonanCraft.BetterRTP.BetterRTP; import org.bukkit.command.CommandSender; import java.util.List; 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 413a175..21a96fb 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 @@ -129,17 +129,19 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable { info.add("&7- &6Overriden&7: " + _false); WorldPlayer _rtpworld = BetterRTP.getInstance().getRTP().getPlayerWorld(new RTPSetupInformation(w.getName(), sendi, null, personal)); WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld; - info.add("&7- &6Setup Type&7: " + _rtpworld.setup_type.name() + getInfo(_rtpworld, worldDefault, "setup")); + 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)); - info.add("&7- &6World Type&7: &f" + _rtpworld.getWorldtype().name()); + info.add("&7- &eWorld Type&7: &f" + _rtpworld.getWorldtype().name()); info.add("&7- &6Center X&7: &f" + _rtpworld.getCenterX() + getInfo(_rtpworld, worldDefault, "centerx")); - info.add("&7- &6Center Z&7: &f" + _rtpworld.getCenterZ() + getInfo(_rtpworld, worldDefault, "centerz")); - info.add("&7- &6Max Radius&7: &f" + _rtpworld.getMaxRad() + getInfo(_rtpworld, worldDefault, "max")); - info.add("&7- &6Min Radius&7: &f" + _rtpworld.getMinRad() + getInfo(_rtpworld, worldDefault, "min")); + info.add("&7- &eCenter Z&7: &f" + _rtpworld.getCenterZ() + getInfo(_rtpworld, worldDefault, "centerz")); + info.add("&7- &6Max Radius&7: &f" + _rtpworld.getMaxRadius() + getInfo(_rtpworld, worldDefault, "maxrad")); + info.add("&7- &eMin Radius&7: &f" + _rtpworld.getMinRadius() + getInfo(_rtpworld, worldDefault, "minrad")); + info.add("&7- &6Min Y&7: &f" + _rtpworld.getMinY()); + info.add("&7- &eMax Y&7: &f" + _rtpworld.getMaxY()); info.add("&7- &6Price&7: &f" + _rtpworld.getPrice() + getInfo(_rtpworld, worldDefault, "price")); - info.add("&7- &6Biomes&7: &f" + _rtpworld.getBiomes().toString()); + 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- &6Permission Group&7: " + (_rtpworld.getConfig() != null ? "&e" + _rtpworld.getConfig().name : "&cN/A")); + info.add("&7- &ePermission Group&7: " + (_rtpworld.getConfig() != null ? "&e" + _rtpworld.getConfig().name : "&cN/A")); } } return info; @@ -152,10 +154,10 @@ public class CmdInfo implements RTPCommand, RTPCommandHelpable { return worldPlayer.getUseWorldborder() || worldPlayer.getCenterX() == worldDefault.getCenterX() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : " &8(default)" : ""; case "centerz": return worldPlayer.getUseWorldborder() || worldPlayer.getCenterZ() == worldDefault.getCenterZ() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : " &8(default)" : ""; - case "max": - return worldPlayer.getUseWorldborder() || worldPlayer.getMaxRad() == worldDefault.getMaxRad() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : " &8(default)" : ""; - case "min": - return worldPlayer.getMinRad() == worldDefault.getMinRad() ? " &8(default)" : ""; + case "maxrad": + return worldPlayer.getUseWorldborder() || worldPlayer.getMaxRadius() == worldDefault.getMaxRadius() ? worldPlayer.getUseWorldborder() ? " &8(worldborder)" : " &8(default)" : ""; + case "minrad": + return worldPlayer.getMinRadius() == worldDefault.getMinRadius() ? " &8(default)" : ""; case "price": return worldPlayer.getPrice() == worldDefault.getPrice() ? " &8(default)" : ""; case "shape": diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdLocation.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdLocation.java index aa86c44..0bf210a 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdLocation.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdLocation.java @@ -11,6 +11,7 @@ import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldLocations; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.HashMap; @@ -27,7 +28,7 @@ public class CmdLocation implements RTPCommand, RTPCommandHelpable { public void execute(CommandSender sendi, String label, String[] args) { if (args.length == 2) { if (sendi instanceof Player) { - for (String location_name : getLocations(sendi).keySet()) { + for (String location_name : getLocations(sendi, null).keySet()) { if (location_name.equalsIgnoreCase(args[1].toLowerCase())) { Player p = (Player) sendi; HelperRTP.tp(p, sendi, null, null, RTP_TYPE.COMMAND, false, false, (WorldLocations) getLocations().get(location_name)); @@ -40,7 +41,7 @@ public class CmdLocation implements RTPCommand, RTPCommandHelpable { } else if (args.length == 3 && BetterRTP.getInstance().getPerms().getRtpOther(sendi)) { Player p = Bukkit.getPlayer(args[2]); if (p != null && p.isOnline()) { - for (String location_name : getLocations(sendi).keySet()) { + for (String location_name : getLocations(sendi, null).keySet()) { if (location_name.equalsIgnoreCase(args[1].toLowerCase())) { HelperRTP.tp(p, sendi, null, null, RTP_TYPE.COMMAND, false, false, (WorldLocations) getLocations().get(location_name)); return; @@ -58,7 +59,7 @@ public class CmdLocation implements RTPCommand, RTPCommandHelpable { public List tabComplete(CommandSender sendi, String[] args) { List list = new ArrayList<>(); if (args.length == 2) { - for (String location_name : getLocations(sendi).keySet()) + for (String location_name : getLocations(sendi, null).keySet()) if (location_name.toLowerCase().startsWith(args[1].toLowerCase())) list.add(location_name); } else if (args.length == 3 && BetterRTP.getInstance().getPerms().getRtpOther(sendi)) { @@ -77,17 +78,22 @@ public class CmdLocation implements RTPCommand, RTPCommandHelpable { BetterRTP.getInstance().getText().getUsageLocation(sendi, label); } - public static HashMap getLocations() { + private static HashMap getLocations() { return BetterRTP.getInstance().getRTP().worldLocations; } //Get locations a player has access to - public static HashMap getLocations(CommandSender sendi) { - HashMap locations = new HashMap<>(); - for (Map.Entry location : getLocations().entrySet()) - if (BetterRTP.getInstance().getPerms().getLocation(sendi, location.getKey())) - locations.put(location.getKey(), location.getValue()); - return locations; + public static HashMap getLocations(CommandSender sendi, @Nullable String world) { + if (BetterRTP.getInstance().getSettings().isLocationNeedPermission()) { + HashMap locations = new HashMap<>(); + for (Map.Entry location : getLocations().entrySet()) + if (BetterRTP.getInstance().getPerms().getLocation(sendi, location.getKey())) { + if (world == null || location.getValue().getWorld().getName().equals(world)) + locations.put(location.getKey(), location.getValue()); + } + return locations; + } else + return getLocations(); } @Override diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java index 5a81d52..dd308b6 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/commands/types/CmdTeleport.java @@ -4,6 +4,7 @@ import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.player.commands.RTPCommand; import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE; import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; +import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldLocations; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; 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 dcef87f..02ef412 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java @@ -4,6 +4,7 @@ import lombok.Getter; import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_SettingUpEvent; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; +import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.*; import org.bukkit.Bukkit; import org.bukkit.World; @@ -58,21 +59,14 @@ public class RTP { public WorldPlayer getPlayerWorld(RTPSetupInformation setup_info) { WorldPlayer pWorld = new WorldPlayer(setup_info.getPlayer(), Bukkit.getWorld(setup_info.getWorld())); - //Locations - if (setup_info.getLocation() == null) { - List locationsList = new ArrayList<>(); - for (Map.Entry location_set : worldLocations.entrySet()) { - RTPWorld location = location_set.getValue(); - if (location.getWorld().getName().equals(setup_info.getWorld())) - locationsList.add(location_set.getValue()); - } - if (!locationsList.isEmpty()) { - RTPWorld location = locationsList.size() > 1 ? locationsList.get((new Random()).nextInt(locationsList.size() - 1)) : locationsList.get(0); - - setup_info.setLocation((WorldLocations) location); - } + //Random Location + if (setup_info.getLocation() == null && BetterRTP.getInstance().getSettings().isUseLocationIfAvailable()) { + setup_info.setLocation(HelperRTP.getRandomLocation(setup_info.getSender(), setup_info.getWorld())); + if (setup_info.getLocation() == null) + BetterRTP.getInstance().getLogger().warning("UseLocationIfAvailable is set to `true`, but no location was found for " + + setup_info.getSender().getName() + "! Using world defaults!"); } - + //Location if (setup_info.getLocation() != null) { String setup_name = null; for (Map.Entry location_set : worldLocations.entrySet()) { @@ -85,7 +79,6 @@ public class RTP { pWorld.setup(setup_name, setup_info.getLocation(), setup_info.getLocation().getBiomes(), setup_info.isPersonalized()); } - if (!pWorld.isSetup()) { //Custom World if (customWorlds.containsKey(setup_info.getWorld())) { @@ -97,7 +90,7 @@ public class RTP { pWorld.setup(null, defaultWorld, setup_info.getBiomes(), setup_info.isPersonalized()); } //World type - WORLD_TYPE world_type; //World rtp type + WORLD_TYPE world_type; if (this.world_type.containsKey(setup_info.getWorld())) world_type = this.world_type.get(setup_info.getWorld()); else { diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java index 73cb9c3..527dd06 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSetupInformation.java @@ -1,36 +1,61 @@ package me.SuperRonanCraft.BetterRTP.player.rtp; import lombok.Getter; +import lombok.NonNull; import lombok.Setter; +import me.SuperRonanCraft.BetterRTP.BetterRTP; +import me.SuperRonanCraft.BetterRTP.player.commands.types.CmdLocation; +import me.SuperRonanCraft.BetterRTP.references.helpers.HelperRTP; +import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldLocations; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Random; public class RTPSetupInformation { //Will provide information to setup an RTP attempt @Getter @Setter private String world; - @Getter private final CommandSender sender; - @Getter private final Player player; + @Getter @NonNull private final CommandSender sender; + @Getter @Nullable private final Player player; @Getter private final boolean personalized; @Getter private final boolean cooldown; - @Getter @Setter private List biomes; - @Getter @Setter private WorldLocations location; + @Getter @Setter @Nullable private List biomes; + @Getter @Setter @Nullable private WorldLocations location; @Getter private final boolean delay; - @Getter private final RTP_TYPE rtp_type; + @Getter @Nullable private final RTP_TYPE rtp_type; - public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized) { + public RTPSetupInformation(@Nullable String world, + @NonNull CommandSender sender, + @Nullable Player player, + boolean personalized) { this(world, sender, player, personalized, null, false, null, null); } - public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized, List biomes, - boolean delay, RTP_TYPE rtp_type, WorldLocations location) { + public RTPSetupInformation(@Nullable String world, + @NonNull CommandSender sender, + @Nullable Player player, + boolean personalized, + @Nullable List biomes, + boolean delay, + @Nullable RTP_TYPE rtp_type, + @Nullable WorldLocations location) { this(world, sender, player, personalized, biomes, delay, rtp_type, location, true); } - public RTPSetupInformation(String world, CommandSender sender, Player player, boolean personalized, List biomes, - boolean delay, RTP_TYPE rtp_type, WorldLocations location, boolean cooldown) { + public RTPSetupInformation(@Nullable String world, + @NonNull CommandSender sender, + @Nullable Player player, + boolean personalized, + @Nullable List biomes, + boolean delay, + @Nullable RTP_TYPE rtp_type, + @Nullable WorldLocations location, + boolean cooldown) { this.world = world; this.sender = sender; this.player = player; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSounds.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSounds.java index 41edff1..f74242c 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSounds.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPSounds.java @@ -42,7 +42,7 @@ public class RTPSounds { } void playSound(Location loc, Player p, String sound) { - if (BetterRTP.getInstance().getSettings().protocolLibSounds) { + if (BetterRTP.getInstance().getSettings().isProtocolLibSounds()) { try { ProtocolManager pm = ProtocolLibrary.getProtocolManager(); WrapperPlayServerNamedSoundEffect packet = new WrapperPlayServerNamedSoundEffect(pm.createPacket(PacketType.Play.Server.NAMED_SOUND_EFFECT)); diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java index 44fb816..92ba7d9 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/helpers/HelperRTP.java @@ -6,11 +6,16 @@ import me.SuperRonanCraft.BetterRTP.player.rtp.RTPSetupInformation; import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_TYPE; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownData; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownHandler; +import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld; import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.WorldLocations; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Random; public class HelperRTP { @@ -39,11 +44,6 @@ public class HelperRTP { if (getPl().getSettings().isDelayEnabled() && getPl().getSettings().getDelayTime() > 0) //Delay enabled? if (!getPl().getPerms().getBypassDelay(player)) //Can bypass? delay = true; - //player.sendMessage("Cooldown applies: " + cooldownApplies(sendi, player)); - if (getPl().getSettings().isUseLocationIfAvailable() && !CmdLocation.getLocations().isEmpty()) { - - } - RTPSetupInformation setup_info = new RTPSetupInformation(world, sendi, player, true, biomes, delay, rtpType, locations, !ignoreCooldown && cooldownApplies(sendi, player)); //ignore cooldown or else getPl().getRTP().start(setup_info); @@ -107,4 +107,15 @@ public class HelperRTP { private static BetterRTP getPl() { return BetterRTP.getInstance(); } + + @Nullable + public static WorldLocations getRandomLocation(CommandSender sender, String world) { + HashMap locations_permissible = CmdLocation.getLocations(sender, world); + if (!locations_permissible.isEmpty()) { + List valuesList = new ArrayList<>(locations_permissible.keySet()); + String randomIndex = valuesList.get(new Random().nextInt(valuesList.size())); + return (WorldLocations) locations_permissible.get(randomIndex); + } + return null; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java index ea10bf9..e4760b8 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld.java @@ -1,5 +1,6 @@ package me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds; +import lombok.NonNull; import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_SHAPE; import org.bukkit.World; @@ -13,15 +14,19 @@ public interface RTPWorld { int getCenterZ(); - int getMaxRad(); + int getMaxRadius(); - int getMinRad(); + int getMinRadius(); int getPrice(); List getBiomes(); - World getWorld(); + @NonNull World getWorld(); RTP_SHAPE getShape(); + + int getMinY(); + + int getMaxY(); } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java index a5ad285..58dabed 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/RTPWorld_Defaulted.java @@ -13,9 +13,9 @@ public interface RTPWorld_Defaulted { void setCenterZ(int value); - void setMaxRad(int value); + void setMaxRadius(int value); - void setMinRad(int value); + void setMinRadius(int value); void setPrice(int value); @@ -25,15 +25,21 @@ public interface RTPWorld_Defaulted { void setShape(RTP_SHAPE value); + void setMinY(int value); + + void setMaxY(int value); + default void setupDefaults() { WorldDefault worldDefault = BetterRTP.getInstance().getRTP().defaultWorld; - setMaxRad(worldDefault.getMaxRad()); - setMinRad(worldDefault.getMinRad()); + setMaxRadius(worldDefault.getMaxRadius()); + setMinRadius(worldDefault.getMinRadius()); setUseWorldBorder(worldDefault.getUseWorldborder()); setCenterX(worldDefault.getCenterX()); setCenterZ(worldDefault.getCenterZ()); setPrice(worldDefault.getPrice()); setBiomes(worldDefault.getBiomes()); setShape(worldDefault.getShape()); + setMinY(worldDefault.getMinY()); + setMaxY(worldDefault.getMaxY()); } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java index a79a55d..a2033ca 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldCustom.java @@ -5,6 +5,7 @@ import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.BetterRTP; import org.bukkit.Bukkit; import org.bukkit.World; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -13,7 +14,7 @@ import java.util.Map; public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { public String world; private boolean useWorldborder; - private int centerX, centerZ, maxBorderRad, minBorderRad, price; + private int centerX, centerZ, maxBorderRad, minBorderRad, price, miny, maxy; private List biomes; private RTP_SHAPE shape; @@ -54,7 +55,7 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { if (maxBorderRad <= 0) { BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), "WARNING! Custom world '" + world + "' Maximum radius of '" + maxBorderRad + "' is not allowed! Set to default value!"); - maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRad(); + maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRadius(); } } if (test.get("MinRadius") != null) { @@ -63,9 +64,9 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { if (minBorderRad < 0 || minBorderRad >= maxBorderRad) { BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), "WARNING! Custom world '" + world + "' Minimum radius of '" + minBorderRad + "' is not allowed! Set to default value!"); - minBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMinRad(); + minBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMinRadius(); if (minBorderRad >= maxBorderRad) - maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRad(); + maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRadius(); } } if (test.get("Biomes") != null) { @@ -89,6 +90,14 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { } } } + 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()); + } } } //Booleans @@ -100,13 +109,13 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { if (maxBorderRad <= 0) { BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), "WARNING! Custom world '" + world + "' Maximum radius of '" + maxBorderRad + "' is not allowed! Set to default value!"); - maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRad(); + maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRadius(); } //minBorderRad = config.getInt(pre + world + ".MinRadius"); if (minBorderRad <= 0 || minBorderRad >= maxBorderRad) { BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), "WARNING! Custom world '" + world + "' Minimum radius of '" + minBorderRad + "' is not allowed! Set to default value!"); - minBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMinRad(); + minBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMinRadius(); } /*if (BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.ECO).getBoolean("Economy.Enabled")) if (BetterRTP.getInstance().getFiles().getType(FileBasics.FILETYPE.ECO).getBoolean("CustomWorlds.Enabled")) { @@ -142,12 +151,12 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { } @Override - public int getMaxRad() { + public int getMaxRadius() { return maxBorderRad; } @Override - public int getMinRad() { + public int getMinRadius() { return minBorderRad; } @@ -161,6 +170,7 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { return biomes; } + @NotNull @Override public World getWorld() { return Bukkit.getWorld(world); @@ -171,6 +181,16 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { return shape; } + @Override + public int getMinY() { + return miny; + } + + @Override + public int getMaxY() { + return maxy; + } + //Setters @Override public void setUseWorldBorder(boolean value) { @@ -188,12 +208,12 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { } @Override - public void setMaxRad(int value) { + public void setMaxRadius(int value) { this.maxBorderRad = value; } @Override - public void setMinRad(int value) { + public void setMinRadius(int value) { this.minBorderRad = value; } @@ -216,4 +236,14 @@ public class WorldCustom implements RTPWorld, RTPWorld_Defaulted { public void setShape(RTP_SHAPE value) { this.shape = value; } + + @Override + public void setMinY(int value) { + this.miny = value; + } + + @Override + public void setMaxY(int value) { + this.maxy = value; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java index b9e1ea7..95c4313 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldDefault.java @@ -6,6 +6,7 @@ import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import me.SuperRonanCraft.BetterRTP.BetterRTP; import org.bukkit.Bukkit; import org.bukkit.World; +import org.jetbrains.annotations.NotNull; import java.util.HashMap; import java.util.List; @@ -13,7 +14,7 @@ import java.util.Map; public class WorldDefault implements RTPWorld { private boolean useWorldborder; - private int CenterX, CenterZ, maxBorderRad, minBorderRad, price; + private int CenterX, CenterZ, maxBorderRad, minBorderRad, price, miny, maxy; private List Biomes; private final HashMap prices = new HashMap<>(); private RTP_SHAPE shape; @@ -34,14 +35,12 @@ public class WorldDefault implements RTPWorld { shape = RTP_SHAPE.SQUARE; } if (maxBorderRad <= 0) { - BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), - "WARNING! Default Maximum radius of '" + maxBorderRad + "' is not allowed! Set to '1000'"); + BetterRTP.getInstance().getLogger().warning("WARNING! Default Maximum radius of '" + maxBorderRad + "' is not allowed! Value set to '1000'"); maxBorderRad = 1000; } minBorderRad = config.getInt(pre + ".MinRadius"); if (minBorderRad < 0 || minBorderRad >= maxBorderRad) { - BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), - "WARNING! Default Minimum radius of '" + minBorderRad + "' is not allowed! Set to '0'"); + BetterRTP.getInstance().getLogger().warning("The Default MinRadius of '" + minBorderRad + "' is not allowed! Value set to '0'"); minBorderRad = 0; } prices.clear(); @@ -61,6 +60,16 @@ public class WorldDefault implements RTPWorld { price = 0; //Other this.Biomes = config.getStringList(pre + ".Biomes"); + this.miny = config.getInt(pre + ".MinY"); + if (miny > 0) { + miny = 0; + BetterRTP.getInstance().getLogger().warning("Warning! Default MinY value is solely for 1.17+ support, and can only be negative!"); + } + this.maxy = config.getInt(pre + ".MaxY"); + if (maxy < 64) { + maxy = 320; + BetterRTP.getInstance().getLogger().warning("Warning! Default MaxY value is below water level (64)! Reset to default 320!"); + } } @Override @@ -79,12 +88,12 @@ public class WorldDefault implements RTPWorld { } @Override - public int getMaxRad() { + public int getMaxRadius() { return maxBorderRad; } @Override - public int getMinRad() { + public int getMinRadius() { return minBorderRad; } @@ -102,6 +111,7 @@ public class WorldDefault implements RTPWorld { return Biomes; } + @NotNull @Override public World getWorld() { return null; @@ -111,4 +121,14 @@ public class WorldDefault implements RTPWorld { public RTP_SHAPE getShape() { return shape; } + + @Override + public int getMinY() { + return miny; + } + + @Override + public int getMaxY() { + return maxy; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocations.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocations.java index a9a5e49..8af4326 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocations.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/worlds/WorldLocations.java @@ -5,6 +5,7 @@ import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_SHAPE; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; import org.bukkit.Bukkit; import org.bukkit.World; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -12,7 +13,7 @@ import java.util.Map; public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { private boolean useWorldborder; - private int centerX, centerZ, maxBorderRad, minBorderRad, price; + private int centerX, centerZ, maxRad, minRad, price, miny, maxy; private List biomes; private String world; private RTP_SHAPE shape; @@ -55,22 +56,22 @@ public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { } if (test.get("MaxRadius") != null) { if (test.get("MaxRadius").getClass() == Integer.class) - maxBorderRad = Integer.parseInt((test.get("MaxRadius")).toString()); - if (maxBorderRad <= 0) { + maxRad = Integer.parseInt((test.get("MaxRadius")).toString()); + if (maxRad <= 0) { BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), - "WARNING! Location '" + location_name + "' Maximum radius of '" + maxBorderRad + "' is not allowed! Set to default value!"); - maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRad(); + "WARNING! Location '" + location_name + "' 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) - minBorderRad = Integer.parseInt((test.get("MinRadius")).toString()); - if (minBorderRad < 0 || minBorderRad >= maxBorderRad) { + minRad = Integer.parseInt((test.get("MinRadius")).toString()); + if (minRad < 0 || minRad >= maxRad) { BetterRTP.getInstance().getText().sms(Bukkit.getConsoleSender(), - "WARNING! Location '" + location_name + "' Minimum radius of '" + minBorderRad + "' is not allowed! Set to default value!"); - minBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMinRad(); - if (minBorderRad >= maxBorderRad) - maxBorderRad = BetterRTP.getInstance().getRTP().defaultWorld.getMaxRad(); + "WARNING! Location '" + location_name + "' 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) { @@ -103,6 +104,12 @@ public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { } } } + 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()); } } } @@ -111,6 +118,7 @@ public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { return world != null; } + @NotNull @Override public World getWorld() { return Bukkit.getWorld(world); @@ -132,13 +140,13 @@ public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { } @Override - public int getMaxRad() { - return maxBorderRad; + public int getMaxRadius() { + return maxRad; } @Override - public int getMinRad() { - return minBorderRad; + public int getMinRadius() { + return minRad; } @Override @@ -156,6 +164,16 @@ public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { return shape; } + @Override + public int getMinY() { + return miny; + } + + @Override + public int getMaxY() { + return maxy; + } + //Setters @Override @@ -174,13 +192,13 @@ public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { } @Override - public void setMaxRad(int value) { - this.maxBorderRad = value; + public void setMaxRadius(int value) { + this.maxRad = value; } @Override - public void setMinRad(int value) { - this.minBorderRad = value; + public void setMinRadius(int value) { + this.minRad = value; } @Override @@ -202,4 +220,14 @@ public class WorldLocations implements RTPWorld, RTPWorld_Defaulted { public void setShape(RTP_SHAPE value) { this.shape = value; } + + @Override + public void setMinY(int value) { + this.miny = value; + } + + @Override + public void setMaxY(int value) { + this.maxy = value; + } } 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 10730fc..c3c236b 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 @@ -1,14 +1,15 @@ package me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds; +import lombok.Getter; import me.SuperRonanCraft.BetterRTP.player.commands.RTP_SETUP_TYPE; import me.SuperRonanCraft.BetterRTP.player.rtp.RTPPermissionGroup; import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.player.rtp.RTP_SHAPE; import org.bukkit.Location; -import org.bukkit.Material; import org.bukkit.World; import org.bukkit.WorldBorder; import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; @@ -16,9 +17,9 @@ import java.util.Random; public class WorldPlayer implements RTPWorld { private boolean useWorldborder; - private int CenterX, CenterZ, maxBorderRad, minBorderRad, price, min_y = 0; + private int CenterX, CenterZ, maxRad, minRad, price, min_y, max_y; private List Biomes; - private final Player p; + @Getter private final Player player; private final World world; private WORLD_TYPE world_type; private RTPPermissionGroup.RTPPermConfiguration config = null; @@ -26,17 +27,14 @@ public class WorldPlayer implements RTPWorld { public RTP_SETUP_TYPE setup_type = RTP_SETUP_TYPE.DEFAULT; public String setup_name; //Economy - public boolean eco_money_taken = false, setup = false; + public boolean eco_money_taken = false; + @Getter private boolean setup = false; public WorldPlayer(Player p, World world) { - this.p = p; + this.player = p; this.world = world; } - public boolean isSetup() { - return setup; - } - public void setup(String setup_name, RTPWorld world, List biomes, boolean personal) { if (world instanceof WorldLocations) { setup_type = RTP_SETUP_TYPE.LOCATION; @@ -46,8 +44,8 @@ public class WorldPlayer implements RTPWorld { setUseWorldborder(world.getUseWorldborder()); setCenterX(world.getCenterX()); setCenterZ(world.getCenterZ()); - setMaxRad(world.getMaxRad()); - setMinRad(world.getMinRad()); + setMaxRad(world.getMaxRadius()); + setMinRad(world.getMinRadius()); setShape(world.getShape()); if (world instanceof WorldDefault) setPrice(((WorldDefault) world).getPrice(getWorld().getName())); @@ -62,27 +60,29 @@ public class WorldPlayer implements RTPWorld { if (personal) setupGroup(BetterRTP.getInstance().getRTP().permConfig); //Make sure our borders will not cause an invalid integer - if (getMaxRad() <= getMinRad()) { - setMinRad(BetterRTP.getInstance().getRTP().defaultWorld.getMinRad()); - if (getMaxRad() <= getMinRad()) + if (getMaxRadius() <= getMinRadius()) { + setMinRad(BetterRTP.getInstance().getRTP().defaultWorld.getMinRadius()); + if (getMaxRadius() <= getMinRadius()) setMinRad(0); } //World border protection if (getUseWorldborder()) { WorldBorder border = getWorld().getWorldBorder(); int _borderRad = (int) border.getSize() / 2; - if (getMaxRad() > _borderRad) + if (getMaxRadius() > _borderRad) setMaxRad(_borderRad); setCenterX(border.getCenter().getBlockX()); setCenterZ(border.getCenter().getBlockZ()); } //MinY + setMinY(world.getMinY()); + setMaxY(world.getMaxY()); //min_y = world.getWorld().getBlockAt(0, -1, 0).getType() != Material.AIR ? setup = true; } private void setupGroup(RTPPermissionGroup permConfig) { - RTPPermissionGroup.RTPPermConfiguration config = permConfig.getGroup(p); + RTPPermissionGroup.RTPPermConfiguration config = permConfig.getGroup(player); if (config != null) { for (RTPPermissionGroup.RTPPermConfigurationWorld world : config.worlds) { if (getWorld().getName().equals(world.name)) { @@ -105,24 +105,20 @@ public class WorldPlayer implements RTPWorld { } } - public Player getPlayer() { - return p; - } - public boolean checkIsValid(Location loc) { //Will check if a previously given location is valid if (loc.getWorld() != getWorld()) return false; - int _xLMax = getCenterX() - getMaxRad(); //I|-|| - int _xLMin = getCenterX() - getMinRad(); //|I-|| - int _xRMax = getCenterX() + getMaxRad(); //||-|I - int _xRMin = getCenterX() + getMinRad(); //||-I| + int _xLMax = getCenterX() - getMaxRadius(); //I|-|| + int _xLMin = getCenterX() - getMinRadius(); //|I-|| + int _xRMax = getCenterX() + getMaxRadius(); //||-|I + int _xRMin = getCenterX() + getMinRadius(); //||-I| int _xLoc = loc.getBlockX(); if (_xLoc < _xLMax || (_xLoc > _xLMin && _xLoc < _xRMin) || _xLoc > _xRMax) return false; - int _zLMax = getCenterZ() - getMaxRad(); //I|-|| - int _zLMin = getCenterZ() - getMinRad(); //|I-|| - int _zRMax = getCenterZ() + getMaxRad(); //||-|I - int _zRMin = getCenterZ() + getMinRad(); //||-I| + int _zLMax = getCenterZ() - getMaxRadius(); //I|-|| + int _zLMin = getCenterZ() - getMinRadius(); //|I-|| + int _zRMax = getCenterZ() + getMaxRadius(); //||-|I + int _zRMin = getCenterZ() + getMinRadius(); //||-I| int _zLoc = loc.getBlockX(); return _zLoc >= _zLMax && (_zLoc <= _zLMin || _zLoc >= _zRMin) && _zLoc <= _zRMax; } @@ -131,9 +127,9 @@ public class WorldPlayer implements RTPWorld { Location loc; switch (shape) { case CIRCLE: - loc = generateRound(getMaxRad(), getMinRad()); break; + loc = generateRound(getMaxRadius(), getMinRadius()); break; default: - loc = generateSquare(getMaxRad(), getMinRad()); break; + loc = generateSquare(getMaxRadius(), getMinRadius()); break; } return loc; } @@ -182,6 +178,7 @@ public class WorldPlayer implements RTPWorld { return new Location(getWorld(), x, 0, z); } + @NotNull @Override public World getWorld() { return world; @@ -203,13 +200,13 @@ public class WorldPlayer implements RTPWorld { } @Override - public int getMaxRad() { - return maxBorderRad; + public int getMaxRadius() { + return maxRad; } @Override - public int getMinRad() { - return minBorderRad; + public int getMinRadius() { + return minRad; } @Override @@ -241,11 +238,11 @@ public class WorldPlayer implements RTPWorld { //Modifiable private void setMaxRad(int max) { - maxBorderRad = max; + maxRad = max; } private void setMinRad(int min) { - minBorderRad = min; + minRad = min; } private void setPrice(int price) { @@ -266,6 +263,14 @@ public class WorldPlayer implements RTPWorld { this.shape = shape; } + public void setMinY(int value) { + this.min_y = value; + } + + public void setMaxY(int value) { + this.max_y = value; + } + public RTPPermissionGroup.RTPPermConfiguration getConfig() { return this.config; } @@ -277,4 +282,9 @@ public class WorldPlayer implements RTPWorld { public int getMinY() { return min_y; } + + @Override + public int getMaxY() { + return max_y; + } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java index 502c874..91c7e03 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/settings/Settings.java @@ -19,6 +19,7 @@ public class Settings { @Getter private boolean protocolLibSounds; @Getter private boolean useLocationIfAvailable; @Getter private boolean locationNeedPermission; + @Getter private boolean locationOnlyAllowInWorld; public void load() { //Load Settings FileBasics.FILETYPE config = FileBasics.FILETYPE.CONFIG; @@ -33,6 +34,7 @@ public class Settings { protocolLibSounds = FileBasics.FILETYPE.EFFECTS.getBoolean("Sounds.ProtocolLibSound"); useLocationIfAvailable = FileBasics.FILETYPE.LOCATIONS.getBoolean("UseLocationIfAvailable"); locationNeedPermission = FileBasics.FILETYPE.LOCATIONS.getBoolean("RequirePermission"); + locationOnlyAllowInWorld = FileBasics.FILETYPE.LOCATIONS.getBoolean("OnlyAllowInWorld"); depends.load(); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d80c494..2c65ef8 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -60,6 +60,8 @@ Default: CenterX: 0 CenterZ: 0 Shape: 'square' + MaxY: 320 + MinY: 0 ## Blocks BetterRTP will NOT teleport onto. More Blocks at: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html # BlacklistedBlocks: @@ -95,6 +97,8 @@ CustomWorlds: CenterZ: 0 Price: 50 Shape: 'square' + MaxY: 320 + MinY: 0 - other_custom_world: MaxRadius: 10000 MinRadius: 150 @@ -133,6 +137,8 @@ PermissionGroup: #Player requires "betterrtp.group." to trigger thes CenterX: 10 CenterZ: 10 Price: 10 + MaxY: 320 + MinY: 0 - vip2: # permission: betterrtp.group.vip2 - Build_World: MaxRadius: 25000 diff --git a/src/main/resources/locations.yml b/src/main/resources/locations.yml index 1500bd5..0c0ab2e 100644 --- a/src/main/resources/locations.yml +++ b/src/main/resources/locations.yml @@ -6,10 +6,13 @@ # CenterY: 150 # MaxRadius: 100 # MinRadius: 5 +# MinY: 0 +# MaxY: 320 Enabled: false #enable the locations feature RequirePermission: false #Require players to have `betterrtp.location.` UseLocationIfAvailable: false #Will choose a location upon `/rtp` if location(s) is available in the world +#OnlyAllowInWorld: true #Only allow players to use locations that correspond to the world they are standing in Locations: - main_loc: @@ -18,4 +21,6 @@ Locations: CenterZ: 150 MaxRadius: 100 #optional MinRadius: 5 #optional - Shape: square #optional \ No newline at end of file + Shape: square #optional + MinY: 0 #optional + MaxY: 320 #optional \ No newline at end of file