# FakePlayer
这是一个受 [Carpet-Mod](https://github.com/gnembon/fabric-carpet) 启发的服务器端插件,适用于 Minecraft `1.20.x` 和 `1.21.x` 及更高版本。
[点击这里](https://youtu.be/NePaDz-P5nI) 观看演示视频。
## 特性
+ 允许你生成看起来像真实玩家的虚假玩家,他们可以保持区块加载
+ 虚假玩家可以通过香草命令和插件命令(如 `/ban`、`/tp`)进行重新复活
+ 你可以通过 `/fp invsee` 或右键点击它们来打开和编辑他们的物品栏
+ 你可以完全控制他们的移动、跳跃、攻击……更好的方式是什么?让它周期性执行
+ 每个玩家可以配置自己的个性化设置
## 要求
+ [Paper](https://papermc.io) 或 [Purpur](http://purpurmc.org) 软件
+ [CommandAPI](https://commandapi.jorel.dev) 插件
## 配置文件
**Fakeplayer 仅生成一个名为 `config.tmpl.yml` 的模板配置文件。**
你需要将此文件重命名为 `config.yml` 作为你的配置文件。
这种方法可以在升级时让你预览新内容。
## 命令
| 命令 | 描述 | 权限 | 备注 |
|---------------|-------------------------------------------|------------------------------|-----------------------------------------------------------------|
| /fp spawn | 生成一个虚假玩家 | fakeplayer.command.spawn | |
| /fp kill | 杀死一个虚假玩家 | fakeplayer.command.kill | |
| /fp killall | 杀死服务器上的所有虚假玩家 | OP | |
| /fp select | 将一个虚假玩家设置为默认 | fakeplayer.command.select | 当生成了超过 1 个虚假玩家时可用 |
| /fp selection | 查看选定的虚假玩家 | fakeplayer.command.selection | 只有当生成了超过 1 个虚假玩家时可用 |
| /fp list | 列出已生成的虚假玩家 | fakeplayer.command.list | |
| /fp distance | 显示与虚假玩家的距离 | fakeplayer.command.distance | |
| /fp drop | 掉落手中的物品 | fakeplayer.command.drop | |
| /fp dropstack | 掉落手中的物品堆栈 | fakeplayer.command.dropstack | |
| /fp dropinv | 掉落物品栏中的所有物品 | fakeplayer.command.dropinv | |
| /fp skin | 从其他玩家复制皮肤 | fakeplayer.command.skin | 从离线玩家复制时有 60 秒的冷却时间 |
| /fp invsee | 打开虚假玩家的物品栏 | fakeplayer.command.invsee | 右键点击虚假玩家具有相同效果 |
| /fp sleep | 睡觉 | fakeplayer.command.sleep | |
| /fp wakeup | 醒来 | fakeplayer.command.wakeup | |
| /fp status | 显示玩家状态 | fakeplayer.command.status | |
| /fp respawn | 重新复活一个死亡的虚假玩家 | fakeplayer.command.respawn | 当服务器配置未在虚假玩家死亡时踢出时可用 |
| /fp tp | 传送到一个虚假玩家 | fakeplayer.command.tp | |
| /fp tphere | 将一个虚假玩家传送到你 | fakeplayer.command.tphere | |
| /fp tps | 与虚假玩家交换位置 | fakeplayer.command.tps | |
| /fp set | 更改一个虚假玩家的配置 | fakeplayer.command.set | |
| /fp config | 更改默认配置 | fakeplayer.command.config | |
| /fp expme | 转移经验到你 | fakeplayer.command.expme | |
| /fp attack | 攻击 | fakeplayer.command.attack | |
| /fp mine | 挖掘 | fakeplayer.command.mine | |
| /fp use | 使用/互动/放置 | fakeplayer.command.use | |
| /fp jump | 跳跃 | fakeplayer.command.jump | |
| /fp stop | 停止所有操作 | fakeplayer.command.stop | |
| /fp turn | 转身 | fakeplayer.command.turn | |
| /fp look | 看着指定位置 | fakeplayer.command.look | |
| /fp move | 移动 | fakeplayer.command.mvoe | |
| /fp ride | 骑乘 | fakeplayer.command.ride | |
| /fp sneak | 潜行 | fakeplayer.command.sneak | |
| /fp sprint | 冲刺 | fakeplayer.command.sprint | |
| /fp swap | 交换主手和副手物品 | fakeplayer.command.swap | |
| /fp hold | 保持对应热条物品 | fakeplayer.command.hold | |
| /fp cmd | 执行命令 | fakeplayer.command.cmd | |
| /fp reload | 重新加载配置文件 | OP | |
## 个性化配置
**每个玩家**可以配置自己的**个性化**设置,将在下次生成时生效
命令示例:
+ `/fp config list` - 查看所有个性化配置
+ `/fp config set collidable false` - 设置个性化配置
| 配置项目 | 备注 |
|--------------------|-------------------------------------------------------------------------------------------------------------------------------------|
| collidable | 是否启用碰撞盒 |
| invulnerable | 是否启用无敌模式 |
| wolverine | 是否启用超级治疗模式 |
| look_at_entity | 自动看向附近的攻击性实体(包括玩家),可以与 `attack` 结合使用以自动攻击怪物 |
| pickup_items | 是否拾取物品 |
| skin | 是否使用你的皮肤 |
| replenish | 是否自动补充 |
| autofish | 是否自动钓鱼 |
## 权限
## 占位符变量
+ `%fakeplayer_total%`: 虚假玩家总数
+ `%fakeplayer_creator%`: 虚假玩家的创建者姓名
+ `%fakeplayer_actions%`: 虚假玩家的活动操作,例如:`USE|ATTACK`
# 自定义翻译
1. 在 `plugins/fakeplayer` 中创建 `message` 文件夹
2. 将 [此文件](fakeplayer-core/src/main/resources/message/message.properties) 复制到 `message` 文件夹
3. 将文件重命名为 `message_language_region.properties`,例如 `message_en_us.properties`
4. 编辑你的 `config.yml`,将 `i18n.locale` 设置为刚刚创建的名称后缀,例如 `en_us`
5. 键入 `/fp reload-translation` 重新加载翻译文件。 如果你更改了 `i18n.local` ,你应该先 `/fp reload`
**确保翻译文件使用 UTF-8 编码**
# 常见问题
## xxx 丢失连接:PacketEvents 2.0 注入失败
某些插件更改了虚假玩家的 `Connection`,你可以将 `prevent-kicking` 设置为 `ALWAYS` 来解决它。
```yaml
# config.yml
prevent-kicking: ALWAYS
```
## 虚假玩家没有吸引攻击
默认情况下,虚假玩家处于无敌模式。玩家需要手动关闭无敌模式,使用 `/fp config set invulnerable false` 来吸引攻击。关闭后,他们将
收到饥饿和生命值影响。你可能需要使用 `res` 或信标来确保虚假玩家的 `hunger` 和 `health`。
## 虚假玩家过一段时间后会自动登出
这可能是由于类似 `AutheMe` 的插件检测到虚假玩家已经很长时间没有登录。你可以在配置文件的 `self-commands` 中包含登录命令,以防止插件
因为长时间不活动而将玩家从服务器踢出:
```yaml
# 注意:你应该使用复杂的密码,否则 AuthMe 可能拒绝它
self-commands:
- '/register abc123! abc123!'
- '/login abc123!'
```