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<>());
+ }
+}