From 266921adb4d0f60e527987e50ac72eb99c710876 Mon Sep 17 00:00:00 2001 From: 5vl Date: Fri, 8 Apr 2022 17:00:57 +0200 Subject: [PATCH] i think im done now? --- .../me/fivevl/doublejump/JumpCommand.java | 13 +++-- src/main/java/me/fivevl/doublejump/Main.java | 12 ++++- src/main/java/me/fivevl/doublejump/MySQL.java | 3 +- .../me/fivevl/doublejump/events/OnFly.java | 14 +++-- .../doublejump/events/OnInventoryClick.java | 51 +++++++++++++++++++ .../me/fivevl/doublejump/events/OnJoin.java | 20 ++++++++ .../me/fivevl/doublejump/events/OnJump.java | 4 +- .../me/fivevl/doublejump/guis/JumpGui.java | 42 ++++++++++++++- 8 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 src/main/java/me/fivevl/doublejump/events/OnInventoryClick.java create mode 100644 src/main/java/me/fivevl/doublejump/events/OnJoin.java diff --git a/src/main/java/me/fivevl/doublejump/JumpCommand.java b/src/main/java/me/fivevl/doublejump/JumpCommand.java index 53ce201..69e8f64 100644 --- a/src/main/java/me/fivevl/doublejump/JumpCommand.java +++ b/src/main/java/me/fivevl/doublejump/JumpCommand.java @@ -6,21 +6,26 @@ import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import java.sql.SQLException; public class JumpCommand implements CommandExecutor { @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) { if (!(sender instanceof Player)) { - sender.sendMessage("Only players can use this command!"); + sender.sendMessage(Main.color("&cOnly players can use this command!")); return true; } Player p = (Player) sender; if (!p.hasPermission("doublejump.gui")) { - p.sendMessage("You don't have permission to use this command!"); + p.sendMessage(Main.color("You don't have permission to use this command!")); return true; } - p.openInventory(JumpGui.getGui(p)); - Main.inGui.add(p); + try { + p.openInventory(JumpGui.getGui(p)); + Main.inGui.add(p); + } catch (SQLException e) { + e.printStackTrace(); + } return true; } } diff --git a/src/main/java/me/fivevl/doublejump/Main.java b/src/main/java/me/fivevl/doublejump/Main.java index 54619b3..92ddb64 100644 --- a/src/main/java/me/fivevl/doublejump/Main.java +++ b/src/main/java/me/fivevl/doublejump/Main.java @@ -1,18 +1,22 @@ package me.fivevl.doublejump; import me.fivevl.doublejump.events.OnFly; +import me.fivevl.doublejump.events.OnInventoryClick; +import me.fivevl.doublejump.events.OnJoin; import me.fivevl.doublejump.events.OnJump; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import java.sql.SQLException; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Objects; public class Main extends JavaPlugin { - public static List doDoubleJump = new ArrayList<>(); + public static HashMap doDoubleJump = new HashMap<>(); public static List inGui = new ArrayList<>(); private static Main instance; public static Main getInstance() { @@ -34,6 +38,8 @@ public class Main extends JavaPlugin { } Bukkit.getPluginManager().registerEvents(new OnFly(), this); Bukkit.getPluginManager().registerEvents(new OnJump(), this); + Bukkit.getPluginManager().registerEvents(new OnJoin(), this); + Bukkit.getPluginManager().registerEvents(new OnInventoryClick(), this); Objects.requireNonNull(getCommand("jump")).setExecutor(new JumpCommand()); getLogger().info("DoubleJump enabled!"); } @@ -73,4 +79,8 @@ public class Main extends JavaPlugin { sql.connect(); sql.execute("CREATE TABLE IF NOT EXISTS `settings` (`uuid` VARCHAR(36) NOT NULL, `strength` DOUBLE NOT NULL DEFAULT '1', PRIMARY KEY (`uuid`))"); } + + public static String color(String s) { + return ChatColor.translateAlternateColorCodes('&', s); + } } diff --git a/src/main/java/me/fivevl/doublejump/MySQL.java b/src/main/java/me/fivevl/doublejump/MySQL.java index a0fa481..d4df7d0 100644 --- a/src/main/java/me/fivevl/doublejump/MySQL.java +++ b/src/main/java/me/fivevl/doublejump/MySQL.java @@ -1,6 +1,7 @@ package me.fivevl.doublejump; import javax.sql.rowset.CachedRowSet; +import javax.sql.rowset.RowSetProvider; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; @@ -56,7 +57,7 @@ public class MySQL implements Database { @Override public CachedRowSet query(String query) throws SQLException{ - CachedRowSet cachedRowSet = new com.sun.rowset.CachedRowSetImpl(); + CachedRowSet cachedRowSet = RowSetProvider.newFactory().createCachedRowSet(); cachedRowSet.populate(connection.prepareStatement(query).executeQuery()); return cachedRowSet; } diff --git a/src/main/java/me/fivevl/doublejump/events/OnFly.java b/src/main/java/me/fivevl/doublejump/events/OnFly.java index 93c2207..ce0cb92 100644 --- a/src/main/java/me/fivevl/doublejump/events/OnFly.java +++ b/src/main/java/me/fivevl/doublejump/events/OnFly.java @@ -1,20 +1,28 @@ package me.fivevl.doublejump.events; import me.fivevl.doublejump.Main; +import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerToggleFlightEvent; +import javax.sql.rowset.CachedRowSet; +import java.sql.SQLException; + public class OnFly implements Listener { @EventHandler - public void onFly(PlayerToggleFlightEvent e) { + public void onFly(PlayerToggleFlightEvent e) throws SQLException { Player p = e.getPlayer(); - if (p.hasPermission("doublejump.use") && Main.doDoubleJump.contains(p) && (p.getGameMode() == GameMode.ADVENTURE || p.getGameMode() == GameMode.SURVIVAL)) { + if (p.hasPermission("doublejump.use") && Main.doDoubleJump.containsKey(p) && (p.getGameMode() == GameMode.ADVENTURE || p.getGameMode() == GameMode.SURVIVAL)) { e.setCancelled(true); p.setAllowFlight(false); - p.setVelocity(p.getLocation().getDirection().multiply(2.0D)); + Bukkit.getScheduler().cancelTask(Main.doDoubleJump.get(p)); + Main.doDoubleJump.remove(p); + CachedRowSet rs = Main.getMySQL().query("SELECT * FROM `settings` WHERE `uuid` = '" + p.getUniqueId() + "'"); + rs.next(); + p.setVelocity(p.getLocation().getDirection().multiply(rs.getDouble("strength"))); p.setFallDistance(0); } } diff --git a/src/main/java/me/fivevl/doublejump/events/OnInventoryClick.java b/src/main/java/me/fivevl/doublejump/events/OnInventoryClick.java new file mode 100644 index 0000000..72f997a --- /dev/null +++ b/src/main/java/me/fivevl/doublejump/events/OnInventoryClick.java @@ -0,0 +1,51 @@ +package me.fivevl.doublejump.events; + +import me.fivevl.doublejump.Main; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import javax.sql.rowset.CachedRowSet; +import java.math.RoundingMode; +import java.sql.SQLException; +import java.text.DecimalFormat; +import java.util.Collections; + +public class OnInventoryClick implements Listener { + @SuppressWarnings("deprecation") + @EventHandler + public void onClick(InventoryClickEvent e) throws SQLException { + Player p = (Player) e.getWhoClicked(); + if (!Main.inGui.contains(p)) return; + e.setCancelled(true); + CachedRowSet rs = Main.getMySQL().query("SELECT * FROM `settings` WHERE `uuid` = '" + p.getUniqueId() + "'"); + rs.next(); + double strength = rs.getDouble("strength"); + double newStrength = strength; + if (e.getRawSlot() == 12) newStrength = strength - 0.2; + if (e.getRawSlot() == 14) newStrength = strength + 0.2; + if (newStrength < 1) newStrength = 1; + if (newStrength > 5) newStrength = 5; + if (strength == newStrength) return; + DecimalFormat df = new DecimalFormat("#.#"); + df.setRoundingMode(RoundingMode.CEILING); + newStrength = Double.parseDouble(df.format(newStrength).replace(",", ".")); + Inventory inv = e.getClickedInventory(); + ItemStack item = inv.getItem(13); + ItemMeta currentStrengthMeta = item.getItemMeta(); + currentStrengthMeta.setLore(Collections.singletonList(Main.color("&e" + newStrength))); + item.setItemMeta(currentStrengthMeta); + inv.setItem(13, item); + Main.getMySQL().execute("UPDATE `settings` SET `strength` = '" + newStrength + "' WHERE `uuid` = '" + p.getUniqueId() + "'"); + } + + @EventHandler + public void onClose(InventoryCloseEvent e) { + Main.inGui.remove((Player) e.getPlayer()); + } +} diff --git a/src/main/java/me/fivevl/doublejump/events/OnJoin.java b/src/main/java/me/fivevl/doublejump/events/OnJoin.java new file mode 100644 index 0000000..97623d4 --- /dev/null +++ b/src/main/java/me/fivevl/doublejump/events/OnJoin.java @@ -0,0 +1,20 @@ +package me.fivevl.doublejump.events; + +import me.fivevl.doublejump.Main; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import javax.sql.rowset.CachedRowSet; +import java.sql.SQLException; + +public class OnJoin implements Listener { + @EventHandler + public void onJoin(PlayerJoinEvent e) throws SQLException { + Player p = e.getPlayer(); + CachedRowSet rs = Main.getMySQL().query("SELECT * FROM `settings` WHERE `uuid` = '" + p.getUniqueId() + "'"); + if (!rs.next()) { + Main.getMySQL().execute("INSERT INTO `settings` (`uuid`, `strength`) VALUES ('" + p.getUniqueId() + "', default)"); + } + } +} diff --git a/src/main/java/me/fivevl/doublejump/events/OnJump.java b/src/main/java/me/fivevl/doublejump/events/OnJump.java index 00d03c1..46520b5 100644 --- a/src/main/java/me/fivevl/doublejump/events/OnJump.java +++ b/src/main/java/me/fivevl/doublejump/events/OnJump.java @@ -14,11 +14,11 @@ public class OnJump implements Listener { Player p = e.getPlayer(); if (p.hasPermission("doublejump.use") && (p.getGameMode() == GameMode.ADVENTURE || p.getGameMode() == GameMode.SURVIVAL)) { p.setAllowFlight(true); - Main.doDoubleJump.add(p); - Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getInstance(), () -> { + int id = Bukkit.getScheduler().scheduleSyncDelayedTask(Main.getInstance(), () -> { p.setAllowFlight(false); Main.doDoubleJump.remove(p); }, 20L); + Main.doDoubleJump.put(p, id); } } } diff --git a/src/main/java/me/fivevl/doublejump/guis/JumpGui.java b/src/main/java/me/fivevl/doublejump/guis/JumpGui.java index 986d098..25825c5 100644 --- a/src/main/java/me/fivevl/doublejump/guis/JumpGui.java +++ b/src/main/java/me/fivevl/doublejump/guis/JumpGui.java @@ -1,13 +1,51 @@ package me.fivevl.doublejump.guis; +import me.fivevl.doublejump.Main; import org.bukkit.Bukkit; +import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import javax.sql.rowset.CachedRowSet; +import java.sql.SQLException; +import java.util.Collections; public class JumpGui { @SuppressWarnings("deprecation") - public static Inventory getGui(Player p) { - Inventory inv = Bukkit.createInventory(null, 27, "Jump Strength"); + public static Inventory getGui(Player p) throws SQLException { + Inventory inv = Bukkit.createInventory(null, 27, Main.color("&8Jump Strength Menu")); + ItemStack glass = new ItemStack(Material.GRAY_STAINED_GLASS_PANE, 1); + ItemMeta glassMeta = glass.getItemMeta(); + glassMeta.setDisplayName(" "); + glass.setItemMeta(glassMeta); + for (int i = 0; i < inv.getSize(); i++) { + inv.setItem(i, glass); + } + + ItemStack decreaseStrength = new ItemStack(Material.ARROW, 1); + ItemMeta decreaseStrengthMeta = decreaseStrength.getItemMeta(); + decreaseStrengthMeta.setDisplayName(Main.color("&9Decrease Strength")); + decreaseStrength.setItemMeta(decreaseStrengthMeta); + inv.setItem(12, decreaseStrength); + + ItemStack increaseStrength = new ItemStack(Material.ARROW, 1); + ItemMeta increaseStrengthMeta = increaseStrength.getItemMeta(); + increaseStrengthMeta.setDisplayName(Main.color("&9Increase Strength")); + increaseStrength.setItemMeta(increaseStrengthMeta); + inv.setItem(14, increaseStrength); + + + CachedRowSet rs = Main.getMySQL().query("SELECT * FROM `settings` WHERE `uuid` = '" + p.getUniqueId() + "'"); + if (rs.next()) { + ItemStack currentStrength = new ItemStack(Material.FEATHER, 1); + ItemMeta currentStrengthMeta = currentStrength.getItemMeta(); + currentStrengthMeta.setDisplayName(Main.color("&2Current Jump Strength")); + currentStrengthMeta.setLore(Collections.singletonList(Main.color("&e" + rs.getDouble("strength")))); + currentStrength.setItemMeta(currentStrengthMeta); + inv.setItem(13, currentStrength); + } return inv; }