From 3e3a6e9a5d526aad0e4c998086bc9bed54b2298c Mon Sep 17 00:00:00 2001 From: Anthony Debucquoy Date: Thu, 25 Jan 2024 20:27:16 +0100 Subject: [PATCH] Show Scoreboard below name and top screen --- .../herisson/thevoidroad/DatabaseManager.java | 45 ++++++----- .../herisson/thevoidroad/Entity/Merchand.java | 29 ++++++- .../ovh/herisson/thevoidroad/TheVoidRoad.java | 2 +- .../java/ovh/herisson/thevoidroad/Voids.java | 76 ++++++++++++------- 4 files changed, 105 insertions(+), 47 deletions(-) diff --git a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/DatabaseManager.java b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/DatabaseManager.java index a4f793f..f08c8cf 100644 --- a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/DatabaseManager.java +++ b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/DatabaseManager.java @@ -41,7 +41,7 @@ public class DatabaseManager { private void InitVoids() throws SQLException{ String query = "CREATE TABLE IF NOT EXISTS voids (\n" + "id integer PRIMARY KEY,\n" - + "uuid text NOT NULL,\n" + + "uuid text NOT NULL UNIQUE,\n" + "amount INTEGER DEFAULT 0)"; Statement st = con.createStatement(); @@ -49,25 +49,34 @@ public class DatabaseManager { st.close(); } - public int getVoids(UUID uuid) throws SQLException{ - Statement st = con.createStatement(); - String query = "SELECT amount FROM voids WHERE uuid = ? LIMIT 1"; - PreparedStatement p = con.prepareStatement(query); - p.setString(1, uuid.toString()); - ResultSet rs = p.executeQuery(); - int value = rs.getInt(1); - st.close(); - return value; + public int getVoids(UUID uuid){ + try { + Statement st = con.createStatement(); + String query = "SELECT amount FROM voids WHERE uuid = ? LIMIT 1"; + PreparedStatement p = con.prepareStatement(query); + p.setString(1, uuid.toString()); + ResultSet rs = p.executeQuery(); + int value = rs.getInt(1); + st.close(); + return value; + } catch(Exception e){ + e.printStackTrace(); + } + return 0; } - public void setVoids(UUID uuid, int amount) throws SQLException{ - Statement st = con.createStatement(); - String query = "INSERT OR REPLACE INTO voids (uuid, amount) VALUES (?, ?)"; - PreparedStatement p = con.prepareStatement(query); - p.setString(1, uuid.toString()); - p.setInt(2, amount); - p.execute(); - st.close(); + public void setVoids(UUID uuid, int amount) { + try { + Statement st = con.createStatement(); + String query = "INSERT OR REPLACE INTO voids (uuid, amount) VALUES (?, ?)"; + PreparedStatement p = con.prepareStatement(query); + p.setString(1, uuid.toString()); + p.setInt(2, amount); + p.execute(); + st.close(); + } catch(Exception e){ + e.printStackTrace(); + } } public HashMap getVoidsScoreboard() throws SQLException{ diff --git a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Entity/Merchand.java b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Entity/Merchand.java index 1be2f7c..a956137 100644 --- a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Entity/Merchand.java +++ b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Entity/Merchand.java @@ -15,6 +15,9 @@ import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryAction; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryInteractEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.world.EntitiesLoadEvent; @@ -25,6 +28,7 @@ import org.bukkit.persistence.PersistentDataType; import net.kyori.adventure.text.Component; import ovh.herisson.thevoidroad.DatabaseManager; import ovh.herisson.thevoidroad.TheVoidRoad; +import ovh.herisson.thevoidroad.Voids; import ovh.herisson.thevoidroad.Event.HourEvent; import ovh.herisson.thevoidroad.util.Tuple; @@ -54,7 +58,8 @@ public class Merchand implements Listener{ } catch(Exception e){ e.printStackTrace(); } - if(DatabaseManager.getInstance().getConfig("init").equalsIgnoreCase("true")){ + if(DatabaseManager.getInstance().getConfig("init") != null && + DatabaseManager.getInstance().getConfig("init").equalsIgnoreCase("true")){ regenerate(); } } @@ -121,4 +126,26 @@ public class Merchand implements Listener{ e.getPlayer().setCompassTarget(m.getLocation()); } } + + //Inventory interaction + @EventHandler + public void ClickInsideInventory(InventoryClickEvent e){ + // Did the click the right slot in the right inventory + if(!e.getInventory().equals(inv)) return; + e.setCancelled(true); + if(!e.getInventory().equals(inv) || e.getSlot() != 4) return; + + if(e.getWhoClicked() instanceof Player ply){ + //Do we have the item and if so remove them + if(ply.getInventory().contains(current.x)){ + for (ItemStack i : ply.getInventory().getContents()) { + if(i.getType() == current.x){ + i.subtract(1); + Voids.add(ply, current.y); + return; + } + } + } + } + } } diff --git a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/TheVoidRoad.java b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/TheVoidRoad.java index ce188e9..d3c6a4a 100644 --- a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/TheVoidRoad.java +++ b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/TheVoidRoad.java @@ -29,7 +29,7 @@ public class TheVoidRoad extends JavaPlugin{ //Events getServer().getPluginManager().registerEvents(new HourEvent(), this); //For HourEvent getServer().getPluginManager().registerEvents(Merchand.getInstance(), this); - + getServer().getPluginManager().registerEvents(new Voids(), this); } @Override diff --git a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java index f4d8a6d..af26487 100644 --- a/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java +++ b/TheVoidRoad/src/main/java/ovh/herisson/thevoidroad/Voids.java @@ -6,46 +6,44 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scoreboard.Criteria; +import org.bukkit.scoreboard.DisplaySlot; +import org.bukkit.scoreboard.Objective; +import org.bukkit.scoreboard.RenderType; +import org.bukkit.scoreboard.Score; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.ScoreboardManager; -public final class Voids{ +import net.kyori.adventure.bossbar.BossBar; +import net.kyori.adventure.text.Component; - private Voids(){} // Prohib the instantiation +public final class Voids implements Listener{ + + private static HashMap bossbars = new HashMap<>(); public static int get(Player ply){ - try { - return TheVoidRoad.db.getVoids(ply.getUniqueId()); - } catch(SQLException e){ - e.printStackTrace(); - } - return 0; + return TheVoidRoad.db.getVoids(ply.getUniqueId()); } public static void set(Player ply, int amount){ - try { - TheVoidRoad.db.setVoids(ply.getUniqueId(), amount); - - } catch(SQLException e){ - e.printStackTrace(); - } + TheVoidRoad.db.setVoids(ply.getUniqueId(), amount); + UpdateVoids(ply); } public static void add(Player ply, int amount){ - try { - int curr = TheVoidRoad.db.getVoids(ply.getUniqueId()); - TheVoidRoad.db.setVoids(ply.getUniqueId(), curr + amount); - } catch(SQLException e){ - e.printStackTrace(); - } + int curr = DatabaseManager.getInstance().getVoids(ply.getUniqueId()); + DatabaseManager.getInstance().setVoids(ply.getUniqueId(), curr + amount); + UpdateVoids(ply); } public static boolean subtract(Player ply, int amount, boolean force){ - try { - int curr = TheVoidRoad.db.getVoids(ply.getUniqueId()); - if(curr - amount < 0 && !force) return false; - TheVoidRoad.db.setVoids(ply.getUniqueId(), curr - amount); - } catch(SQLException e){ - e.printStackTrace(); - } + int curr = TheVoidRoad.db.getVoids(ply.getUniqueId()); + if(curr - amount < 0 && !force) return false; + TheVoidRoad.db.setVoids(ply.getUniqueId(), curr - amount); + UpdateVoids(ply); return true; } @@ -69,4 +67,28 @@ public final class Voids{ } return ret; } + + public static void UpdateVoids(Player ply){ + Integer count = get(ply); + String countString = count.toString() + TheVoidRoad.CoinGlyph; + + Scoreboard sb = Bukkit.getScoreboardManager().getMainScoreboard(); + Objective o = sb.getObjective("VOIDS") != null ? sb.getObjective("VOIDS") : sb.registerNewObjective("VOIDS", Criteria.DUMMY, "voids"); + o.setDisplaySlot(DisplaySlot.BELOW_NAME); + o.displayName(Component.text(TheVoidRoad.CoinGlyph)); + Score s = o.getScore(ply); + s.setScore(count); + + BossBar bb = bossbars.containsKey(ply) ? + bossbars.get(ply).name(Component.text(countString)) : + BossBar.bossBar(Component.text(countString), 1, BossBar.Color.GREEN, BossBar.Overlay.PROGRESS); + + bossbars.put(ply, bb); + ply.showBossBar(bb); + } + + @EventHandler + public void UpdateVoids(PlayerJoinEvent e){ + UpdateVoids(e.getPlayer()); + } }