UW-PlattevilleMC/uwp-utils/commands/Rtp.java

131 lines
5.6 KiB
Java

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;
}
}