From 135eed32e11004b9695d68fca6c751f4845e29d1 Mon Sep 17 00:00:00 2001 From: Evan Niederwerfer Date: Sun, 19 Jan 2025 18:46:21 -0500 Subject: [PATCH] Upload files to "uwp-utils" --- uwp-utils/Main.java | 334 +++++++++++++++++++++++++++++++++++++++++++ uwp-utils/plugin.yml | 46 ++++++ 2 files changed, 380 insertions(+) create mode 100644 uwp-utils/Main.java create mode 100644 uwp-utils/plugin.yml diff --git a/uwp-utils/Main.java b/uwp-utils/Main.java new file mode 100644 index 0000000..5487abc --- /dev/null +++ b/uwp-utils/Main.java @@ -0,0 +1,334 @@ +package me.arcodeskel.uwpmcutils; +import me.arcodeskel.uwpmcutils.commands.*; +import org.bukkit.*; +import org.bukkit.block.Block; +import org.bukkit.command.CommandExecutor; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.player.*; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.event.Listener; + +import java.sql.*; +import java.util.*; + + +public class Main extends JavaPlugin implements CommandExecutor, Listener, Maps { + + + // Claim Tool + + ItemStack itemStack = new ItemStack(Material.GOLDEN_SHOVEL); + + // Ranks + + String[] ranks = {"GUEST", "MEMBER", "BUILDER" , "MOD", "DEV", "OWNER"}; + ChatColor[] colors = {ChatColor.GRAY, ChatColor.GREEN, ChatColor.DARK_AQUA ,ChatColor.LIGHT_PURPLE, ChatColor.RED, ChatColor.RED}; + String CreateHome = "CREATE TABLE IF NOT EXISTS 'homes' ('username' TEXT UNIQUE, 'x' INTEGER, 'y' INTEGER, 'z' INTEGER, 'yaw' INTEGER, 'pitch' INTEGER)"; + String CreateRank = "CREATE TABLE IF NOT EXISTS 'rank' ('username' TEXT UNIQUE, 'rank' TEXT)"; + String CreateSpawn = "CREATE TABLE IF NOT EXISTS 'spawn' ('x' INTEGER DEFAULT 0, 'y' INTEGER DEFAULT 0, 'z' INTEGER DEFAULT 0, 'yaw' INTEGER DEFAULT 0, 'pitch' INTEGER DEFAULT 0)"; + + // Survival World + + World main = Bukkit.getServer().getWorld("world"); + + @Override + public void onEnable() { + getServer().getPluginManager().registerEvents(this, this); + Objects.requireNonNull(getCommand("spawn")).setExecutor(new Spawn()); + Objects.requireNonNull(getCommand("sethome")).setExecutor(new SetHome()); + Objects.requireNonNull(getCommand("home")).setExecutor(new Home()); + Objects.requireNonNull(getCommand("rtp")).setExecutor(new Rtp()); + Objects.requireNonNull(getCommand("rank")).setExecutor(new Rank()); + Objects.requireNonNull(getCommand("setspawn")).setExecutor(new SetSpawn()); + Objects.requireNonNull(getCommand("tpbuild")).setExecutor(new tpbuild()); + Objects.requireNonNull(getCommand("help")).setExecutor(new Help()); + + try { + Connection connection = DatabaseConnection.getConnection(); + Statement statement = connection.createStatement(); + statement.addBatch(CreateHome); + statement.addBatch(CreateRank); + statement.addBatch(CreateSpawn); + statement.executeBatch(); + + } catch (SQLException e) { + throw new RuntimeException(e); + } + + getLogger().info("Utils Plugin Started"); + + } + + @Override + public void onDisable() { + getLogger().info("Utils Plugin Disabled"); + } + + @EventHandler(priority = EventPriority.HIGH) + public void onPlayerJoin(PlayerJoinEvent event) { + + + + String rank = "SELECT rank FROM rank WHERE username= ?"; + + if (event.getPlayer().hasPlayedBefore()) { + event.getPlayer().sendMessage("Welcome back, " + event.getPlayer().getName() + "! There are currently " + getServer().getOnlinePlayers().size() + " players online."); + +/* + try (Connection connection = DatabaseConnection.getConnection();) { + try (PreparedStatement psUpdate = connection.prepareStatement(rank)) { + psUpdate.setString(1, event.getPlayer().getName()); + psUpdate.executeQuery(); + for (String s : ranks) { + if (s.equals(psUpdate.getResultSet().toString())) { + event.getPlayer().setPlayerListName(rank + " " + event.getPlayer().getName()); + break; + } + } + connection.close(); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + + */ + + + } else if (!event.getPlayer().hasPlayedBefore()) { + + String insertUser = "INSERT OR IGNORE INTO rank (username) VALUES (?)"; + + try (Connection connection = DatabaseConnection.getConnection()) { + try (PreparedStatement psUpdate = connection.prepareStatement(insertUser)) { + psUpdate.setString(1, event.getPlayer().getName()); + + Rank.addGuest(event.getPlayer().getName()); + //event.getPlayer().setPlayerListName(ranks[0] + " " + event.getPlayer().getName()); + event.getPlayer().sendMessage("Welcome to UWP MC! Go through the mineshaft elevator to get started."); + + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + meta.setDisplayName("Claim Tool"); + itemStack.setItemMeta(meta); + event.getPlayer().getInventory().setItem(0, itemStack); + + // Execute the SELECT statement + try (PreparedStatement selectStmt = connection.prepareStatement("SELECT x, y, z FROM spawn LIMIT 1")) { + try (ResultSet resultSet = selectStmt.executeQuery()) { // Execute the query + if (resultSet.next()) { // Move to the first row + double x = resultSet.getDouble("x"); + double y = resultSet.getDouble("y"); + double z = resultSet.getDouble("z"); + + psUpdate.executeUpdate(); // Now execute the update + Location location = new Location(Bukkit.getServer().getWorld("world"), x, y, z); + event.getPlayer().teleport(location); + } + } + } + } + } catch (SQLException e) { + getLogger().info("SQLite ran into an exception. If the exception relates to unique constraints, it can be safely ignored."); + getLogger().info(e.toString()); + } + + } + + } + + + @EventHandler + public void onPlayerRespawn(PlayerRespawnEvent event) throws SQLException { + try { + String result = "SELECT x,y,z FROM spawn"; + Connection connection = DatabaseConnection.getConnection(); + Statement statement = connection.createStatement(); + var resultset = statement.executeQuery(result); + double x = resultset.getDouble(1); + double y = resultset.getDouble(2); + double z = resultset.getDouble(3); + + ItemMeta meta = itemStack.getItemMeta(); + assert meta != null; + meta.setDisplayName("Claim Tool"); + itemStack.setItemMeta(meta); + + if (enteringEndPortal.contains(event.getPlayer().getUniqueId().toString())) { + enteringEndPortal.remove(event.getPlayer().getUniqueId().toString()); + } + + if (event.getPlayer().getWorld().getName().equals("world")) { + event.getPlayer().getInventory().setItem(0, itemStack); + } + + if (!event.getPlayer().getWorld().getName().equals("world")) { + Location loc = new Location(Bukkit.getWorld("world"), x, y, z); + Bukkit.getScheduler().runTaskLater(this, () -> event.getPlayer().teleport(loc), 1L); + } + + if (event.getPlayer().getBedSpawnLocation() != null) { + if (!event.getPlayer().getBedSpawnLocation().getWorld().getName().equals("world")) { + Location loc = new Location(Bukkit.getWorld("world"), x, y, z); + Bukkit.getScheduler().runTaskLater(this, () -> event.getPlayer().teleport(loc), 1L); + return; + } + Bukkit.getScheduler().runTaskLater(this, () -> event.getPlayer().teleport(event.getPlayer().getBedSpawnLocation()), 1L); + } + + if (event.getPlayer().getBedSpawnLocation() == null) { + Location loc = new Location(Bukkit.getWorld("world"), x, y, z); + Bukkit.getScheduler().runTaskLater(this, () -> event.getPlayer().teleport(loc), 1L); + } + + else { + Location loc = new Location(Bukkit.getWorld("world"), x, y, z); + Bukkit.getScheduler().runTaskLater(this, () -> event.getPlayer().teleport(loc), 1L); + } + + + + connection.close(); + + + } catch (SQLException e) { + throw new RuntimeException(e); + } + + + } + + @EventHandler + public boolean loggedOff(PlayerQuitEvent event) { + if (activeCommands.contains(event.getPlayer())) { + double velocity = originalVelocity.get(event.getPlayer()); + event.getPlayer().setVelocity(event.getPlayer().getLocation().getDirection().multiply(velocity)); + frozenPlayers.remove(event.getPlayer()); + originalVelocity.remove(event.getPlayer()); + sneakingPlayers.remove(event.getPlayer()); + event.getPlayer().setWalkSpeed(0.2F); + + } + + return true; + + } + + + @EventHandler + public boolean AsyncPlayerChatEvent(AsyncPlayerChatEvent event) throws SQLException { + String playerName = event.getPlayer().getName(); + + // Use Bukkit's runAsync method to handle the database operation asynchronously + try (Connection connection = DatabaseConnection.getConnection(); + PreparedStatement ps = connection.prepareStatement("SELECT rank FROM rank WHERE username = ?")) { + + ps.setString(1, playerName); + ResultSet resultSet = ps.executeQuery(); + + if (resultSet.next()) { + String rank = resultSet.getString("rank"); + + for (int i = 0; i < ranks.length; i++) { + if (ranks[i].equalsIgnoreCase(rank)) { + // Set the chat format in the main thread + String formattedMessage = colors[i] + ranks[i] + " " + ChatColor.AQUA + playerName + " >> " + ChatColor.GOLD + event.getMessage(); + event.setFormat(formattedMessage); + break; + } + } + } + } catch (SQLException e) { + e.printStackTrace(); // Handle the exception appropriately + } + return true; + } + + + + + + @EventHandler + public void onPlayerMove(PlayerMoveEvent event) { + if (frozenPlayers.contains(event.getPlayer())) { + event.setCancelled(true); // Cancel movement + } + } + + public void onPlayerDamage(EntityDamageByEntityEvent event) { + if (event.getDamager() instanceof Player) { + // Check if the damaged entity is a mob + Entity damager = event.getDamager(); + Player player = (Player) damager; + if (activeCommands.contains(player)) { + if (event.getEntity().getType() != EntityType.PLAYER || event.getEntity().getType() == EntityType.PLAYER) { + event.setCancelled(true); // Cancel the damage event + event.getDamager().sendMessage(ChatColor.RED + "You cannot attack while teleporting! (SHIFT TO CANCEL)"); + } + } + } + } + + @EventHandler + public void onPlayerPortal(PlayerPortalEvent event) { + if (event.getTo().getWorld().getName().equals("world_the_end") || event.getTo().getWorld().getName().equals("anarchy_end")) { + enteringEndPortal.add(event.getPlayer().getUniqueId().toString()); + } + } + + + @EventHandler + public void onPlayerCommandPreprocess (PlayerCommandPreprocessEvent event){ + String command = event.getMessage(); + + if (command.equalsIgnoreCase("/home")) { + if (!event.getPlayer().getWorld().getName().equals("world") && !event.getPlayer().getWorld().getName().equals("world_nether") && !event.getPlayer().getWorld().getName().equals("world_the_end")) { + event.getPlayer().sendMessage(ChatColor.RED + "Cannot use this command in " + event.getPlayer().getWorld().getName() + ", enter spawn to execute this command!"); + event.setCancelled(true); + } + } + + if (command.equalsIgnoreCase("/rtp")) { + if (!event.getPlayer().getWorld().getName().equals("world")) { + event.getPlayer().sendMessage(ChatColor.RED + "Cannot use this command in " + event.getPlayer().getWorld().getName() + ", you can only use this in the survival over world or at spawn!"); + event.setCancelled(true); + } + } + + if (command.equalsIgnoreCase("/home") || command.equalsIgnoreCase("/spawn") || command.equalsIgnoreCase("/rtp")) { + + Block blockBelow = event.getPlayer().getLocation().subtract(0, 1, 0).getBlock(); + + if (!blockBelow.getType().isSolid()) { + event.getPlayer().sendMessage(ChatColor.RED + "Cannot teleport while falling!"); + event.setCancelled(true); // Cancel the command + } + + if (activeCommands.contains(event.getPlayer())) { + event.getPlayer().sendMessage(ChatColor.RED + "You already have a command in progress!"); + event.setCancelled(true); // Cancel the new command + } + + + } + } + } + + + + + + + + + + + + + diff --git a/uwp-utils/plugin.yml b/uwp-utils/plugin.yml new file mode 100644 index 0000000..3147f3f --- /dev/null +++ b/uwp-utils/plugin.yml @@ -0,0 +1,46 @@ +name: UWP-Utils # the plugins name as it should appear in the plugin list /pl +version: 1.0 # the plugin's version +author: Arcodeskel +main: me.arcodeskel.uwpmcutils.Main +api-version: 1.20.6 # the version of the API you want to use, required starting with 1.13 + +commands: + spawn: + description: Your description + usage: /spawn + permission: uwpmcutils.spawn + + home: + description: Your description + usage: /home + permission: uwpmcutils.home + + sethome: + description: Your description + usage: /sethome + permission: uwpmcutils.sethome + + rtp: + description: Your description + usage: /rtp + permission: uwpmcutils.rtp + + rank: + description: Your description + usage: /rank + permission: uwpmcutils.rank + + setspawn: + description: Your description + usage: /setspawn + permission: uwpmcutils.setspawn + + tpbuild: + description: Your description + usage: /tpbuild + permission: uwpmcutils.builder + + help: + description: Your description + usage: /help + permission: uwpmcutils.help