diff --git a/pom.xml b/pom.xml index 2f8c17a..c6cdb1f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ me.SuperRonanCraft BetterRTP jar - 3.0.3 + 3.0.4 1.8 diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java index c946440..4a35667 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPPlayer.java @@ -42,9 +42,9 @@ public class RTPPlayer { if (event.getLocation() != null && pWorld.checkIsValid(event.getLocation())) loc = event.getLocation(); else - loc = pWorld.generateRandomXZ(); + loc = pWorld.generateLocation(); //Load chunk and find out if safe location - CompletableFuture chunk = PaperLib.getChunkAtAsync(pWorld.getWorld(), loc.getBlockX(), loc.getBlockZ()); + CompletableFuture chunk = PaperLib.getChunkAtAsync(loc); chunk.thenAccept(result -> { //BetterRTP.debug("Checking location for " + p.getName()); Location tpLoc; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java index 0598191..21786f5 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPTeleport.java @@ -131,13 +131,12 @@ public class RTPTeleport { private List> getChunks(Location loc) { //List all chunks in range to load List> asyncChunks = new ArrayList<>(); int range = Math.round(Math.max(0, Math.min(16, getPl().getSettings().preloadRadius))); - for (int x = -range; x <= range; x++) { + for (int x = -range; x <= range; x++) for (int z = -range; z <= range; z++) { Location locLoad = new Location(loc.getWorld(), loc.getX() + (x * 16), loc.getY(), loc.getZ() + (z * 16)); CompletableFuture chunk = PaperLib.getChunkAtAsync(locLoad, true); asyncChunks.add(chunk); } - } return asyncChunks; } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_SHAPE.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_SHAPE.java new file mode 100644 index 0000000..56137f6 --- /dev/null +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP_SHAPE.java @@ -0,0 +1,6 @@ +package me.SuperRonanCraft.BetterRTP.player.rtp; + +public enum RTP_SHAPE { + SQUARE, //Square shaped location finder + ROUND //Circled area location finder +} diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java index 584ef51..4bfe1e8 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/WorldPlayer.java @@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.references.worlds; 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.World; import org.bukkit.WorldBorder; @@ -20,6 +21,7 @@ public class WorldPlayer implements RTPWorld { private final World world; private WORLD_TYPE world_type; private RTPPermissionGroup.RTPPermConfiguration config = null; + private RTP_SHAPE shape = RTP_SHAPE.SQUARE; //Economy public boolean eco_money_taken = false; @@ -106,40 +108,60 @@ public class WorldPlayer implements RTPWorld { int _zRMax = getCenterZ() + getMaxRad(); //||-|I int _zRMin = getCenterZ() + getMinRad(); //||-I| int _zLoc = loc.getBlockX(); - if (_zLoc < _zLMax || (_zLoc > _zLMin && _zLoc < _zRMin) || _zLoc > _zRMax) - return false; - return true; + return _zLoc >= _zLMax && (_zLoc <= _zLMin || _zLoc >= _zRMin) && _zLoc <= _zRMax; } - public Location generateRandomXZ() { - int borderRad = getMaxRad(); - int minVal = getMinRad(); + public Location generateLocation() { + Location loc = null; + switch (shape) { + //case ROUND: //DISABLED UNTIL NEXT PATCH + // loc = generateRound(getMaxRad(), getMinRad()); break; + default: + loc = generateSquare(getMaxRad(), getMinRad()); break; + } + addAttempt(); //Add an attempt to keep track of the times we've attempted to generate a good location + return loc; + } + + private Location generateSquare(int maxRad, int min) { //Generate a random X and Z based off the quadrant selected - int max = borderRad - minVal; + int max = maxRad - min; int x, z; int quadrant = new Random().nextInt(4); switch (quadrant) { case 0: // Positive X and Z - x = new Random().nextInt(max) + minVal; - z = new Random().nextInt(max) + minVal; break; + x = new Random().nextInt(max) + min; + z = new Random().nextInt(max) + min; break; case 1: // Negative X and Z - x = -new Random().nextInt(max) - minVal; - z = -(new Random().nextInt(max) + minVal); break; + x = -new Random().nextInt(max) - min; + z = -(new Random().nextInt(max) + min); break; case 2: // Negative X and Positive Z - x = -new Random().nextInt(max) - minVal; - z = new Random().nextInt(max) + minVal; break; + x = -new Random().nextInt(max) - min; + z = new Random().nextInt(max) + min; break; default: // Positive X and Negative Z - x = new Random().nextInt(max) + minVal; - z = -(new Random().nextInt(max) + minVal); break; + x = new Random().nextInt(max) + min; + z = -(new Random().nextInt(max) + min); break; } x += getCenterX(); z += getCenterZ(); - addAttempt(); //System.out.println(quadrant); return new Location(getWorld(), x, 0, z); } + private Location generateRound(int maxRad, int min) { + //Generate a random X and Z based off the quadrant selected + int max = maxRad - min; + int x, z; + double r = max * Math.sqrt(new Random().nextDouble()); + double theta = (new Random().nextDouble()) * 2 * Math.PI; + x = (int) (r * Math.cos(theta)); + z = (int) (r * Math.sin(theta)); + x += getCenterX(); + z += getCenterZ(); + return new Location(getWorld(), x, 0, z); + } + @Override public World getWorld() { return world; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 5093063..aa2042c 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ main: me.SuperRonanCraft.BetterRTP.BetterRTP -version: '3.0.3' +version: '3.0.4' name: BetterRTP author: SuperRonanCraft softdepend: