# 🪦Soul Graves🪦
一个独特的墓地插件,玩家收集自己的灵魂以在死亡时找回他们的物品。 死亡地点会生成一个灵魂,提供音频和视觉反馈以帮助您找到它。 找到后,您可以进入您的灵魂来找回您的物品。 小心,等太久,您的灵魂将会爆炸,掉落您所有的物品!
特别感谢 [Catnies](https://github.com/Catnies) 和 [ShiroKazane](https://github.com/ShiroKazane) 对该项目的贡献!
## 功能
### ⭐ 核心机制
- 玩家死亡时,Soul Graves 会生成一个灵魂,存储他们的物品。
- 避免在液体、虚空或非实体方块中生成灵魂。
- 灵魂可以持续重启服务器。
- 可以自定义每个玩家的活跃灵魂数量,并提供无限选项。
- 能够限制灵魂收集仅限于其所有者。
- 配置选项,暂停所有者离线时的灵魂倒计时器。
- 禁用在特定世界生成灵魂。
### ✨ 视觉和音频反馈
- 视觉提示指示灵魂即将爆炸时。
- 可配置半径内的玩家将听到心跳声以引导他们找到附近的灵魂。
- 可选且可自定义的提示粒子,可直接引导玩家找到他们的灵魂。
- 选择为灵魂收集、灵魂爆炸和通知玩家播放哪些声音。
- 灵魂的所有者和附近的玩家都可以收到灵魂状态更改的通知。
### 💎 物品和经验处理
- 可以配置灵魂在爆炸时只掉落物品、经验或两者。
- 为所有者和非所有者分别设置不同的经验返回百分比。
- 选项是当灵魂爆炸时销毁或分散物品/经验。
### 🌐 跨服务器支持
- 跨服务器支持,使用 MySQL 和 Redis 提供无缝体验。
### 🪙 经济支持
- 配置玩家前往灵魂的成本。
### 🛠️ 自定义和开发者 API
- 所有消息都可完全自定义,并使用 MiniMessage 格式。
- 自定义 API 可供开发人员使用,以进一步自定义 Soul Graves。
## 兼容性
- **WorldGuard**: 标志用于在特定区域中禁用灵魂生成。
- **Towny**: 支持他们的各种“保存物品”选项。
- **Soulbound Enchantment 插件**:
- Vane
- ExcellentEnchats
- EcoEnchants
## 展示
等待收集的稳定灵魂
---
即将爆炸并掉落其内容的不稳定灵魂
## 命令和权限
- **/soulgraves** 或 **/sg**: Soul Graves 的主命令。 将向发送者提供版本信息。
- 权限:`soulgraves.command`
- **/soulgraves reload**: 重新加载插件的配置文件。
- 权限:`soulgraves.command.reload`
- **/soulgraves back**: 将发送者传送到他们的最新灵魂。 仅适用于游戏中。
- 权限:`soulgraves.command.back`
#### 其他权限
- `soulgraves.spawn`: 如果 `permission-required` 在 config 中设置为 true,则允许生成灵魂。
## 配置
config.yml
```yml
# DO NOT EDIT file-version DIRECTLY
file-version: 4
# 如果设置为 true,玩家将需要 "soulgraves.spawn" 权限才能在死亡时生成灵魂
permission-required: false
# 灵魂保持稳定状态的时间(以秒为单位),然后再变为不稳定状态
time-stable: 240
# 灵魂变为不稳定状态并爆炸前的持续时间(以秒为单位)
# 灵魂可供收集的总时间是 time-stable + time-unstable
time-unstable: 60
# 玩家传送到灵魂的成本,设置为 0.0 以禁用
teleport-cost: 0.0
# 当灵魂的所有者离线时,是否冻结计时器
# 此功能无法检测代理服务器上子服务器中玩家的在线状态
offline-owner-timer-freeze: false
# 是否在灵魂爆炸时通知附近的玩家
notify-nearby-players: true
# 提醒附近的玩家灵魂爆炸的半径(以方块为单位)
notify-radius: 128
# 当另一个玩家收集了灵魂时,是否通知灵魂的所有者
notify-owner-pickup: true
# 灵魂被所有者收集时,给予灵魂所有者的经验百分比
xp-percentage-owner: 0.5
# 灵魂被非所有者收集时,给予玩家的经验百分比
xp-percentage-others: 0.2
# 灵魂爆炸时,给予的经验百分比
xp-percentage-burst: 0.2
# 灵魂是否只能被其所有者收集
owner-locked: false
# 玩家可以同时持有的灵魂的最大数量。 设置为 0 表示无限。
# 如果超出限制,将爆炸最古老的灵魂
max-souls-per-player: 0
# 灵魂爆炸是否会掉落物品
souls-drop-items: true
# 灵魂爆炸是否会掉落经验
souls-drop-xp: true
# 创建灵魂时是否存储物品
# 如果 souls-store-items 和 souls-store-xp 都为 false,则不会生成灵魂
souls-store-items: true
# 创建灵魂时是否存储经验
# 如果 souls-store-items 和 souls-store-xp 都为 false,则不会生成灵魂
souls-store-xp: true
# 播放灵魂收集时使用的声音
# 格式为 'soundEvent, 音量, 音调'
# soundKey 可以在 https://minecraft.wiki/w/Sounds.json#Java_Edition_values 下的 'Sound Event' 列中找到
pickup-sound:
enabled: true
sounds:
- 'minecraft:block.amethyst_block.break, 1.0, 0.5'
- 'minecraft:entity.player.levelup, 1.0, 2.0'
- 'minecraft:block.amethyst_block.resonate, 1.0, 0.5'
# 播放灵魂爆炸时使用的声音
# 格式为 'soundEvent, 音量, 音调'
# soundKey 可以在 https://minecraft.wiki/w/Sounds.json#Java_Edition_values 下的 'Sound Event' 列中找到
burst-sound:
enabled: true
sounds:
- 'minecraft:block.glass.break, 3.0, 1.0'
- 'minecraft:entity.vex.death, 3.0, 0.5'
- 'minecraft:entity.allay.death, 3.0, 0.5'
- 'minecraft:entity.warden.sonic_boom, 3.0, 0.5'
# 播放给附近的玩家提醒灵魂爆炸时使用的声音
# 格式为 'soundEvent, 音量, 音调'
# soundKey 可以在 https://minecraft.wiki/w/Sounds.json#Java_Edition_values 下的 'Sound Event' 列中找到
notify-nearby-sound:
enabled: true
sounds:
- 'minecraft:block.amethyst_block.resonate, 1.0, 1.0'
# 播放给所有者灵魂爆炸时使用的声音
# 格式为 'soundEvent, 音量, 音调'
# soundKey 可以在 https://minecraft.wiki/w/Sounds.json#Java_Edition_values 下的 'Sound Event' 列中找到
notify-owner-burst-sound:
enabled: true
sounds:
- 'minecraft:block.amethyst_block.break, 1.0, 0.5'
# 播放给所有者另一名玩家收集他们的灵魂时使用的声音
# 格式为 'soundEvent, 音量, 音调'
# soundKey 可以在 https://minecraft.wiki/w/Sounds.json#Java_Edition_values 下的 'Sound Event' 列中找到
notify-owner-pickup-sound:
enabled: true
sounds:
- 'minecraft:block.beacon.deactivate, 1.0, 0.5'
# 禁用灵魂在哪些世界中生成
# 如果为空,则留空数组
# 用法:
# disabled-worlds:
# - world_nether
# - world_the_end
disabled-worlds: []
# 控制哪些将在玩家灵魂周围显示以引导玩家的粒子
# activation-radius 设置为 0,则始终显示提示粒子
hint-particles:
enabled: true
activation-radius: 128 # 灵魂周围显示提示粒子的半径,设置为 0 以始终显示提示粒子
tracked-soul: 'OLDEST' # 如果玩家有多个灵魂,应该跟踪哪个灵魂? 选项:OLDEST, NEWEST
particle-type: 'END_ROD'
start-distance: 5 # 粒子应该从玩家开始到灵魂的距离
mode: 'TRAIL' # 选项:TRAIL, WANDER
trail:
length: 8 # 粒子朝灵魂的尾迹应该有多长
density: 2 # 每个方块距离生成多少粒子
wander:
count: 5 # 应该生成多少粒子
min-speed: 0.2 # 粒子的最小速度
max-speed: 0.6 # 粒子的最大速度
```
database.yml
```yml
# DO NOT EDIT file-version DIRECTLY
file-version: 1
# 注意: 如果您更改此配置,则需要重启服务器才能使更改生效。
# 选项: PDC, CROSS_SERVER
# 如果使用 CROSS_SERVER,则必须配置 MySQL 和 Redis 部分
storage-mode: PDC
# 跨服务器存储的服务器名称
# 确保每个服务器的名称在跨服务器存储时是唯一的
# 警告: 使用 CROSS_SERVER 存储时,初始化数据库后更改此值将导致数据丢失
server-name: "lobby"
# 跨服务器存储的数据库配置
# 如果您的数据库支持,请将 useSSL 设置为 true
MySQL:
jdbc-url: "jdbc:mysql://localhost:3306/minecraft?useSSL=false&autoReconnect=true"
jdbc-class: "com.mysql.cj.jdbc.Driver"
properties:
user: "username"
password: "password"
Redis:
uri: "redis://localhost:6379/0"
```
messages.yml
```yml
# DO NOT EDIT file-version DIRECTLY
file-version: 4
# 向玩家发送的消息,当他们运行重新加载命令时
soul-graves-reload: "[Soul Graves] 配置已重新加载!"
# 向灵魂的所有者发送的消息,当他们的灵魂爆炸时
soul-burst: "☠ 您的灵魂已爆炸!"
# 向灵魂的所有者发送的消息,当他们的灵魂爆炸并且 souls-drop-items 为 true 时
soul-burst-drop-items: "☀ 您身内的所有物品已被散落!"
# 向灵魂的所有者发送的消息,当他们的灵魂爆炸并且 souls-drop-items 为 false 时
soul-burst-lose-items: "✖ 您身内的所有物品已被摧毁!"
# 向附近的玩家发送的消息,当灵魂爆炸时
soul-burst-nearby: "☠ 附近一个灵魂已爆炸。"
# 向玩家收集灵魂时发送的消息
soul-collect: "✦ 您已收集灵魂的物品!"
# 向灵魂的所有者发送的消息,当另一个人收集了他们的灵魂时
soul-collect-other: "⚑ 另一个人收集了您的灵魂!"
# 当翻新的灵魂数量超过玩家的限制时(最古老的会爆炸)发送的消息
soul-limit-explode: "⚠ 达到了灵魂限制 (%max%),您的最古老的灵魂已爆炸!"
# 当玩家试图返回他们的灵魂,但没有灵魂时发送的消息
command-back-no-soul: "✖ 您没有灵魂可以传送到。"
# 当玩家没有足够的资金来返回他们的灵魂时发送的消息
command-back-no-funds: "✖ 您没有足够的资金来传送到您的灵魂。"
# 当玩家在没有成本的情况下成功返回他们的灵魂时发送的消息
command-back-success-free: "✔ 您已传送到您的灵魂。"
# 当玩家成功返回他们的灵魂时发送的消息
command-back-success-paid: "✔ 您已花费 %cost% 币传送到您的灵魂。"
```
## API
Maven
```xml
jitpack.io
https://jitpack.io
```
```xml
com.github.FaultyFunctions
SoulGraves
TAG
```
Gradle
```groovy
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
}
```
```groovy
dependencies {
implementation 'com.github.FaultyFunctions:SoulGraves:TAG'
}
```
将 `TAG` 替换为 GitHub 上您所选版本的发行标签。
## 第三方插件
- [SoulGravesPlus](https://github.com/JosTheDude/SoulGravesPlus) 由 [@JosTheDude](https://github.com/JosTheDude)
## 路线图
* [提出建议!](https://github.com/FaultyFunctions/SoulGraves/issues)
## 致谢
- [Vanilla Refresh](https://modrinth.com/datapack/vanilla-refresh) - 基于他们“灵魂链接”的想法。
- [B's Ghost Graves](https://modrinth.com/plugin/bs-ghostgrave) - 类似的插件,灵感来自 Hollow Knight。 他们分享了他们的源代码,因此我可以从中学习,非常感谢!
- [MorePersistentDataTypes](https://github.com/mfnalex/MorePersistentDataTypes) - 优秀的 PDC 库
- [BoostedYAML](https://github.com/dejvokep/boosted-yaml) - YAML 配置库
- [HikariCP](https://github.com/brettwooldridge/HikariCP) - 用于处理 JDBC 连接
- [Lettuce](https://github.com/redis/lettuce) - 发送/接收 Redis 消息
- [Lamp](https://github.com/Revxrsal/Lamp) - Minecraft 命令库
- [rtag](https://github.com/saicone/rtag) - 读取/写入 NBT 数据
- [adventure](https://github.com/KyoriPowered/adventure) - Minecraft 的 UI 库
- [bStats](https://github.com/Bastian/bStats) - 插件跟踪指标