9
0
mirror of https://github.com/HibiscusMC/HMCCosmetics.git synced 2026-01-04 15:41:45 +00:00

Add ability for lock names and lore #45

This commit is contained in:
LoJoSho
2023-01-24 19:23:03 -06:00
parent caf168d29d
commit 53163feb60
3 changed files with 90 additions and 17 deletions

View File

@@ -7,6 +7,7 @@ import com.hibiscusmc.hmccosmetics.gui.type.Type;
import com.hibiscusmc.hmccosmetics.gui.type.Types;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import com.hibiscusmc.hmccosmetics.user.CosmeticUsers;
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
import com.hibiscusmc.hmccosmetics.util.misc.Adventure;
import com.hibiscusmc.hmccosmetics.util.misc.Placeholder;
@@ -137,8 +138,6 @@ public class Menu {
MessagesUtil.sendDebugMessages("something went wrong! " + item);
continue;
}
ItemStack originalItem = item.clone();
item = updateLore(player, item);
Type type = null;
@@ -147,6 +146,9 @@ public class Menu {
if (Types.isType(typeId)) type = Types.getType(typeId);
}
ItemStack originalItem = item.clone();
item = updateLore(user, item, type, config);
GuiItem guiItem = ItemBuilder.from(item).asGuiItem();
Type finalType = type;
@@ -155,7 +157,7 @@ public class Menu {
if (finalType != null) finalType.run(user, config, clickType);
for (int i : slots) {
gui.updateItem(i, updateLore(player, originalItem.clone()));
gui.updateItem(i, updateLore(user, originalItem.clone(), finalType, config));
MessagesUtil.sendDebugMessages("Updated slot " + i);
}
});
@@ -190,21 +192,9 @@ public class Menu {
return slots;
}
private ItemStack updateLore(Player player, ItemStack itemStack) {
private ItemStack updateLore(CosmeticUser user, ItemStack itemStack, Type type, ConfigurationNode config) {
if (itemStack.hasItemMeta()) {
List<String> processedLore = new ArrayList<>();
if (PAPIHook.isPAPIEnabled()) {
if (itemStack.getItemMeta().hasLore()) {
for (String loreLine : itemStack.getItemMeta().getLore()) {
processedLore.add(PlaceholderAPI.setPlaceholders(player, loreLine));
}
}
}
ItemMeta itemMeta = itemStack.getItemMeta();
itemMeta.setLore(processedLore);
itemStack.setItemMeta(itemMeta);
itemStack.setItemMeta(type.setLore(user, config, itemStack.getItemMeta()));
}
return itemStack;
}

View File

@@ -5,14 +5,20 @@ import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetics;
import com.hibiscusmc.hmccosmetics.gui.action.Actions;
import com.hibiscusmc.hmccosmetics.gui.special.DyeMenu;
import com.hibiscusmc.hmccosmetics.gui.type.Type;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import com.hibiscusmc.hmccosmetics.util.MessagesUtil;
import com.hibiscusmc.hmccosmetics.util.misc.StringUtils;
import com.hibiscusmc.hmccosmetics.util.misc.Utils;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.meta.ItemMeta;
import org.spongepowered.configurate.ConfigurationNode;
import org.spongepowered.configurate.serialize.SerializationException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class TypeCosmetic extends Type {
@@ -73,4 +79,63 @@ public class TypeCosmetic extends Type {
user.updateCosmetic(cosmetic.getSlot());
}
@Override
public ItemMeta setLore(CosmeticUser user, ConfigurationNode config, ItemMeta itemMeta) {
List<String> processedLore = new ArrayList<>();
if (config.node("cosmetic").virtual()) return processLoreLines(user, itemMeta);;
String cosmeticName = config.node("cosmetic").getString();
Cosmetic cosmetic = Cosmetics.getCosmetic(cosmeticName);
if (cosmetic == null) {
return processLoreLines(user, itemMeta);
}
if (user.canEquipCosmetic(cosmetic)) {
return processLoreLines(user, itemMeta);
} else {
ConfigurationNode itemConfig = config.node("item");
if (itemConfig.virtual()) return itemMeta;
if (itemConfig.node("locked-name").virtual() && itemConfig.node("locked-name").virtual()) {
return processLoreLines(user, itemMeta);
}
try {
itemMeta.getLore().clear();
List<String> lockedLore = Utils.replaceIfNull(itemConfig.node("locked-lore").getList(String.class),
new ArrayList<String>()).
stream().map(StringUtils::parseStringToString).collect(Collectors.toList());
if (PAPIHook.isPAPIEnabled()) {
String lockedName = StringUtils.parseStringToString(Utils.replaceIfNull(itemConfig.node("locked-name").getString(), ""));
itemMeta.setDisplayName(PlaceholderAPI.setPlaceholders(user.getPlayer(), lockedName));
if (itemMeta.hasLore()) {
for (String loreLine : lockedLore) {
processedLore.add(PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine));
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
itemMeta.setLore(processedLore);
return itemMeta;
}
private ItemMeta processLoreLines(CosmeticUser user, ItemMeta itemMeta) {
List<String> processedLore = new ArrayList<>();
if (PAPIHook.isPAPIEnabled()) {
if (itemMeta.hasLore()) {
for (String loreLine : itemMeta.getLore()) {
processedLore.add(PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine));
}
}
}
itemMeta.setLore(processedLore);
return itemMeta;
}
}

View File

@@ -2,8 +2,11 @@ package com.hibiscusmc.hmccosmetics.gui.type.types;
import com.hibiscusmc.hmccosmetics.gui.action.Actions;
import com.hibiscusmc.hmccosmetics.gui.type.Type;
import com.hibiscusmc.hmccosmetics.hooks.PAPIHook;
import com.hibiscusmc.hmccosmetics.user.CosmeticUser;
import me.clip.placeholderapi.PlaceholderAPI;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.meta.ItemMeta;
import org.spongepowered.configurate.ConfigurationNode;
import org.spongepowered.configurate.serialize.SerializationException;
@@ -48,6 +51,21 @@ public class TypeEmpty extends Type {
}
}
@Override
public ItemMeta setLore(CosmeticUser user, ConfigurationNode config, ItemMeta itemMeta) {
List<String> processedLore = new ArrayList<>();
if (PAPIHook.isPAPIEnabled()) {
if (itemMeta.hasLore()) {
for (String loreLine : itemMeta.getLore()) {
processedLore.add(PlaceholderAPI.setPlaceholders(user.getPlayer(), loreLine));
}
}
}
return itemMeta;
}
// That's it! Now, add it as a static in another one of your classes (such as your main class) and you are good to go.
// If you need help with that, check the Types class.
}