1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

Improved Backpacks Performance

This commit is contained in:
TheBusyBiscuit 2019-08-25 17:35:19 +02:00
parent d589002430
commit 2a3b446d15
7 changed files with 217 additions and 301 deletions

View File

@ -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.WitherAssembler;
import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.machines.XPCollector;
import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker; import me.mrCookieSlime.Slimefun.Objects.tasks.RainbowTicker;
import me.mrCookieSlime.Slimefun.api.Backpacks;
import me.mrCookieSlime.Slimefun.api.BlockStorage; import me.mrCookieSlime.Slimefun.api.BlockStorage;
import me.mrCookieSlime.Slimefun.api.PlayerProfile; import me.mrCookieSlime.Slimefun.api.PlayerProfile;
import me.mrCookieSlime.Slimefun.api.Slimefun; import me.mrCookieSlime.Slimefun.api.Slimefun;
@ -278,9 +277,11 @@ public class SlimefunSetup {
if (id.equals("")) { if (id.equals("")) {
for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) {
if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) { if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID();
ItemMeta im = adding.getItemMeta(); ItemMeta im = adding.getItemMeta();
List<String> lore = im.getLore(); List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", Backpacks.createBackpack(p, size))); lore.set(line, lore.get(line).replace("<ID>", p.getUniqueId() + "#" + backpackID));
im.setLore(lore); im.setLore(lore);
adding.setItemMeta(im); adding.setItemMeta(im);
break; break;
@ -1229,9 +1230,11 @@ public class SlimefunSetup {
if (id.equals("")) { if (id.equals("")) {
for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) { for (int line = 0; line < adding.getItemMeta().getLore().size(); line++) {
if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) { if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID();
ItemMeta im = adding.getItemMeta(); ItemMeta im = adding.getItemMeta();
List<String> lore = im.getLore(); List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", Backpacks.createBackpack(p, size))); lore.set(line, lore.get(line).replace("<ID>", p.getUniqueId() + "#" + backpackID));
im.setLore(lore); im.setLore(lore);
adding.setItemMeta(im); adding.setItemMeta(im);
break; break;

View File

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

View File

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

View File

@ -5,8 +5,13 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.UUID; 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.CSCoreLibPlugin.Configuration.Config;
import me.mrCookieSlime.Slimefun.Objects.Research; import me.mrCookieSlime.Slimefun.Objects.Research;
@ -27,6 +32,7 @@ public class PlayerProfile {
private boolean markedForDeletion = false; private boolean markedForDeletion = false;
private Set<Research> researches = new HashSet<>(); private Set<Research> researches = new HashSet<>();
private Map<Integer, BackpackInventory> backpacks = new HashMap<>();
private PlayerProfile(UUID uuid) { private PlayerProfile(UUID uuid) {
this.uuid = uuid; this.uuid = uuid;
@ -37,6 +43,10 @@ public class PlayerProfile {
} }
} }
protected Config getConfig() {
return cfg;
}
public UUID getUUID() { public UUID getUUID() {
return uuid; return uuid;
} }
@ -50,8 +60,11 @@ public class PlayerProfile {
} }
public void save() { public void save() {
cfg.save(); for (BackpackInventory backpack: backpacks.values()) {
backpack.save();
}
cfg.save();
dirty = false; dirty = false;
} }
@ -73,6 +86,7 @@ public class PlayerProfile {
} }
/** /**
* This Method will return all Researches that this Player has unlocked
* *
* @return A Hashset<Research> of all Researches this Player has unlocked * @return A Hashset<Research> of all Researches this Player has unlocked
*/ */
@ -80,10 +94,42 @@ public class PlayerProfile {
return researches; return researches;
} }
/**
* Call this method if the Player has left.
* The profile can then be removed from RAM.
*/
public void markForDeletion() { public void markForDeletion() {
this.markedForDeletion = true; 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) { public static PlayerProfile fromUUID(UUID uuid) {
PlayerProfile profile = profiles.get(uuid); PlayerProfile profile = profiles.get(uuid);
@ -106,4 +152,29 @@ public class PlayerProfile {
return profiles.values().iterator(); return profiles.values().iterator();
} }
public static BackpackInventory getBackpack(ItemStack item) {
if (item == null || !item.hasItemMeta() || !item.getItemMeta().hasLore()) return null;
Optional<Integer> 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;
}
}
} }

View File

@ -21,7 +21,7 @@ public class PlayerAutoSaver implements Runnable {
if (profile.isMarkedForDeletion()) iterator.remove(); if (profile.isMarkedForDeletion()) iterator.remove();
} }
System.out.println(players);
if (players > 0) { if (players > 0) {
System.out.println("[Slimefun] Auto-Saved Player Data for " + players + " Player(s)!"); System.out.println("[Slimefun] Auto-Saved Player Data for " + players + " Player(s)!");
} }

View File

@ -2,20 +2,9 @@ package me.mrCookieSlime.Slimefun.listeners;
import java.util.List; 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.ChatColor;
import org.bukkit.Sound;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
@ -28,6 +17,18 @@ import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; 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 class BackpackListener implements Listener {
public BackpackListener(SlimefunStartup plugin) { public BackpackListener(SlimefunStartup plugin) {
@ -37,9 +38,10 @@ public class BackpackListener implements Listener {
@EventHandler @EventHandler
public void onClose(InventoryCloseEvent e) { public void onClose(InventoryCloseEvent e) {
if (Variables.enchanting.containsKey(e.getPlayer().getUniqueId())) Variables.enchanting.remove(e.getPlayer().getUniqueId()); if (Variables.enchanting.containsKey(e.getPlayer().getUniqueId())) Variables.enchanting.remove(e.getPlayer().getUniqueId());
if (Variables.backpack.containsKey(e.getPlayer().getUniqueId())) { if (Variables.backpack.containsKey(e.getPlayer().getUniqueId())) {
((Player) e.getPlayer()).playSound(e.getPlayer().getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F); ((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()); 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 (e.getCurrentItem() != null && e.getCurrentItem().getType().toString().contains("SHULKER_BOX")) e.setCancelled(true);
else if (sfItem instanceof SlimefunBackpack) 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) { if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
ItemStack item = e.getItem(); ItemStack item = e.getItem();
Player p = e.getPlayer(); Player p = e.getPlayer();
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_SMALL, false)) { if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_SMALL, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.BACKPACK_SMALL, 9, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_MEDIUM, false)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_MEDIUM, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.BACKPACK_MEDIUM, 18, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_LARGE, false)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_LARGE, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.BACKPACK_LARGE, 27, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.WOVEN_BACKPACK, false)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.WOVEN_BACKPACK, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.WOVEN_BACKPACK, 36, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GILDED_BACKPACK, false)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GILDED_BACKPACK, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.GILDED_BACKPACK, 45, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RADIANT_BACKPACK, false)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RADIANT_BACKPACK, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.RADIANT_BACKPACK, 54, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.BOUND_BACKPACK, 36, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.COOLER, false)) { else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.COOLER, false)) {
e.setCancelled(true); openBackpack(SlimefunItems.COOLER, 27, e, p, item);
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: <ID>"))) {
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }
} }
} }
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: <ID>"))) {
BackpackInventory backpack = profile.createBackpack(size);
ItemMeta im = item.getItemMeta();
List<String> lore = im.getLore();
lore.set(line, lore.get(line).replace("<ID>", 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);
}
} }

View File

@ -1,10 +1,5 @@
package me.mrCookieSlime.Slimefun.listeners; 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.Material;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -16,6 +11,12 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionEffect; 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 class CoolerListener implements Listener {
public CoolerListener(SlimefunStartup plugin) { public CoolerListener(SlimefunStartup plugin) {
@ -28,9 +29,11 @@ public class CoolerListener implements Listener {
Player p = (Player) e.getEntity(); Player p = (Player) e.getEntity();
for (ItemStack item: p.getInventory().getContents()) { for (ItemStack item: p.getInventory().getContents()) {
if (SlimefunManager.isItemSimiliar(item, SlimefunItem.getItem("COOLER"), false)) { if (SlimefunManager.isItemSimiliar(item, SlimefunItem.getItem("COOLER"), false)) {
Inventory inv = Backpacks.getInventory(p, item); BackpackInventory backpack = PlayerProfile.getBackpack(item);
if (inv != null) { if (backpack != null) {
Inventory inv = backpack.getInventory();
ItemStack drink = null; ItemStack drink = null;
for (ItemStack i: inv.getContents()) { for (ItemStack i: inv.getContents()) {
if (i != null && i.getType() == Material.POTION && i.hasItemMeta()) { if (i != null && i.getType() == Material.POTION && i.hasItemMeta()) {
drink = i; drink = i;
@ -45,7 +48,7 @@ public class CoolerListener implements Listener {
p.setSaturation(6F); p.setSaturation(6F);
p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_DRINK, 1F, 1F); p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_DRINK, 1F, 1F);
inv.removeItem(drink); inv.removeItem(drink);
Backpacks.saveBackpack(inv, item); backpack.markDirty();
break; break;
} }
} }