From 29a6e3247dc61185ff2b3154fec8d62f1ce354d3 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Fri, 11 Nov 2022 06:44:18 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84GUI=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin/core/bukkit/HamsterCorePlugin.java | 27 +-------- .../plugin/core/bukkit/page/PageElement.java | 15 ----- .../bukkit/page/handler/PageableHandler.java | 34 +++++++++-- .../core/bukkit/util/ItemStackAdapter.java | 30 ++++++++++ .../src/main/resources/FixedPage.yml | 57 +++++++++++++++++++ .../src/main/resources/PageablePage.yml | 48 ++++++++++++++++ 6 files changed, 165 insertions(+), 46 deletions(-) create mode 100644 hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/ItemStackAdapter.java create mode 100644 hamster-core-bukkit/src/main/resources/FixedPage.yml create mode 100644 hamster-core-bukkit/src/main/resources/PageablePage.yml diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java index c17c7a8..6755977 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/HamsterCorePlugin.java @@ -9,15 +9,13 @@ import cn.hamster3.mc.plugin.core.bukkit.hook.VaultAPI; import cn.hamster3.mc.plugin.core.bukkit.listener.CallbackListener; import cn.hamster3.mc.plugin.core.bukkit.listener.DebugListener; import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener; -import cn.hamster3.mc.plugin.core.bukkit.util.BukkitSerializeUtils; +import cn.hamster3.mc.plugin.core.bukkit.util.ItemStackAdapter; import cn.hamster3.mc.plugin.core.common.constant.CoreConstantObjects; -import com.google.gson.*; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import org.bukkit.Bukkit; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.java.JavaPlugin; -import java.lang.reflect.Type; import java.util.logging.Logger; public class HamsterCorePlugin extends JavaPlugin { @@ -94,26 +92,3 @@ public class HamsterCorePlugin extends JavaPlugin { } } -class ItemStackAdapter implements JsonSerializer, JsonDeserializer { - public static final ItemStackAdapter INSTANCE = new ItemStackAdapter(); - - private ItemStackAdapter() { - } - - @Override - public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - if (json.isJsonNull()) { - return null; - } - return BukkitSerializeUtils.deserializeItemStack(json.getAsString()); - } - - @Override - public JsonElement serialize(ItemStack src, Type typeOfSrc, JsonSerializationContext context) { - String s = BukkitSerializeUtils.serializeItemStack(src); - if (s == null) { - return JsonNull.INSTANCE; - } - return new JsonPrimitive(s); - } -} \ No newline at end of file diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageElement.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageElement.java index 2ffe534..758361d 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageElement.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/PageElement.java @@ -1,20 +1,5 @@ package cn.hamster3.mc.plugin.core.bukkit.page; -import org.bukkit.entity.HumanEntity; -import org.bukkit.inventory.ItemStack; -import org.jetbrains.annotations.NotNull; - -import java.util.Map; - @SuppressWarnings("unused") public interface PageElement { - @NotNull - default ItemStack getDisplayItem(@NotNull HumanEntity player, @NotNull ItemStack defaultItem, @NotNull Map pageVariables) { - return defaultItem.clone(); - } - - default Map getVariables(@NotNull HumanEntity player, @NotNull Map pageVariables) { - return pageVariables; - } - } diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/handler/PageableHandler.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/handler/PageableHandler.java index 6f18736..c0d3098 100644 --- a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/handler/PageableHandler.java +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/page/handler/PageableHandler.java @@ -10,6 +10,7 @@ import org.bukkit.event.inventory.InventoryAction; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -106,10 +107,9 @@ public abstract class PageableHandler extends FixedPageHa E element = elements.get(elementIndex); elementSlot.put(buttonIndex, element); - ItemStack button = group.getButton(getElementButtonName(element)); - ItemStack displayItem = element.getDisplayItem(player, button == null ? EMPTY_STACK : button, variables); - initElementButton(element, displayItem, variables); - inventory.setItem(buttonIndex, displayItem); + String buttonName = getElementButtonName(element); + ItemStack buttonItem = group.getButton(buttonName); + initElementButton(buttonIndex, element, buttonItem, variables); } if (page == 0) { @@ -122,7 +122,31 @@ public abstract class PageableHandler extends FixedPageHa } } - public void initElementButton(@NotNull E element, @NotNull ItemStack displayItem, @NotNull Map variables) { + public void initElementButton(int index, @NotNull E element, @NotNull ItemStack stack, @NotNull Map variables) { + ItemMeta meta = stack.getItemMeta(); + if (meta == null) { + return; + } + if (meta.hasDisplayName()) { + String displayName = meta.getDisplayName(); + for (Map.Entry entry : variables.entrySet()) { + displayName = displayName.replace(entry.getKey(), entry.getValue()); + } + meta.setDisplayName(displayName); + } + List lore = meta.getLore(); + if (lore != null) { + for (int i = 0; i < lore.size(); i++) { + String s = lore.get(i); + for (Map.Entry entry : variables.entrySet()) { + s = s.replace(entry.getKey(), entry.getValue()); + } + lore.set(i, s); + } + meta.setLore(lore); + } + stack.setItemMeta(meta); + inventory.setItem(index, stack); } public void showPreviewPage() { diff --git a/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/ItemStackAdapter.java b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/ItemStackAdapter.java new file mode 100644 index 0000000..1f5881a --- /dev/null +++ b/hamster-core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/util/ItemStackAdapter.java @@ -0,0 +1,30 @@ +package cn.hamster3.mc.plugin.core.bukkit.util; + +import com.google.gson.*; +import org.bukkit.inventory.ItemStack; + +import java.lang.reflect.Type; + +public class ItemStackAdapter implements JsonSerializer, JsonDeserializer { + public static final ItemStackAdapter INSTANCE = new ItemStackAdapter(); + + private ItemStackAdapter() { + } + + @Override + public ItemStack deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + if (json.isJsonNull()) { + return null; + } + return BukkitSerializeUtils.deserializeItemStack(json.getAsString()); + } + + @Override + public JsonElement serialize(ItemStack src, Type typeOfSrc, JsonSerializationContext context) { + String s = BukkitSerializeUtils.serializeItemStack(src); + if (s == null) { + return JsonNull.INSTANCE; + } + return new JsonPrimitive(s); + } +} diff --git a/hamster-core-bukkit/src/main/resources/FixedPage.yml b/hamster-core-bukkit/src/main/resources/FixedPage.yml new file mode 100644 index 0000000..03f24fd --- /dev/null +++ b/hamster-core-bukkit/src/main/resources/FixedPage.yml @@ -0,0 +1,57 @@ +title: "&c固定页面" + +graphic: + - "####!####" + - "# 1 2 3 #" + - "#########" + +groups: + default: + '#': "barrier" + '1': "accept" + '2': "deny" + '3': "close" + '!': "info" + +sounds: + "default": "UI_BUTTON_CLICK" + "accept": "ENTITY_PLAYER_LEVELUP" + "deny": "BLOCK_ANVIL_HIT" + +buttons: + 'barrier': + ==: org.bukkit.inventory.ItemStack + type: STAINED_GLASS_PANE + damage: 4 + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§c屏障" + 'accept': + ==: org.bukkit.inventory.ItemStack + type: ARROW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§a同意" + 'deny': + ==: org.bukkit.inventory.ItemStack + type: BARRIER + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§c拒绝" + 'close': + ==: org.bukkit.inventory.ItemStack + type: REDSTONE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§c关闭" + 'info': + ==: org.bukkit.inventory.ItemStack + type: REDSTONE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§c页面信息展示" diff --git a/hamster-core-bukkit/src/main/resources/PageablePage.yml b/hamster-core-bukkit/src/main/resources/PageablePage.yml new file mode 100644 index 0000000..6fbaf9b --- /dev/null +++ b/hamster-core-bukkit/src/main/resources/PageablePage.yml @@ -0,0 +1,48 @@ +title: "&c分页页面" + +graphic: + - "#########" + - "# #" + - "# 11111 #" + - "# 11111 #" + - "# #" + - "<#######>" + +groups: + default: + '#': "barrier" + '1': "element" + +sounds: + "default": "UI_BUTTON_CLICK" + +buttons: + 'barrier': + ==: org.bukkit.inventory.ItemStack + type: STAINED_GLASS_PANE + damage: 4 + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§c屏障" + 'preview': + ==: org.bukkit.inventory.ItemStack + type: REDSTONE + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§c上一页" + 'next': + ==: org.bukkit.inventory.ItemStack + type: ARROW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§a下一页" + 'element': + ==: org.bukkit.inventory.ItemStack + type: ARROW + meta: + ==: ItemMeta + meta-type: UNSPECIFIC + display-name: "§a玩家信息"