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
This commit is contained in:
Teriuihi 2022-01-12 22:26:22 +01:00
parent bc74d35faa
commit cc8ec26c66
12 changed files with 187 additions and 38 deletions

View File

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

View File

@ -57,8 +57,18 @@ public final class Config extends AbstractConfig {
public static String PARTICLES_ON_DESC = "<dark_aqua>Click to disable particles</dark_aqua>";
public static String PARTICLES_OFF = "<red>Particles off</red>";
public static String PARTICLES_OFF_DESC = "<dark_aqua>Click to enable particles</dark_aqua>";
private static void loadGUIButtons() {
public static String BACK_BUTTON = "<yellow>Back</yellow>";
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;

View File

@ -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(" +

View File

@ -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();

View File

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

View File

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

View File

@ -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<ParticleSet> 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));
}
}

View File

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

View File

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

View File

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

View File

@ -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<Frame> frames;
int delay, repeat;
APartType particlesType;
boolean shouldRepeat;
int ticksUntilNextFrame;
private final List<Frame> 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<Frame> frames, int delay, int repeat, APartType particlesType) {
public ParticleSet(List<Frame> 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;
}
}

View File

@ -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<APartType, List<ParticleSet>> particles = new HashMap<>();
public static void addParticleSet(APartType aPartType, ParticleSet particleSet) {
List<ParticleSet> particleSets = particles.getOrDefault(aPartType, new ArrayList<>());
if (particleSets.contains(particleSet))
return;
particleSets.add(particleSet);
particles.put(aPartType, particleSets);
}
public static List<ParticleSet> getParticleSets(APartType aPartType) {
return particles.getOrDefault(aPartType, new ArrayList<>());
}
}