From 2a3b446d151c20c4c65dd716dc83c9beffeaccd8 Mon Sep 17 00:00:00 2001 From: TheBusyBiscuit Date: Sun, 25 Aug 2019 17:35:19 +0200 Subject: [PATCH] Improved Backpacks Performance --- .../Slimefun/Setup/SlimefunSetup.java | 9 +- .../Slimefun/api/BackpackInventory.java | 71 +++++ .../mrCookieSlime/Slimefun/api/Backpacks.java | 85 ------ .../Slimefun/api/PlayerProfile.java | 75 ++++- .../Slimefun/autosave/PlayerAutoSaver.java | 2 +- .../Slimefun/listeners/BackpackListener.java | 257 ++++-------------- .../Slimefun/listeners/CoolerListener.java | 19 +- 7 files changed, 217 insertions(+), 301 deletions(-) create mode 100644 src/me/mrCookieSlime/Slimefun/api/BackpackInventory.java delete mode 100644 src/me/mrCookieSlime/Slimefun/api/Backpacks.java diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index fb502db09..71ef64beb 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -145,7 +145,6 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.TrashCan; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.WitherAssembler; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; -import me.mrCookieSlime.Slimefun.api.Backpacks; import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.Slimefun; @@ -278,9 +277,11 @@ public class SlimefunSetup { if (id.equals("")) { for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID(); + ItemMeta im = adding.getItemMeta(); List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + lore.set(line, lore.get(line).replace("", p.getUniqueId() + "#" + backpackID)); im.setLore(lore); adding.setItemMeta(im); break; @@ -1229,9 +1230,11 @@ public class SlimefunSetup { if (id.equals("")) { for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID(); + ItemMeta im = adding.getItemMeta(); List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, size))); + lore.set(line, lore.get(line).replace("", p.getUniqueId() + "#" + backpackID)); im.setLore(lore); adding.setItemMeta(im); break; diff --git a/src/me/mrCookieSlime/Slimefun/api/BackpackInventory.java b/src/me/mrCookieSlime/Slimefun/api/BackpackInventory.java new file mode 100644 index 000000000..efcb7c54d --- /dev/null +++ b/src/me/mrCookieSlime/Slimefun/api/BackpackInventory.java @@ -0,0 +1,71 @@ +package me.mrCookieSlime.Slimefun.api; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; + +public class BackpackInventory { + + private int id; + private int size; + private PlayerProfile profile; + private Config cfg; + private Inventory inventory; + + /** + * This constructor loads an existing Backpack + */ + protected BackpackInventory(PlayerProfile profile, int id) { + this(profile, id, profile.getConfig().getInt("backpacks." + id + ".size")); + + for (int i = 0; i < size; i++) { + inventory.setItem(i, cfg.getItem("backpacks." + id + ".contents." + i)); + } + } + + /** + * This constructor creates a new Backpack + */ + protected BackpackInventory(PlayerProfile profile, int id, int size) { + this.profile = profile; + this.id = id; + this.cfg = profile.getConfig(); + this.size = size; + + cfg.setValue("backpacks." + id + ".size", size); + profile.markDirty(); + + inventory = Bukkit.createInventory(null, size, "Backpack [" + size + " Slots]"); + } + + public int getID() { + return id; + } + + public int getSize() { + return size; + } + + public Inventory getInventory() { + return inventory; + } + + public void open(Player... players) { + for (Player p: players) { + p.openInventory(inventory); + } + } + + public void save() { + for (int i = 0; i < size; i++) { + cfg.setValue("backpacks." + id + ".contents." + i, inventory.getItem(i)); + } + } + + public void markDirty() { + profile.markDirty(); + } + +} diff --git a/src/me/mrCookieSlime/Slimefun/api/Backpacks.java b/src/me/mrCookieSlime/Slimefun/api/Backpacks.java deleted file mode 100644 index 7dd5e9ab7..000000000 --- a/src/me/mrCookieSlime/Slimefun/api/Backpacks.java +++ /dev/null @@ -1,85 +0,0 @@ -package me.mrCookieSlime.Slimefun.api; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.entity.Player; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; - -public class Backpacks { - - public static String createBackpack(Player p, int size) { - List ids = new ArrayList<>(); - Config cfg = new Config(new File("data-storage/Slimefun/Players/" + p.getUniqueId() + ".yml")); - for (int i = 0; i < 1000; i++) { - if (cfg.contains("backpacks." + i + ".size")) ids.add(i); - else break; - } - int id = ids.isEmpty() ? 0: ids.get(ids.size() - 1) + 1; - ids.add(id); - - cfg.setValue("backpacks." + id + ".size", size); - cfg.save(); - return p.getUniqueId() + "#" + id; - } - - public static void openBackpack(Player p, ItemStack item) { - Inventory inv = getInventory(p, item); - if (inv != null) p.openInventory(inv); - } - - public static Inventory getInventory(Player p, ItemStack item) { - if (item == null || !item.hasItemMeta() || !item.getItemMeta().hasLore()) return null; - int id = -1; - String uuid = ""; - for (String line: item.getItemMeta().getLore()) { - if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { - try { - id = Integer.parseInt(line.split("#")[1]); - uuid = line.split("#")[0].replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); - } catch(NumberFormatException x) { - } - } - } - - if (id >= 0) { - Config cfg = new Config(new File("data-storage/Slimefun/Players/" + uuid + ".yml")); - int size = cfg.getInt("backpacks." + id + ".size"); - Inventory inv = Bukkit.createInventory(null, size, "Backpack [" + size + " Slots]"); - for (int i = 0; i < size; i++) { - inv.setItem(i, cfg.getItem("backpacks." + id + ".contents." + i)); - } - return inv; - } - else return null; - } - - public static void saveBackpack(Inventory inv, ItemStack item) { - int id = -1; - String uuid = ""; - for (String line: item.getItemMeta().getLore()) { - if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { - try { - id = Integer.parseInt(line.split("#")[1]); - uuid = line.split("#")[0].replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); - } catch(NumberFormatException x) { - } - } - } - - if (id >= 0) { - Config cfg = new Config(new File("data-storage/Slimefun/Players/" + uuid + ".yml")); - for (int i = 0; i < inv.getContents().length; i++) { - cfg.setValue("backpacks." + id + ".contents." + i, inv.getContents()[i]); - } - cfg.save(); - } - } - -} diff --git a/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java b/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java index 2f429e56e..b1dca9d56 100644 --- a/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java +++ b/src/me/mrCookieSlime/Slimefun/api/PlayerProfile.java @@ -5,8 +5,13 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.UUID; +import java.util.stream.IntStream; + +import org.bukkit.ChatColor; +import org.bukkit.inventory.ItemStack; import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config; import me.mrCookieSlime.Slimefun.Objects.Research; @@ -27,6 +32,7 @@ public class PlayerProfile { private boolean markedForDeletion = false; private Set researches = new HashSet<>(); + private Map backpacks = new HashMap<>(); private PlayerProfile(UUID uuid) { this.uuid = uuid; @@ -37,6 +43,10 @@ public class PlayerProfile { } } + protected Config getConfig() { + return cfg; + } + public UUID getUUID() { return uuid; } @@ -50,8 +60,11 @@ public class PlayerProfile { } public void save() { + for (BackpackInventory backpack: backpacks.values()) { + backpack.save(); + } + cfg.save(); - dirty = false; } @@ -73,17 +86,50 @@ public class PlayerProfile { } /** + * This Method will return all Researches that this Player has unlocked * * @return A Hashset of all Researches this Player has unlocked */ public Set getResearches() { return researches; } - + + /** + * Call this method if the Player has left. + * The profile can then be removed from RAM. + */ public void markForDeletion() { this.markedForDeletion = true; } + /** + * Call this method if this Profile has unsaved changes. + */ + public void markDirty() { + this.dirty = true; + } + + public BackpackInventory createBackpack(int size) { + IntStream stream = IntStream.iterate(0, i -> i + 1).filter(i -> !cfg.contains("backpacks." + i + ".size")); + int id = stream.findFirst().getAsInt(); + + BackpackInventory backpack = new BackpackInventory(this, id, size); + backpacks.put(id, backpack); + + return backpack; + } + + public BackpackInventory getBackpack(int id) { + BackpackInventory backpack = backpacks.get(id); + + if (backpack != null) return backpack; + else { + backpack = new BackpackInventory(this, id); + backpacks.put(id, backpack); + return backpack; + } + } + public static PlayerProfile fromUUID(UUID uuid) { PlayerProfile profile = profiles.get(uuid); @@ -105,5 +151,30 @@ public class PlayerProfile { public static Iterator iterator() { return profiles.values().iterator(); } + + public static BackpackInventory getBackpack(ItemStack item) { + if (item == null || !item.hasItemMeta() || !item.getItemMeta().hasLore()) return null; + + Optional id = Optional.empty(); + String uuid = ""; + + for (String line: item.getItemMeta().getLore()) { + if (line.startsWith(ChatColor.translateAlternateColorCodes('&', "&7ID: ")) && line.contains("#")) { + try { + id = Optional.of(Integer.parseInt(line.split("#")[1])); + uuid = line.split("#")[0].replace(ChatColor.translateAlternateColorCodes('&', "&7ID: "), ""); + } catch(NumberFormatException x) { + return null; + } + } + } + + if (id.isPresent()) { + return PlayerProfile.fromUUID(UUID.fromString(uuid)).getBackpack(id.get()); + } + else { + return null; + } + } } diff --git a/src/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java b/src/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java index 7589ea5b9..3ccc999e6 100644 --- a/src/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java +++ b/src/me/mrCookieSlime/Slimefun/autosave/PlayerAutoSaver.java @@ -21,7 +21,7 @@ public class PlayerAutoSaver implements Runnable { if (profile.isMarkedForDeletion()) iterator.remove(); } - System.out.println(players); + if (players > 0) { System.out.println("[Slimefun] Auto-Saved Player Data for " + players + " Player(s)!"); } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java b/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java index f5680c5fc..5838f3bd9 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/BackpackListener.java @@ -2,20 +2,9 @@ package me.mrCookieSlime.Slimefun.listeners; import java.util.List; -import me.mrCookieSlime.Slimefun.Variables; -import me.mrCookieSlime.Slimefun.SlimefunStartup; -import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Setup.Messages; -import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; -import me.mrCookieSlime.Slimefun.api.Backpacks; -import me.mrCookieSlime.Slimefun.api.Slimefun; - import org.bukkit.ChatColor; -import org.bukkit.Sound; import org.bukkit.Material; +import org.bukkit.Sound; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -28,6 +17,18 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; +import me.mrCookieSlime.Slimefun.SlimefunStartup; +import me.mrCookieSlime.Slimefun.Variables; +import me.mrCookieSlime.Slimefun.Lists.SlimefunItems; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.Juice; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunBackpack; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Setup.Messages; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.BackpackInventory; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; +import me.mrCookieSlime.Slimefun.api.Slimefun; + public class BackpackListener implements Listener { public BackpackListener(SlimefunStartup plugin) { @@ -37,9 +38,10 @@ public class BackpackListener implements Listener { @EventHandler public void onClose(InventoryCloseEvent e) { if (Variables.enchanting.containsKey(e.getPlayer().getUniqueId())) Variables.enchanting.remove(e.getPlayer().getUniqueId()); + if (Variables.backpack.containsKey(e.getPlayer().getUniqueId())) { ((Player) e.getPlayer()).playSound(e.getPlayer().getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Backpacks.saveBackpack(e.getInventory(), Variables.backpack.get(e.getPlayer().getUniqueId())); + PlayerProfile.getBackpack(Variables.backpack.get(e.getPlayer().getUniqueId())).markDirty(); Variables.backpack.remove(e.getPlayer().getUniqueId()); } } @@ -71,11 +73,6 @@ public class BackpackListener implements Listener { } else if (e.getCurrentItem() != null && e.getCurrentItem().getType().toString().contains("SHULKER_BOX")) e.setCancelled(true); else if (sfItem instanceof SlimefunBackpack) e.setCancelled(true); - else if (SlimefunManager.isItemSimiliar(e.getCurrentItem(), SlimefunItems.VOIDBAG_SMALL, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimiliar(e.getCurrentItem(), SlimefunItems.VOIDBAG_MEDIUM, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimiliar(e.getCurrentItem(), SlimefunItems.VOIDBAG_BIG, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimiliar(e.getCurrentItem(), SlimefunItems.VOIDBAG_LARGE, false)) e.setCancelled(true); - else if (SlimefunManager.isItemSimiliar(e.getCurrentItem(), SlimefunItems.BOUND_VOIDBAG, false)) e.setCancelled(true); } } } @@ -85,207 +82,63 @@ public class BackpackListener implements Listener { if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) { ItemStack item = e.getItem(); Player p = e.getPlayer(); + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_SMALL, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.BACKPACK_SMALL, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 9))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.BACKPACK_SMALL, 9, e, p, item); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_MEDIUM, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.BACKPACK_MEDIUM, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 18))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.BACKPACK_MEDIUM, 18, e, p, item); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_LARGE, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.BACKPACK_LARGE, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 27))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.BACKPACK_LARGE, 27, e, p, item); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.WOVEN_BACKPACK, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.WOVEN_BACKPACK, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 36))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.WOVEN_BACKPACK, 36, e, p, item); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GILDED_BACKPACK, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.GILDED_BACKPACK, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 45))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.GILDED_BACKPACK, 45, e, p, item); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RADIANT_BACKPACK, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.RADIANT_BACKPACK, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 54))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.RADIANT_BACKPACK, 54, e, p, item); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.BOUND_BACKPACK, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 36))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.BOUND_BACKPACK, 36, e, p, item); } else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.COOLER, false)) { - e.setCancelled(true); - if (Slimefun.hasUnlocked(p, SlimefunItems.COOLER, true)) { - if (item.getAmount() == 1) { - for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { - if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { - ItemMeta im = item.getItemMeta(); - List lore = im.getLore(); - lore.set(line, lore.get(line).replace("", Backpacks.createBackpack(p, 27))); - im.setLore(lore); - item.setItemMeta(im); - break; - } - } - if(!Variables.backpack.containsValue(item)) - { - Backpacks.openBackpack(p, item); - p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); - Variables.backpack.put(p.getUniqueId(), item); - } - else Messages.local.sendTranslation(p, "backpack.already-open", true); - } - else Messages.local.sendTranslation(p, "backpack.no-stack", true); - } + openBackpack(SlimefunItems.COOLER, 27, e, p, item); } } } + private void openBackpack(ItemStack sfItem, int size, PlayerInteractEvent e, Player p, ItemStack item) { + e.setCancelled(true); + + if (item.getAmount() == 1) { + if (Slimefun.hasUnlocked(p, sfItem, true)) { + PlayerProfile profile = PlayerProfile.fromUUID(p.getUniqueId()); + + for (int line = 0; line < item.getItemMeta().getLore().size(); line++) { + if (item.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: "))) { + BackpackInventory backpack = profile.createBackpack(size); + + ItemMeta im = item.getItemMeta(); + List lore = im.getLore(); + lore.set(line, lore.get(line).replace("", p.getUniqueId() + "#" + backpack.getID())); + im.setLore(lore); + item.setItemMeta(im); + break; + } + } + + if(!Variables.backpack.containsValue(item)) { + PlayerProfile.getBackpack(item).open(p); + p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); + Variables.backpack.put(p.getUniqueId(), item); + } + else Messages.local.sendTranslation(p, "backpack.already-open", true); + } + } + else Messages.local.sendTranslation(p, "backpack.no-stack", true); + } + } diff --git a/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java b/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java index f9096726d..47cb0b4c9 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/CoolerListener.java @@ -1,10 +1,5 @@ package me.mrCookieSlime.Slimefun.listeners; -import me.mrCookieSlime.Slimefun.SlimefunStartup; -import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; -import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; -import me.mrCookieSlime.Slimefun.api.Backpacks; - import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; @@ -16,6 +11,12 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffect; +import me.mrCookieSlime.Slimefun.SlimefunStartup; +import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; +import me.mrCookieSlime.Slimefun.Setup.SlimefunManager; +import me.mrCookieSlime.Slimefun.api.BackpackInventory; +import me.mrCookieSlime.Slimefun.api.PlayerProfile; + public class CoolerListener implements Listener { public CoolerListener(SlimefunStartup plugin) { @@ -28,9 +29,11 @@ public class CoolerListener implements Listener { Player p = (Player) e.getEntity(); for (ItemStack item: p.getInventory().getContents()) { if (SlimefunManager.isItemSimiliar(item, SlimefunItem.getItem("COOLER"), false)) { - Inventory inv = Backpacks.getInventory(p, item); - if (inv != null) { + BackpackInventory backpack = PlayerProfile.getBackpack(item); + if (backpack != null) { + Inventory inv = backpack.getInventory(); ItemStack drink = null; + for (ItemStack i: inv.getContents()) { if (i != null && i.getType() == Material.POTION && i.hasItemMeta()) { drink = i; @@ -45,7 +48,7 @@ public class CoolerListener implements Listener { p.setSaturation(6F); p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_DRINK, 1F, 1F); inv.removeItem(drink); - Backpacks.saveBackpack(inv, item); + backpack.markDirty(); break; } }