diff --git a/PureKitsFork/pom.xml b/PureKitsFork/pom.xml
index 9dddbbe..b3e9955 100644
--- a/PureKitsFork/pom.xml
+++ b/PureKitsFork/pom.xml
@@ -111,6 +111,7 @@
sonatype-snapshots
https://oss.sonatype.org/content/repositories/snapshots/
+
@@ -125,5 +126,12 @@
bukkit-sidebar
6.2.5-SNAPSHOT
+
+
+ com.j256.ormlite
+ ormlite-jdbc
+ 6.1
+
+
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/AbstractInventory.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/AbstractInventory.java
index fb32a53..e3748c6 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/AbstractInventory.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/AbstractInventory.java
@@ -6,8 +6,10 @@ import org.bukkit.Bukkit;
import org.bukkit.entity.HumanEntity;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
+import org.bukkit.event.HandlerList;
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.plugin.Plugin;
@@ -17,7 +19,7 @@ public abstract class AbstractInventory implements Listener {
public AbstractInventory(int size, Component title, Plugin plugin) {
this.plugin = plugin;
- // Create a new inventory, with no owner (as this isn't a real inventory), a size of nine, called example
+ // Create a new inventory, with no owner (as this isn't a real inventory)
inv = Bukkit.createInventory(null, size, title);
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@@ -31,6 +33,10 @@ public abstract class AbstractInventory implements Listener {
ent.openInventory(inv);
}
+ public void unregisterEvents(){
+ HandlerList.unregisterAll(this);
+
+ }
// Check for clicks on items
@EventHandler
public void onInventoryClick(final InventoryClickEvent e) {
@@ -46,4 +52,10 @@ public abstract class AbstractInventory implements Listener {
}
public abstract void onInventoryClickLogic(final InventoryClickEvent e);
+ @EventHandler
+ public void onInventoryClose(InventoryCloseEvent e){
+ if (!e.getInventory().equals(inv)) return;
+ HandlerList.unregisterAll(this);
+ }
+
}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java
index 9890af1..01cdc56 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/PureKitPvP.java
@@ -4,6 +4,7 @@ import me.lifelessnerd.purekitpvp.combathandlers.leveling.PlayerLevelChat;
import me.lifelessnerd.purekitpvp.combathandlers.killhandler.Suicide;
import me.lifelessnerd.purekitpvp.combathandlers.mobhandler.OnPlayerSpawnMob;
import me.lifelessnerd.purekitpvp.combathandlers.killhandler.DeathHandler;
+import me.lifelessnerd.purekitpvp.database.KitDatabase;
import me.lifelessnerd.purekitpvp.files.lang.LanguageConfig;
import me.lifelessnerd.purekitpvp.globalevents.events.DoubleHealthListeners;
import me.lifelessnerd.purekitpvp.scoreboards.SidebarScoreboard;
@@ -26,10 +27,14 @@ import me.lifelessnerd.purekitpvp.kitCommand.KitsGUI;
import me.lifelessnerd.purekitpvp.noncombatstats.commands.GetStats;
import me.lifelessnerd.purekitpvp.noncombatstats.listeners.ArrowsShotStat;
import me.lifelessnerd.purekitpvp.noncombatstats.listeners.ProjectilesThrownStat;
+import org.bukkit.Bukkit;
import org.bukkit.plugin.java.JavaPlugin;
+import java.sql.SQLException;
+
public final class PureKitPvP extends JavaPlugin {
+ private KitDatabase kitDatabase;
@Override
public void onEnable() {
PerkFireHandler.plugin = this; //idk? fixes npe?
@@ -39,13 +44,23 @@ public final class PureKitPvP extends JavaPlugin {
getConfig().options().copyDefaults();
saveConfig();
+ //Database
+ try {
+ // Ensure the plugin's data folder exists
+ if (!getDataFolder().exists()) {
+ getDataFolder().mkdirs();
+ }
+
+ kitDatabase = new KitDatabase(getDataFolder().getAbsolutePath() + "/kitdatabase.db");
+ } catch (SQLException e) {
+ e.printStackTrace();
+ System.out.println("Failed to connect to database! " + e.getMessage());
+ Bukkit.getPluginManager().disablePlugin(this);
+ }
+
//Kits config
KitConfig.setup();
KitConfig.get().addDefault("kits", "");
- //Might create problems, I tried to just keep value null but then the entire value didn't show up until I created a kit
- //Which is not too bad either so whatever, if there are any problems ever change this and hope for the best
- //Otherwise find a way to make a path without a value, like: kits: , instead of kits: ''
- //: fix this with createConfiguration if I feel like it, tbf it works fine (IT DOES)
KitConfig.get().options().copyDefaults(true);
KitConfig.save();
@@ -126,5 +141,8 @@ public final class PureKitPvP extends JavaPlugin {
getLogger().info("Goodbye!");
}
+ public KitDatabase getKitDatabase() {
+ return kitDatabase;
+ }
}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/ProjectileTrail.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/ProjectileTrail.java
index 6e2a977..89ef64e 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/ProjectileTrail.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/cosmetics/cosmeticsListeners/ProjectileTrail.java
@@ -100,25 +100,25 @@ public class ProjectileTrail implements Listener {
case "none":
return;
case "flame":
- location.getWorld().spawnParticle(Particle.FLAME, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, true);
+ location.getWorld().spawnParticle(Particle.FLAME, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, null, true);
break;
case "sparkle":
- location.getWorld().spawnParticle(Particle.END_ROD, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, true);
+ location.getWorld().spawnParticle(Particle.END_ROD, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, null, true);
break;
case "water_drip":
- location.getWorld().spawnParticle(Particle.DRIP_WATER, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, true);
+ location.getWorld().spawnParticle(Particle.DRIP_WATER, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, null, true);
break;
case "heart":
- location.getWorld().spawnParticle(Particle.HEART, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, true);
+ location.getWorld().spawnParticle(Particle.HEART, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, null, true);
break;
case "firework":
- location.getWorld().spawnParticle(Particle.FIREWORKS_SPARK, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, true);
+ location.getWorld().spawnParticle(Particle.FIREWORKS_SPARK, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, null, true);
break;
case "totem":
- location.getWorld().spawnParticle(Particle.TOTEM, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, true);
+ location.getWorld().spawnParticle(Particle.TOTEM, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, null, true);
break;
case "smoke":
- location.getWorld().spawnParticle(Particle.CAMPFIRE_COSY_SMOKE, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, true);
+ location.getWorld().spawnParticle(Particle.CAMPFIRE_COSY_SMOKE, location, plugin.getConfig().getInt("projectile-trail-count"), 0.1, 0.1, 0.1, 0.001, null, true);
break;
default:
break;
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/database/KitDatabase.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/database/KitDatabase.java
new file mode 100644
index 0000000..a6faa27
--- /dev/null
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/database/KitDatabase.java
@@ -0,0 +1,73 @@
+package me.lifelessnerd.purekitpvp.database;
+
+import com.j256.ormlite.dao.Dao;
+import com.j256.ormlite.dao.DaoManager;
+import com.j256.ormlite.jdbc.JdbcConnectionSource;
+import com.j256.ormlite.stmt.QueryBuilder;
+import com.j256.ormlite.support.ConnectionSource;
+import com.j256.ormlite.table.TableUtils;
+import me.lifelessnerd.purekitpvp.database.entities.PlayerKitPreferences;
+import org.bukkit.entity.Player;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+
+public class KitDatabase {
+
+ private final Dao playerKitPreferencesDao;
+
+ public KitDatabase(String path) throws SQLException {
+ ConnectionSource connectionSource = new JdbcConnectionSource("jdbc:sqlite:" + path);
+ TableUtils.createTableIfNotExists(connectionSource, PlayerKitPreferences.class);
+ playerKitPreferencesDao = DaoManager.createDao(connectionSource, PlayerKitPreferences.class);
+ }
+
+ public void addEntry(Player player, String kitName, HashMap prefs) throws SQLException {
+ if (hasEntry(player, kitName)){
+ updateEntry(player, kitName, prefs);
+ return;
+ }
+ PlayerKitPreferences playerKitPreferences = new PlayerKitPreferences();
+ playerKitPreferences.setUuid(player.getUniqueId().toString());
+ playerKitPreferences.setUsername(player.getName());
+ playerKitPreferences.setKitName(kitName);
+ playerKitPreferences.setPreferences(prefs);
+ playerKitPreferencesDao.create(playerKitPreferences);
+ }
+
+
+ public boolean hasEntry(Player player, String kitName) throws SQLException {
+ // Query for a user with the specified uuid and kitName
+ QueryBuilder queryBuilder = playerKitPreferencesDao.queryBuilder();
+ queryBuilder.where().eq("uuid", player.getUniqueId().toString()).and().eq("kitName", kitName);
+ // Check if any records match the criteria
+ return queryBuilder.queryForFirst() != null;
+
+ }
+
+ public void updateEntry(Player player, String kitName, HashMap prefs) throws SQLException {
+ QueryBuilder queryBuilder = playerKitPreferencesDao.queryBuilder();
+ queryBuilder.where().eq("uuid", player.getUniqueId().toString()).and().eq("kitName", kitName);
+
+ PlayerKitPreferences playerKitPreferences = queryBuilder.queryForFirst();
+ if (playerKitPreferences != null) {
+ playerKitPreferences.setPreferences(prefs);
+ playerKitPreferencesDao.update(playerKitPreferences);
+ } else {
+ addEntry(player, kitName, prefs);
+ }
+
+ }
+
+ public PlayerKitPreferences getEntry(Player player, String kitName) throws SQLException {
+ if (!hasEntry(player, kitName)){
+ HashMap emptyMap = new HashMap<>();
+ addEntry(player, kitName, emptyMap);
+ }
+ // Query for a user with the specified uuid and kitName
+ QueryBuilder queryBuilder = playerKitPreferencesDao.queryBuilder();
+ queryBuilder.where().eq("uuid", player.getUniqueId().toString()).and().eq("kitName", kitName);
+ // Check if any records match the criteria
+ return queryBuilder.queryForFirst();
+ }
+}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/database/entities/PlayerKitPreferences.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/database/entities/PlayerKitPreferences.java
new file mode 100644
index 0000000..6f6768e
--- /dev/null
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/database/entities/PlayerKitPreferences.java
@@ -0,0 +1,57 @@
+package me.lifelessnerd.purekitpvp.database.entities;
+
+import com.j256.ormlite.field.DataType;
+import com.j256.ormlite.field.DatabaseField;
+import com.j256.ormlite.table.DatabaseTable;
+
+import java.util.HashMap;
+
+@DatabaseTable(tableName = "player_kit_preferences")
+public class PlayerKitPreferences {
+
+ @DatabaseField(generatedId = true, canBeNull = false)
+ private int id;
+ @DatabaseField(canBeNull = false)
+ private String uuid;
+ @DatabaseField(canBeNull = false)
+ private String username;
+ @DatabaseField(canBeNull = false)
+ private String kitName;
+ @DatabaseField(dataType = DataType.SERIALIZABLE)
+ private HashMap preferences;
+
+ public PlayerKitPreferences() {
+ }
+
+ public String getUuid() {
+ return uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getKitName() {
+ return kitName;
+ }
+
+ public void setKitName(String kitName) {
+ this.kitName = kitName;
+ }
+
+ public HashMap getPreferences() {
+ return preferences;
+ }
+
+ public void setPreferences(HashMap preferences) {
+ this.preferences = preferences;
+ }
+}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageConfig.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageConfig.java
index 51c073e..53daa6d 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageConfig.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageConfig.java
@@ -149,6 +149,11 @@ public class LanguageConfig {
defaults.put(LanguageKey.KITS_GUI_PREVIEW_TITLE, "&aKit Preview > &b%KIT%");
defaults.put(LanguageKey.KITS_GUI_PREVIEW_TEXT, "&aRight click to preview.");
defaults.put(LanguageKey.KITS_GUI_PREVIEW_STATS, "&6Global Stats");
+ defaults.put(LanguageKey.KITS_GUI_PREVIEW_PREFS, "&6Customize layout");
+ defaults.put(LanguageKey.KITS_GUI_PREFS_TITLE, "&6Customizing > &b%KIT%");
+ defaults.put(LanguageKey.KITS_GUI_PREFS_SAVE, "&6Save custom layout");
+ defaults.put(LanguageKey.KITS_GUI_PREFS_SAVED, "&6Custom layout saved!");
+ defaults.put(LanguageKey.KITS_GUI_PREFS_BACK, "&6Back to kit preview");
defaults.put(LanguageKey.KITS_GUI_PREVIEW_SELECT, "&aSelect Kit");
defaults.put(LanguageKey.KITS_GUI_PREVIEW_BACK, "&aBack to Kits");
defaults.put(LanguageKey.KITS_GUI_EDIT_SAVE, "&aSave Kit");
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageKey.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageKey.java
index 3b70834..466a557 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageKey.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/files/lang/LanguageKey.java
@@ -60,6 +60,11 @@ public enum LanguageKey {
KITS_GUI_PREVIEW_TITLE,
KITS_GUI_PREVIEW_TEXT,
KITS_GUI_PREVIEW_STATS,
+ KITS_GUI_PREVIEW_PREFS,
+ KITS_GUI_PREFS_TITLE,
+ KITS_GUI_PREFS_SAVE,
+ KITS_GUI_PREFS_SAVED,
+ KITS_GUI_PREFS_BACK,
KITS_GUI_PREVIEW_SELECT,
KITS_GUI_PREVIEW_BACK,
KITS_GUI_EDIT_SAVE,
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GUIListener.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GUIListener.java
index b28bab8..79f287e 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GUIListener.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GUIListener.java
@@ -51,7 +51,7 @@ public class GUIListener implements Listener {
KitPreviewInventory kitPreviewInventory = new KitPreviewInventory(54,
LanguageConfig.lang.get("KITS_GUI_PREVIEW_TITLE").replaceText(ComponentUtils.replaceConfig("%KIT%", displayName)),
plugin,
- displayName);
+ displayName, player);
kitPreviewInventory.openInventory(player);
return;
}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GetKit.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GetKit.java
index fec84ce..5a9791e 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GetKit.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/GetKit.java
@@ -1,5 +1,8 @@
package me.lifelessnerd.purekitpvp.kitCommand;
+import me.lifelessnerd.purekitpvp.PureKitPvP;
+import me.lifelessnerd.purekitpvp.database.KitDatabase;
+import me.lifelessnerd.purekitpvp.database.entities.PlayerKitPreferences;
import me.lifelessnerd.purekitpvp.files.KitConfig;
import me.lifelessnerd.purekitpvp.files.KitStatsConfig;
import me.lifelessnerd.purekitpvp.files.lang.LanguageConfig;
@@ -20,8 +23,11 @@ import org.bukkit.potion.PotionEffect;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class GetKit implements TabExecutor, Listener {
Plugin plugin;
@@ -94,13 +100,25 @@ public class GetKit implements TabExecutor, Listener {
for (PotionEffect effect : player.getActivePotionEffects())
player.removePotionEffect(effect.getType());
+ Map playerPrefs = new HashMap<>();
+ PureKitPvP pureKitPvP = (PureKitPvP) plugin;
+ KitDatabase db = pureKitPvP.getKitDatabase();
+ try {
+ if(db.hasEntry(player, kitNameArg)){
+ PlayerKitPreferences playerKitPreferences = db.getEntry(player, kitNameArg);
+ playerPrefs = playerKitPreferences.getPreferences();
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+
//Give items
for (int index = 0; index < kitItems.size(); index++) {
ItemStack item = kitItems.get(index);
if (item == null) {
item = new ItemStack(Material.AIR);
}
- player.getInventory().setItem(index, item);
+ player.getInventory().setItem(playerPrefs.getOrDefault(index, index), item);
}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/KitPreferencesInventory.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/KitPreferencesInventory.java
new file mode 100644
index 0000000..32dc6c3
--- /dev/null
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/KitPreferencesInventory.java
@@ -0,0 +1,150 @@
+package me.lifelessnerd.purekitpvp.kitCommand;
+
+import me.lifelessnerd.purekitpvp.AbstractInventory;
+import me.lifelessnerd.purekitpvp.PureKitPvP;
+import me.lifelessnerd.purekitpvp.database.KitDatabase;
+import me.lifelessnerd.purekitpvp.database.entities.PlayerKitPreferences;
+import me.lifelessnerd.purekitpvp.files.KitConfig;
+import me.lifelessnerd.purekitpvp.files.lang.LanguageConfig;
+import me.lifelessnerd.purekitpvp.files.lang.LanguageKey;
+import me.lifelessnerd.purekitpvp.utils.ComponentUtils;
+import net.kyori.adventure.text.Component;
+import org.bukkit.Material;
+import org.bukkit.NamespacedKey;
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.inventory.*;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.persistence.PersistentDataType;
+import org.bukkit.plugin.Plugin;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class KitPreferencesInventory extends AbstractInventory {
+ String kitName;
+ Player player;
+ KitDatabase db;
+ public KitPreferencesInventory(int size, Component title, Plugin plugin, String kitName, Player toBeShownPlayer) {
+ super(size, title, plugin);
+ this.kitName = kitName;
+ this.player = toBeShownPlayer;
+ PureKitPvP pureKitPvP = (PureKitPvP) this.plugin;
+ db = pureKitPvP.getKitDatabase();
+ initializeItems();
+ }
+
+ @Override
+ public void initializeItems() {
+ FileConfiguration fileConfiguration = KitConfig.get();
+ List kitItems = (List) fileConfiguration.get("kits." + kitName + ".contents");
+
+ Map playerPrefs = new HashMap<>();
+ try {
+ if(db.hasEntry(player, kitName)){
+ PlayerKitPreferences playerKitPreferences = db.getEntry(player, kitName);
+ playerPrefs = playerKitPreferences.getPreferences();
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+
+ for (int index = 0; index < kitItems.size(); index++) {
+ ItemStack item = kitItems.get(index);
+ if (item == null) continue;
+ ItemMeta meta = item.getItemMeta();
+ // Sets defaults indices as PDC - only after this we shift stuff around
+ meta.getPersistentDataContainer().set(new NamespacedKey(plugin, "KITS_GUI_PREFS_INDEX"), PersistentDataType.INTEGER, index);
+ item.setItemMeta(meta);
+
+ inv.setItem(playerPrefs.getOrDefault(index, index), item);
+ }
+
+ ItemStack redStainedGlass = new ItemStack(Material.RED_STAINED_GLASS_PANE, 1);
+ ItemMeta glassMeta = redStainedGlass.getItemMeta();
+ glassMeta.displayName(Component.text(""));
+ redStainedGlass.setItemMeta(glassMeta);
+
+ for (int i = 41; i < 54; i++) inv.setItem(i, redStainedGlass);
+
+ ItemStack greenConcrete = new ItemStack(Material.GREEN_CONCRETE, 1);
+ ItemMeta saveMeta = greenConcrete.getItemMeta();
+ saveMeta.displayName(LanguageConfig.lang.get(LanguageKey.KITS_GUI_PREFS_SAVE.toString()));
+ greenConcrete.setItemMeta(saveMeta);
+ inv.setItem(49, greenConcrete);
+
+ ItemStack arrow = new ItemStack(Material.ARROW, 1);
+ ItemMeta backMeta = arrow.getItemMeta();
+ backMeta.displayName(LanguageConfig.lang.get(LanguageKey.KITS_GUI_PREFS_BACK.toString()));
+ arrow.setItemMeta(backMeta);
+ inv.setItem(48, arrow);
+
+ }
+
+ @Override
+ public void onInventoryClickLogic(InventoryClickEvent e) {
+ if (e.getSlot() < 41){
+ e.setCancelled(false);
+ return;
+ }
+ if (e.getSlot() >= 41) { // red panes
+ e.setCancelled(true);
+ }
+ if (e.getSlot() == 48){ // back button
+ KitPreviewInventory kitPreviewInventory = new KitPreviewInventory(54,
+ LanguageConfig.lang.get("KITS_GUI_PREVIEW_TITLE").replaceText(ComponentUtils.replaceConfig("%KIT%", kitName)),
+ plugin,
+ kitName, player);
+ kitPreviewInventory.openInventory(player);
+ return;
+ }
+ if (e.getSlot() == 49) { // save icon
+
+ HashMap newPrefs = new HashMap<>();
+ // See changes in inventory
+ int index = 0;
+ for (ItemStack item : inv.getContents()){
+ if (index >= 41) break;
+ if (item == null) {
+ index++;
+ continue;
+ }
+ ItemMeta itemMeta = item.getItemMeta();
+ int oldIndex = itemMeta.getPersistentDataContainer().get(new NamespacedKey(plugin, "KITS_GUI_PREFS_INDEX"), PersistentDataType.INTEGER);
+ if (oldIndex != index){ // Change is different from standard!
+ System.out.println("change! item that was on " + oldIndex + " now on " + index);
+ newPrefs.put(oldIndex, index);
+ }
+ index++;
+ }
+
+ // Update db pref value
+ try {
+ db.updateEntry(player, kitName, newPrefs);
+ } catch(Exception ex){
+ throw new RuntimeException(ex);
+ }
+ player.sendMessage(LanguageConfig.lang.get(LanguageKey.KITS_GUI_PREFS_SAVED.toString()));
+ return;
+ }
+ e.setCancelled(true); // ensures no listeners are fighting
+ }
+
+ @EventHandler
+ public void onInventoryMove(InventoryClickEvent e){
+ System.out.println(e.getRawSlot());
+
+ if (!e.getView().getTopInventory().equals(inv)) return;
+ if (!e.getView().getBottomInventory().getType().equals(InventoryType.PLAYER)) return;
+
+ if (e.getRawSlot() >= 54){ // TODO
+ e.setCancelled(true);
+ }
+ }
+
+}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/KitPreviewInventory.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/KitPreviewInventory.java
index ef7504a..8a4c5e2 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/KitPreviewInventory.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitCommand/KitPreviewInventory.java
@@ -1,9 +1,14 @@
package me.lifelessnerd.purekitpvp.kitCommand;
import me.lifelessnerd.purekitpvp.AbstractInventory;
+import me.lifelessnerd.purekitpvp.PureKitPvP;
+import me.lifelessnerd.purekitpvp.database.KitDatabase;
+import me.lifelessnerd.purekitpvp.database.entities.PlayerKitPreferences;
import me.lifelessnerd.purekitpvp.files.KitConfig;
import me.lifelessnerd.purekitpvp.files.KitStatsConfig;
import me.lifelessnerd.purekitpvp.files.lang.LanguageConfig;
+import me.lifelessnerd.purekitpvp.files.lang.LanguageKey;
+import me.lifelessnerd.purekitpvp.utils.ComponentUtils;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import net.kyori.adventure.text.format.TextDecoration;
@@ -18,30 +23,45 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataType;
import org.bukkit.plugin.Plugin;
+import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class KitPreviewInventory extends AbstractInventory {
public String kitName;
+ KitDatabase db;
+ Player player;
- public KitPreviewInventory(int size, Component title, Plugin plugin, String kitName) {
+ public KitPreviewInventory(int size, Component title, Plugin plugin, String kitName, Player playerToBeShown) {
super(size, title, plugin);
this.kitName = kitName;
+ this.player = playerToBeShown;
+ PureKitPvP pureKitPvP = (PureKitPvP) this.plugin;
+ db = pureKitPvP.getKitDatabase();
initializeItems();
}
@Override
public void initializeItems() {
FileConfiguration fileConfiguration = KitConfig.get();
- System.out.println(kitName);
List kitItems = (List) fileConfiguration.get("kits." + kitName + ".contents");
+ Map playerPrefs = new HashMap<>();
+ try {
+ if(db.hasEntry(player, kitName)){
+ PlayerKitPreferences playerKitPreferences = db.getEntry(player, kitName);
+ playerPrefs = playerKitPreferences.getPreferences();
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+
for (int index = 0; index < kitItems.size(); index++) {
ItemStack item = kitItems.get(index);
- if (item == null) {
- item = new ItemStack(Material.AIR);
- }
- inv.setItem(index, item);
+ if (item == null) continue;
+ inv.setItem(playerPrefs.getOrDefault(index, index), item);
}
ItemStack redStainedGlass = new ItemStack(Material.RED_STAINED_GLASS_PANE, 1);
@@ -62,14 +82,22 @@ public class KitPreviewInventory extends AbstractInventory {
selectItem.setItemMeta(selectMeta);
inv.setItem(50, selectItem);
- ItemStack anvil = new ItemStack(Material.ANVIL, 1);
- ItemMeta anvilMeta = anvil.getItemMeta();
- anvilMeta.displayName(LanguageConfig.lang.get("KITS_GUI_PREVIEW_STATS"));
- anvilMeta.getPersistentDataContainer().set(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM"), PersistentDataType.STRING, "Stats");
+ ItemStack paper = new ItemStack(Material.PAPER, 1);
+ ItemMeta paperMeta = paper.getItemMeta();
+ paperMeta.displayName(LanguageConfig.lang.get("KITS_GUI_PREVIEW_STATS"));
+ paperMeta.getPersistentDataContainer().set(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM"), PersistentDataType.STRING, "Stats");
ArrayList lore2 = new ArrayList<>();
int kitChosen = KitStatsConfig.get().getInt(kitName);
lore2.add(Component.text("Times Chosen: ", NamedTextColor.AQUA).append(Component.text(kitChosen, NamedTextColor.GREEN)).decoration(TextDecoration.ITALIC, false));
- anvilMeta.lore(lore2);
+ paperMeta.lore(lore2);
+ paper.setItemMeta(paperMeta);
+ inv.setItem(51, paper);
+
+ ItemStack anvil = new ItemStack(Material.ANVIL, 1);
+ ItemMeta anvilMeta = anvil.getItemMeta();
+ anvilMeta.displayName(LanguageConfig.lang.get(LanguageKey.KITS_GUI_PREVIEW_PREFS.toString()));
+ anvilMeta.getPersistentDataContainer().set(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM"), PersistentDataType.STRING, "Edit");
+ anvilMeta.getPersistentDataContainer().set(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM_KIT"), PersistentDataType.STRING, kitName);
anvil.setItemMeta(anvilMeta);
inv.setItem(49, anvil);
@@ -87,12 +115,13 @@ public class KitPreviewInventory extends AbstractInventory {
ItemStack clickedItem = e.getCurrentItem();
Player player = (Player) e.getWhoClicked();
InventoryView inv = e.getView();
+ String kitName;
if (clickedItem.getItemMeta().getPersistentDataContainer().has(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM"))){
String pdcValue = clickedItem.getItemMeta().getPersistentDataContainer().get(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM"), PersistentDataType.STRING);
switch(pdcValue){
case "Select":
- String kitName = clickedItem.getItemMeta().getPersistentDataContainer().get(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM_KIT"), PersistentDataType.STRING);
+ kitName = clickedItem.getItemMeta().getPersistentDataContainer().get(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM_KIT"), PersistentDataType.STRING);
player.chat("/getkit " + kitName);
player.closeInventory();
break;
@@ -102,6 +131,15 @@ public class KitPreviewInventory extends AbstractInventory {
case "Back":
player.chat("/kit");
break;
+ case "Edit":
+ kitName = clickedItem.getItemMeta().getPersistentDataContainer().get(new NamespacedKey(plugin, "KITS_PREVIEW_GUI_ITEM_KIT"), PersistentDataType.STRING);
+ KitPreferencesInventory kitPreferencesInventory = new KitPreferencesInventory(54,
+ LanguageConfig.lang.get(LanguageKey.KITS_GUI_PREFS_TITLE.toString()).
+ replaceText(ComponentUtils.replaceConfig("%KIT%", kitName)).
+ decoration(TextDecoration.ITALIC, false),
+ plugin, kitName, player);
+ kitPreferencesInventory.openInventory(player);
+ break;
default:
break;
}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitadmin/EditKitInventory.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitadmin/EditKitInventory.java
index 9c27255..be20118 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitadmin/EditKitInventory.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/kitadmin/EditKitInventory.java
@@ -44,11 +44,11 @@ public class EditKitInventory extends AbstractInventory {
glassMeta.displayName(Component.text(""));
redStainedGlass.setItemMeta(glassMeta);
- for (int i = 45; i < 54; i++) inv.setItem(i, redStainedGlass);
+ for (int i = 41; i < 54; i++) inv.setItem(i, redStainedGlass);
ItemStack greenConcrete = new ItemStack(Material.GREEN_CONCRETE, 1);
ItemMeta saveMeta = greenConcrete.getItemMeta();
- saveMeta.displayName(LanguageConfig.lang.get("KITS_GUI_EDIT_SAVE"));
+ saveMeta.displayName(LanguageConfig.lang.get(LanguageKey.KITS_GUI_PREFS_SAVE.toString()));
saveMeta.getPersistentDataContainer().set(new NamespacedKey(plugin, "KITS_GUI_EDIT_ITEM"), PersistentDataType.STRING, "Save");
saveMeta.getPersistentDataContainer().set(new NamespacedKey(plugin, "KITS_GUI_EDIT_ITEM_KIT"), PersistentDataType.STRING, kitName);
greenConcrete.setItemMeta(saveMeta);
@@ -59,7 +59,7 @@ public class EditKitInventory extends AbstractInventory {
@Override
public void onInventoryClickLogic(InventoryClickEvent e) {
- if (e.getSlot() >= 45){ // red panes
+ if (e.getSlot() >= 41){ // red panes
e.setCancelled(true);
}
if (e.getSlot() == 49){ // save icon
@@ -68,7 +68,7 @@ public class EditKitInventory extends AbstractInventory {
ItemStack[] kitContents = inv.getContents();
int index = 0;
for (ItemStack item : inv.getContents()){
- if (index >= 45) {
+ if (index >= 41) {
kitContents[index] = null;
}
@@ -79,6 +79,7 @@ public class EditKitInventory extends AbstractInventory {
KitConfig.reload();
e.getWhoClicked().sendMessage(LanguageConfig.lang.get(LanguageKey.KITS_GUI_EDIT_SAVED.toString()));
+ inv.close();
}
diff --git a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java
index 953bd2a..d62e46b 100644
--- a/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java
+++ b/PureKitsFork/src/main/java/me/lifelessnerd/purekitpvp/sample.java
@@ -3,10 +3,17 @@ package me.lifelessnerd.purekitpvp;
import me.lifelessnerd.purekitpvp.files.lang.LanguageKey;
+import java.util.HashMap;
+import java.util.Map;
+
public class sample {
public static void main(String[] args) {
- System.out.println(String.valueOf(LanguageKey.SCOREBOARD_GLOBAL_LEVEL));
+ Map playerPrefs = new HashMap<>();
+ playerPrefs.put(0, 8);
+ playerPrefs.put(1, 7);
+
+ System.out.println(playerPrefs);
}