diff --git a/pom.xml b/pom.xml
index 66d46dc..470a97a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
me.SuperRonanCraft
BetterRTP
- 2.12.0
+ 2.12.1
1.8
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 9687005..aaf0324 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
@@ -86,14 +86,14 @@ public class CmdInfo implements RTPCommand {
else {
info.add("&7- &6WorldType: &f" + pl.getRTP().world_type.getOrDefault(w.getName(), RTP_WORLD_TYPE.NORMAL).name());
info.add("&7- &6Overriden: &cFalse");
- RTPWorld _rtpworld = pl.getRTP().Default;
+ RTPWorld _rtpworld = pl.getRTP().defaultWorld;
for (RTPWorld __rtpworld : pl.getRTP().customWorlds.values()) {
if (__rtpworld.getWorld().equals(w.getName())) {
_rtpworld = __rtpworld;
break;
}
}
- if (_rtpworld == pl.getRTP().Default)
+ if (_rtpworld == pl.getRTP().defaultWorld)
info.add("&7- &6Custom: &cFalse");
else
info.add("&7- &6Custom: &bTrue");
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 4b64694..b70e150 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTP.java
@@ -4,14 +4,12 @@ import com.sk89q.worldguard.bukkit.RegionContainer;
import com.sk89q.worldguard.bukkit.WGBukkit;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.managers.RegionManager;
+import io.papermc.lib.PaperLib;
import me.SuperRonanCraft.BetterRTP.Main;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import me.SuperRonanCraft.BetterRTP.references.worlds.*;
import me.ryanhamshire.GriefPrevention.GriefPrevention;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.World;
-import org.bukkit.WorldBorder;
+import org.bukkit.*;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -21,6 +19,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
+import java.util.concurrent.CompletableFuture;
public class RTP {
@@ -28,7 +27,7 @@ public class RTP {
//Cache
public HashMap customWorlds = new HashMap<>();
public HashMap overriden = new HashMap<>();
- public Default Default = new Default();
+ public Default defaultWorld = new Default();
private Random rn = new Random();
private List disabledWorlds, blockList;
private int maxAttempts, delayTime;
@@ -40,7 +39,7 @@ public class RTP {
}
public void load() {
- Default.setup();
+ defaultWorld.setup();
FileBasics.FILETYPE config = getPl().getFiles().getType(FileBasics.FILETYPE.CONFIG);
disabledWorlds = config.getStringList("DisabledWorlds");
maxAttempts = config.getInt("Settings.MaxAttempts");
@@ -122,38 +121,42 @@ public class RTP {
return disabledWorlds;
}
- public void start(Player p, CommandSender sendi, String worl, List biomes, boolean delay) {
+ public void start(Player p, CommandSender sendi, String worldName, List biomes, boolean delay) {
// Check overrides
- String world = worl;
- if (world == null)
- world = p.getWorld().getName();
- if (overriden.containsKey(world))
- world = overriden.get(world);
+ if (worldName == null)
+ worldName = p.getWorld().getName();
+ if (overriden.containsKey(worldName))
+ worldName = overriden.get(worldName);
// Not forced and has 'betterrtp.world.'
- if (sendi == p && !getPl().getPerms().getAWorld(sendi, world)) {
+ if (sendi == p && !getPl().getPerms().getAWorld(sendi, worldName)) {
getPl().getCmd().cooldowns.remove(p.getUniqueId());
- getPl().getText().getNoPermissionWorld(p, world);
+ getPl().getText().getNoPermissionWorld(p, worldName);
return;
}
// Check disabled worlds
- if (disabledWorlds.contains(world)) {
- getPl().getText().getDisabledWorld(sendi, world);
+ if (disabledWorlds.contains(worldName)) {
+ getPl().getText().getDisabledWorld(sendi, worldName);
getPl().getCmd().cooldowns.remove(p.getUniqueId());
return;
}
- // Check if nulled
- if (Bukkit.getWorld(world) == null) {
- getPl().getText().getNotExist(sendi, world);
+ // Check if nulled or world doesnt exist
+ if (Bukkit.getWorld(worldName) == null) {
+ getPl().getText().getNotExist(sendi, worldName);
getPl().getCmd().cooldowns.remove(p.getUniqueId());
return;
}
- PlayerWorld pWorld = new PlayerWorld(p, world);
+ PlayerWorld pWorld = new PlayerWorld(p, Bukkit.getWorld(worldName));
// Set all methods
- if (customWorlds.containsKey(world)) {
- RTPWorld cWorld = customWorlds.get(pWorld.getWorld());
+ if (customWorlds.containsKey(worldName)) {
+ RTPWorld cWorld = customWorlds.get(pWorld.getWorld().getName());
pWorld.setup(cWorld, cWorld.getPrice(), biomes);
} else
- pWorld.setup(Default, Default.getPrice(), biomes);
+ pWorld.setup(defaultWorld, defaultWorld.getPrice(), biomes);
+ //World type
+ RTP_WORLD_TYPE world_type = RTP_WORLD_TYPE.NORMAL; //World rtp type
+ if (this.world_type.containsKey(worldName))
+ world_type = this.world_type.get(worldName);
+ pWorld.setWorldtype(world_type);
// Check world price
if (!getPl().getEco().charge(p, pWorld.getPrice())) {
getPl().getText().getFailedPrice(p, pWorld.getPrice());
@@ -165,20 +168,45 @@ public class RTP {
if (getPl().getSettings().delayEnabled && delay) {
new RTPDelay(sendi, pWorld, delayTime, cancelOnMove, cancelOnDamage);
} else
- tp(sendi, pWorld);
+ findSafeLocation(sendi, pWorld);
}
- void tp(CommandSender sendi, PlayerWorld pWorld) {
- new BukkitRunnable(){
- @Override
- public void run() {
- Location loc = randomLoc(pWorld);
- if (loc != null)
- teleport.sendPlayer(sendi, pWorld.getPlayer(), loc, pWorld.getPrice(), pWorld.getAttempts());
+// void findSafeLocation(CommandSender sendi, PlayerWorld pWorld) {
+// new BukkitRunnable(){
+// @Override
+// public void run() {
+// f
+// if (loc != null)
+// teleport.sendPlayer(sendi, pWorld.getPlayer(), loc, pWorld.getPrice(), pWorld.getAttempts());
+// else
+// metMax(sendi, pWorld.getPlayer(), pWorld.getPrice());
+// }
+// }.runTaskAsynchronously(getPl());
+// }
+
+ void findSafeLocation(CommandSender sendi, PlayerWorld pWorld) {
+ if (pWorld.getAttempts() >= maxAttempts) //Cancel out, too many tried
+ metMax(sendi, pWorld.getPlayer(), pWorld.getPrice());
+ else { //Try again to find a safe location
+ Location loc = pWorld.generateRandomXZ(defaultWorld, rn.nextInt(4)); //randomLoc(pWorld);
+ CompletableFuture chunk = PaperLib.getChunkAtAsync(pWorld.getWorld(), loc.getBlockX(), loc.getBlockZ());
+ chunk.thenAccept(result -> {
+ Location tpLoc;
+ float yaw = pWorld.getPlayer().getLocation().getYaw();
+ float pitch = pWorld.getPlayer().getLocation().getPitch();
+ switch (pWorld.getWorldtype()) { //Get a Y position and check for bad blocks
+ case NETHER:
+ tpLoc = getLocAtNether(loc.getBlockX(), loc.getBlockZ(), pWorld.getWorld(), yaw, pitch, pWorld); break;
+ case NORMAL:
+ default:
+ tpLoc = getLocAtNormal(loc.getBlockX(), loc.getBlockZ(), pWorld.getWorld(), yaw, pitch, pWorld);
+ }
+ if (tpLoc != null && checkDepends(tpLoc))
+ teleport.sendPlayer(sendi, pWorld.getPlayer(), tpLoc, pWorld.getPrice(), pWorld.getAttempts());
else
- metMax(sendi, pWorld.getPlayer(), pWorld.getPrice());
- }
- }.runTaskAsynchronously(getPl());
+ findSafeLocation(sendi, pWorld);
+ });
+ }
}
// Compressed code for MaxAttempts being met
@@ -193,82 +221,69 @@ public class RTP {
}
//Get a random location depending the world type
- private Location randomLoc(PlayerWorld pWorld) {
- int borderRad = pWorld.getMaxRad();
- int minVal = pWorld.getMinRad();
- int CenterX = pWorld.getCenterX();
- int CenterZ = pWorld.getCenterZ();
- int quadrant = rn.nextInt(4);
- Player p = pWorld.getPlayer();
- World world = Bukkit.getWorld(pWorld.getWorld());
- if (pWorld.getUseWorldborder()) {
- WorldBorder border = world.getWorldBorder();
- borderRad = (int) border.getSize() / 2;
- CenterX = border.getCenter().getBlockX();
- CenterZ = border.getCenter().getBlockZ();
- }
- float yaw = p.getLocation().getYaw(), pitch = p.getLocation().getPitch();
- RTP_WORLD_TYPE world_type = RTP_WORLD_TYPE.NORMAL; //World rtp type
- /*try {
- //1.13+
- normal = !world.getBiome(0, 0).equals(Biome.valueOf("NETHER")));
- } catch (Exception e) {
- //1.8-1.12
- try {
- normal = !world.getBiome(0, 0).equals(Biome.valueOf("HELL"));
- } catch (Exception e1) {
- normal = true;
- }
- }*/
- if (this.world_type.containsKey(world.getName()))
- world_type = this.world_type.get(world.getName());
- for (int i = 0; i <= maxAttempts; i++) {
- // Get the y-coords from up top, then check if it's SAFE!
- Location loc = null;
- if (borderRad <= minVal) {
- minVal = Default.getMinRad();
- if (borderRad <= minVal)
- minVal = 0;
- }
- switch (world_type) {
- case NETHER:
- loc = nether(borderRad, minVal, CenterX, CenterZ, quadrant, world, pWorld, yaw, pitch); break;
- default:
- loc = normal(borderRad, minVal, CenterX, CenterZ, quadrant, world, pWorld, yaw, pitch);
- }
- pWorld.addAttempt();
- if (loc != null && checkDepends(loc))
- return loc;
- quadrant = rn.nextInt(4);
- }
- return null;
- }
-
- //NORMAL
- private Location normal(int borderRad, int minVal, int CenterX, int CenterZ, int quadrant, World world,
- PlayerWorld pWorld, Float yaw, Float pitch) {
- int x, x2, z, z2;
- Location loc;
- // Will Check is CenterZ is negative or positive, then set 2 x's
- // up for choosing up next
- z = rn.nextInt(borderRad - minVal) + CenterZ + minVal;
- z2 = -(rn.nextInt(borderRad - minVal) - CenterZ - minVal);
- // Will Check is CenterZ is negative or positive, then set 2 z's
- // up for choosing up next
- x = rn.nextInt(borderRad - minVal) + CenterX + minVal;
- x2 = -rn.nextInt(borderRad - minVal) + CenterX - minVal;
- switch (quadrant) {
- case 0: // Positive X and Z
- loc = getLocAtNormal(x, z, world, yaw, pitch, pWorld); break;
- case 1: // Negative X and Z
- loc = getLocAtNormal(x2, z2, world, yaw, pitch, pWorld); break;
- case 2: // Negative X and Positive Z
- loc = getLocAtNormal(x2, z, world, yaw, pitch, pWorld); break;
- default: // Positive X and Negative Z
- loc = getLocAtNormal(x, z2, world, yaw, pitch, pWorld);
- }
- return loc;
- }
+// private Location randomLoc(PlayerWorld pWorld) {
+// int borderRad = pWorld.getMaxRad();
+// int minVal = pWorld.getMinRad();
+// int CenterX = pWorld.getCenterX();
+// int CenterZ = pWorld.getCenterZ();
+// int quadrant = rn.nextInt(4);
+// Player p = pWorld.getPlayer();
+// World world = pWorld.getWorld();
+// if (pWorld.getUseWorldborder()) {
+// WorldBorder border = world.getWorldBorder();
+// borderRad = (int) border.getSize() / 2;
+// CenterX = border.getCenter().getBlockX();
+// CenterZ = border.getCenter().getBlockZ();
+// }
+// float yaw = p.getLocation().getYaw(), pitch = p.getLocation().getPitch();
+// RTP_WORLD_TYPE world_type = pWorld.getWorldtype();
+// //for (int i = 0; i <= maxAttempts; i++) {
+// // Get the y-coords from up top, then check if it's SAFE!
+// Location loc = null;
+// if (borderRad <= minVal) {
+// minVal = defaultWorld.getMinRad();
+// if (borderRad <= minVal)
+// minVal = 0;
+// }
+// switch (world_type) {
+// case NETHER:
+// loc = nether(borderRad, minVal, CenterX, CenterZ, quadrant, world, pWorld, yaw, pitch); break;
+// default:
+// loc = normal(borderRad, minVal, CenterX, CenterZ, quadrant, world, pWorld, yaw, pitch);
+// }
+// pWorld.addAttempt();
+// //if (loc != null && checkDepends(loc))
+// return loc;
+// // quadrant = rn.nextInt(4);
+// //}
+// //return null;
+// }
+//
+// //NORMAL
+// private Location normal(int borderRad, int minVal, int CenterX, int CenterZ, int quadrant, World world,
+// PlayerWorld pWorld, Float yaw, Float pitch) {
+// int x, x2, z, z2;
+// Location loc;
+// // Will Check is CenterZ is negative or positive, then set 2 x's
+// // up for choosing up next
+// z = rn.nextInt(borderRad - minVal) + CenterZ + minVal;
+// z2 = -(rn.nextInt(borderRad - minVal) - CenterZ - minVal);
+// // Will Check is CenterZ is negative or positive, then set 2 z's
+// // up for choosing up next
+// x = rn.nextInt(borderRad - minVal) + CenterX + minVal;
+// x2 = -rn.nextInt(borderRad - minVal) + CenterX - minVal;
+// switch (quadrant) {
+// case 0: // Positive X and Z
+// loc = getLocAtNormal(x, z, world, yaw, pitch, pWorld); break;
+// case 1: // Negative X and Z
+// loc = getLocAtNormal(x2, z2, world, yaw, pitch, pWorld); break;
+// case 2: // Negative X and Positive Z
+// loc = getLocAtNormal(x2, z, world, yaw, pitch, pWorld); break;
+// default: // Positive X and Negative Z
+// loc = getLocAtNormal(x, z2, world, yaw, pitch, pWorld);
+// }
+// return loc;
+// }
private Location getLocAtNormal(int x, int z, World world, Float yaw, Float pitch, PlayerWorld pWorld) {
Block b = world.getHighestBlockAt(x, z);
@@ -287,31 +302,31 @@ public class RTP {
return null;
}
- //NETHER
- private Location nether(int borderRad, int minVal, int CenterX, int CenterZ, int quadrant, World world,
- PlayerWorld pWorld, Float yaw, Float pitch) {
- int x, x2, z, z2;
- Location loc;
- // Will Check is CenterZ is negative or positive, then set 2 x's
- // up for choosing up next
- z = rn.nextInt((borderRad) - minVal) + CenterZ + minVal;
- z2 = -(rn.nextInt(borderRad - minVal) - CenterZ - minVal);
- // Will Check is CenterZ is negative or positive, then set 2 z's
- // up for choosing up next
- x = rn.nextInt(borderRad - minVal) + CenterX + minVal;
- x2 = -rn.nextInt(borderRad - minVal) + CenterX - minVal;
- switch (quadrant) {
- case 0: // Positive X and Z
- loc = getLocAtNether(x, z, world, yaw, pitch, pWorld); break;
- case 1: // Negative X and Z
- loc = getLocAtNether(x2, z2, world, yaw, pitch, pWorld); break;
- case 2: // Negative X and Positive Z
- loc = getLocAtNether(x2, z, world, yaw, pitch, pWorld); break;
- default: // Positive X and Negative Z
- loc = getLocAtNether(x, z2, world, yaw, pitch, pWorld);
- }
- return loc;
- }
+// //NETHER
+// private Location nether(int borderRad, int minVal, int CenterX, int CenterZ, int quadrant, World world,
+// PlayerWorld pWorld, Float yaw, Float pitch) {
+// int x, x2, z, z2;
+// Location loc;
+// // Will Check is CenterZ is negative or positive, then set 2 x's
+// // up for choosing up next
+// z = rn.nextInt((borderRad) - minVal) + CenterZ + minVal;
+// z2 = -(rn.nextInt(borderRad - minVal) - CenterZ - minVal);
+// // Will Check is CenterZ is negative or positive, then set 2 z's
+// // up for choosing up next
+// x = rn.nextInt(borderRad - minVal) + CenterX + minVal;
+// x2 = -rn.nextInt(borderRad - minVal) + CenterX - minVal;
+// switch (quadrant) {
+// case 0: // Positive X and Z
+// loc = getLocAtNether(x, z, world, yaw, pitch, pWorld); break;
+// case 1: // Negative X and Z
+// loc = getLocAtNether(x2, z2, world, yaw, pitch, pWorld); break;
+// case 2: // Negative X and Positive Z
+// loc = getLocAtNether(x2, z, world, yaw, pitch, pWorld); break;
+// default: // Positive X and Negative Z
+// loc = getLocAtNether(x, z2, world, yaw, pitch, pWorld);
+// }
+// return loc;
+// }
private Location getLocAtNether(int x, int z, World world, Float yaw, Float pitch, PlayerWorld pWorld) {
//System.out.println("-----------");
@@ -356,14 +371,14 @@ public class RTP {
}
// Bad blocks, or bad biome
- private boolean badBlock(String block, int x, int z, String world, List biomes) {
+ private boolean badBlock(String block, int x, int z, World world, List biomes) {
for (String currentBlock : blockList) //Check Block
if (currentBlock.toUpperCase().equals(block))
return true;
//Check Biomes
if (biomes == null || biomes.isEmpty())
return false;
- String biomeCurrent = Bukkit.getWorld(world).getBiome(x, z).name();
+ String biomeCurrent = world.getBiome(x, z).name();
for (String biome : biomes)
if (biomeCurrent.toUpperCase().contains(biome.toUpperCase()))
return false;
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java
index 5a13882..cf39783 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/player/rtp/RTPDelay.java
@@ -3,7 +3,6 @@ package me.SuperRonanCraft.BetterRTP.player.rtp;
import me.SuperRonanCraft.BetterRTP.references.worlds.PlayerWorld;
import me.SuperRonanCraft.BetterRTP.Main;
import org.bukkit.Bukkit;
-import org.bukkit.Sound;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -92,7 +91,7 @@ class RTPDelay implements Listener {
HandlerList.unregisterAll(cls);
if (getPl().getCmd().rtping.containsKey(pWorld.getPlayer().getUniqueId())) {
try {
- getPl().getRTP().tp(sendi, pWorld);
+ getPl().getRTP().findSafeLocation(sendi, pWorld);
} catch (NullPointerException e) {
if (pWorld.getPrice() > 0)
getPl().getEco().unCharge(pWorld.getPlayer(), pWorld.getPrice());
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Custom.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Custom.java
index 438236d..af38bdb 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Custom.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Custom.java
@@ -3,6 +3,7 @@ package me.SuperRonanCraft.BetterRTP.references.worlds;
import me.SuperRonanCraft.BetterRTP.Main;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import org.bukkit.Bukkit;
+import org.bukkit.World;
import java.util.ArrayList;
import java.util.List;
@@ -31,34 +32,34 @@ public class Custom implements RTPWorld {
continue;
if (test.get("UseWorldBorder") != null) {
if (test.get("UseWorldBorder").getClass() == Boolean.class)
- useWorldborder = Boolean.valueOf(test.get("UseWorldBorder").toString());
+ useWorldborder = Boolean.parseBoolean(test.get("UseWorldBorder").toString());
}
if (test.get("CenterX") != null) {
if (test.get("CenterX").getClass() == Integer.class)
- CenterX = Integer.valueOf((test.get("CenterX")).toString());
+ CenterX = Integer.parseInt((test.get("CenterX")).toString());
}
if (test.get("CenterZ") != null) {
if (test.get("CenterZ").getClass() == Integer.class)
- CenterZ = Integer.valueOf((test.get("CenterZ")).toString());
+ CenterZ = Integer.parseInt((test.get("CenterZ")).toString());
}
if (test.get("MaxRadius") != null) {
if (test.get("MaxRadius").getClass() == Integer.class)
- maxBorderRad = Integer.valueOf((test.get("MaxRadius")).toString());
+ maxBorderRad = Integer.parseInt((test.get("MaxRadius")).toString());
if (maxBorderRad <= 0) {
Main.getInstance().getText().sms(Bukkit.getConsoleSender(),
"WARNING! Custom world '" + world + "' Maximum radius of '" + maxBorderRad + "' is not allowed! Set to default value!");
- maxBorderRad = Main.getInstance().getRTP().Default.getMaxRad();
+ maxBorderRad = Main.getInstance().getRTP().defaultWorld.getMaxRad();
}
}
if (test.get("MinRadius") != null) {
if (test.get("MinRadius").getClass() == Integer.class)
- minBorderRad = Integer.valueOf((test.get("MinRadius")).toString());
+ minBorderRad = Integer.parseInt((test.get("MinRadius")).toString());
if (minBorderRad < 0 || minBorderRad >= maxBorderRad) {
Main.getInstance().getText().sms(Bukkit.getConsoleSender(),
"WARNING! Custom world '" + world + "' Minimum radius of '" + minBorderRad + "' is not allowed! Set to default value!");
- minBorderRad = Main.getInstance().getRTP().Default.getMinRad();
+ minBorderRad = Main.getInstance().getRTP().defaultWorld.getMinRad();
if (minBorderRad >= maxBorderRad)
- maxBorderRad = Main.getInstance().getRTP().Default.getMaxRad();
+ maxBorderRad = Main.getInstance().getRTP().defaultWorld.getMaxRad();
}
}
if (test.get("Biomes") != null) {
@@ -100,7 +101,7 @@ public class Custom implements RTPWorld {
price = Integer.valueOf((test.get("Price")).toString());
}
} else
- price = Main.getInstance().getRTP().Default.getPrice();
+ price = Main.getInstance().getRTP().defaultWorld.getPrice();
//Other
this.Biomes = config.getStringList(pre + world + ".Biomes");
}
@@ -141,7 +142,7 @@ public class Custom implements RTPWorld {
}
@Override
- public String getWorld() {
- return world;
+ public World getWorld() {
+ return Bukkit.getWorld(world);
}
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Default.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Default.java
index 7f47c53..42921cb 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Default.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/Default.java
@@ -4,6 +4,7 @@ package me.SuperRonanCraft.BetterRTP.references.worlds;
import me.SuperRonanCraft.BetterRTP.Main;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
import org.bukkit.Bukkit;
+import org.bukkit.World;
import java.util.HashMap;
import java.util.List;
@@ -78,7 +79,7 @@ public class Default implements RTPWorld {
}
@Override
- public String getWorld() {
+ public World getWorld() {
return null;
}
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/PlayerWorld.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/PlayerWorld.java
index fd3e9bf..2004d47 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/PlayerWorld.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/PlayerWorld.java
@@ -1,18 +1,23 @@
package me.SuperRonanCraft.BetterRTP.references.worlds;
+import org.bukkit.Location;
+import org.bukkit.World;
+import org.bukkit.WorldBorder;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
+import java.util.Random;
public class PlayerWorld implements RTPWorld {
private boolean useWorldborder;
private int CenterX, CenterZ, maxBorderRad, minBorderRad, price, attempts;
private List Biomes;
private Player p;
- private String world;
+ private World world;
+ private RTP_WORLD_TYPE world_type;
- public PlayerWorld(Player p, String world) {
+ public PlayerWorld(Player p, World world) {
this.p = p;
this.world = world;
}
@@ -34,7 +39,59 @@ public class PlayerWorld implements RTPWorld {
return p;
}
- public String getWorld() {
+ public Location generateRandomXZ(Default defaultWorld, int quadrant) {
+ int borderRad = getMaxRad();
+ int minVal = getMinRad();
+ int CenterX = getCenterX();
+ int CenterZ = getCenterZ();
+ //int quadrant = rn.nextInt(4);
+ Player p = getPlayer();
+ World world = getWorld();
+ if (getUseWorldborder()) {
+ WorldBorder border = world.getWorldBorder();
+ borderRad = (int) border.getSize() / 2;
+ CenterX = border.getCenter().getBlockX();
+ CenterZ = border.getCenter().getBlockZ();
+ }
+ float yaw = p.getLocation().getYaw(), pitch = p.getLocation().getPitch();
+ RTP_WORLD_TYPE world_type = this.world_type; //World rtp type
+ //for (int i = 0; i <= maxAttempts; i++) {
+ // Get the y-coords from up top, then check if it's SAFE!
+ if (borderRad <= minVal) {
+ minVal = defaultWorld.getMinRad();
+ if (borderRad <= minVal)
+ minVal = 0;
+ }
+ // Will Check is CenterZ is negative or positive, then set 2 x's
+ // up for choosing up next
+ ////z = rn.nextInt(borderRad - minVal) + CenterZ + minVal;
+ ////z2 = -(rn.nextInt(borderRad - minVal) - CenterZ - minVal);
+ // Will Check is CenterZ is negative or positive, then set 2 z's
+ // up for choosing up next
+ ////x = rn.nextInt(borderRad - minVal) + CenterX + minVal;
+ ////x2 = -rn.nextInt(borderRad - minVal) + CenterX - minVal;
+ int x = borderRad - minVal;
+ int z = borderRad - minVal;
+ switch (quadrant) {
+ case 0: // Positive X and Z
+ x = new Random().nextInt(x) + CenterX + minVal;
+ z = new Random().nextInt(z) + CenterZ + minVal; break;
+ case 1: // Negative X and Z
+ x = -new Random().nextInt(x) + CenterX - minVal;
+ z = -(new Random().nextInt(z) + CenterZ + minVal); break;
+ case 2: // Negative X and Positive Z
+ x = -new Random().nextInt(x) + CenterX - minVal;
+ z = new Random().nextInt(z) + CenterZ + minVal; break;
+ default: // Positive X and Negative Z
+ x = new Random().nextInt(x) + CenterX + minVal;
+ z = -(new Random().nextInt(z) + CenterZ + minVal); break;
+ }
+ addAttempt();
+ return new Location(world, x, 0, z);
+ }
+
+ @Override
+ public World getWorld() {
return world;
}
@@ -104,6 +161,15 @@ public class PlayerWorld implements RTPWorld {
}
private void setBiomes(List biomes) {
- Biomes = biomes;
+ this.Biomes = biomes;
+ }
+
+ //Custom World type
+ public void setWorldtype(RTP_WORLD_TYPE type) {
+ this.world_type = type;
+ }
+
+ public RTP_WORLD_TYPE getWorldtype() {
+ return this.world_type;
}
}
diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/RTPWorld.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/RTPWorld.java
index 785ae52..113e5a6 100644
--- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/RTPWorld.java
+++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/worlds/RTPWorld.java
@@ -1,5 +1,7 @@
package me.SuperRonanCraft.BetterRTP.references.worlds;
+import org.bukkit.World;
+
import java.util.List;
public interface RTPWorld {
@@ -18,5 +20,5 @@ public interface RTPWorld {
List getBiomes();
- String getWorld();
+ World getWorld();
}
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 33b7eec..2c0dce2 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,5 +1,5 @@
main: me.SuperRonanCraft.BetterRTP.Main
-version: '2.12.0'
+version: '2.12.1'
name: BetterRTP
author: SuperRonanCraft
softdepend: [Vault, WorldGuard, GriefPrevention, Factions]