From 5aba39948f58d962eed236e47e389f667c6bee04 Mon Sep 17 00:00:00 2001 From: Ethan Bacurio Date: Mon, 7 Oct 2024 20:52:39 -0600 Subject: [PATCH 1/3] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1f5fbf9..e2eb719 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![](https://www.spigotmc.org/attachments/asset-4-png.679568/) +![](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FDaCb7lTXGFkT8XKPSg62%2Fuploads%2F7dP2oyXS2s5oc3AoU6KA%2FAsset%204.png?alt=media&token=fb70ddc2-4a5f-4f20-93b9-dff1aa3bf801) # CommandPrompter [![](https://ci.cyr1en.com/job/CommandPrompter/badge/icon)](https://ci.cyr1en.com/job/CommandPrompter) [![](https://img.shields.io/badge/GitBook-documentation-brightgreen?logo=gitbook)](https://cyr1en.gitbook.io/commandprompter/) @@ -45,7 +45,7 @@ cd CommandPrompter/

This project owes a huge thanks to GitBook's fantastic Open Source License and their amazing platform for creating beautiful and accessible documentation. Their dedication to open source and ease-of-use has been invaluable to this project's success!

- +

Lithium Hosting's invaluable support by providing a server to facilitate development. Their dedication to open source and the developer community has been instrumental in making this project possible.

From 1bc5d21de19d39f4b30c2c042743391c57bfbba4 Mon Sep 17 00:00:00 2001 From: Ethan Bacurio Date: Sun, 10 Nov 2024 13:32:02 -0700 Subject: [PATCH 2/3] Update gradle.yml --- .github/workflows/gradle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 20475fd..f6497b3 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -25,7 +25,7 @@ jobs: - name: Build with Gradle run: ./gradlew clean build - name: Upload artifact - uses: actions/upload-artifact@v2.3.1 + uses: actions/upload-artifact@v4.4.3 with: name: CommandPrompter path: build/libs From 63308b0be50af6c6ae448d8c9e0814727ce7ad77 Mon Sep 17 00:00:00 2001 From: Catnies Date: Thu, 21 Nov 2024 14:56:48 +0800 Subject: [PATCH 3/3] enhance anvil prompter, support hideTooltips! --- build.gradle | 4 +- .../commandprompter/config/PromptConfig.java | 37 ++++++++++++-- .../prompt/prompts/AnvilPrompt.java | 49 +++++++++++++++++-- .../commandprompter/util/VersionUtil.java | 40 +++++++++++++++ 4 files changed, 122 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/cyr1en/commandprompter/util/VersionUtil.java diff --git a/build.gradle b/build.gradle index d2e77bf..fc41d04 100644 --- a/build.gradle +++ b/build.gradle @@ -74,11 +74,11 @@ dependencies { implementation "dev.jorel:commandapi-bukkit-shade:9.6.1" implementation 'de.rapha149.signgui:signgui:2.4.2' - compileOnly 'me.clip:placeholderapi:2.11.2' + compileOnly 'me.clip:placeholderapi:2.11.6' compileOnly "net.kyori:adventure-text-serializer-legacy:4.17.0" compileOnly "net.kyori:adventure-text-serializer-plain:4.17.0" compileOnly 'com.palmergames.bukkit.towny:towny:0.100.3.0' - compileOnly "org.spigotmc:spigot-api:1.21-R0.1-SNAPSHOT" + compileOnly "org.spigotmc:spigot-api:1.21.3-R0.1-SNAPSHOT" compileOnly 'com.github.LeonMangler:SuperVanish:6.2.18-3' compileOnly 'de.hexaoxi:carbonchat-api:3.0.0-beta.26' compileOnly 'com.github.mbax:VanishNoPacket:3.22' diff --git a/src/main/java/com/cyr1en/commandprompter/config/PromptConfig.java b/src/main/java/com/cyr1en/commandprompter/config/PromptConfig.java index 9fc66ac..6daf198 100644 --- a/src/main/java/com/cyr1en/commandprompter/config/PromptConfig.java +++ b/src/main/java/com/cyr1en/commandprompter/config/PromptConfig.java @@ -152,10 +152,14 @@ public record PromptConfig( "Enable-Title - Show the first line of the prompt", "(if with {br}) as title of Anvil GUI", "", - "Item - The item to place on the Anvil GUI", + "Item - The Left item to place on the Anvil GUI", "", "Enchanted - Do you want the item enchanted?", "", + "ResultItem - The Result item to place on the Anvil GUI", + "", + "Hide-Tooltips - Hide tooltips of item (1.21.2 OR ABOVE)", + "", "Custom-Title - If title is enabled, and if custom", "title is not empty, CommandPrompter will use this instead", "", @@ -174,20 +178,47 @@ public record PromptConfig( @NodeDefault("") String promptMessage, + @ConfigNode @NodeName("AnvilGUI.Item.Material") @NodeDefault("Paper") String anvilItem, + @ConfigNode + @NodeName("AnvilGUI.Item.HideTooltips") + @NodeDefault("false") + boolean itemHideTooltips, + @ConfigNode @NodeName("AnvilGUI.Item.Custom-Model-Data") @NodeDefault("0") int itemCustomModelData, @ConfigNode - @NodeName("AnvilGUI.Enchanted") + @NodeName("AnvilGUI.Item.Enchanted") + @NodeDefault("false") + boolean itemAnvilEnchanted, + + + @ConfigNode + @NodeName("AnvilGUI.ResultItem.Material") + @NodeDefault("Paper") + String anvilResultItem, + + @ConfigNode + @NodeName("AnvilGUI.ResultItem.HideTooltips") + @NodeDefault("false") + boolean resultItemHideTooltips, + + @ConfigNode + @NodeName("AnvilGUI.ResultItem.Custom-Model-Data") + @NodeDefault("0") + int resultItemCustomModelData, + + @ConfigNode + @NodeName("AnvilGUI.ResultItem.Enchanted") @NodeDefault("false") - boolean anvilEnchanted, + boolean resultItemAnvilEnchanted, // ============================== Text Prompt ============================== @ConfigNode diff --git a/src/main/java/com/cyr1en/commandprompter/prompt/prompts/AnvilPrompt.java b/src/main/java/com/cyr1en/commandprompter/prompt/prompts/AnvilPrompt.java index a012980..d462865 100644 --- a/src/main/java/com/cyr1en/commandprompter/prompt/prompts/AnvilPrompt.java +++ b/src/main/java/com/cyr1en/commandprompter/prompt/prompts/AnvilPrompt.java @@ -28,6 +28,7 @@ import com.cyr1en.commandprompter.prompt.PromptContext; import com.cyr1en.commandprompter.prompt.PromptParser; import com.cyr1en.commandprompter.util.Util; +import com.cyr1en.commandprompter.util.VersionUtil; import net.wesjd.anvilgui.AnvilGUI; import org.bukkit.ChatColor; import org.bukkit.Material; @@ -54,10 +55,11 @@ public AnvilPrompt(CommandPrompter plugin, PromptContext context, public void sendPrompt() { List parts = Arrays.asList(getPrompt().split("\\{br}")); var item = makeItem(parts); - makeAnvil(parts, item).open((Player) getContext().getSender()); + var resultItem = makeResultItem(parts); + makeAnvil(parts, item, resultItem).open((Player) getContext().getSender()); } - private AnvilGUI.Builder makeAnvil(List parts, ItemStack item) { + private AnvilGUI.Builder makeAnvil(List parts, ItemStack item, ItemStack resultItem) { var isComplete = new AtomicBoolean(false); var builder = getBuilder(isComplete); builder.onClose(p -> { @@ -76,6 +78,7 @@ private AnvilGUI.Builder makeAnvil(List parts, ItemStack item) { builder.title(title); } builder.itemLeft(item); + builder.itemOutput(resultItem); builder.plugin(getPlugin()); return builder; } @@ -110,7 +113,7 @@ private ItemStack makeItem(List parts) { var item = new ItemStack(Util.getCheckedMaterial(getPlugin().getPromptConfig().anvilItem(), Material.PAPER)); var meta = item.getItemMeta(); getPlugin().getPluginLogger().debug("ItemMeta: " + meta); - if (getPlugin().getPromptConfig().anvilEnchanted()) { + if (getPlugin().getPromptConfig().itemAnvilEnchanted()) { Objects.requireNonNull(meta).addEnchant(Enchantment.LURE, 1, true); meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); } @@ -125,6 +128,46 @@ private ItemStack makeItem(List parts) { if (integerData != 0) meta.setCustomModelData(integerData); + // set hide tool tips + if (VersionUtil.isAtOrAbove("1.21.2")){ + boolean hiddenTooltips = getPlugin().getPromptConfig().itemHideTooltips(); + meta.setHideTooltip(hiddenTooltips); + } + + item.setItemMeta(meta); + return item; + } + + private ItemStack makeResultItem(List parts) { + var item = new ItemStack(Util.getCheckedMaterial(getPlugin().getPromptConfig().anvilResultItem(), Material.PAPER)); + var meta = item.getItemMeta(); + getPlugin().getPluginLogger().debug("ResultItemMeta: " + meta); + + // set enchantment glow + if (getPlugin().getPromptConfig().resultItemAnvilEnchanted()) { + Objects.requireNonNull(meta).addEnchant(Enchantment.LURE, 1, true); + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS); + } + + // hide attributes + Objects.requireNonNull(meta).addItemFlags(ItemFlag.HIDE_ATTRIBUTES); + + meta.setDisplayName(parts.get(0)); + + if (parts.size() > 1) + meta.setLore(parts.subList(1, parts.size()).stream().map(this::color).toList()); + + // set custom model data + var integerData = getPlugin().getPromptConfig().resultItemCustomModelData(); + if (integerData != 0) + meta.setCustomModelData(integerData); + + // set hide tool tips + if (VersionUtil.isAtOrAbove("1.21.2")){ + boolean hiddenTooltips = getPlugin().getPromptConfig().resultItemHideTooltips(); + meta.setHideTooltip(hiddenTooltips); + } + item.setItemMeta(meta); return item; } diff --git a/src/main/java/com/cyr1en/commandprompter/util/VersionUtil.java b/src/main/java/com/cyr1en/commandprompter/util/VersionUtil.java new file mode 100644 index 0000000..a422b93 --- /dev/null +++ b/src/main/java/com/cyr1en/commandprompter/util/VersionUtil.java @@ -0,0 +1,40 @@ +package com.cyr1en.commandprompter.util; + +import org.bukkit.Bukkit; + +public class VersionUtil { + + public static boolean isAtOrAbove(String targetVersion) { + // "CraftBukkit version git-Spigot-093165d-8cd8197 (MC: 1.16.5)" + String versionInfo = Bukkit.getServer().getVersion(); + String currentVersion = extractMinecraftVersion(versionInfo); + + return compareVersions(currentVersion, targetVersion) >= 0; + } + + // get Minecraft Version, " (MC: 1.16.5)" -> "1.16.5" + private static String extractMinecraftVersion(String versionInfo) { + int startIndex = versionInfo.indexOf("(MC: ") + 5; + int endIndex = versionInfo.indexOf(")", startIndex); + return versionInfo.substring(startIndex, endIndex).trim(); + } + + // Compare two versions, return 1 if currentVersion is greater than targetVersion, 0 if equal, -1 if less than + private static int compareVersions(String currentVersion, String targetVersion) { + String[] currentParts = currentVersion.split("\\."); + String[] targetParts = targetVersion.split("\\."); + + int length = Math.max(currentParts.length, targetParts.length); + for (int i = 0; i < length; i++) { + int currentPart = i < currentParts.length ? Integer.parseInt(currentParts[i]) : 0; + int targetPart = i < targetParts.length ? Integer.parseInt(targetParts[i]) : 0; + + if (currentPart > targetPart) { + return 1; + } else if (currentPart < targetPart) { + return -1; + } + } + return 0; + } +}