Skip to content

Commit ec12313

Browse files
committed
Added separate Paper Lore Chat Editor & Item Name Editor
* This makes it possible to use `<font:'key'>` and other components inside lore and item names.
1 parent 3354fdb commit ec12313

File tree

3 files changed

+73
-2
lines changed

3 files changed

+73
-2
lines changed

src/main/java/me/wolfyscript/customcrafting/gui/item_creator/tabs/TabDisplayName.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@
3434
import me.wolfyscript.utilities.api.inventory.gui.button.buttons.ActionButton;
3535
import me.wolfyscript.utilities.api.inventory.gui.button.buttons.ChatInputButton;
3636
import me.wolfyscript.utilities.util.NamespacedKey;
37+
import net.kyori.adventure.text.minimessage.MiniMessage;
3738
import org.bukkit.Material;
3839
import org.bukkit.inventory.ItemStack;
40+
import org.bukkit.inventory.meta.ItemMeta;
3941

4042
public class TabDisplayName extends ItemCreatorTabVanilla {
4143

@@ -50,7 +52,15 @@ public void register(MenuItemCreator creator, WolfyUtilities api) {
5052
creator.registerButton(new ButtonOption(Material.NAME_TAG, this));
5153
new ChatInputButton.Builder<>(creator, KEY + ".set")
5254
.inputAction((guiHandler, player, s, strings) -> {
53-
guiHandler.getCustomCache().getItems().getItem().setDisplayName(BukkitComponentSerializer.legacy().serialize(api.getChat().getMiniMessage().deserialize(s)));
55+
if (creator.getCustomCrafting().isPaper()) {
56+
CustomItem customItem = guiHandler.getCustomCache().getItems().getItem();
57+
ItemMeta itemMeta = customItem.getItemStack().getItemMeta();
58+
// Need to use the non-relocated MiniMessage! TODO: v5.0 | No longer shade & relocate Adventure!
59+
itemMeta.displayName(MiniMessage.miniMessage().deserialize(s));
60+
customItem.setItemMeta(itemMeta);
61+
} else {
62+
guiHandler.getCustomCache().getItems().getItem().setDisplayName(BukkitComponentSerializer.legacy().serialize(api.getChat().getMiniMessage().deserialize(s)));
63+
}
5464
return false;
5565
}).state(state -> state.icon(Material.GREEN_CONCRETE).action((cache, guiHandler, player, guiInventory, i, event) -> {
5666
var chat = guiInventory.getWindow().getChat();

src/main/java/me/wolfyscript/customcrafting/gui/item_creator/tabs/TabLore.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public TabLore() {
5151

5252
@Override
5353
public void register(MenuItemCreator creator, WolfyUtilities api) {
54-
CollectionEditor<CCCache, String> loreChatEditor = ChatUtils.createLoreChatEditor(creator.getInventoryAPI());
54+
var loreChatEditor = creator.getCustomCrafting().isPaper() ? ChatUtils.createPaperLoreChatEditor(creator.getInventoryAPI()) : ChatUtils.createLoreChatEditor(creator.getInventoryAPI());
5555

5656
creator.registerButton(new ButtonOption(Material.WRITABLE_BOOK, this));
5757
creator.registerButton(new ChatInputButton<>(KEY + ".add", Material.WRITABLE_BOOK, (guiHandler, player, s, strings) -> {

src/main/java/me/wolfyscript/customcrafting/utils/ChatUtils.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import me.wolfyscript.utilities.api.chat.HoverEvent;
4040
import me.wolfyscript.utilities.api.inventory.gui.InventoryAPI;
4141
import me.wolfyscript.utilities.util.NamespacedKey;
42+
import net.kyori.adventure.text.Component;
4243
import org.bukkit.ChatColor;
4344
import org.bukkit.attribute.Attribute;
4445
import org.bukkit.attribute.AttributeModifier;
@@ -180,6 +181,66 @@ public static CollectionEditor<CCCache, String> createLoreChatEditor(InventoryAP
180181
itemMeta.setLore(lore);
181182
}
182183
cache.getItems().getItem().setItemMeta(itemMeta);
184+
}).setSendInputInfoMessages((guiHandler, player, cache) -> {
185+
var chat = invAPI.getWolfyUtilities().getChat();
186+
chat.sendMessage(player, chat.translated("msg.input.wui_command"));
187+
chat.sendMessage(player, chat.translated("msg.input.mini_message"));
188+
});
189+
}
190+
191+
public static CollectionEditor<CCCache, net.kyori.adventure.text.Component> createPaperLoreChatEditor(InventoryAPI<CCCache> invAPI) {
192+
var paperMiniMsg = net.kyori.adventure.text.minimessage.MiniMessage.miniMessage();
193+
return new CollectionEditor<CCCache, net.kyori.adventure.text.Component>(invAPI,
194+
(guiHandler, player, cache) -> {
195+
var itemMeta = cache.getItems().getItem().getItemMeta();
196+
return itemMeta != null && itemMeta.hasLore() ? itemMeta.lore() : List.of();
197+
},
198+
// This is quite inefficient! We need to convert to the shaded version of Adventure! TODO: v5.0 | No longer shade & relocate Adventure!
199+
(guiHandler, player, cache, line) -> miniM.deserialize(paperMiniMsg.serialize(line)),
200+
(guiHandler, player, cache, msg, args) -> paperMiniMsg.deserialize(msg)
201+
).onAdd((guiHandler, player, cache, index, entry) -> {
202+
var itemMeta = cache.getItems().getItem().getItemMeta();
203+
List<Component> lore = itemMeta.lore();
204+
if (lore == null) {
205+
lore = new ArrayList<>();
206+
}
207+
if (index >= 0) {
208+
lore.add(index, entry);
209+
} else {
210+
lore.add(entry);
211+
}
212+
itemMeta.lore(lore);
213+
cache.getItems().getItem().setItemMeta(itemMeta);
214+
}).onRemove((guiHandler, player, cache, index, entry) -> {
215+
var itemMeta = cache.getItems().getItem().getItemMeta();
216+
List<Component> lore = itemMeta.lore();
217+
if (lore != null) {
218+
lore.remove(index);
219+
itemMeta.lore(lore);
220+
}
221+
cache.getItems().getItem().setItemMeta(itemMeta);
222+
}).onMove((guiHandler, player, cache, fromIndex, toIndex) -> {
223+
var itemMeta = cache.getItems().getItem().getItemMeta();
224+
List<Component> lore = itemMeta.lore();
225+
if (lore != null) {
226+
Component toPrevEntry = lore.get(toIndex);
227+
lore.set(toIndex, lore.get(fromIndex));
228+
lore.set(fromIndex, toPrevEntry);
229+
itemMeta.lore(lore);
230+
}
231+
cache.getItems().getItem().setItemMeta(itemMeta);
232+
}).onEdit((guiHandler, player, cache, index, previousEntry, newEntry) -> {
233+
var itemMeta = cache.getItems().getItem().getItemMeta();
234+
List<Component> lore = itemMeta.lore();
235+
if (lore != null) {
236+
lore.set(index, newEntry);
237+
itemMeta.lore(lore);
238+
}
239+
cache.getItems().getItem().setItemMeta(itemMeta);
240+
}).setSendInputInfoMessages((guiHandler, player, cache) -> {
241+
var chat = invAPI.getWolfyUtilities().getChat();
242+
chat.sendMessage(player, chat.translated("msg.input.wui_command"));
243+
chat.sendMessage(player, chat.translated("msg.input.mini_message"));
183244
});
184245
}
185246

0 commit comments

Comments
 (0)