mirror of
https://github.com/StarWishsama/Slimefun4.git
synced 2024-09-20 11:45:51 +00:00
Merge pull request #1174 from WalshyDev/async-player-profile-fetch
Implement PlayerProfile async fetch
This commit is contained in:
commit
a2fe40cfe1
@ -7,6 +7,7 @@ import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem;
|
||||
import me.mrCookieSlime.Slimefun.api.PlayerProfile;
|
||||
import me.mrCookieSlime.Slimefun.api.Slimefun;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@ -114,9 +115,18 @@ public class LockedCategory extends Category {
|
||||
public boolean hasUnlocked(Player p) {
|
||||
PlayerProfile profile = PlayerProfile.get(p);
|
||||
|
||||
return hasUnlocked(p, profile);
|
||||
}
|
||||
|
||||
public boolean hasUnlocked(Player p, PlayerProfile profile) {
|
||||
for (Category category: parents) {
|
||||
for (SlimefunItem item: category.getItems()) {
|
||||
if (Slimefun.isEnabled(p, item, false) && Slimefun.hasPermission(p, item, false) && item.getResearch() != null && !profile.hasUnlocked(item.getResearch())) return false;
|
||||
if (Slimefun.isEnabled(p, item, false)
|
||||
&& Slimefun.hasPermission(p, item, false)
|
||||
&& item.getResearch() != null
|
||||
&& !profile.hasUnlocked(item.getResearch())
|
||||
)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.listeners.BackpackListener;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
@ -106,12 +107,7 @@ public class EnhancedCraftingTable extends MultiBlockMachine {
|
||||
if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
|
||||
int backpackID = PlayerProfile.get(p).createBackpack(size).getID();
|
||||
|
||||
ItemMeta im = adding.getItemMeta();
|
||||
List<String> lore = im.getLore();
|
||||
lore.set(line, lore.get(line).replace("<ID>", p.getUniqueId() + "#" + backpackID));
|
||||
im.setLore(lore);
|
||||
adding.setItemMeta(im);
|
||||
break;
|
||||
BackpackListener.setBackpackId(p, adding, line, backpackID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package me.mrCookieSlime.Slimefun.Objects.SlimefunItem.multiblocks;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.listeners.BackpackListener;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Effect;
|
||||
@ -112,12 +113,7 @@ public class MagicWorkbench extends MultiBlockMachine {
|
||||
if (adding.getItemMeta().getLore().get(line).equals(ChatColor.translateAlternateColorCodes('&', "&7ID: <ID>"))) {
|
||||
int backpackID = PlayerProfile.get(p).createBackpack(size).getID();
|
||||
|
||||
ItemMeta im = adding.getItemMeta();
|
||||
List<String> lore = im.getLore();
|
||||
lore.set(line, lore.get(line).replace("<ID>", p.getUniqueId() + "#" + backpackID));
|
||||
im.setLore(lore);
|
||||
adding.setItemMeta(im);
|
||||
break;
|
||||
BackpackListener.setBackpackId(p, adding, line, backpackID);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -74,6 +74,8 @@ public class SlimefunLocalization extends Localization {
|
||||
setDefaultMessage("messages.cannot-place" ,"&cYou cannot place that block there!");
|
||||
setDefaultMessage("messages.no-pvp" ,"&cYou cannot pvp in here!");
|
||||
setDefaultMessage("messages.radiation" ,"&4You have been exposed to deadly radiation! &cGet rid of the radioactive item or equip the complete hazmat suit!");
|
||||
setDefaultMessage("messages.opening-guide", "&bOpening guide, this may take a few seconds...");
|
||||
setDefaultMessage("messages.opening-backpack", "&bOpening backpack, this may take a few seconds...");
|
||||
|
||||
setDefaultMessage("machines.pattern-not-found", "&eSorry, I could not recognize this Pattern. Please place the Items in the correct Pattern into the Dispenser.");
|
||||
setDefaultMessage("machines.unknown-material", "&eSorry, I could not recognize the Item in my Dispenser. Please put something in that I know.");
|
||||
|
@ -175,7 +175,7 @@ public final class SlimefunGuide {
|
||||
menu.open(p);
|
||||
}
|
||||
|
||||
public static void openCredits(Player p, final ItemStack guide) {
|
||||
private static void openCredits(Player p, final ItemStack guide) {
|
||||
final ChestMenu menu = new ChestMenu("Credits");
|
||||
|
||||
menu.setEmptySlotsClickable(false);
|
||||
@ -239,23 +239,30 @@ public final class SlimefunGuide {
|
||||
}
|
||||
|
||||
public static void openCheatMenu(Player p) {
|
||||
openMainMenu(p, false, false, 1);
|
||||
openMainMenuAsync(p, false, false, 1);
|
||||
}
|
||||
|
||||
public static void openGuide(Player p, boolean book) {
|
||||
if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled")) return;
|
||||
if (!SlimefunPlugin.getWhitelist().getBoolean(p.getWorld().getName() + ".enabled-items.SLIMEFUN_GUIDE")) return;
|
||||
|
||||
if (!getHistory().containsKey(p.getUniqueId())) {
|
||||
openMainMenu(p, true, book, 1);
|
||||
}
|
||||
else {
|
||||
Object last = getLastEntry(p, false);
|
||||
|
||||
if (last == null)
|
||||
openMainMenuAsync(p, true, book, 1);
|
||||
else
|
||||
handleHistory(p, last, book, false);
|
||||
}
|
||||
|
||||
private static void openMainMenuAsync(final Player player, final boolean survival, final boolean book, final int selected_page) {
|
||||
if (!PlayerProfile.get(player, profile -> Slimefun.runSync(() -> openMainMenu(profile, survival, book, selected_page))))
|
||||
Slimefun.getLocal().sendMessage(player, "messages.opening-guide");
|
||||
}
|
||||
|
||||
public static void openMainMenu(final Player p, final boolean survival, final boolean book, final int selected_page) {
|
||||
private static void openMainMenu(final PlayerProfile profile, final boolean survival, final boolean book, final int selected_page) {
|
||||
Player p = Bukkit.getPlayer(profile.getUUID());
|
||||
if (p == null) return;
|
||||
|
||||
if (survival) {
|
||||
clearHistory(p.getUniqueId());
|
||||
}
|
||||
@ -305,7 +312,7 @@ public final class SlimefunGuide {
|
||||
tooltips.add(null);
|
||||
actions.add(null);
|
||||
}
|
||||
if (category instanceof LockedCategory && !((LockedCategory) category).hasUnlocked(p)) {
|
||||
if (category instanceof LockedCategory && !((LockedCategory) category).hasUnlocked(p, profile)) {
|
||||
StringBuilder parents = new StringBuilder(ChatColor.translateAlternateColorCodes('&', "&4&lLOCKED\n\n&7In order to unlock this Category,\n&7you need to unlock all Items from\n&7the following Categories first:\n"));
|
||||
|
||||
for (Category parent: ((LockedCategory) category).getParents()) {
|
||||
@ -444,7 +451,7 @@ public final class SlimefunGuide {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (((LockedCategory) category).hasUnlocked(p)) {
|
||||
else if (((LockedCategory) category).hasUnlocked(p, profile)) {
|
||||
menu.addItem(index, category.getItem());
|
||||
menu.addMenuClickHandler(index, (pl, slot, item, action) -> {
|
||||
openCategory(pl, category, survival, 1, book);
|
||||
@ -476,7 +483,7 @@ public final class SlimefunGuide {
|
||||
menu.addMenuClickHandler(46, (pl, slot, item, action) -> {
|
||||
int next = selected_page - 1;
|
||||
if (next < 1) next = finalPages;
|
||||
if (next != selected_page) openMainMenu(pl, survival, book, next);
|
||||
if (next != selected_page) openMainMenuAsync(pl, survival, book, next);
|
||||
return false;
|
||||
});
|
||||
|
||||
@ -484,7 +491,7 @@ public final class SlimefunGuide {
|
||||
menu.addMenuClickHandler(52, (pl, slot, item, action) -> {
|
||||
int next = selected_page + 1;
|
||||
if (next > finalPages) next = 1;
|
||||
if (next != selected_page) openMainMenu(pl, survival, book, next);
|
||||
if (next != selected_page) openMainMenuAsync(pl, survival, book, next);
|
||||
return false;
|
||||
});
|
||||
|
||||
@ -492,12 +499,12 @@ public final class SlimefunGuide {
|
||||
}
|
||||
}
|
||||
|
||||
public static String shorten(String string, String string2) {
|
||||
private static String shorten(String string, String string2) {
|
||||
if (ChatColor.stripColor(string + string2).length() > 19) return (string + ChatColor.stripColor(string2)).substring(0, 18) + "...";
|
||||
else return (string + ChatColor.stripColor(string2));
|
||||
}
|
||||
|
||||
public static void openCategory(final Player p, final Category category, final boolean survival, final int selected_page, final boolean book) {
|
||||
private static void openCategory(final Player p, final Category category, final boolean survival, final int selected_page, final boolean book) {
|
||||
if (category == null) return;
|
||||
|
||||
if (book && category.getItems().size() < 250) {
|
||||
@ -596,7 +603,7 @@ public final class SlimefunGuide {
|
||||
|
||||
@Override
|
||||
public void run(final Player p) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(SlimefunPlugin.instance, () -> openMainMenu(p, survival, true, 1), 1L);
|
||||
openMainMenuAsync(p, survival, true, 1);
|
||||
}
|
||||
|
||||
});
|
||||
@ -620,7 +627,7 @@ public final class SlimefunGuide {
|
||||
|
||||
menu.addItem(4, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back"));
|
||||
menu.addMenuClickHandler(4, (pl, slot, item, action) -> {
|
||||
openMainMenu(pl, survival, book, 1);
|
||||
openMainMenuAsync(pl, survival, book, 1);
|
||||
return false;
|
||||
});
|
||||
|
||||
@ -804,7 +811,7 @@ public final class SlimefunGuide {
|
||||
);
|
||||
|
||||
menu.addMenuClickHandler(0, (pl, slot, item118, action) -> {
|
||||
if (action.isShiftClicked()) openMainMenu(pl, true, false, 1);
|
||||
if (action.isShiftClicked()) openMainMenuAsync(pl, true, false, 1);
|
||||
else {
|
||||
Object last = getLastEntry(pl, true);
|
||||
handleHistory(pl, last, book, cheat);
|
||||
@ -816,7 +823,7 @@ public final class SlimefunGuide {
|
||||
else {
|
||||
menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu"));
|
||||
menu.addMenuClickHandler(0, (pl, slot, item, action) -> {
|
||||
openMainMenu(pl, true, book, 1);
|
||||
openMainMenuAsync(pl, true, book, 1);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
@ -841,7 +848,7 @@ public final class SlimefunGuide {
|
||||
return history == null || history.isEmpty() ? null: history.getLast();
|
||||
}
|
||||
|
||||
public static void displayItem(Player p, final ItemStack item, boolean addToHistory, final boolean book, final int page) {
|
||||
private static void displayItem(Player p, final ItemStack item, boolean addToHistory, final boolean book, final int page) {
|
||||
if (item == null || item.getType() == Material.AIR) return;
|
||||
|
||||
final SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
@ -916,7 +923,7 @@ public final class SlimefunGuide {
|
||||
if (history != null && history.size() > 1) {
|
||||
menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to previous Page", "&rShift + left Click: &7Go back to Main Menu"));
|
||||
menu.addMenuClickHandler(0, (pl, slot, itemstack, action) -> {
|
||||
if (action.isShiftClicked()) openMainMenu(p, true, book, 1);
|
||||
if (action.isShiftClicked()) openMainMenuAsync(p, true, book, 1);
|
||||
else {
|
||||
Object last = getLastEntry(pl, true);
|
||||
handleHistory(pl, last, book, false);
|
||||
@ -927,7 +934,7 @@ public final class SlimefunGuide {
|
||||
else {
|
||||
menu.addItem(0, new CustomItem(new ItemStack(Material.ENCHANTED_BOOK), "&7\u21E6 Back", "", "&rLeft Click: &7Go back to Main Menu"));
|
||||
menu.addMenuClickHandler(0, (pl, slot, itemstack, action) -> {
|
||||
openMainMenu(pl, true, book, 1);
|
||||
openMainMenuAsync(pl, true, book, 1);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
@ -1116,7 +1123,7 @@ public final class SlimefunGuide {
|
||||
return SlimefunPlugin.getUtilities().guideHistory;
|
||||
}
|
||||
|
||||
public static void clearHistory(UUID uuid) {
|
||||
private static void clearHistory(UUID uuid) {
|
||||
getHistory().remove(uuid);
|
||||
}
|
||||
}
|
||||
|
@ -9,12 +9,14 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import me.mrCookieSlime.CSCoreLibPlugin.Configuration.Config;
|
||||
@ -57,13 +59,7 @@ public final class PlayerProfile {
|
||||
}
|
||||
|
||||
private PlayerProfile(UUID uuid) {
|
||||
this.uuid = uuid;
|
||||
this.name = Bukkit.getOfflinePlayer(uuid).getName();
|
||||
cfg = new Config(new File("data-storage/Slimefun/Players/" + uuid.toString() + ".yml"));
|
||||
|
||||
for (Research research: Research.list()) {
|
||||
if (cfg.contains("researches." + research.getID())) researches.add(research);
|
||||
}
|
||||
this(Bukkit.getOfflinePlayer(uuid));
|
||||
}
|
||||
|
||||
public HashedArmorpiece[] getArmor() {
|
||||
@ -212,6 +208,10 @@ public final class PlayerProfile {
|
||||
sender.sendMessage(ChatColor.translateAlternateColorCodes('&', "&7Total XP Levels spent: &b" + levels));
|
||||
}
|
||||
|
||||
public Player getPlayer() {
|
||||
return Bukkit.getPlayer(getUUID());
|
||||
}
|
||||
|
||||
public static PlayerProfile fromUUID(UUID uuid) {
|
||||
PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(uuid);
|
||||
|
||||
@ -226,6 +226,14 @@ public final class PlayerProfile {
|
||||
return profile;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is now deprecated, use {@link #get(OfflinePlayer, Consumer)} instead
|
||||
*
|
||||
* @param p The player's profile you wish to retrieve
|
||||
* @return The PlayerProfile of this player
|
||||
* @deprecated Use {@link #get(OfflinePlayer, Consumer)}
|
||||
*/
|
||||
@Deprecated
|
||||
public static PlayerProfile get(OfflinePlayer p) {
|
||||
PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(p.getUniqueId());
|
||||
|
||||
@ -240,6 +248,28 @@ public final class PlayerProfile {
|
||||
return profile;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the PlayerProfile for a player asynchronously.
|
||||
*
|
||||
* @param p The player who's profile to retrieve
|
||||
* @param callback The callback with the PlayerProfile
|
||||
* @return If the player was cached or not.
|
||||
*/
|
||||
public static boolean get(OfflinePlayer p, Consumer<PlayerProfile> callback) {
|
||||
PlayerProfile profile = SlimefunPlugin.getUtilities().profiles.get(p.getUniqueId());
|
||||
if (profile != null) {
|
||||
callback.accept(profile);
|
||||
return true;
|
||||
}
|
||||
|
||||
Bukkit.getScheduler().runTaskAsynchronously(SlimefunPlugin.instance, () -> {
|
||||
PlayerProfile pp = new PlayerProfile(p);
|
||||
SlimefunPlugin.getUtilities().profiles.put(p.getUniqueId(), pp);
|
||||
callback.accept(pp);
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean isLoaded(UUID uuid) {
|
||||
return SlimefunPlugin.getUtilities().profiles.containsKey(uuid);
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
@ -323,4 +324,8 @@ public final class Slimefun {
|
||||
public static SlimefunLocalization getLocal() {
|
||||
return SlimefunPlugin.getLocal();
|
||||
}
|
||||
|
||||
public static void runSync(Runnable r) {
|
||||
Bukkit.getScheduler().runTask(SlimefunPlugin.instance, r);
|
||||
}
|
||||
}
|
@ -2,6 +2,8 @@ package me.mrCookieSlime.Slimefun.listeners;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import me.mrCookieSlime.Slimefun.Setup.SlimefunLocalization;
|
||||
import me.mrCookieSlime.Slimefun.api.SlimefunItemStack;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Sound;
|
||||
@ -81,65 +83,68 @@ public class BackpackListener implements Listener {
|
||||
@EventHandler
|
||||
public void onInteract(PlayerInteractEvent e) {
|
||||
if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
|
||||
ItemStack item = e.getItem();
|
||||
Player p = e.getPlayer();
|
||||
ItemStack item = e.getItem();
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(item);
|
||||
if (sfItem == null) return;
|
||||
|
||||
if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_SMALL, false)) {
|
||||
openBackpack(SlimefunItems.BACKPACK_SMALL, 9, e, p, item);
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_MEDIUM, false)) {
|
||||
openBackpack(SlimefunItems.BACKPACK_MEDIUM, 18, e, p, item);
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BACKPACK_LARGE, false)) {
|
||||
openBackpack(SlimefunItems.BACKPACK_LARGE, 27, e, p, item);
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.WOVEN_BACKPACK, false)) {
|
||||
openBackpack(SlimefunItems.WOVEN_BACKPACK, 36, e, p, item);
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.GILDED_BACKPACK, false)) {
|
||||
openBackpack(SlimefunItems.GILDED_BACKPACK, 45, e, p, item);
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.RADIANT_BACKPACK, false)) {
|
||||
openBackpack(SlimefunItems.RADIANT_BACKPACK, 54, e, p, item);
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.BOUND_BACKPACK, false)) {
|
||||
openBackpack(SlimefunItems.BOUND_BACKPACK, 36, e, p, item);
|
||||
}
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.COOLER, false)) {
|
||||
openBackpack(SlimefunItems.COOLER, 27, e, p, item);
|
||||
}
|
||||
// Surely this can be even simpler?
|
||||
if (sfItem.isItem(SlimefunItems.BACKPACK_SMALL))
|
||||
openBackpack(SlimefunItems.BACKPACK_SMALL, sfItem, 9, e, p);
|
||||
else if (sfItem.isItem(SlimefunItems.BACKPACK_MEDIUM))
|
||||
openBackpack(SlimefunItems.BACKPACK_MEDIUM, sfItem, 18, e, p);
|
||||
else if (sfItem.isItem(SlimefunItems.BACKPACK_LARGE))
|
||||
openBackpack(SlimefunItems.BACKPACK_LARGE, sfItem, 27, e, p);
|
||||
else if (sfItem.isItem(SlimefunItems.WOVEN_BACKPACK))
|
||||
openBackpack(SlimefunItems.WOVEN_BACKPACK, sfItem, 36, e, p);
|
||||
else if (sfItem.isItem(SlimefunItems.GILDED_BACKPACK))
|
||||
openBackpack(SlimefunItems.GILDED_BACKPACK, sfItem, 45, e, p);
|
||||
else if (sfItem.isItem(SlimefunItems.RADIANT_BACKPACK))
|
||||
openBackpack(SlimefunItems.RADIANT_BACKPACK, sfItem, 54, e, p);
|
||||
else if (sfItem.isItem(SlimefunItems.BOUND_BACKPACK))
|
||||
openBackpack(SlimefunItems.BOUND_BACKPACK, sfItem, 36, e, p);
|
||||
else if (sfItem.isItem(SlimefunItems.COOLER))
|
||||
openBackpack(SlimefunItems.COOLER, sfItem, 27, e, p);
|
||||
}
|
||||
}
|
||||
|
||||
private void openBackpack(ItemStack sfItem, int size, PlayerInteractEvent e, Player p, ItemStack item) {
|
||||
private void openBackpack(ItemStack item, SlimefunItem sfItem, int size, PlayerInteractEvent e, Player p) {
|
||||
e.setCancelled(true);
|
||||
|
||||
if (item.getAmount() == 1) {
|
||||
if (Slimefun.hasUnlocked(p, sfItem, true)) {
|
||||
PlayerProfile profile = PlayerProfile.get(p);
|
||||
|
||||
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(!SlimefunPlugin.getUtilities().backpack.containsValue(item)) {
|
||||
PlayerProfile.getBackpack(item).open(p);
|
||||
p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F);
|
||||
SlimefunPlugin.getUtilities().backpack.put(p.getUniqueId(), item);
|
||||
}
|
||||
else SlimefunPlugin.getLocal().sendMessage(p, "backpack.already-open", true);
|
||||
if (!PlayerProfile.get(p, profile -> openBackpack(item, profile, size)))
|
||||
Slimefun.getLocal().sendMessage(p, "messages.opening-backpack");
|
||||
}
|
||||
}
|
||||
else SlimefunPlugin.getLocal().sendMessage(p, "backpack.no-stack", true);
|
||||
}
|
||||
|
||||
private void openBackpack(ItemStack item, PlayerProfile profile, int size) {
|
||||
Player p = profile.getPlayer();
|
||||
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);
|
||||
|
||||
setBackpackId(p, item, line, backpack.getID());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!SlimefunPlugin.getUtilities().backpack.containsValue(item)) {
|
||||
p.playSound(p.getLocation(), Sound.ENTITY_HORSE_ARMOR, 1F, 1F);
|
||||
SlimefunPlugin.getUtilities().backpack.put(p.getUniqueId(), item);
|
||||
|
||||
Slimefun.runSync(() -> PlayerProfile.getBackpack(item).open(p));
|
||||
}
|
||||
else SlimefunPlugin.getLocal().sendMessage(p, "backpack.already-open", true);
|
||||
}
|
||||
|
||||
public static void setBackpackId(Player p, ItemStack item, int line, int id) {
|
||||
ItemMeta im = item.getItemMeta();
|
||||
List<String> lore = im.getLore();
|
||||
lore.set(line, lore.get(line).replace("<ID>", p.getUniqueId() + "#" + id));
|
||||
im.setLore(lore);
|
||||
item.setItemMeta(im);
|
||||
}
|
||||
}
|
||||
|
@ -210,6 +210,7 @@ public class ItemListener implements Listener {
|
||||
|
||||
final Player p = e.getPlayer();
|
||||
ItemStack item = e.getItem();
|
||||
SlimefunItem slimefunItem = SlimefunItem.getByItem(item);
|
||||
|
||||
if (SlimefunManager.isItemSimiliar(item, SlimefunGuide.getItem(SlimefunGuideLayout.BOOK), true)) {
|
||||
if (p.isSneaking()) SlimefunGuide.openSettings(p, item);
|
||||
@ -226,7 +227,7 @@ public class ItemListener implements Listener {
|
||||
else if (SlimefunManager.isItemSimiliar(item, SlimefunItems.DEBUG_FISH, true)) {
|
||||
// Ignore the debug fish in here
|
||||
}
|
||||
else if (Slimefun.hasUnlocked(p, item, true)) {
|
||||
else if (Slimefun.hasUnlocked(p, slimefunItem, true)) {
|
||||
for (ItemHandler handler : SlimefunItem.getHandlers("ItemInteractionHandler")) {
|
||||
if (((ItemInteractionHandler) handler).onRightClick(e, p, item)) return;
|
||||
}
|
||||
@ -249,8 +250,7 @@ public class ItemListener implements Listener {
|
||||
if (tool != null && tool.getType() != Material.AIR) {
|
||||
SlimefunItem sfItem = SlimefunItem.getByItem(tool);
|
||||
List<Integer> modes = ((MultiTool) sfItem).getModes();
|
||||
int index = 0;
|
||||
if (utilities.mode.containsKey(p.getUniqueId())) index = utilities.mode.get(p.getUniqueId());
|
||||
int index = utilities.mode.getOrDefault(p.getUniqueId(), 0);
|
||||
|
||||
if (!p.isSneaking()) {
|
||||
float charge = ItemEnergy.getStoredEnergy(item);
|
||||
|
Loading…
Reference in New Issue
Block a user