Add Adventure Component support for GUIs

This commit is contained in:
ceze88 2024-07-10 19:05:46 +02:00
parent 363ff47b34
commit 2fda84aad9
5 changed files with 246 additions and 10 deletions

View File

@ -11,8 +11,11 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import net.kyori.adventure.title.Title;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.Plugin;
@ -174,6 +177,10 @@ public class AdventureUtils {
}
private static void setItemName(ItemStack item, Component name) {
if (name == null) {
return;
}
ItemMeta meta = item.getItemMeta();
if (meta == null) {
return;
@ -193,6 +200,9 @@ public class AdventureUtils {
}
private static void setItemLore(ItemStack item, Component... lore) {
if (lore == null || lore.length == 0) {
return;
}
ItemMeta meta = item.getItemMeta();
if (meta == null) return;

View File

@ -1,5 +1,6 @@
package com.craftaro.core.gui;
import com.craftaro.core.chat.AdventureUtils;
import com.craftaro.core.compatibility.ServerVersion;
import com.craftaro.core.gui.events.GuiClickEvent;
import com.craftaro.core.gui.events.GuiCloseEvent;
@ -14,6 +15,7 @@ import com.craftaro.core.gui.methods.Pagable;
import com.craftaro.core.utils.ItemUtils;
import com.cryptomorin.xseries.XMaterial;
import com.cryptomorin.xseries.XSound;
import net.kyori.adventure.text.Component;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
@ -280,6 +282,11 @@ public class Gui {
return this;
}
public Gui setTitle(Component title) {
setTitle(AdventureUtils.toLegacy(title));
return this;
}
public int getRows() {
return this.rows;
}

View File

@ -1,10 +1,14 @@
package com.craftaro.core.gui;
import com.craftaro.core.chat.AdventureUtils;
import com.craftaro.core.compatibility.CompatibleMaterial;
import com.craftaro.core.locale.Message;
import com.cryptomorin.xseries.XMaterial;
import net.kyori.adventure.text.Component;
import org.bukkit.ChatColor;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Arrays;
@ -99,6 +103,7 @@ public class GuiUtils {
return newLore;
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, String title, String... lore) {
ItemStack item = mat.parseItem();
ItemMeta meta = item.getItemMeta();
@ -118,6 +123,11 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(XMaterial mat, Component title, Component... lore) {
return createButtonItem(mat, 1, title, lore);
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, int amount, String title, String... lore) {
ItemStack item = mat.parseItem();
item.setAmount(amount);
@ -139,6 +149,19 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(XMaterial mat, int amount, Component title, Component... lore) {
ItemStack item = mat.parseItem();
if (item == null) {
throw new IllegalArgumentException("Invalid material: " + mat);
}
item.setAmount(amount);
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack createButtonItem(ItemStack from, String title, String... lore) {
ItemStack item = from.clone();
ItemMeta meta = item.getItemMeta();
@ -158,6 +181,7 @@ public class GuiUtils {
return item;
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, String title, List<String> lore) {
ItemStack item = mat.parseItem();
ItemMeta meta = item.getItemMeta();
@ -177,6 +201,11 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(XMaterial mat, Component title, List<Component> lore) {
return createButtonItem(mat, 1, title, lore);
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, int amount, String title, List<String> lore) {
ItemStack item = mat.parseItem();
item.setAmount(amount);
@ -198,6 +227,19 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(XMaterial mat, int amount, Component title, List<Component> lore) {
ItemStack item = mat.parseItem();
if (item == null) {
throw new IllegalArgumentException("Invalid material: " + mat);
}
item.setAmount(amount);
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack createButtonItem(ItemStack from, String title, List<String> lore) {
ItemStack item = from.clone();
ItemMeta meta = item.getItemMeta();
@ -217,6 +259,15 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(ItemStack from, Component title, List<Component> lore) {
ItemStack item = from.clone();
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, String[] lore) {
ItemStack item = mat.parseItem();
ItemMeta meta = item.getItemMeta();
@ -237,6 +288,7 @@ public class GuiUtils {
return item;
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, int amount, String[] lore) {
ItemStack item = mat.parseItem();
item.setAmount(amount);
@ -259,6 +311,18 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(XMaterial mat, int amount, Component... lore) {
ItemStack item = mat.parseItem();
if (item == null) {
throw new IllegalArgumentException("Invalid material: " + mat);
}
item.setAmount(amount);
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack createButtonItem(ItemStack from, String[] lore) {
ItemStack item = from.clone();
ItemMeta meta = item.getItemMeta();
@ -279,7 +343,15 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(XMaterial mat, List<String> lore) {
public static ItemStack createButtonItem(ItemStack from, Component... lore) {
ItemStack item = from.clone();
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, List<String> lore, String... unused) {
ItemStack item = mat.parseItem();
ItemMeta meta = item.getItemMeta();
@ -299,7 +371,12 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(XMaterial mat, int amount, List<String> lore) {
public static ItemStack createButtonItem(XMaterial mat, List<Component> lore) {
return createButtonItem(mat, 1, lore);
}
@Deprecated
public static ItemStack createButtonItem(XMaterial mat, int amount, List<String> lore, String... unused) {
ItemStack item = mat.parseItem();
item.setAmount(amount);
ItemMeta meta = item.getItemMeta();
@ -320,7 +397,19 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(ItemStack from, List<String> lore) {
public static ItemStack createButtonItem(XMaterial mat, int amount, List<Component> lore) {
ItemStack item = mat.parseItem();
if (item == null) {
throw new IllegalArgumentException("Invalid material: " + mat);
}
item.setAmount(amount);
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack createButtonItem(ItemStack from, List<String> lore, String... unused) {
ItemStack item = from.clone();
ItemMeta meta = item.getItemMeta();
@ -340,6 +429,14 @@ public class GuiUtils {
return item;
}
public static ItemStack createButtonItem(ItemStack from, List<Component> lore) {
ItemStack item = from.clone();
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack updateItem(ItemStack item, String title, String... lore) {
ItemMeta meta = item.getItemMeta();
@ -358,6 +455,14 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItem(ItemStack item, Component title, Component... lore) {
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack updateItemName(ItemStack item, String title) {
ItemMeta meta = item.getItemMeta();
@ -369,6 +474,13 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItemName(ItemStack item, Component title) {
AdventureUtils.formatItemName(item, title);
return item;
}
@Deprecated
public static ItemStack updateItemLore(ItemStack item, String... lore) {
ItemMeta meta = item.getItemMeta();
@ -385,7 +497,14 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItemLore(ItemStack item, List<String> lore) {
public static ItemStack updateItemLore(ItemStack item, Component... lore) {
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack updateItemLore(ItemStack item, List<String> lore, String... unused) {
ItemMeta meta = item.getItemMeta();
if (meta != null) {
@ -401,6 +520,13 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItemLore(ItemStack item, List<Component> lore) {
AdventureUtils.formatItemLore(item, lore);
return item;
}
@Deprecated
public static ItemStack updateItem(ItemStack item, XMaterial matTo, String title, String... lore) {
if (!matTo.isSimilar(item)) {
item = matTo.parseItem();
@ -423,6 +549,22 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItem(ItemStack item, XMaterial matTo, Component title, Component... lore) {
if (!matTo.isSimilar(item)) {
item = matTo.parseItem();
}
ItemMeta meta = item.getItemMeta();
if (meta != null) {
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
}
return item;
}
@Deprecated
public static ItemStack updateItem(ItemStack item, ItemStack to, String title, String... lore) {
if (!CompatibleMaterial.getMaterial(item.getType()).get().isSimilar(to)) {
item = to.clone();
@ -445,6 +587,22 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItem(ItemStack item, ItemStack to, Component title, Component... lore) {
if (!CompatibleMaterial.getMaterial(item.getType()).get().isSimilar(to)) {
item = to.clone();
}
ItemMeta meta = item.getItemMeta();
if (meta != null) {
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
}
return item;
}
@Deprecated
public static ItemStack updateItem(ItemStack item, String title, List<String> lore) {
ItemMeta meta = item.getItemMeta();
@ -463,6 +621,18 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItem(ItemStack item, Component title, List<Component> lore) {
ItemMeta meta = item.getItemMeta();
if (meta != null) {
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
}
return item;
}
@Deprecated
public static ItemStack updateItem(ItemStack item, XMaterial matTo, String title, List<String> lore) {
if (!matTo.isSimilar(item)) {
item = matTo.parseItem();
@ -485,6 +655,22 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItem(ItemStack item, XMaterial matTo, Component title, List<Component> lore) {
if (!matTo.isSimilar(item)) {
item = matTo.parseItem();
}
ItemMeta meta = item.getItemMeta();
if (meta != null) {
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
}
return item;
}
@Deprecated
public static ItemStack updateItem(ItemStack item, ItemStack to, String title, List<String> lore) {
if (!CompatibleMaterial.getMaterial(item.getType()).get().isSimilar(to)) {
item = to.clone();
@ -506,4 +692,27 @@ public class GuiUtils {
return item;
}
public static ItemStack updateItem(ItemStack item, ItemStack to, Component title, List<Component> lore) {
if (!CompatibleMaterial.getMaterial(item.getType()).get().isSimilar(to)) {
item = to.clone();
}
ItemMeta meta = item.getItemMeta();
if (meta != null) {
AdventureUtils.formatItemName(item, title);
AdventureUtils.formatItemLore(item, lore);
}
return item;
}
public static ItemStack createButtonItem(XMaterial material, Message title) {
return createButtonItem(material, title.getMessage());
}
public static ItemStack createButtonItem(XMaterial material, Message title, Message lore) {
return createButtonItem(material, title.getMessage(), lore.getMessage());
}
}

View File

@ -1,5 +1,6 @@
package com.craftaro.core.lootables.gui;
import com.craftaro.core.chat.AdventureUtils;
import com.craftaro.core.compatibility.CompatibleMaterial;
import com.craftaro.core.gui.AnvilGui;
import com.craftaro.core.gui.Gui;
@ -275,10 +276,13 @@ public class GuiLootEditor extends Gui {
int i = 9 * 5;
for (Loot loot : this.loot.getChildLoot()) {
ItemStack item = loot.getMaterial() == null
? XMaterial.BARRIER.parseItem()
: GuiUtils.createButtonItem(loot.getMaterial(), null,
TextUtils.formatText("&6Left click &7to edit"),
TextUtils.formatText("&6Right click &7to destroy"));
? XMaterial.BARRIER.parseItem() :
GuiUtils.createButtonItem(loot.getMaterial(), null,
Arrays.asList(
AdventureUtils.formatComponent("&6Left click &7to edit"),
AdventureUtils.formatComponent("&6Right click &7to destroy")
)
);
setButton(i, item,
(event) -> {

View File

@ -1,5 +1,6 @@
package com.craftaro.core.lootables.gui;
import com.craftaro.core.chat.AdventureUtils;
import com.craftaro.core.gui.AnvilGui;
import com.craftaro.core.gui.Gui;
import com.craftaro.core.gui.GuiUtils;
@ -12,6 +13,8 @@ import com.cryptomorin.xseries.XMaterial;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
import java.util.Arrays;
public class GuiLootableEditor extends Gui {
private final LootManager lootManager;
private final Lootable lootable;
@ -65,8 +68,11 @@ public class GuiLootableEditor extends Gui {
ItemStack item = loot.getMaterial() == null
? XMaterial.BARRIER.parseItem()
: GuiUtils.createButtonItem(loot.getMaterial(), null,
TextUtils.formatText("&6Left click &7to edit"),
TextUtils.formatText("&6Right click &7to destroy"));
Arrays.asList(
AdventureUtils.formatComponent("&6Left click &7to edit"),
AdventureUtils.formatComponent("&6Right click &7to destroy")
)
);
setButton(i, item,
(event) -> {