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