diff --git a/README.md b/README.md
index 070d30d..4e3c8bc 100644
--- a/README.md
+++ b/README.md
@@ -1,10 +1,22 @@
-# [HamsterCore](https://gitee.com/MiniDay/hamster-core)
+# [HamsterCore](https://git.airgame.net/MiniDay/hamster-core)
仓鼠核心:叁只仓鼠的 Minecraft 插件开发通用工具包
-# 添加依赖
+# 手动构建
-## Gradle (`build.gradle`)
+1. 将源代码下载或克隆至本地
+2. 在源代码根目录中打开命令行窗口
+3. 命令行窗口中执行`./gradlew clean build`
+4. 构建成品在 `build` 文件夹
+
+也可访问我的[Jenkins网站](https://jenkins.airgame.net/job/opensource/job/hamster-core/)获取最新版
+
+# 开发
+
+## 添加依赖
+
+
+ Gradle(build.gradle)
```groovy
// 添加仓库
@@ -22,7 +34,31 @@ dependencies {
}
```
-## Maven (`pom.xml`)
+
+
+
+ Gradle(build.gradle.kts)
+
+```kotlin
+// 添加仓库
+repositories {
+ maven {
+ url = uri("https://maven.airgame.net/maven-public/")
+ }
+}
+
+dependencies {
+ // 对于 Bukkit 插件
+ compileOnly("cn.hamster3.mc.plugin:core-bukkit:+")
+ // 对于 BungeeCord 插件
+ compileOnly("cn.hamster3.mc.plugin:core-bungee:+")
+}
+```
+
+
+
+
+ Gradle(pom.xml)
```xml
@@ -52,3 +88,13 @@ dependencies {
```
+
+
+
+## 使用 API
+
+- 绝大部分 API 相关的方法都位于 `cn.hamster3.mc.plugin.core.common.api.CoreAPI` 类中
+ - 使用方法为:`CoreAPI.getInstance().xxx()`
+- 部分通用的工具代码在 `cn.hamster3.mc.plugin.core.common.util` 包中
+- 部分Bukkit的工具代码在 `cn.hamster3.mc.plugin.core.bukkit.util` 包中
+- 部分BungeeCord的工具代码在 `cn.hamster3.mc.plugin.core.bungee.util` 包中
\ No newline at end of file
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreCustomModelDataCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreCustomModelDataCommand.java
index 04dce4b..1daf178 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreCustomModelDataCommand.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreCustomModelDataCommand.java
@@ -3,7 +3,6 @@ package cn.hamster3.mc.plugin.core.bukkit.command.lore.sub;
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand;
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils;
-import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -66,9 +65,7 @@ public class LoreCustomModelDataCommand extends ChildCommand {
int data = Integer.parseInt(args[0]);
meta.setCustomModelData(data);
stack.setItemMeta(meta);
- CoreMessage.COMMAND_LORE_CMD_SET_SUCCESS.show(sender, TextReplacementConfig.builder()
- .matchLiteral("%data%").replacement(args[0])
- .build());
+ CoreMessage.COMMAND_LORE_CMD_SET_SUCCESS.show(sender, "%data%", args[0]);
} catch (NumberFormatException e) {
CoreMessage.COMMAND_LORE_CMD_SET_INPUT_ERROR.show(sender);
return true;
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java
index bf64693..40e7f85 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/lore/sub/LoreFlagCommand.java
@@ -3,7 +3,6 @@ package cn.hamster3.mc.plugin.core.bukkit.command.lore.sub;
import cn.hamster3.mc.plugin.core.bukkit.command.ChildCommand;
import cn.hamster3.mc.plugin.core.bukkit.constant.CoreMessage;
import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils;
-import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -71,16 +70,10 @@ public class LoreFlagCommand extends ChildCommand {
if (meta != null) {
if (meta.hasItemFlag(flag)) {
meta.removeItemFlags(flag);
- CoreMessage.COMMAND_LORE_FLAG_REMOVE_SUCCESS.show(player, TextReplacementConfig.builder()
- .replacement("%flag%")
- .matchLiteral(flag.name())
- .build());
+ CoreMessage.COMMAND_LORE_FLAG_REMOVE_SUCCESS.show(player, "%flag%", flag.name());
} else {
meta.addItemFlags(flag);
- CoreMessage.COMMAND_LORE_FLAG_SET_SUCCESS.show(player, TextReplacementConfig.builder()
- .replacement("%flag%")
- .matchLiteral(flag.name())
- .build());
+ CoreMessage.COMMAND_LORE_FLAG_SET_SUCCESS.show(player, "%flag%", flag.name());
}
}
stack.setItemMeta(meta);
diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java
index dba1b37..e3dc5d5 100644
--- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java
+++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/constant/CoreMessage.java
@@ -3,6 +3,7 @@ package cn.hamster3.mc.plugin.core.bukkit.constant;
import cn.hamster3.mc.plugin.core.bukkit.api.CoreBukkitAPI;
import cn.hamster3.mc.plugin.core.bukkit.util.CoreBukkitUtils;
import cn.hamster3.mc.plugin.core.common.data.DisplayMessage;
+import lombok.Getter;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.command.CommandSender;
@@ -59,9 +60,10 @@ public enum CoreMessage {
COMMAND_LORE_INSERT_INPUT_NUMBER_ERROR("§c行号必须是一个大于等于 0 的整数"),
COMMAND_LORE_INSERT_WAIT_CHAT_TEXT("§a请于 15 秒内在聊天框输入想要设置的 lore 文本"),
COMMAND_LORE_INSERT_INDEX_OUT_OF_RANGE("§c你的手持物品没有这么多行 lore 文本"),
- COMMAND_LORE_INSERT_SUCCESS("§a已成功设置 lore 文本"),
- ;
+ COMMAND_LORE_INSERT_SUCCESS("§a已成功设置 lore 文本");
+ @Getter
+ @NotNull
private DisplayMessage message;
CoreMessage(@NotNull String message) {
@@ -106,17 +108,21 @@ public enum CoreMessage {
}
}
- public void show(@NotNull CommandSender sender, TextReplacementConfig... replacement) {
- if (message == null) {
- sender.sendMessage(name());
- return;
- }
- Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().sender(sender);
- message.show(audience, replacement);
+ public void show(@NotNull CommandSender sender) {
+ message.show(CoreBukkitAPI.getInstance().getAudienceProvider().sender(sender));
}
- @SuppressWarnings("unused")
- public DisplayMessage getMessage() {
- return message;
+ public void show(@NotNull CommandSender sender, @NotNull String... replacement) {
+ if (replacement.length % 2 != 0) {
+ throw new IllegalArgumentException();
+ }
+ TextReplacementConfig[] configs = new TextReplacementConfig[replacement.length / 2];
+ for (int i = 0; i < configs.length; i++) {
+ String key = replacement[i * 2];
+ String value = replacement[i * 2 + 1];
+ configs[i] = TextReplacementConfig.builder().matchLiteral(key).replacement(value).build();
+ }
+ Audience audience = CoreBukkitAPI.getInstance().getAudienceProvider().sender(sender);
+ message.show(audience, configs);
}
}
diff --git a/core-bukkit/src/main/resources/plugin.yml b/core-bukkit/src/main/resources/plugin.yml
index b3ac4f0..07ff519 100644
--- a/core-bukkit/src/main/resources/plugin.yml
+++ b/core-bukkit/src/main/resources/plugin.yml
@@ -4,7 +4,7 @@ version: ${version}
api-version: 1.13
author: MiniDay
-website: https://github.com/MiniDay/hamster-core
+website: https://git.airgame.net/MiniDay/hamster-core
description: 仓鼠核心:叁只仓鼠的 Minecraft 插件开发通用工具包
load: STARTUP
diff --git a/core-bungee/src/main/resources/bungee.yml b/core-bungee/src/main/resources/bungee.yml
index 9f29fdf..39611b9 100644
--- a/core-bungee/src/main/resources/bungee.yml
+++ b/core-bungee/src/main/resources/bungee.yml
@@ -3,3 +3,4 @@ main: cn.hamster3.mc.plugin.core.bungee.HamsterCorePlugin
version: ${version}
author: MiniDay
+description: 仓鼠核心:叁只仓鼠的 Minecraft 插件开发通用工具包
\ No newline at end of file
diff --git a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java
index 4d98cf8..42fb89a 100644
--- a/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java
+++ b/core-common/src/main/java/cn/hamster3/mc/plugin/core/common/data/DisplayMessage.java
@@ -148,6 +148,11 @@ public class DisplayMessage {
return copy;
}
+ @NotNull
+ public DisplayMessage replace(@NotNull String key, String value) {
+ return replace(TextReplacementConfig.builder().matchLiteral(key).replacement(value).build());
+ }
+
@NotNull
public JsonObject toJson() {
JsonObject object = new JsonObject();