Upload files to "uwp-utils"

This commit is contained in:
Evan Niederwerfer 2025-01-19 18:46:21 -05:00
parent ec4c7b5a5b
commit 135eed32e1
2 changed files with 380 additions and 0 deletions

334
uwp-utils/Main.java Normal file
View File

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

46
uwp-utils/plugin.yml Normal file
View File

@ -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