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: