Skip to content

LunaDeerMC/DeerFoliaPlus

Repository files navigation

DeerFoliaPlus

DeerFoliaPlus 相比于 DeerFolia 引入了更多额外功能,这些功能并非性能优化方面的改动,而是增强了服务器的功能性。

此分支特性

  • FakePlayer (Leaves/Lumina)
  • Bedrock-style Stronghold Generation — 基岩版风格的要塞生成,随机无限分布代替 Java 版的 128 个环状分布
  • Syncmatica Protocol — 服务端与客户端之间共享 Litematica 投影,支持上传/下载/修改
  • Servux Protocol — 为 MiniHUD/Litematica 提供结构边界框叠加层和实体 NBT 数据查看
  • Recipe Sync Protocol — 向 NeoForge/Fabric 客户端同步完整配方数据,支持 JEI 等模组显示服务器配方
  • Custom Recipe System — 通过配置文件定义自定义合成、烧炼、营火烹饪、高炉、切石机等配方
  • Posture System — 支持原地坐下、躺下、趴下,以及将楼梯/台阶识别为可坐下的椅子
  • 实用快捷命令 — 快速设置时间/天气、飞行、无敌、帽子、复制物品、自杀、查看玩家背包,以及快速打开末影箱和各类工作台

额外配置

所有配置项位于 config/deer-folia-plus.yml 中,以下为各功能的配置说明:

FakePlayer

配置项 默认值 说明
fake-player.enable true 是否启用假人功能
fake-player.limit 1 每个玩家最多创建的假人数量
fake-player.prefix "" 假人名称前缀
fake-player.suffix "" 假人名称后缀
fake-player.always-send-data true 是否始终发送假人数据
fake-player.resident-fake-player true 是否在服务器关闭时保存假人并在启动时恢复
fake-player.open-bot-inventory true 是否允许打开假人物品栏
fake-player.skip-sleep-check true 假人是否跳过睡觉检测
fake-player.spawn-phantom false 假人是否生成幻翼
fake-player.can-ride-entity true 假人是否可以骑乘实体
fake-player.use-action true 假人是否可以使用 Action 系统
fake-player.modify-bot-permission Enum: OWNER 修改假人的权限等级

Bedrock-style Stronghold Generation

配置项 默认值 说明
bedrock-stronghold-generation.enabled false 启用基岩版风格的要塞随机分布
bedrock-stronghold-generation.spacing 48 要塞之间的平均距离(区块)
bedrock-stronghold-generation.separation 12 要塞之间的最小距离(区块),需小于 spacing

Syncmatica Protocol

配置项 默认值 说明
syncmatica.enable false 启用 Syncmatica 协议支持
syncmatica.use-quota false 启用上传配额限制
syncmatica.quota-limit 40000000 配额启用时的最大上传大小(字节)

Servux Protocol

配置项 默认值 说明
servux.structure-protocol false 启用结构边界框叠加协议(MiniHUD 结构显示)
servux.entity-protocol false 启用实体数据协议(实体/方块实体 NBT 查看)

Recipe Sync Protocol

配置项 默认值 说明
recipe-sync.neoforge true 是否向 NeoForge 客户端发送 neoforge:recipe_content 配方同步数据
recipe-sync.fabric true 是否向 Fabric 客户端发送 fabric:recipe_sync 配方同步数据

Custom Recipe System

配置项 默认值 说明
custom-recipe.enabled false 是否启用自定义配方系统,启用后会从配置文件加载自定义配方

自定义配方内容定义在 config/custom-recipes.yml 中,可用于添加自定义合成、烧炼、高炉、营火烹饪、切石机等配方。

Posture System

配置项 默认值 说明
posture.enabled false 是否启用姿态系统;关闭时姿态命令与椅子交互均不可用
posture.chair-interaction true 是否允许玩家空手右键楼梯或台阶坐下
posture.require-side-signs false 是否要求一整排椅子的两端各有一个普通告示牌或墙上告示牌
posture.max-chair-chain-length 8 连续楼梯/台阶可被识别为同一排椅子的最大数量,超过则不视为椅子

使用说明:

  • 启用后,玩家可以空手右键下半砖或底部楼梯坐下;连续的楼梯或台阶会按同一排椅子识别,每个方块对应一个座位。
  • 楼梯会按朝向修正坐姿位置;台阶会自动按连续长度更长的方向识别座位朝向。
  • posture.require-side-signs 开启后,只有当整排椅子的首尾两端都有告示牌时,才允许右键坐下。
  • /sit/lay 会锁定玩家位置,期间不能移动;/crawl 会让玩家保持爬行姿态,但仍可正常移动。
  • 玩家可使用 /get-up 主动起身;处于坐下或躺下状态时,也可以通过潜行或跳跃快速起身。

以下姿态命令默认对所有玩家开放:

命令 权限节点 说明
/sit deerfoliaplus.command.sit 原地坐下;启用椅子交互后也可通过空手右键楼梯或台阶坐下
/lay deerfoliaplus.command.lay 原地躺下,并锁定在当前位置
/crawl deerfoliaplus.command.crawl 进入爬行状态,同时保留移动能力
/get-up deerfoliaplus.command.get-up 从坐下、躺下或爬行状态恢复站立

实用快捷命令

以下命令无需额外配置,安装即可使用。带 * 标记的命令默认所有玩家可用,其余默认仅 OP 可用。

命令 权限节点 说明
/day deerfoliaplus.command.day 将时间设置为白天(1000 tick)
/noon deerfoliaplus.command.noon 将时间设置为正午(6000 tick)
/night deerfoliaplus.command.night 将时间设置为夜晚(13000 tick)
/rain deerfoliaplus.command.rain 将天气设置为下雨
/storm deerfoliaplus.command.storm 将天气设置为雷暴
/sun deerfoliaplus.command.sun 将天气设置为晴天
/fly [player] deerfoliaplus.command.fly 切换飞行模式,可指定玩家
/god [player] deerfoliaplus.command.god 切换无敌模式,可指定玩家
/hat * deerfoliaplus.command.hat 将主手物品戴在头上,头上有物品则交换到主手
/more [amount] deerfoliaplus.command.more 复制主手物品到指定数量(默认增加到最大堆叠)
/suicide * deerfoliaplus.command.suicide 玩家自杀
/inspect <player> deerfoliaplus.command.inspect 查看并操作目标玩家的背包、物品栏、装备

快捷工作方块命令

| /enderchest | deerfoliaplus.command.enderchest | 直接打开自己的末影箱 | | /workbench | deerfoliaplus.command.workbench | 直接打开 3x3 合成台界面 | | /craftingtable | deerfoliaplus.command.craftingtable | 直接打开 3x3 合成台界面 | | /stonecutter | deerfoliaplus.command.stonecutter | 直接打开切石机界面 | | /loom | deerfoliaplus.command.loom | 直接打开织布机界面 | | /grindstone | deerfoliaplus.command.grindstone | 直接打开砂轮界面 | | /anvil | deerfoliaplus.command.anvil | 直接打开铁砧界面 | | /cartographytable | deerfoliaplus.command.cartographytable | 直接打开制图台界面 | | /smithingtable | deerfoliaplus.command.smithingtable | 直接打开锻造台界面 |

如何自行编译

  1. 克隆本仓库到本地;
  2. 在终端执行 ./gradlew applyAllPatches 应用补丁;
  3. 完成后会在项目目录下生成 DeerFoliaPlus-serverDeerFoliaPlus-api ,前者即为源码目录;
  4. 执行 ./gradlew createPaperclipJar ,完成后会在 DeerFoliaPlus-server/build/libs 下生成服务器核心文件;

如何添加新补丁

对上游代码修改

  1. 修改 DeerFoliaPlus-serverDeerFoliaPlus-api 中的源码;
  2. DeerFoliaPlus-serverDeerFoliaPlus-api 目录中将修改内容添加 git add . 并提交 git commit ,填写补丁信息;
  3. 在根目录运行 ./gradlew rebuildAllServerPatches ,将刚才提交的修改生成为新补丁;

新增文件

  1. DeerFoliaPlus-server/src/main/java 中新增相关文件;
  2. 直接提交 git add . 并提交 git commit ,填写补丁信息即可;

通过将与上游源码无关的新增文件独立开,减少对上游修改 patch 文件的长度使得项目更易于维护。

修改已有补丁

修改已有的补丁步骤相对复杂:

方法一

这种方法的工作原理是暂时将 HEAD 重置为所需的提交,然后使用 git rebase 进行编辑。

❗ 在编辑过程中,除非您 同时 将对应模块重置为相关提交,否则将无法编译。就 API 而言,您必须重新应用 Server 补丁,如果正在编辑 Server 补丁,则必须重新应用 API 补丁。还要注意的是,这样做时任何一个模块都可能无法编译。这不是一个正常的现象,但这种情况时有发生。请给 Paper 官方提交 ISSUE !

  1. DeerFoliaPlus-serverDeerFoliaPlus-api 目录中执行 git rebase -i base ,应该会输出 这样的 内容。
  2. 将你需要修改的补丁由 pick 替换为 edit 然后保存退出;
    • 一次只能修改 一个 文件!
  3. 对你需要修改的补丁作出新的修改;
  4. 使用 git add . 添加补丁,再使用 git commit --amend 提交;
    • 确保添加了 --amend 选项 否则将会创建一个新补丁而不是修改原补丁。
    • 此处提交时也可以修改补丁信息。
  5. 终端执行 git rebase --continue 应用更新;
  6. 再在跟项目目录执行 ./gradlew rebuildAllServerPatches 生成新的补丁;

方法二

如果你只是在编辑一个较新的提交,或者你的改动很小,那么在 HEAD 上进行改动,然后在测试后移动提交可能会更简单。

这种方法的好处是可以编译测试你的改动,而不必弄乱你的 HEAD。

手动

  1. 修改相应位置源码;
  2. 提交修改(可以不写提交内容);
  3. DeerFoliaPlus-serverDeerFoliaPlus-api 目录中执行 git rebase -i base ,将刚才的提交移动到你想要修改的补丁提交下方;
  4. 将新提交的 pick 修改为如下内容:
    • f/fixup:将你的新修改合并到补丁内,但不改变补丁信息;
    • s/squash:将你的新修改合并到补丁内,并用新的补丁信息替换原补丁信息;
  5. 在跟项目目录执行 ./gradlew rebuildAllServerPatches 应用补丁更新;

自动

  1. 修改相应位置源码;
  2. 提交修改内容 git commit -a --fixup <要修改的补丁 hash 值>
    • 如果希望更新补丁信息,你可以使用 --squash 替换 --fixup
    • 如果你不知道要修改的补丁 hash 值,你可以使用 git log 查看;
    • 如果你只知道补丁的名称,你可以使用 git log --grep=<补丁名称> 查看;
  3. 执行 git rebase -i --autosquash base ,这将会自动将你的修改移动到对应的补丁下方;
  4. 在跟项目目录执行 ./gradlew rebuildAllServerPatches 应用补丁更新;

更新上游 DeerFolia 修改

  1. 首先在 gradle.properties 中将 deerFoliaRef 更新为上游最新提交的 hash 值;
  2. 应用更新的补丁:./gradlew applyAllPatches
  3. 如果存在冲突,解决冲突后执行 git add . 将解决完的文件添加到暂存区;
    • 如果遇到 invalid object 错误,可以使用 git apply --reject <patch file> 手动应用补丁;
    • 会生成 .rej 文件,可在其中查看冲突内容,手动解决冲突;
    • 完成后删除 .rej 文件,然后执行 git add .
  4. 然后运行 git am --resolved 继续应用补丁;
  5. 如果存在新的冲突,重复步骤 3 和 4;
  6. 全部补丁应用完成后,更新补丁:./gradlew rebuildAllServerPatches

About

DeerFoliaPlus 相比于 DeerFolia 引入了更多额外功能,这些功能并非性能优化方面的改动,而是增强了服务器的功能性。

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages