From e48be6ba2095067fa54fd1b2382ac161515d68f7 Mon Sep 17 00:00:00 2001 From: hyperdefined Date: Mon, 4 Aug 2025 13:29:26 -0400 Subject: [PATCH] hyperlib demo --- pom.xml | 24 +++---- .../java/lol/hyper/toolstats/ToolStats.java | 69 +++++++++--------- .../toolstats/commands/CommandToolStats.java | 3 +- .../hyper/toolstats/events/AnvilEvent.java | 1 - .../lol/hyper/toolstats/events/CraftItem.java | 2 +- .../hyper/toolstats/events/CreativeEvent.java | 2 +- .../hyper/toolstats/events/EntityDeath.java | 1 - .../hyper/toolstats/events/GenerateLoot.java | 2 +- .../hyper/toolstats/events/InventoryOpen.java | 2 +- .../hyper/toolstats/events/PickupItem.java | 2 +- .../hyper/toolstats/events/PlayerFish.java | 2 +- .../hyper/toolstats/events/PlayerJoin.java | 2 +- .../hyper/toolstats/events/VillagerTrade.java | 2 +- .../lol/hyper/toolstats/tools/ItemLore.java | 4 +- .../lol/hyper/toolstats/tools/TokenData.java | 3 +- .../hyper/toolstats/tools/UUIDDataType.java | 54 -------------- .../toolstats/tools/config/ConfigTools.java | 70 +------------------ 17 files changed, 61 insertions(+), 184 deletions(-) delete mode 100644 src/main/java/lol/hyper/toolstats/tools/UUIDDataType.java diff --git a/pom.xml b/pom.xml index 92d65c0..d1bfbb3 100644 --- a/pom.xml +++ b/pom.xml @@ -64,12 +64,8 @@ - org.bstats - lol.hyper.toolstats.bstats - - - lol.hyper.githubreleaseapi - lol.hyper.toolstats.updater + lol.hyper.hyperlib + lol.hyper.toolstats.hyperlib @@ -99,6 +95,10 @@ papermc https://repo.papermc.io/repository/maven-public/ + + jitpack.io + https://jitpack.io + @@ -109,15 +109,9 @@ provided - org.bstats - bstats-bukkit - 3.1.0 - compile - - - lol.hyper - github-release-api - 1.0.5 + com.github.hyperdefined + hyperlib + 1.0.2 compile diff --git a/src/main/java/lol/hyper/toolstats/ToolStats.java b/src/main/java/lol/hyper/toolstats/ToolStats.java index 4857234..ef9040b 100644 --- a/src/main/java/lol/hyper/toolstats/ToolStats.java +++ b/src/main/java/lol/hyper/toolstats/ToolStats.java @@ -17,15 +17,17 @@ package lol.hyper.toolstats; -import lol.hyper.githubreleaseapi.GitHubRelease; -import lol.hyper.githubreleaseapi.GitHubReleaseAPI; -import lol.hyper.githubreleaseapi.ReleaseNotFoundException; +import lol.hyper.hyperlib.HyperLib; +import lol.hyper.hyperlib.bstats.bStats; +import lol.hyper.hyperlib.releases.hangar.HangarRelease; +import lol.hyper.hyperlib.releases.modrinth.ModrinthPlugin; +import lol.hyper.hyperlib.releases.modrinth.ModrinthRelease; +import lol.hyper.hyperlib.utils.TextUtils; import lol.hyper.toolstats.commands.CommandToolStats; import lol.hyper.toolstats.events.*; import lol.hyper.toolstats.tools.*; import lol.hyper.toolstats.tools.config.ConfigTools; import lol.hyper.toolstats.tools.config.ConfigUpdater; -import org.bstats.bukkit.Metrics; import org.bukkit.Bukkit; import org.bukkit.NamespacedKey; import org.bukkit.configuration.file.YamlConfiguration; @@ -33,7 +35,6 @@ import org.bukkit.inventory.ShapedRecipe; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; -import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.logging.Logger; @@ -152,9 +153,19 @@ public final class ToolStats extends JavaPlugin { public TokenData tokenData; public AnvilEvent anvilEvent; public PrepareCraft prepareCraft; + public HyperLib hyperLib; + public TextUtils textUtils; @Override public void onEnable() { + hyperLib = new HyperLib(this); + hyperLib.setup(); + + bStats bstats = new bStats(hyperLib, 14110); + bstats.setup(); + + textUtils = new TextUtils(hyperLib); + if (!configFile.exists()) { this.saveResource("config.yml", true); logger.info("Copying default config!"); @@ -225,8 +236,27 @@ public final class ToolStats extends JavaPlugin { this.getCommand("toolstats").setExecutor(commandToolStats); - new Metrics(this, 14110); - Bukkit.getAsyncScheduler().runNow(this, scheduledTask -> checkForUpdates()); + Bukkit.getAsyncScheduler().runNow(this, scheduledTask -> { + ModrinthPlugin modrinthPlugin = new ModrinthPlugin("oBZj9E15"); + modrinthPlugin.get(); + + ModrinthRelease release = modrinthPlugin.getReleaseByVersion(this.getPluginMeta().getVersion()); + if (release == null) { + logger.warning("You are running a version not published."); + } else { + int buildsBehind = modrinthPlugin.buildsVersionsBehind(release); + if (buildsBehind > 0) { + ModrinthRelease latest = modrinthPlugin.getLatestRelease(); + if (latest != null) { + logger.info("You are " + buildsBehind + " versions behind. Please update!"); + logger.info("The latest version is " + latest.getVersion()); + logger.info(latest.getVersionPage()); + } + } else { + logger.info("Yay! You are running the latest version."); + } + } + }); } public void loadConfig() { @@ -247,29 +277,4 @@ public final class ToolStats extends JavaPlugin { numberFormat = new NumberFormat(this); } - - public void checkForUpdates() { - GitHubReleaseAPI api; - try { - api = new GitHubReleaseAPI("ToolStats", "hyperdefined"); - } catch (IOException e) { - logger.warning("Unable to check updates!"); - e.printStackTrace(); - return; - } - GitHubRelease current; - try { - current = api.getReleaseByTag(this.getPluginMeta().getVersion()); - } catch (ReleaseNotFoundException e) { - logger.warning("You are running a version that does not exist on GitHub. If you are in a dev environment, you can ignore this. Otherwise, this is a bug!"); - return; - } - GitHubRelease latest = api.getLatestVersion(); - int buildsBehind = api.getBuildsBehind(current); - if (buildsBehind == 0) { - logger.info("You are running the latest version."); - } else { - logger.warning("A new version is available (" + latest.getTagVersion() + ")! You are running version " + current.getTagVersion() + ". You are " + buildsBehind + " version(s) behind."); - } - } } diff --git a/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java b/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java index b0d3ed5..edcd135 100644 --- a/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java +++ b/src/main/java/lol/hyper/toolstats/commands/CommandToolStats.java @@ -17,12 +17,11 @@ package lol.hyper.toolstats.commands; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import org.bukkit.Bukkit; -import org.bukkit.Material; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; diff --git a/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java b/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java index 26e5f68..7bb31c4 100644 --- a/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java +++ b/src/main/java/lol/hyper/toolstats/events/AnvilEvent.java @@ -18,7 +18,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import net.kyori.adventure.text.Component; import org.bukkit.Material; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; diff --git a/src/main/java/lol/hyper/toolstats/events/CraftItem.java b/src/main/java/lol/hyper/toolstats/events/CraftItem.java index fc9f2b7..deb555b 100644 --- a/src/main/java/lol/hyper/toolstats/events/CraftItem.java +++ b/src/main/java/lol/hyper/toolstats/events/CraftItem.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java b/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java index e3b237b..384b896 100644 --- a/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java +++ b/src/main/java/lol/hyper/toolstats/events/CreativeEvent.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.entity.Player; diff --git a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java index 9614a4d..2ba48cc 100644 --- a/src/main/java/lol/hyper/toolstats/events/EntityDeath.java +++ b/src/main/java/lol/hyper/toolstats/events/EntityDeath.java @@ -18,7 +18,6 @@ package lol.hyper.toolstats.events; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; diff --git a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java index 5ef35a0..29eaa17 100644 --- a/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java +++ b/src/main/java/lol/hyper/toolstats/events/GenerateLoot.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import org.bukkit.Location; import org.bukkit.Material; diff --git a/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java b/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java index 4b15604..5160579 100644 --- a/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java +++ b/src/main/java/lol/hyper/toolstats/events/InventoryOpen.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/lol/hyper/toolstats/events/PickupItem.java b/src/main/java/lol/hyper/toolstats/events/PickupItem.java index 596a9b2..1f10b4e 100644 --- a/src/main/java/lol/hyper/toolstats/events/PickupItem.java +++ b/src/main/java/lol/hyper/toolstats/events/PickupItem.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java index 8870678..54a7320 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerFish.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerFish.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java b/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java index 365126a..35e7637 100644 --- a/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java +++ b/src/main/java/lol/hyper/toolstats/events/PlayerJoin.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java index 7c7af73..c1286fa 100644 --- a/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java +++ b/src/main/java/lol/hyper/toolstats/events/VillagerTrade.java @@ -17,8 +17,8 @@ package lol.hyper.toolstats.events; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; -import lol.hyper.toolstats.tools.UUIDDataType; import net.kyori.adventure.text.Component; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/src/main/java/lol/hyper/toolstats/tools/ItemLore.java b/src/main/java/lol/hyper/toolstats/tools/ItemLore.java index 16e150f..9929a3b 100644 --- a/src/main/java/lol/hyper/toolstats/tools/ItemLore.java +++ b/src/main/java/lol/hyper/toolstats/tools/ItemLore.java @@ -17,13 +17,11 @@ package lol.hyper.toolstats.tools; +import lol.hyper.hyperlib.datatypes.UUIDDataType; import lol.hyper.toolstats.ToolStats; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.PrepareAnvilEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; diff --git a/src/main/java/lol/hyper/toolstats/tools/TokenData.java b/src/main/java/lol/hyper/toolstats/tools/TokenData.java index 0e3909f..32a4e75 100644 --- a/src/main/java/lol/hyper/toolstats/tools/TokenData.java +++ b/src/main/java/lol/hyper/toolstats/tools/TokenData.java @@ -170,7 +170,8 @@ public class TokenData { PersistentDataContainer tokenData = tokenMeta.getPersistentDataContainer(); // set the title and lore - Component title = toolStats.configTools.format("tokens.data." + tokenType + ".title"); + String titleFromConfig = toolStats.config.getString("tokens.data." + tokenType + ".title"); + Component title = toolStats.textUtils.format(titleFromConfig); List lore = toolStats.configTools.getTokenLore(tokenType); tokenMeta.displayName(title); tokenMeta.lore(lore); diff --git a/src/main/java/lol/hyper/toolstats/tools/UUIDDataType.java b/src/main/java/lol/hyper/toolstats/tools/UUIDDataType.java deleted file mode 100644 index b313cce..0000000 --- a/src/main/java/lol/hyper/toolstats/tools/UUIDDataType.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of ToolStats. - * - * ToolStats is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * ToolStats is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with ToolStats. If not, see . - */ - -package lol.hyper.toolstats.tools; - -import org.bukkit.persistence.PersistentDataAdapterContext; -import org.bukkit.persistence.PersistentDataType; -import org.jetbrains.annotations.NotNull; - -import java.nio.ByteBuffer; -import java.util.UUID; - -public class UUIDDataType implements PersistentDataType { - - @Override - public @NotNull Class getPrimitiveType() { - return byte[].class; - } - - @Override - public @NotNull Class getComplexType() { - return UUID.class; - } - - @Override - public byte @NotNull [] toPrimitive(UUID complex, @NotNull PersistentDataAdapterContext context) { - ByteBuffer bb = ByteBuffer.wrap(new byte[16]); - bb.putLong(complex.getMostSignificantBits()); - bb.putLong(complex.getLeastSignificantBits()); - return bb.array(); - } - - @Override - public @NotNull UUID fromPrimitive(byte @NotNull [] primitive, @NotNull PersistentDataAdapterContext context) { - ByteBuffer bb = ByteBuffer.wrap(primitive); - long firstLong = bb.getLong(); - long secondLong = bb.getLong(); - return new UUID(firstLong, secondLong); - } -} diff --git a/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java b/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java index 9b9e0ea..0576ef2 100644 --- a/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java +++ b/src/main/java/lol/hyper/toolstats/tools/config/ConfigTools.java @@ -20,8 +20,6 @@ package lol.hyper.toolstats.tools.config; import lol.hyper.toolstats.ToolStats; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.TextDecoration; -import net.kyori.adventure.text.minimessage.MiniMessage; -import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Material; import java.util.ArrayList; @@ -34,8 +32,6 @@ import java.util.regex.Pattern; public class ConfigTools { private final ToolStats toolStats; - public static final Pattern COLOR_CODES = Pattern.compile("[&§]([0-9a-fk-or])"); - public static final Pattern CONFIG_HEX_PATTERN = Pattern.compile("[&§]#([A-Fa-f0-9]{6})"); public ConfigTools(ToolStats toolStats) { this.toolStats = toolStats; @@ -125,16 +121,7 @@ public class ConfigTools { lore = lore.replace(placeHolder, String.valueOf(value)); } - // if we match the old color codes, then format them as so - Matcher hexMatcher = CONFIG_HEX_PATTERN.matcher(lore); - Matcher colorMatcher = COLOR_CODES.matcher(lore); - if (hexMatcher.find() || colorMatcher.find()) { - component = LegacyComponentSerializer.legacyAmpersand().deserialize(lore); - } else { - // otherwise format them normally - component = MiniMessage.miniMessage().deserialize(lore); - } - + component = toolStats.textUtils.format(lore); return component.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); } @@ -183,49 +170,7 @@ public class ConfigTools { Component component; // Clean output text String outputText = result.toString().replaceAll("\\s+", " ").trim(); - - // if we match the old color codes, then format them as so - Matcher hexMatcher = CONFIG_HEX_PATTERN.matcher(outputText); - Matcher colorMatcher = COLOR_CODES.matcher(outputText); - if (hexMatcher.find() || colorMatcher.find()) { - component = LegacyComponentSerializer.legacyAmpersand().deserialize(outputText); - } else { - // otherwise format them normally - component = MiniMessage.miniMessage().deserialize(outputText); - } - - return component.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); - } - - /** - * Format a string from the config. - * - * @param configName The config to format. - * @return Formatted string, null if the configName doesn't exist. - */ - public Component format(String configName) { - String message = toolStats.config.getString(configName); - if (message == null) { - toolStats.logger.warning("Unable to find config message for: " + configName); - return null; - } - - // if the config message is empty, don't send it - if (message.isEmpty()) { - return null; - } - - // the final component for this lore - Component component; - // if we match the old color codes, then format them as so - Matcher hexMatcher = CONFIG_HEX_PATTERN.matcher(message); - Matcher colorMatcher = COLOR_CODES.matcher(message); - if (hexMatcher.find() || colorMatcher.find()) { - component = LegacyComponentSerializer.legacyAmpersand().deserialize(message); - } else { - // otherwise format them normally - component = MiniMessage.miniMessage().deserialize(message); - } + component = toolStats.textUtils.format(outputText); return component.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); } @@ -251,16 +196,7 @@ public class ConfigTools { line = line.replace("{levels}", String.valueOf(levels)); } } - Component component; - // if we match the old color codes, then format them as so - Matcher hexMatcher = CONFIG_HEX_PATTERN.matcher(line); - Matcher colorMatcher = COLOR_CODES.matcher(line); - if (hexMatcher.find() || colorMatcher.find()) { - component = LegacyComponentSerializer.legacyAmpersand().deserialize(line); - } else { - // otherwise format them normally - component = MiniMessage.miniMessage().deserialize(line); - } + Component component = toolStats.textUtils.format(line); component = component.decorationIfAbsent(TextDecoration.ITALIC, TextDecoration.State.FALSE); finalLore.add(component); }