An open API service indexing awesome lists of open source software.

https://github.com/baicaizhale/litemotto

A simple Minecraft motto plugin that runs in Spigot
https://github.com/baicaizhale/litemotto

minecraft minecraft-plugin spigot

Last synced: 2 months ago
JSON representation

A simple Minecraft motto plugin that runs in Spigot

Awesome Lists containing this project

README

          

# 请非新手服主不要使用我公开在config.yml的key了,我的cloudflare账号每天都是透支的
# 还有这消耗量明显不对好吧,bstats记录的服务器日活就那么几个一天怎么可能用到10k,明显是有人拿我公开的key用在其他地方了
# 我公开key的初衷是让不会创建key的服主也能开箱即用,而不是门户开放

497126858-f3d0c38b-29f8-4b50-90ed-fb7b8c17e209

# LiteMotto 轻语格言

LiteMotto 是一个 **Minecraft Spigot 插件**,可以在玩家加入服务器时发送一句每日格言。格言由 **Cloudflare AI** 生成,支持自定义前缀、颜色代码以及提示词。

---

**您大可在以下位置更细致的了解本插件:**
- [LiteMotto文档库](https://baicaizhale.icu/notes/LiteMotto/)
- [由AI生成的LiteMotto简介](https://litemotto.baicaizhale.icu/)

**以及对应的仓库:**
- https://github.com/baicaizhale/doc/tree/main/docs/notes/LiteMotto
- https://github.com/baicaizhale/LiteMotto/tree/web

## ⚠️ 已知问题

### 当前存在的问题
**v3.0.0 版本后的风格模仿问题**
- **问题描述**: 为了防止AI生成重复内容,插件会将最近已生成的格言提供给AI作为参考。但这导致AI会模仿前几次格言的语气风格。
- **具体表现**: 重启服务器后,如果第一条格言是文言文风格,后续生成的格言也会保持文言文风格。
- **影响范围**: 主要影响格言风格一致性。

### 寻求帮助
如果您有解决此问题的想法或方案,欢迎提交 [Issue](https://github.com/baicaizhale/LiteMotto/issues) 或 [Pull Request](https://github.com/baicaizhale/LiteMotto/pulls)!

## ✨ 功能特点

- 🎭 **多 AI 平台支持**:支持 **Cloudflare AI** 和 **SiliconFlow (硅基流动)**,提供多种高性能大模型。
- 🎨 **颜色代码支持**:完美支持 `&` 和 `§` 颜色代码,自动转换为 Minecraft 格式。
- ⚙ **高度可定制**:自由配置前缀、提示词、模型选择及消息反馈。
- 🚀 **异步非阻塞**:格言获取过程全程异步,确保不影响服务器主线程性能。
- 🔄 **实时热重载**:配置文件修改后自动重载,无需重启服务器或执行命令。
- 🛠 **配置自动迁移**:版本更新时自动保留旧配置并迁移至新格式。
- ☁️ **智能适配**:自动兼容不同模型的 API 返回格式。

## 📦 安装方法

### *可以通过视频来学习安装方法:*
[点击前往Bilibili播放【LiteMotto | 使用指南】](https://www.bilibili.com/video/BV1a2U7BRENa/?share_source=copy_web&vd_source=4d7b156d3b6e4c85a2be521fb989f336)

### 1. 下载插件
- **方式一(推荐)**: 从 [最新发布页面](https://github.com/baicaizhale/LiteMotto/releases/latest) 下载最新的 `LiteMotto.jar` 文件
- **方式二**: 从 [所有版本列表](https://github.com/baicaizhale/LiteMotto/releases) 查看并下载特定版本
- **方式三**: 自行编译源代码(需要 Maven 环境)
```bash
git clone https://github.com/baicaizhale/LiteMotto.git
cd LiteMotto
mvn clean package
```

### 2. 放入服务器插件目录
- 将下载或编译得到的 `LiteMotto.jar` 文件复制到服务器的 `plugins/` 文件夹中
- 确保服务器有足够的权限读写插件目录

### 3. 启动服务器
- **首次启动**: 启动服务器,插件会自动生成默认的 `config.yml` 配置文件
- **热加载**: 如果使用 Plugman-X 等热加载工具,可以直接加载插件而无需重启服务器

### 4. 配置插件
打开 `plugins/LiteMotto/config.yml` 文件,根据您的需求进行配置:

```yaml
# 配置文件版本 (请勿修改)
version: "x.x.x"

# API 提供商选择 (可选值: cloudflare, siliconflow)
api-provider: "cloudflare"

# Cloudflare API 配置
api-key: "你的 Cloudflare API Key"
model: "@cf/openai/gpt-oss-120b"

# 硅基流动 API 配置
siliconflow:
api-key: "你的 SiliconFlow API Key"
model: "Qwen/Qwen2.5-72B-Instruct"
api-url: "https://api.siliconflow.cn/v1/chat/completions"

# 发送给 AI 的提示词
prompt: "请直接返回一句有哲理的格言,不要思考,也不要包含任何前后缀、额外的文字或解释。"

# 玩家收到消息的前缀
prefix: "§bLiteMotto §7> §f"

# 更新检查设置
update-check:
enabled: true
on-startup: false
on-admin-join: false
```

### 配置项详细说明

#### 核心配置
- **api-provider**: 选择使用的 AI 平台 (`cloudflare` 或 `siliconflow`)。
- **prompt**: 发送给 AI 的指令,用于控制格言的风格和内容。
- **prefix**: 消息前缀,支持 `&` 和 `§` 颜色代码。

#### Cloudflare AI 配置
- **api-key**: 您的 Cloudflare API 令牌。
- **model**: 使用的模型名称,默认为 `@cf/openai/gpt-oss-120b`。
- **注意**: 插件会自动获取关联的 `account-id`,无需手动配置。

#### SiliconFlow (硅基流动) 配置
- **api-key**: 您的 SiliconFlow API Key。
- **model**: 使用的模型名称,推荐 `Qwen/Qwen2.5-72B-Instruct`。
- **api-url**: API 请求地址,通常保持默认即可。

#### 更新检查设置
- **enabled**: 是否启用更新检查功能。
- **on-startup**: 插件启动时是否在控制台提醒更新。
- **on-admin-join**: 拥有权限的管理员加入时是否发送更新提醒。
- **颜色代码参考**:
- `&0`/`§0` - 黑色
- `&1`/`§1` - 深蓝色
- `&2`/`§2` - 深绿色
- `&3`/`§3` - 湖蓝色
- `&4`/`§4` - 深红色
- `&5`/`§5` - 紫色
- `&6`/`§6` - 金色
- `&7`/`§7` - 灰色
- `&8`/`§8` - 深灰色
- `&9`/`§9` - 蓝色
- `&a`/`§a` - 绿色
- `&b`/`§b` - 天蓝色
- `&c`/`§c` - 红色
- `&d`/`§d` - 粉红色
- `&e`/`§e` - 黄色
- `&f`/`§f` - 白色
- `&k`/`§k` - 随机字符
- `&l`/`§l` - 粗体
- `&m`/`§m` - 删除线
- `&n`/`§n` - 下划线
- `&o`/`§o` - 斜体
- `&r`/`§r` - 重置

## 🛠 常见问题与故障排除

### 配置相关
- **Q: 支持哪些 Cloudflare AI 模型?**
- A: 推荐 `@cf/openai/gpt-oss-120b`(效果最佳),也支持 `@cf/meta/llama-3-8b-instruct`(响应更快)等。插件会自动适配不同模型的 API 返回格式。

- **Q: gpt-oss-120b 为什么不能用 chat/completions 格式?**
- A: Cloudflare 的 gpt-oss-120b 模型使用新的 `run/input` API 格式,插件已自动适配,无需手动切换。

- **Q: 如何自定义格言风格?**
- A: 修改 `config.yml` 的 `prompt` 字段即可。例如:
- 文言文风格:`"请用文言文生成一句哲理格言"`
- 鼓励学习:`"请生成一句鼓励学生学习的格言"`
- 幽默风格:`"请用幽默的方式说一句人生感悟"`

### 功能相关
- **Q: 格言内容重复怎么办?**
- A: 插件会自动避免最近 10 条格言重复。如果发现重复,可以:
1. 删除 `plugins/LiteMotto/recent_mottos.json` 文件重置历史记录
2. 修改 `prompt` 字段增加随机性

- **Q: 插件不显示格言怎么办?**
- A: 检查以下可能原因:
1. **网络连接**: 确保服务器能正常访问 Cloudflare API
2. **API 配置**: 检查 `account-id` 和 `api-key` 是否正确
3. **权限问题**: 确保插件有足够的文件读写权限
4. **控制台日志**: 查看服务器控制台是否有错误信息

- **Q: 颜色代码不生效怎么办?**
- A: 确保:
1. 使用正确的颜色代码格式(`&` 或 `§`)
2. 玩家有权限查看格式化文本
3. 服务器支持颜色代码显示

### 技术相关
- **Q: 插件启动失败怎么办?**
- A: 检查:
1. **版本兼容性**: 确保服务器版本与插件兼容
2. **依赖冲突**: 检查是否有其他插件冲突
3. **日志分析**: 查看详细的错误堆栈信息

- **Q: 如何调试插件问题?**
- A: 建议步骤:
1. 查看服务器控制台日志
2. 检查配置文件是否正确
3. 测试网络连接
4. 联系开发者提供详细错误信息

- **Q: 插件性能如何?**
- A: 插件采用异步设计:
- AI 请求在后台线程执行,不影响主线程
- 缓存机制减少重复 API 调用
- 轻量级设计,内存占用低

## 🔌 API 调用说明

LiteMotto 提供了简单的 API 接口,供其他插件调用 AI 格言生成功能。

### API 类信息
- **包名**: `org.baicaizhale.litemotto.api.LiteMottoAPI`
- **方法**: `fetchMottoWithPrompt(String customPrompt)`
- **返回值**: 生成的格言字符串,失败时返回 `null`

### 使用示例

#### 1. 通过反射调用(推荐)
```java
// 检查LiteMotto插件是否可用
Plugin liteMottoPlugin = Bukkit.getPluginManager().getPlugin("LiteMotto");
if (liteMottoPlugin != null && liteMottoPlugin.isEnabled()) {
try {
// 加载API类
Class> apiClass = Class.forName("org.baicaizhale.litemotto.api.LiteMottoAPI");

// 创建API实例
Object apiInstance = apiClass.newInstance();

// 获取方法
Method fetchMottoMethod = apiClass.getMethod("fetchMottoWithPrompt", String.class);

// 调用方法(异步执行)
Bukkit.getScheduler().runTaskAsynchronously(yourPlugin, () -> {
try {
String customPrompt = "请返回一句鼓励高考学生的格言,要简洁有力";
String motto = (String) fetchMottoMethod.invoke(apiInstance, customPrompt);

// 在主线程中处理结果
Bukkit.getScheduler().runTask(yourPlugin, () -> {
if (motto != null) {
player.sendMessage("今日格言: " + motto);
} else {
// 处理失败情况
player.sendMessage("格言生成失败,请稍后再试");
}
});
} catch (Exception e) {
// 处理异常
e.printStackTrace();
}
});
} catch (Exception e) {
// 处理API调用异常
e.printStackTrace();
}
}
```

#### 2. 直接依赖调用
如果您的插件直接依赖 LiteMotto,可以直接导入 API 类:
```java
import org.baicaizhale.litemotto.api.LiteMottoAPI;

// 创建API实例
LiteMottoAPI api = new LiteMottoAPI();

// 检查插件是否可用
if (api.isAvailable()) {
// 异步调用
Bukkit.getScheduler().runTaskAsynchronously(yourPlugin, () -> {
String motto = api.fetchMottoWithPrompt("自定义提示词");

// 在主线程中处理结果
Bukkit.getScheduler().runTask(yourPlugin, () -> {
// 处理格言结果
});
});
}
```

### API 特性

- **多平台支持**: 自动根据配置切换 Cloudflare 或 SiliconFlow。
- **自动配置**: API 会自动读取插件配置文件,无需手动传入凭据。
- **重复避免**: 自动过滤最近生成的格言,确保内容新鲜度。
- **智能适配**: 自动处理不同 AI 模型的返回格式差异。
- **元数据获取**: 支持获取当前使用的模型名称和提供商信息。
- **颜色处理**: 返回的格言已自动处理颜色代码,可直接发送给玩家。

### 注意事项

1. **异步调用**: API 调用涉及网络请求,务必使用异步方式执行
2. **线程安全**: 结果处理需要在主线程中进行
3. **错误处理**: 始终检查返回值是否为 null
4. **依赖检查**: 调用前检查 LiteMotto 插件是否可用

## 📝 开发与贡献

### 项目结构
```
LiteMotto/
├── src/main/java/
│ ├── org/baicaizhale/litemotto/
│ │ ├── LiteMotto.java # 插件主类
│ │ ├── ConfigUpdater.java # 配置自动迁移
│ │ ├── ConfigWatcher.java # 配置实时重载
│ │ ├── DebugManager.java # 调试信息管理
│ │ ├── api/
│ │ │ ├── LiteMottoAPI.java # API 统一入口
│ │ │ ├── MottoGenerator.java # 生成器接口
│ │ │ ├── CloudflareMottoGenerator.java # Cloudflare 实现
│ │ │ └── SiliconFlowMottoGenerator.java # 硅基流动实现
│ │ ├── managers/
│ │ │ └── RecentMottoManager.java # 历史记录管理
│ │ └── utils/
│ │ └── ColorUtils.java # 颜色处理工具
│ └── listeners/
│ └── PlayerJoinListener.java # 玩家加入监听
├── src/main/resources/
│ ├── plugin.yml # 插件描述
│ └── config.yml # 默认配置
└── pom.xml # Maven 构建配置
```

### 开发环境搭建
1. **克隆项目**
```bash
git clone https://github.com/baicaizhale/LiteMotto.git
cd LiteMotto
```

2. **安装依赖**
```bash
mvn clean install
```

3. **编译插件**
```bash
mvn clean package
```

### 贡献指南

#### 提交 Issue
- **Bug 报告**: 提供详细的错误信息、复现步骤、环境信息
- **功能建议**: 描述需求场景、预期效果、实现思路

#### 提交 Pull Request
1. **Fork 项目**到个人仓库
2. **创建功能分支**: `git checkout -b feature/your-feature`
3. **编写代码**: 编写相关代码
4. **提交 PR**: 描述修改内容和目的

#### 引起Actions的操作

以下是当前工作流 (`CI-Build-Release.yml`) 的发布逻辑汇总表:

##### 🚀 发布与构建逻辑总览

| 触发行为 (User Action) | 触发 Ref | 关键条件 | 结果 (Result) | 版本/Artifact 名称 |
| :--- | :--- | :--- | :--- | :--- |
| **推送 Tag (在 Main)**
`git push origin v1.0.0` | `refs/tags/v*` | Commit **属于** `main` 分支 | **✅ 正式发布 (Latest Release)** | Release: `v1.0.0`
Artifact: (跳过快照上传) |
| **推送 Tag (不在 Main)**
`git push origin v1.0.0` | `refs/tags/v*` | Commit **不属于** `main` 分支 | **❌ 仅构建 (Build Only)** | 无 Release,无 Artifact 上传 |
| **合并/推送到 Main (带 Tag)**
Fast-forward 合并或合并前打 Tag | `refs/heads/main` | `HEAD` Commit **有** `v*` Tag | **✅ 正式发布 (Latest Release)** | Release: `v1.0.0`
Artifact: `LiteMotto-main-#SHA` (快照也会上传) |
| **合并/推送到 Main (无 Tag)**
普通 PR 合并或提交 | `refs/heads/main` | `HEAD` Commit **无** `v*` Tag | **⚠️ 预览发布 (Pre-release)** | Release: `Pre-Release {SHA}`
Tag: `main-{SHA}` |
| **推送到 Dev 分支**
`git push origin dev` | `refs/heads/dev` | - | **📦 仅快照 (Snapshot)** | Artifact: `LiteMotto-dev-#SHA` |
| **提交 Pull Request** | `refs/pull/*/merge` | - | **📦 仅快照 (Snapshot)** | Artifact: `LiteMotto-{pr_ref}-#SHA` |

---

**欢迎贡献代码!** 如果您有任何问题或建议,请通过以下方式联系:
- GitHub Issues: [提交问题](https://github.com/baicaizhale/LiteMotto/issues)
- Pull Requests: [贡献代码](https://github.com/baicaizhale/LiteMotto/pulls)
- 文档仓库: [LiteMotto 文档](https://github.com/baicaizhale/doc/tree/main/docs/notes/LiteMotto)

本插件与 Cloudflare AI 官方无直接关联,仅为个人项目。
![Bstats](https://bstats.org/signatures/bukkit/LiteMotto.svg)