114 lines
4.6 KiB
Java
114 lines
4.6 KiB
Java
package me.arcodeskel.uwpmcutils.commands;
|
|
import me.arcodeskel.uwpmcutils.Main;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.World;
|
|
import org.bukkit.command.Command;
|
|
import org.bukkit.command.CommandExecutor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.Bukkit;
|
|
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.sql.Connection;
|
|
import java.sql.DriverManager;
|
|
import java.sql.SQLException;
|
|
import java.sql.Statement;
|
|
import java.util.*;
|
|
|
|
|
|
public class Spawn implements Listener, CommandExecutor, Maps {
|
|
|
|
//World main = Bukkit.getServer().getWorld("spawn");
|
|
World main = Bukkit.getServer().getWorld("world");
|
|
|
|
|
|
|
|
@Override
|
|
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
|
|
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 to spawn will commence in 10 seconds. Your movement has been temporarily disabled. Sneak to cancel teleportation request (shift).");
|
|
|
|
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
|
|
if (Objects.requireNonNull(p.getPlayer()).isSneaking() && !activeCommands.contains(p.getPlayer())) {
|
|
cancel();
|
|
}
|
|
// Check if the player is sneaking
|
|
if (Objects.requireNonNull(p.getPlayer()).isSneaking() && activeCommands.contains(p.getPlayer())) {
|
|
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;
|
|
}
|
|
|
|
try {
|
|
Connection connection = DatabaseConnection.getConnection();
|
|
Statement statement = connection.createStatement();
|
|
var cmd = "SELECT x,y,z,yaw,pitch FROM spawn";
|
|
var result = statement.executeQuery(cmd);
|
|
double x = result.getDouble("x");
|
|
double y = result.getDouble("y");
|
|
double z = result.getDouble("z");
|
|
float yaw = result.getFloat("yaw");
|
|
float pitch = result.getFloat("pitch");
|
|
Location location = new Location(main, x, y, z, yaw, pitch);
|
|
p.teleport(location);
|
|
|
|
connection.close();
|
|
p.sendMessage(ChatColor.GREEN + "Sent to spawn");
|
|
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());
|
|
|
|
|
|
}
|
|
|
|
catch (SQLException e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
|
|
}
|
|
}.runTaskLater(JavaPlugin.getPlugin(Main.class), 200);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
}
|