package me.arcodeskel.uwpmcutils.commands; import me.arcodeskel.uwpmcutils.Main; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.event.Listener; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.util.Vector; import java.util.Objects; import java.util.concurrent.ThreadLocalRandom; public class Rtp implements Listener, CommandExecutor, Maps { World main = Bukkit.getServer().getWorld("world"); @Override public boolean onCommand(CommandSender sender, Command cmd, String s, String[] strings) { if (sender instanceof Player) { Player p = (Player) sender; activeCommands.add(p.getPlayer()); p.setWalkSpeed(0); frozenPlayers.add(p.getPlayer()); originalVelocity.put(p.getPlayer(), p.getVelocity().length()); p.setVelocity(new Vector(0, -1.0, 0)); p.sendMessage(ChatColor.YELLOW + "Teleportation will commence in 10 seconds. Your movement has been temporarily disabled. Sneak to cancel teleportation request (shift)."); new BukkitRunnable() { @Override public void run() { // Check if the player is sneaking if (Objects.requireNonNull(p.getPlayer()).isSneaking() && activeCommands.contains(p.getPlayer())) { if (!activeCommands.contains(p.getPlayer()) || activeCommands.contains(p.getPlayer() == null)) { return; } if (!originalVelocity.containsKey(p.getPlayer())) { activeCommands.remove(p.getPlayer()); return; } p.getPlayer().sendMessage(ChatColor.RED + "Command execution canceled because you are sneaking!"); double velocity = originalVelocity.get(p.getPlayer()); p.getPlayer().setVelocity(p.getPlayer().getLocation().getDirection().multiply(velocity)); frozenPlayers.remove(p.getPlayer()); originalVelocity.remove(p.getPlayer()); sneakingPlayers.remove(p.getPlayer()); p.getPlayer().setWalkSpeed(0.2F); activeCommands.remove(p.getPlayer()); // Clean up cancel(); // Stop the runnable } } }.runTaskTimer(JavaPlugin.getPlugin(Main.class), 0, 1); // Check every tick new BukkitRunnable() { @Override public void run() { if (!activeCommands.contains(p.getPlayer())) { cancel(); return; } float randomX = ThreadLocalRandom.current().nextInt(0, 20000); float randomZ = ThreadLocalRandom.current().nextInt(0, 20000); Block randomY = Objects.requireNonNull(Bukkit.getWorld(main.getUID())).getHighestBlockAt(new Location(main, randomX, 0, randomZ)); Location loc = new Location(p.getWorld(), randomX, randomY.getY(), randomZ); if (!loc.getBlock().isLiquid()) { if (p.isInsideVehicle()) { p.eject(); } p.teleport(loc); p.setWalkSpeed(0.2F); double velocity = originalVelocity.get(p.getPlayer()); p.getPlayer().setVelocity(p.getPlayer().getLocation().getDirection().multiply(velocity)); p.setWalkSpeed(0.2F); frozenPlayers.remove(p.getPlayer()); originalVelocity.remove(p.getPlayer()); } else { while (loc.getBlock().isLiquid()) { randomX = ThreadLocalRandom.current().nextInt(-20000, 20000); randomZ = ThreadLocalRandom.current().nextInt(-20000, 20000); randomY = Objects.requireNonNull(Bukkit.getWorld(main.getUID())).getHighestBlockAt(new Location(main, randomX, 0, randomZ)); loc = new Location(p.getWorld(), randomX, randomY.getY(), randomZ); if (!loc.getBlock().isLiquid()) { if (p.isInsideVehicle()) { p.eject(); } p.teleport(loc); p.setWalkSpeed(0.2F); double velocity = originalVelocity.get(p.getPlayer()); p.getPlayer().setVelocity(p.getPlayer().getLocation().getDirection().multiply(velocity)); p.setWalkSpeed(0.2F); frozenPlayers.remove(p.getPlayer()); originalVelocity.remove(p.getPlayer()); activeCommands.remove(p.getPlayer()); } } } } }.runTaskLater(JavaPlugin.getPlugin(Main.class), 200); } return true; } }