# ServerNews
## 插件介绍
一个专为 Minecraft 服务器设计的公告系统插件,允许管理员发布和管理服务器新闻,以精美排版的书籍形式展示给玩家。
该插件支持多语言(根据客户端语言设置自动切换),支持交互内容,并提供自动通知功能。
兼容 Folia、Paper、Bukkit、Purpur、Spigot 和其他服务器核心。
## 特性
- 📖 以书籍形式展示新闻内容
- 🔔 玩家登录时自动通知未读新闻
- 🌍 默认支持中文和英文;可以在 `messages.yml` 中添加其他语言
- 🔗 支持 URL 链接和命令交互
- 📊 新闻统计跟踪
- 📅 自动清除过期的阅读记录
- 🎨 支持颜色代码和 HEX 颜色
- 📱 兼容 PlaceholderAPI 占位符
> **注意**:使用 PlaceholderAPI 功能需要安装 PlaceholderAPI
## 使用方法
### 玩家命令
| 命令 | 描述 | 权限 | 默认 |
|---------|-------------|------------|---------|
| `/news` | 打开新闻书籍 | `servernews.use` | ✅ 所有玩家可用 |
### 管理员命令
| 命令 | 描述 | 示例 | 权限 |
|---------|-------------|---------|------------|
| `/newsadmin` | 显示管理员帮助菜单 | `/newsadmin` | `servernews.admin` |
| `/newsadmin help` | 显示详细帮助 | `/newsadmin help` | `servernews.admin` |
| `/newsadmin reload` | 重新加载配置文件 | `/newsadmin reload` | `servernews.admin` |
| `/newsadmin add <标题> <内容> [选项]` | 添加新闻,带有可选功能 | 参考以下示例 | `servernews.admin` |
| `/newsadmin remove <索引>` | 根据索引删除新闻 | `/newsadmin remove 0` | `servernews.admin` |
| `/newsadmin list` | 列表所有新闻及其详细信息 | `/newsadmin list` | `servernews.admin` |
| `/newsadmin stats` | 显示全面的新闻统计信息 | `/newsadmin stats` | `servernews.admin` |
### 高级添加命令选项
`add` 命令支持几个可选参数以增强新闻功能:
#### 基本用法:
```
/newsadmin add "新闻标题" "新闻内容在此处"
```
#### 带 URL 链接:
```
/newsadmin add "更新通知" "请查看我们的网站以获取详细信息" -url https://example.com
```
#### 带命令执行:
```
/newsadmin add "服务器活动" "点击加入活动!" -cmd /warp event
```
#### 带悬停文字:
```
/newsadmin add "重要" "服务器维护计划" -hover "悬停获取更多信息"
```
#### 组合功能:
```
/newsadmin add "新特性" "多个交互元素" -url https://example.com -cmd /help -hover "点击查看网站或悬停查看命令"
```
#### 选项详情:
- **`-url <链接>`**: 添加可点击的 URL 链接(必须以 http:// 或 https:// 开头)
- **`-cmd <命令>`**: 添加可点击的命令(必须以 / 开头)
- **`-hover <文本>`**: 添加悬停提示文字(可以包含空格和颜色代码)
> **提示**:
> - 选项可以以任意顺序使用
> - URL 和命令不能一起使用(命令优先)
> - 使用引号括起来包含空格的文本
> - 您可以直接编辑 `news.yml`,之后使用 `/newsadmin reload`
### 权限列表
| 权限节点 | 描述 | 默认 | 备注 |
|-----------------|-------------|---------|--------|
| `servernews.use` | 允许使用 `/news` 命令 | `true` | 所有玩家可以查看新闻 |
| `servernews.admin` | 授予访问管理员命令的权限 | `op` | 完全的管理员控制权 |
| `servernews.*` | 授予所有与新闻相关的权限 | `op` | 包括所有权限 |
## 配置文件
### config.yml
```yaml
# 最多存储的新闻项目数
max-news: 10
# 自动通知设置
auto-notification:
# 玩家加入后的延迟(以tick为单位,20 tick = 1 秒)
delay-ticks: 60
```
### `news.yml`
以以下格式存储所有新闻条目:
```yaml
news:
- title: "新闻标题"
content: "新闻内容(支持颜色代码和占位符)"
date: "2024-01-15 14:30"
url: "https://example.com" # 可选:可点击的 URL
command: "/spawn" # 可选:可点击的命令
hover: "带有 &acolors 的悬停文字" # 可选:悬停提示
- title: "另一则新闻"
content: "更多新闻内容在此处"
date: "2024-01-14 12:00"
# 可选字段可以省略
```
### `messages.yml`
包含不同语言的所有可翻译消息。插件会自动检测玩家语言并使用适当的消息。
## 命令示例
### 添加带颜色的新闻
```bash
# 基本带颜色的新闻
/newsadmin add "&6&l服务器更新" "&a已添加新功能!&b请查看它们。"
# 使用 HEX 颜色
/newsadmin add "FF0000重要通知" "FF00一切正常运作!"
# 使用 PlaceholderAPI
/newsadmin add "欢迎 %player_name%" "您已经游戏了 %player_time% 小时"
```
### 管理示例
```bash
# 列表所有当前新闻
/newsadmin list
# 删除第一则新闻(索引 0)
/newsadmin remove 0
# 查看详细统计信息
/newsadmin stats
# 手动编辑后重新加载
/newsadmin reload
```
## 常见问题解答
### Q: 如何添加带颜色的新闻?
**A:**
使用 `&` 加上颜色代码或 HEX 颜色代码:
- `&a` 用于绿色文本
- `FF0000` 用于红色文本(HEX 颜色代码)
- `&l` 用于粗体,`&o` 用于斜体,`&n` 用于下划线
### Q: 为什么新闻书籍无法打开?
**A:**
请检查以下事项:
1. 玩家有 `servernews.use` 权限
2. 服务器控制台中没有错误日志
3. `news.yml` 中新闻数据格式正确
4. 插件已正确加载并启用
### Q: 如何增加新闻限制?
**A:**
在 `config.yml` 中修改 `max-news` 的值,然后重新加载插件。
### Q: 我可以使用 PlaceholderAPI 占位符吗?
**A:**
是的!安装 PlaceholderAPI,并在新闻标题、内容和悬停文本中使用任何占位符。例如:
- `%player_name%` - 玩家姓名
- `%server_name%` - 服务器名称
- `%player_time%` - 游戏时间
### Q: 自动通知是如何工作的?
**A:**
插件跟踪每个玩家上次查看新闻的时间。当他们加入时,如果有更新的新闻可用,他们将在配置的延迟后收到可点击的通知。