AnhyLibAPI

AnhyLibAPI 是一套专为整合到 Minecraft 插件中设计的库,旨在增强其在 Spigot、Paper、Purpur 及其他 Spigot 分支服务器上的能力。

资源图片
# AnhyLibAPI: 用于 Minecraft 插件 **AnhyLibAPI** 是一套专为整合到 Minecraft 插件中的库,旨在增强其在运行 Spigot、Paper、Purpur 和其他 Spigot 派生的服务器上的能力。 需要 ProtocolLib 插件版本 5.0.0 或更高版本才能运行。 **AnhyLibAPI** 必须作为插件加载到服务器上。 重要的是要理解,**AnhyLibAPI** 作为插件,不监控任何事件,没有计时器,也不与世界或玩家交互,从而确保服务器运行和性能没有额外的负担。 **AnhyLibAPI** 的主要目的是将其 API 提供给其他插件,作为扩展其功能强大而可靠的基础。 这种设计确保 **AnhyLibAPI** 增强插件功能,而不会损害服务器效率。 ### 主要功能: * **多语言支持**: 易于整合插件的语言包。 * **NBT 标签处理**: 高级管理 NBT 标签,用于灵活的数据交互。 * **玩家持久数据**: 有效使用玩家的持久数据。 * **自定义消息**: 个性化向玩家传递消息。 * **日志记录**: 用于事件日志的独特方法。 ### AnhyLibAPI 的主要功能 #### 1. 多语言支持 AnhyLibAPI 通过检查“玩家持久数据”以获取玩家选择的语言,实现统一的多语言支持标准。 如果未找到选择的语言,则默认使用玩家的 Minecraft 客户端语言。 此外,它支持包含首选语言列表,从而增强了本地化的灵活性。 #### 2. NBT 标签处理 AnhyLibAPI 简化了在物品中添加、修改和删除 NBT 标签的过程,使开发人员能够轻松管理游戏中的关键物品数据。 #### 3. 玩家持久数据 此功能允许存储、检索和修改玩家的个人数据,例如设置、状态和成就,从而提供深入的个性化和个人详细信息的保留。 #### 4. 自定义消息和日志记录 这些功能提供消息自定义和颜色编码的日志记录,用于各种消息类型。 它们增强了插件与玩家之间的通信,并促进了插件中事件的更有效跟踪和分析。 ### 文档: AnhyLibAPI 的 JavaDoc 可在以下链接获取: [AnhyLibAPI 文档](https://dev.anh.ink/anhylibapi/javadoc/)。 ### 与 Gradle 和 Maven 的集成: #### Gradle: ```groovy dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { mavenCentral() maven { url 'https://jitpack.io' } } } ``` ```groovy dependencies { implementation 'com.github.AnhyDev:AnhyLibAPI:v1.4.0' } ``` #### Maven: ```xml jitpack.io https://jitpack.io ``` ```xml com.github.AnhyDev AnhyLibAPI v1.4.0 ``` ### 插件编写示例: 对于一个综合、现成的插件示例,该示例实现了 AnhyLibAPI,请访问以下链接: [AnhyLibAPI 插件示例](https://github.com/AnhyDev/ResourcesHub/tree/main/AnhyLibAPI/examples/ExampleLangPlugin)。 此示例不仅仅是样本代码; 这是一个完全可运行的插件,具有多语言支持、可配置设置和玩家命令。 开发人员可以将其用作基础,进行重命名和重新打包,同时还可以添加自己的代码以扩展其功能。 它是一个在实践中应用 AnhyLibAPI 的理想起点,用于实际的插件项目。 #### 请参阅以下代码示例: ```java package ink.anh.example; import java.io.File; import java.io.IOException; import org.bukkit.Bukkit; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.Plugin; import ink.anh.api.LibraryManager; import ink.anh.api.lingo.Translator; import ink.anh.api.lingo.lang.LanguageManager; import ink.anh.api.messages.Logger; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.md_5.bungee.api.ChatColor; public class GlobalManager extends LibraryManager { private static GlobalManager instance; private ExampleLangPlugin plugin; private LanguageManager langManager; private String pluginName; private String defaultLang; private static BukkitAudiences bukkitAudiences; private boolean debug; private GlobalManager(ExampleLangPlugin plugin) { super(plugin); this.plugin = plugin; this.saveDefaultConfig(); this.loadFields(plugin); } public static synchronized GlobalManager getManager(ExampleLangPlugin plugin) { if (instance == null) { instance = new GlobalManager(plugin); } return instance; } @Override public Plugin getPlugin() { return plugin; } @Override public String getPluginName() { return pluginName; } @Override public BukkitAudiences getBukkitAudiences() { return bukkitAudiences; } @Override public LanguageManager getLanguageManager() { return this.langManager; } @Override public String getDefaultLang() { return defaultLang; } @Override public boolean isDebug() { return debug; } private void loadFields(ExampleLangPlugin plugin) { bukkitAudiences = BukkitAudiences.create(plugin); defaultLang = plugin.getConfig().getString("language", "en"); pluginName = ChatColor.translateAlternateColorCodes('&',plugin.getConfig().getString("plugin_name", "ExampleLangPlugin")); debug = plugin.getConfig().getBoolean("debug", false); setLanguageManager(); } private void saveDefaultConfig() { File configFile = new File(plugin.getDataFolder(), "config.yml"); if (!configFile.exists()) { YamlConfiguration defaultConfig = new YamlConfiguration(); defaultConfig.set("plugin_name", "ExampleLangPlugin"); defaultConfig.set("language", "en"); defaultConfig.set("debug", false); try { defaultConfig.save(configFile); Logger.warn(plugin, "Default configuration created. "); } catch (IOException e) { e.printStackTrace(); } } } private void setLanguageManager() { if (this.langManager == null) { this.langManager = LangMessage.getInstance(this);; } else { this.langManager.reloadLanguages(); } } public boolean reload() { Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { try { saveDefaultConfig(); plugin.reloadConfig(); loadFields(plugin); Logger.info(plugin, Translator.translateKyeWorld(instance, "configuration_reloaded" , new String[] {defaultLang})); } catch (Exception e) { e.printStackTrace(); Logger.error(plugin, Translator.translateKyeWorld(instance, "err_reloading_configuration ", new String[] {defaultLang})); } }); return true; } } ``` ```java package ink.anh.example; import ink.anh.api.lingo.lang.LanguageManager; public class LangMessage extends LanguageManager { private static LangMessage instance = null; private static final Object LOCK = new Object(); private LangMessage(GlobalManager manager) { super(manager, "lang"); } public static LangMessage getInstance(GlobalManager manager) { if (instance == null) { synchronized (LOCK) { if (instance == null) { instance = new LangMessage(manager); } } } return instance; } } ```