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

159 lines
5.9 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.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
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 Home implements Listener, CommandExecutor, Maps {
World main = Bukkit.getServer().getWorld("world");
@Override
public boolean onCommand(CommandSender sender, Command command, 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));
double x,y,z;
try {
Connection connection = DatabaseConnection.getConnection();
Statement statement = connection.createStatement();
var cmd = "SELECT x,y,z FROM homes WHERE username='" + p.getName() + "'";
var result = statement.executeQuery(cmd);
x = result.getDouble("x");
y = result.getDouble("y");
z = result.getDouble("z");
connection.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
if (x == 0 && y == 0 && z == 0) {
p.sendMessage(ChatColor.RED + "You do not have a home yet! You can set one at anytime using /sethome");
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());
}
if (activeCommands.contains(p.getPlayer())) {
p.sendMessage(ChatColor.GREEN + "You will be teleported to" + ChatColor.AQUA + " home " + ChatColor.GREEN + "in 10 seconds. " + ChatColor.YELLOW + "Your movement has been disabled. Sneak to cancel teleportation request.");
}
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,pitch,yaw FROM homes WHERE username='" + p.getName() + "'";
var result = statement.executeQuery(cmd);
double x = result.getDouble("x");
double y = result.getDouble("y");
double z = result.getDouble("z");
float pitch = result.getFloat("pitch");
float yaw = result.getFloat("yaw");
Location location = new Location(main, x,y,z,yaw,pitch);
p.teleport(location);
p.sendMessage(ChatColor.GREEN + "Sent to " + ChatColor.AQUA + "home");
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());
connection.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}.runTaskLater(JavaPlugin.getPlugin(Main.class), 200);
}
return true;
}
}