From cc8ec26c6668b8387c5a2745cc6822641bc515c6 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Wed, 12 Jan 2022 22:26:22 +0100 Subject: [PATCH] Make gui's work (but player settings are always recreated on login cus idk how to make the db work) register listeners Added back button to particle selection gui --- .../java/com/alttd/AltitudeParticles.java | 17 ++++++- src/main/java/com/alttd/config/Config.java | 12 ++++- .../java/com/alttd/database/Database.java | 20 ++++++--- src/main/java/com/alttd/database/Queries.java | 2 +- .../gui/actions/ActivateParticleSet.java | 19 ++++++++ .../alttd/gui/actions/EnterParticleMenu.java | 11 ++++- .../alttd/gui/windows/ChooseParticleGUI.java | 45 ++++++++++++++++++- .../alttd/gui/windows/OpenParticleGUI.java | 10 ++--- .../alttd/{gui => listeners}/GUIListener.java | 17 +++++-- .../alttd/listeners/PlayerJoinListener.java | 23 +++++----- .../java/com/alttd/objects/ParticleSet.java | 25 ++++++++--- .../com/alttd/storage/ParticleStorage.java | 24 ++++++++++ 12 files changed, 187 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/alttd/gui/actions/ActivateParticleSet.java rename src/main/java/com/alttd/{gui => listeners}/GUIListener.java (73%) create mode 100644 src/main/java/com/alttd/storage/ParticleStorage.java diff --git a/src/main/java/com/alttd/AltitudeParticles.java b/src/main/java/com/alttd/AltitudeParticles.java index bb9f555..9ec16fa 100644 --- a/src/main/java/com/alttd/AltitudeParticles.java +++ b/src/main/java/com/alttd/AltitudeParticles.java @@ -3,8 +3,12 @@ package com.alttd; import com.alttd.commands.CommandManager; import com.alttd.config.Config; import com.alttd.config.DatabaseConfig; -import com.alttd.database.Database; +import com.alttd.listeners.GUIListener; +import com.alttd.listeners.BlockBreakListener; +import com.alttd.listeners.BlockPlaceListener; +import com.alttd.listeners.PlayerJoinListener; import com.alttd.util.Logger; +import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; public class AltitudeParticles extends JavaPlugin { @@ -24,11 +28,20 @@ public class AltitudeParticles extends JavaPlugin { public void onEnable() { Config.reload(); DatabaseConfig.reload(); - Database.getDatabase().init(); +// Database.getDatabase().init(); new CommandManager(); + registerEvents(); Logger.info("--------------------------------------------------"); Logger.info("Altitude Particles started"); Logger.info("--------------------------------------------------"); } + private void registerEvents() { + PluginManager pluginManager = getServer().getPluginManager(); + pluginManager.registerEvents(new PlayerJoinListener(), this); + pluginManager.registerEvents(new BlockBreakListener(), this); + pluginManager.registerEvents(new BlockPlaceListener(), this); + pluginManager.registerEvents(new GUIListener(), this); + } + } diff --git a/src/main/java/com/alttd/config/Config.java b/src/main/java/com/alttd/config/Config.java index e9f6a30..483eaa6 100644 --- a/src/main/java/com/alttd/config/Config.java +++ b/src/main/java/com/alttd/config/Config.java @@ -57,8 +57,18 @@ public final class Config extends AbstractConfig { public static String PARTICLES_ON_DESC = "Click to disable particles"; public static String PARTICLES_OFF = "Particles off"; public static String PARTICLES_OFF_DESC = "Click to enable particles"; - private static void loadGUIButtons() { + public static String BACK_BUTTON = "Back"; + private static void loadGUIButtons() { + config.getString("gui-buttons.see-others-on", SEE_OTHERS_ON); + config.getString("gui-buttons.see-others-on-desc", SEE_OTHERS_ON_DESC); + config.getString("gui-buttons.see-others-off", SEE_OTHERS_OFF); + config.getString("gui-buttons.see-others-off-desc", SEE_OTHERS_OFF_DESC); + config.getString("gui-buttons.particles-on", PARTICLES_ON); + config.getString("gui-buttons.particles-on-desc", PARTICLES_ON_DESC); + config.getString("gui-buttons.particles-off", PARTICLES_OFF); + config.getString("gui-buttons.particles-off-desc", PARTICLES_OFF_DESC); + config.getString("gui-buttons.back-button", BACK_BUTTON); } public static boolean DEBUG = false; diff --git a/src/main/java/com/alttd/database/Database.java b/src/main/java/com/alttd/database/Database.java index 47bcd61..1e20f37 100644 --- a/src/main/java/com/alttd/database/Database.java +++ b/src/main/java/com/alttd/database/Database.java @@ -14,10 +14,6 @@ public class Database { private static Database instance = null; public static Connection connection = null; - private Database() { - - } - public static Database getDatabase(){ if (instance == null) instance = new Database(); @@ -57,11 +53,25 @@ public class Database { connection = DriverManager.getConnection( "jdbc:mysql://" + DatabaseConfig.IP + ":" + DatabaseConfig.PORT + "/" + DatabaseConfig.DATABASE_NAME + - "?autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true", + "?autoReconnect=true&useSSL=false", DatabaseConfig.USERNAME, DatabaseConfig.PASSWORD); } } + /** + * Returns the connection for the database + * @return Returns the connection. + */ + public static Connection getConnection() { + try { + instance.openConnection(); + } catch (Exception e) { + e.printStackTrace(); + } + + return connection; + } + private static void createActiveParticlesTable() { try { String sql = "CREATE TABLE IF NOT EXISTS active_particles(" + diff --git a/src/main/java/com/alttd/database/Queries.java b/src/main/java/com/alttd/database/Queries.java index 2bca7ba..69e0ac6 100644 --- a/src/main/java/com/alttd/database/Queries.java +++ b/src/main/java/com/alttd/database/Queries.java @@ -11,7 +11,7 @@ public class Queries { public static PlayerSettings getPlayerSettings(UUID uuid) { String sql = "SELECT * FROM user_settings WHERE uuid = ?"; try { - PreparedStatement preparedStatement = Database.connection.prepareStatement(sql); + PreparedStatement preparedStatement = Database.getConnection().prepareStatement(sql); preparedStatement.setString(1, uuid.toString()); ResultSet resultSet = preparedStatement.executeQuery(); diff --git a/src/main/java/com/alttd/gui/actions/ActivateParticleSet.java b/src/main/java/com/alttd/gui/actions/ActivateParticleSet.java new file mode 100644 index 0000000..374820c --- /dev/null +++ b/src/main/java/com/alttd/gui/actions/ActivateParticleSet.java @@ -0,0 +1,19 @@ +package com.alttd.gui.actions; + +import com.alttd.gui.GUIAction; +import com.alttd.objects.ParticleSet; +import org.bukkit.entity.Player; + +public class ActivateParticleSet implements GUIAction { + + ParticleSet particleSet; + + public ActivateParticleSet(ParticleSet particleSet) { + this.particleSet = particleSet; + } + + @Override + public void click(Player player) { + //TODO activate particle + } +} diff --git a/src/main/java/com/alttd/gui/actions/EnterParticleMenu.java b/src/main/java/com/alttd/gui/actions/EnterParticleMenu.java index 65b5072..dc80698 100644 --- a/src/main/java/com/alttd/gui/actions/EnterParticleMenu.java +++ b/src/main/java/com/alttd/gui/actions/EnterParticleMenu.java @@ -1,10 +1,12 @@ package com.alttd.gui.actions; +import com.alttd.AltitudeParticles; import com.alttd.gui.GUIAction; import com.alttd.gui.windows.ChooseParticleGUI; import com.alttd.objects.APartType; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; public class EnterParticleMenu implements GUIAction { private static final MiniMessage miniMessage = MiniMessage.miniMessage(); @@ -17,7 +19,12 @@ public class EnterParticleMenu implements GUIAction { @Override public void click(Player player) { - ChooseParticleGUI chooseParticleGUI = new ChooseParticleGUI(aPartType, miniMessage.deserialize(aPartType.getName())); - chooseParticleGUI.open(player); + ChooseParticleGUI chooseParticleGUI = new ChooseParticleGUI(aPartType, miniMessage.deserialize(aPartType.getName()), player); + new BukkitRunnable() { + @Override + public void run() { + chooseParticleGUI.open(player); + } + }.runTaskLater(AltitudeParticles.getInstance(), 0); } } diff --git a/src/main/java/com/alttd/gui/windows/ChooseParticleGUI.java b/src/main/java/com/alttd/gui/windows/ChooseParticleGUI.java index e5ebf1b..e3f9c73 100644 --- a/src/main/java/com/alttd/gui/windows/ChooseParticleGUI.java +++ b/src/main/java/com/alttd/gui/windows/ChooseParticleGUI.java @@ -1,11 +1,54 @@ package com.alttd.gui.windows; +import com.alttd.AltitudeParticles; +import com.alttd.config.Config; import com.alttd.gui.DefaultGUI; +import com.alttd.gui.actions.ActivateParticleSet; import com.alttd.objects.APartType; +import com.alttd.objects.ParticleSet; +import com.alttd.storage.ParticleStorage; import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; + +import java.util.List; +import java.util.stream.Collectors; public class ChooseParticleGUI extends DefaultGUI { - public ChooseParticleGUI(APartType aPartType, Component name) { + + static ItemStack backButton; + + static { + MiniMessage miniMessage = MiniMessage.miniMessage(); + + backButton = new ItemStack(Material.OAK_DOOR); + ItemMeta itemMeta = backButton.getItemMeta(); + itemMeta.displayName(miniMessage.deserialize(Config.BACK_BUTTON)); + backButton.setItemMeta(itemMeta); + } + + public ChooseParticleGUI(APartType aPartType, Component name, Player player) { super(name); + List availableParticles = ParticleStorage.getParticleSets(aPartType).stream() + .filter(particleSet -> player.hasPermission(particleSet.getPermission())) + .collect(Collectors.toList()); + + int i = 0; + for (ParticleSet particleSet : availableParticles) { + if (i >= 25) //leave the last 2 slots of the inventory open + return; + setItem(i++, particleSet.getItemStack(), new ActivateParticleSet(particleSet)); + } + + setItem(26, backButton, clickingPlayer -> new BukkitRunnable() { + @Override + public void run() { + new OpenParticleGUI(clickingPlayer).open(clickingPlayer); + } + }.runTaskLater(AltitudeParticles.getInstance(), 0)); } } diff --git a/src/main/java/com/alttd/gui/windows/OpenParticleGUI.java b/src/main/java/com/alttd/gui/windows/OpenParticleGUI.java index 10a5d44..f9caf66 100644 --- a/src/main/java/com/alttd/gui/windows/OpenParticleGUI.java +++ b/src/main/java/com/alttd/gui/windows/OpenParticleGUI.java @@ -39,14 +39,12 @@ public class OpenParticleGUI extends DefaultGUI { setItem(i++, particlesType.getItemStack(), new EnterParticleMenu(particlesType)); } PlayerSettings playerSettings = PlayerSettings.getPlayer(player.getUniqueId()); - if (playerSettings == null) - return; - setItem(17, playerSettings.isSeeingParticles() ? seeOthersOn : seeOthersOff, new ToggleSeeParticles(this, playerSettings)); + setItem(25, playerSettings.isSeeingParticles() ? seeOthersOn : seeOthersOff, new ToggleSeeParticles(this, playerSettings)); setItem(26, playerSettings.hasActiveParticles() ? particlesOn : particlesOff, new ToggleParticlesActive(this, playerSettings)); } public void updateSettingSlots(PlayerSettings playerSettings) { - setItem(17, playerSettings.isSeeingParticles() ? seeOthersOn : seeOthersOff, new ToggleSeeParticles(this, playerSettings)); + setItem(25, playerSettings.isSeeingParticles() ? seeOthersOn : seeOthersOff, new ToggleSeeParticles(this, playerSettings)); setItem(26, playerSettings.hasActiveParticles() ? particlesOn : particlesOff, new ToggleParticlesActive(this, playerSettings)); } @@ -80,13 +78,13 @@ public class OpenParticleGUI extends DefaultGUI { itemMeta.displayName(miniMessage.deserialize(Config.SEE_OTHERS_OFF_DESC)); seeOthersOff.setItemMeta(itemMeta); - particlesOn = new ItemStack(Material.PLAYER_HEAD); + particlesOn = new ItemStack(Material.LIGHT); itemMeta = particlesOn.getItemMeta(); itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_ON)); itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_ON_DESC)); particlesOn.setItemMeta(itemMeta); - particlesOff = new ItemStack(Material.PLAYER_HEAD); + particlesOff = new ItemStack(Material.BARRIER); itemMeta = particlesOff.getItemMeta(); itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_OFF)); itemMeta.displayName(miniMessage.deserialize(Config.PARTICLES_OFF_DESC)); diff --git a/src/main/java/com/alttd/gui/GUIListener.java b/src/main/java/com/alttd/listeners/GUIListener.java similarity index 73% rename from src/main/java/com/alttd/gui/GUIListener.java rename to src/main/java/com/alttd/listeners/GUIListener.java index 6ce133d..f63afa5 100644 --- a/src/main/java/com/alttd/gui/GUIListener.java +++ b/src/main/java/com/alttd/listeners/GUIListener.java @@ -1,11 +1,15 @@ -package com.alttd.gui; +package com.alttd.listeners; +import com.alttd.AltitudeParticles; +import com.alttd.gui.GUI; +import com.alttd.gui.GUIAction; 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.event.player.PlayerQuitEvent; +import org.bukkit.scheduler.BukkitRunnable; public class GUIListener implements Listener { @@ -27,9 +31,14 @@ public class GUIListener implements Listener { event.setCancelled(true); GUIAction action = gui.getAction(event.getSlot()); - if (action != null){ - action.click(player); - } + new BukkitRunnable() { + @Override + public void run() { + if (action != null){ + action.click(player); + } + } + }.runTaskAsynchronously(AltitudeParticles.getInstance()); } @EventHandler diff --git a/src/main/java/com/alttd/listeners/PlayerJoinListener.java b/src/main/java/com/alttd/listeners/PlayerJoinListener.java index 4d75d44..a183ee1 100644 --- a/src/main/java/com/alttd/listeners/PlayerJoinListener.java +++ b/src/main/java/com/alttd/listeners/PlayerJoinListener.java @@ -3,6 +3,7 @@ package com.alttd.listeners; import com.alttd.AltitudeParticles; import com.alttd.database.Queries; import com.alttd.storage.PlayerSettings; +import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.scheduler.BukkitRunnable; @@ -11,17 +12,19 @@ import java.util.UUID; public class PlayerJoinListener implements Listener { + @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - new BukkitRunnable() { - @Override - public void run() { - UUID uuid = event.getPlayer().getUniqueId(); - PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); - if (playerSettings == null) Queries.getPlayerSettings(uuid); - - //TODO activate particles sync/async??? - } - }.runTaskAsynchronously(AltitudeParticles.getInstance()); + new PlayerSettings(true, true, event.getPlayer().getUniqueId()); //TODO REMOVE +// new BukkitRunnable() { //TODO uncomment +// @Override +// public void run() { +// UUID uuid = event.getPlayer().getUniqueId(); +// PlayerSettings playerSettings = PlayerSettings.getPlayer(uuid); +// if (playerSettings == null) Queries.getPlayerSettings(uuid); +// +// //TODO activate particles sync/async??? +// } +// }.runTaskAsynchronously(AltitudeParticles.getInstance()); } } diff --git a/src/main/java/com/alttd/objects/ParticleSet.java b/src/main/java/com/alttd/objects/ParticleSet.java index d7b121a..826d1c3 100644 --- a/src/main/java/com/alttd/objects/ParticleSet.java +++ b/src/main/java/com/alttd/objects/ParticleSet.java @@ -5,23 +5,28 @@ import com.alttd.frameSpawners.FrameSpawnerLocation; import com.alttd.frameSpawners.FrameSpawnerPlayer; import org.bukkit.Location; import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; import java.util.List; public class ParticleSet { - List frames; - int delay, repeat; - APartType particlesType; - boolean shouldRepeat; - int ticksUntilNextFrame; + private final List frames; + private final int delay, repeat; + private final APartType particlesType; + private final boolean shouldRepeat; + private final String permission; + private final ItemStack itemStack; + private int ticksUntilNextFrame; - public ParticleSet(List frames, int delay, int repeat, APartType particlesType) { + public ParticleSet(List frames, int delay, int repeat, APartType particlesType, String permission, ItemStack itemStack) { this.frames = frames; this.delay = delay; this.repeat = repeat; this.particlesType = particlesType; this.shouldRepeat = repeat < 0; + this.permission = permission; + this.itemStack = itemStack; ticksUntilNextFrame = delay; } @@ -34,4 +39,12 @@ public class ParticleSet { FrameSpawnerPlayer frameSpawnerPlayer = new FrameSpawnerPlayer(repeat, frames, player); frameSpawnerPlayer.runTaskTimerAsynchronously(AltitudeParticles.getInstance(), 0, delay); } + + public String getPermission() { + return permission; + } + + public ItemStack getItemStack() { + return itemStack; + } } diff --git a/src/main/java/com/alttd/storage/ParticleStorage.java b/src/main/java/com/alttd/storage/ParticleStorage.java new file mode 100644 index 0000000..2a75e9e --- /dev/null +++ b/src/main/java/com/alttd/storage/ParticleStorage.java @@ -0,0 +1,24 @@ +package com.alttd.storage; + +import com.alttd.objects.APartType; +import com.alttd.objects.ParticleSet; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class ParticleStorage { + private static final HashMap> particles = new HashMap<>(); + + public static void addParticleSet(APartType aPartType, ParticleSet particleSet) { + List particleSets = particles.getOrDefault(aPartType, new ArrayList<>()); + if (particleSets.contains(particleSet)) + return; + particleSets.add(particleSet); + particles.put(aPartType, particleSets); + } + + public static List getParticleSets(APartType aPartType) { + return particles.getOrDefault(aPartType, new ArrayList<>()); + } +}