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:
parent
d589002430
commit
2a3b446d15
@ -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: <ID>"))) {
|
||||
int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID();
|
||||
|
||||
ItemMeta im = adding.getItemMeta();
|
||||
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);
|
||||
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: <ID>"))) {
|
||||
int backpackID = PlayerProfile.fromUUID(p.getUniqueId()).createBackpack(size).getID();
|
||||
|
||||
ItemMeta im = adding.getItemMeta();
|
||||
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);
|
||||
adding.setItemMeta(im);
|
||||
break;
|
||||
|
71
src/me/mrCookieSlime/Slimefun/api/BackpackInventory.java
Normal file
71
src/me/mrCookieSlime/Slimefun/api/BackpackInventory.java
Normal 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();
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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<Research> researches = new HashSet<>();
|
||||
private Map<Integer, BackpackInventory> 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() {
|
||||
cfg.save();
|
||||
for (BackpackInventory backpack: backpacks.values()) {
|
||||
backpack.save();
|
||||
}
|
||||
|
||||
cfg.save();
|
||||
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
|
||||
*/
|
||||
@ -80,10 +94,42 @@ public class PlayerProfile {
|
||||
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);
|
||||
|
||||
@ -106,4 +152,29 @@ public class PlayerProfile {
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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)!");
|
||||
}
|
||||
|
@ -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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
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: <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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user