格莱梅拉农场水域

格莱梅拉农场水域

FarmWater 将 Minecraft 风格的自动作物浇水功能带到了 Hytale。将水放置在距离你的耕地 4 个方块范围内,耕地就会自动保持湿润。适用于水源方块和流动水。无需配置——只需安装并开始耕种!

食物\农业

💧 FarmWater 💧

水方块会自动保持周围4格半径内的农田湿润。我的世界风格。

当前版本仅适用于 Hytale stable 5!不要错过我其他精彩的项目——请查看 GlymeraCraft 的个人资料 Discord: https://discord.gg/s5NRFWfxgy


◆ FarmWater 是什么?

在原版 Hytale 中,耕种需要你每次作物变干时,手动用喷壶浇水。无法通过简单地在农田附近放置水来实现自动化浇水。如果你玩过 Minecraft,就会知道在农田4格范围内放置一个水源方块,可以让土壤永久保持湿润——无需手动操作。

FarmWater 将这个深受喜爱的 Minecraft 机制带到了 Hytale。在你耕好的农田4格范围内放置任何水方块——无论是水源方块还是流动水——该插件都会自动保持该土壤湿润。无需喷壶。无需手动劳作。只需在农场附近放水,种下作物,然后看着它们生长。

此插件是任何包含耕种玩法的 Hytale 服务器必备的生活质量改进。它消除了手动浇水的重复性劳作,同时仍然要求玩家用渠道建造一个适当的灌溉系统。结果是耕种变得既有回报又有策略性,而不是乏味的工作。


◆ FarmWater 解决的问题

Hytale 的耕种系统需要持续的手动浇水。每次你的作物变干时,你都需要拿起喷壶,装满水,然后逐个给每块农田方块浇水。对于小型私人菜园来说,这还可以管理。但对于大型农场来说,这就变成了一项极其繁琐和重复的任务,足以让玩家完全放弃耕种。

▸ 没有 FarmWater

  • 你在耕好的土壤上种植作物
  • 一段时间后土壤变干
  • 你必须用喷壶手动浇灌每个方块
  • 如果忘记浇水,作物会枯萎死亡
  • 大型农场变成了一份需要不断浇水的全职工作
  • 玩家因为太繁琐而避免耕种
  • 当你在探索或建造时,无人照看的农场会死亡

▸ 有 FarmWater

  • 你在耕好的农田附近放置水方块
  • 插件自动保持4格范围内所有农田湿润
  • 同时支持水源方块和流动水
  • 只要有水在附近,作物永远不会变干
  • 你可以建造带有战略性水渠的大型农场
  • 耕种变成一个有趣的建造挑战,而不是一件苦差事
  • 即使你外出探索,你的农场也能保持湿润

◆ 工作原理

FarmWater 使用一个高度优化的两阶段扫描系统,完全在后台运行。无需任何命令。无需任何配置。只需安装插件,在农田附近放水,魔法就会发生。

▸ 第一阶段:发现(每 30 秒)

发现阶段扫描服务器上的所有已加载区块,以查找耕好的农田方块。这不仅限于玩家周围的区域——如果一个区块已加载,FarmWater 就会找到其中的任何农田。发现系统使用多级过滤方法来最小化性能影响:

  1. 区块级过滤器 - 在扫描单个方块之前,插件检查一个区块列是否包含任何耕好的土壤。如果没有,整个区块会立即跳过。这消除了绝大多数的待扫描区块。
  2. 方块区域级过滤器 - 每个区块列被划分为垂直的方块区域(32格高)。插件在扫描其内容之前,检查每个方块区域是否存在耕好的土壤。空的方块区域和只包含空气的方块区域会立即跳过。
  3. Y 范围过滤器 - 只考虑 Y=30 到 Y=200 之间的方块。地下水平以下或山峰顶部的农田会被排除在扫描之外。这避免了在不可能存在的位置浪费时间。
  4. 方块级扫描 - 在符合条件的方块区域内,每个方块位置都会与缓存的耕好土壤方块 ID 进行对比,使用快速的整数比较(没有字符串查找)。发现的农田位置使用位打包坐标存储,以最小化内存使用。

新发现的农田会自动添加到跟踪列表中。已被破坏或变回普通土壤的农田会在灌溉阶段自动移除。

▸ 第二阶段:灌溉(每 10 秒)

灌溉阶段处理所有被跟踪的农田位置,并检查附近是否存在水。对于每个被跟踪的农田方块,插件执行以下步骤:

  1. 验证 - 确认该方块仍然是耕好的土壤。如果农田已被破坏、踩踏或变回泥土,则将其从跟踪列表中移除。
  2. 水距离检查 - 在农田周围扫描一个 9x9 的水平区域(每个方向4格)。水会在农田的 同一 Y 高度下方一格 (Y-1) 处被检查。这意味着水可以在土壤表面高度,也可以在农田下方的渠道中。插件会检测水源水流动水
  3. 原生系统检查 - 如果 Hytale 的原生浇水系统(例如,雨水或其他内置机制)已经将该土壤标记为外部浇过水,则插件会跳过它以避免冲突。
  4. 持续时间检查 - 如果农田最近被喷壶浇过水,且持续时间比插件应用的更长,则插件会跳过它。喷壶的手动浇水始终具有优先级。
  5. 应用浇水 - 土壤的浇水计时器被设置为当前时间加 20 秒(扫描间隔 + 10 秒缓冲)。只要水仍然在附近,这能确保持续湿润。
  6. 视觉效果更新 - 农田的视觉状态被更新,以显示深色的、湿润的土壤纹理。插件能正确地区分普通湿润土壤和施肥过的湿润土壤,并应用正确的视觉状态("Watered"(已浇水)或 "Fertilized_Watered"(已施肥和浇水))。

◆ 水检测 - 什么算作水

FarmWater 通过读取世界的流体层(而非方块层)来检测水。这意味着它使用 Hytale 的原生流体系统来确定什么是水,什么不是。插件识别:

  • 水源方块 - 你从桶中放出的标准静止水方块。这些是为你农场提供的最可靠、最永久的水源。
  • 流动水 - 从水源方块向外流出的水。这意味着一个单一水源方块可以通过其流动的水流灌溉更大的区域。建造创造性的水渠系统,让流动水为你工作!

▸ 水放置

水会在相对于农田的两个 Y 高度被检测到:

  • 同一高度 (Y) - 水直接放置在农田旁边,位于同一水平面上。
  • 下方一格 (Y-1) - 水位于农田表面下方的渠道或沟渠中。这是经典的 Minecraft 灌溉渠设计,水在作物行之间的1格深渠道中流动。

水平检测范围是每个方向4格,在每个农田方块周围形成一个 9x9 的方形检测区域。这与 Minecraft 的灌溉半径完全一致。


◆ 农场布局示例

FarmWater 旨在支持多种农场布局。以下是一些能完美运行的常见设计:

▸ 经典排状农场(Minecraft 风格)

在你的农场中心放置一排水源。在水源两侧种植作物,最远可达4格。水能永久保持范围内所有土壤湿润。

F F F F W F F F F
F F F F W F F F F
F F F F W F F F F
F F F F W F F F F

F = 农田, W = 水

▸ 单水源方块农场

在 9x9 区域中心放置一个单一水源方块。4格范围内所有方向的农田都会保持湿润。这是最节省空间的设计。

F F F F F F F F F
F F F F F F F F F
F F F F F F F F F
F F F F F F F F F
F F F F W F F F F
F F F F F F F F F
F F F F F F F F F
F F F F F F F F F
F F F F F F F F F

F = 农田, W = 水(中心)

▸ 地下渠道农场

将水直接放置在农田下方。农田位于水方块之上。下方的水可以保持土壤湿润,不占用任何地表空间。非常适合最大化你的作物面积!

侧视图:
F F F F F F F F F   (表面 - 农田)
W W W W W W W W W   (下方 - 水直接在农田下方)

F = 农田, W = 水(下方1格)

▸ 流动水农场

在一端放置一个水源方块,让水流过一个渠道。流动水可以灌溉渠道沿线任何位置4格范围内的所有农田。一个水源方块可以通过其流动水的覆盖范围,有效地灌溉一个巨大的区域。

F F F F F F F F F F F F F
W ~ ~ ~ ~ ~ ~ ~
F F F F F F F F F F F F F

W = 水源, ~ = 流动水, F = 农田

◆ 性能与优化

FarmWater 从底层设计就注重性能。在可能拥有数千个已加载区块的服务器上运行,该插件使用多种优化策略来最小化 CPU 消耗:

  • 直接 BlockSection 访问 - 不使用像 world.getBlockType() 这样昂贵的上层 API 调用,插件直接从区块的内部数据结构中读取方块 ID。对于批量扫描操作,这要快几个数量级。
  • 整数方块 ID 缓存 - 方块类型标识符在启动时解析一次,并以整数形式缓存。所有后续比较都使用快速的整数查找,而不是慢速的字符串比较。
  • FastUtil 集合 - 插件对所有内部数据结构使用高性能的 FastUtil 库(IntOpenHashSet, LongIterator, LongSet)。这些专用集合对于原始类型的处理速度明显快于 Java 的标准集合。
  • 多层区块过滤 - 在扫描单个方块之前,插件在区块级和方块区域级进行过滤。不包含农田的区块和方块区域会被完全跳过,避免了数百万次不必要的方块检查。
  • 位打包位置存储 - 农田位置存储为打包的 64 位长整型,而不是完整的坐标对象。这使用了 X(26位)、Y(12位)和 Z(26位)打包,支持水平 ±3300 万方块、垂直高达 4096 方块的世界范围,而每个跟踪位置仅使用 8 字节。
  • 交错扫描间隔 - 繁重的发现扫描每 30 秒运行一次,而轻量的灌溉检查每 10 秒运行一次。这确保了处理负载随时间均匀分布。
  • 线程安全设计 - 所有世界操作通过 world.execute() 在 Hytale 的世界线程上运行。跟踪数据使用 ConcurrentHashMap 以实现安全的跨线程访问。该插件从不阻塞主服务器线程。
  • 自动清理 - 不再存在的农田会在灌溉扫描期间自动从跟踪列表中移除。跟踪数据永远不会无限增长。
  • 提前终止 - 一旦在范围内找到第一个水方块,水邻近检查就会停止。插件不会浪费时间扫描剩余区域。

◆ 兼容性

  • 与喷壶一起使用 - FarmWater 尊重手动浇水。如果玩家用喷壶给土壤浇水,且浇水持续时间更长,插件不会覆盖它。较长的浇水计时器始终具有优先级。
  • 与原生 Hytale 系统一起使用 - 如果 Hytale 的内置机制(例如,雨水)将土壤标记为外部浇过水,插件会完全跳过这些方块。没有冲突,没有重复浇水。
  • 与施肥土壤一起使用 - 插件能正确检测施肥过的农田并应用适当的视觉状态(Fertilized_Watered 与 Watered)。你的肥料投入是安全的。
  • 多世界支持 - 插件自动扫描服务器上的所有世界。无论你有一个世界还是二十个,每个世界都会得到自动灌溉。
  • 无需命令 - 没有需要配置的命令,没有需要设置的权限,没有需要编辑的配置文件。安装插件,它就可以工作了。

◆ 功能摘要

  • 自动农田浇水 - 4格内的水方块能永久保持耕好的土壤湿润
  • 支持水源和流动水 - 一个单一水源可以通过其流动的水流进行灌溉
  • Minecraft 风格的4格半径 - 与 Minecraft 完全相同的灌溉半径,用于熟悉的农场设计
  • 检测地表和地下的水 - 支持地表水和地下灌溉渠道
  • 土壤视觉效果更新 - 浇过水的农田视觉上会变黑,以显示其湿润状态
  • 肥料兼容 - 正确处理施肥过的土壤并应用正确的视觉状态
  • 基于区块的扫描 - 作用于所有已加载的区块,而不仅仅是玩家附近——即使你离开,你的农场也能保持湿润
  • 无需玩家靠近 - 已加载区块中的农场无论玩家在哪里都会被浇水
  • 零配置 - 安装后即可忘记。没有配置文件,没有命令,没有权限
  • 高度优化 - 直接方块区域访问、整数 ID 缓存、位打包位置、FastUtil 集合
  • 非侵入性 - 尊重喷壶持续时间、Hytale 原生浇水系统和肥料状态
  • 多世界支持 - 自动适用于服务器上的所有世界
  • 自动清理 - 被破坏的农田会自动从跟踪中移除
  • 轻量级 - 没有 ECS 系统、没有事件监听器、没有命令——只有高效的后台扫描

◆ 技术细节

供希望了解底层运行机制的服务器管理员和开发者参考:

▸ 扫描时间

  • 发现扫描:每 30 秒 - 扫描所有已加载区块以寻找新农田
  • 灌溉扫描:每 10 秒 - 检查被跟踪的农田附近是否有水
  • 首次发现扫描在服务器启动后 5 秒 开始 - 给世界加载留出时间
  • 浇水持续时间:每个周期 20 秒(10秒间隔 + 10秒缓冲)- 确保扫描之间没有间隙

▸ 扫描范围

  • 水平灌溉半径:所有方向 4 格(9x9 区域)
  • 垂直水检测:同一 Y 高度Y-1(下方一格)
  • Y 扫描范围:Y=30 到 Y=200 - 农田发现限于此垂直范围
  • 扫描的区块方块区域:方块区域 0-6(覆盖 Y=0 到 Y=224)

▸ 检测的方块和流体类型

  • 农田:Soil_Dirt_Tilled(所有交互状态)
  • 水源:Water_Source 流体类型
  • 流动水:Water 流体类型

▸ 内存使用

  • 每个被跟踪的农田位置使用 8 字节(位打包长整型)
  • 10,000 个被跟踪的农田方块 ≈ 80 KB 内存
  • 100,000 个被跟踪的农田方块 ≈ 800 KB 内存
  • 位置存储在以世界名称为键的 ConcurrentHashMap 中

◆ 安装

  1. 停止你的 Hytale 服务器
  2. GlymeraIrrigation-1.2.0.jar 复制到服务器目录的 mods/ 文件夹中
  3. 你的 mods/ 文件夹现在应包含:
mods/
  GlymeraIrrigation-1.2.0.jar
  1. 启动你的服务器
  2. 检查服务器日志以确认:"[GlymeraIrrigation] 已启动 - 半径: 4, 扫描: 10秒, 发现: 30秒"
  3. 在你耕好的农田附近放置水,然后看着它自动保持湿润!

就这样! 没有配置文件,没有命令,没有权限。插件安装后立即可用。


◆ 重要说明

  • 仅影响耕好的土壤 - 普通泥土、草地或其他方块不受影响。你仍然需要用锄头先耕地,然后插件才能给它浇水。
  • 水必须存在 - 该插件不会凭空创造水或产生水分。你需要在农田范围内放置实际的水方块(水源或流动水)。
  • 区块必须已加载 - 插件仅扫描和浇灌已加载区块中的农田。如果一个区块被卸载(附近没有玩家且未强制加载),该区块中的农田将不会被浇水,直到区块重新加载。
  • 喷壶仍然有效 - 你仍然可以正常使用喷壶。如果喷壶提供的浇水持续时间比插件更长,则喷壶的计时器具有优先级。
  • 没有农田踩踏保护 - 此插件不能防止农田被踩踏。它只处理浇水。如果土壤变回泥土,它会自动从跟踪中移除。

◆ 常见问题

▸ 这适用于流动水还是仅适用于水源方块?

两者都适用!插件同时检测水源方块和流动水。一个单一水源可以通过其流动的水流灌溉一个大面积区域。

▸ 如果我移除水会发生什么?

农田将在 20 秒内(下一个灌溉周期)停止被浇水。浇水计时器到期后,土壤会根据 Hytale 的正常耕种机制自然变干。

▸ 这会影响服务器性能吗?

FarmWater 经过高度优化,使用最少的服务器资源。该插件使用直接方块区域访问、整数 ID 缓存、多层区块过滤和位打包位置存储。在典型服务器上,性能影响可以忽略不计。

▸ 我可以更改灌溉半径吗?

半径目前固定为 4 格(与 Minecraft 的灌溉半径一致)。未来更新中可能会添加带有可自定义设置的配置文件。

▸ 这在所有世界中都有效吗?

是的!该插件自动扫描并浇灌服务器上所有世界中的农田。

▸ 这会与其他耕种插件冲突吗?

FarmWater 设计为非侵入性的。它尊重 Hytale 的原生浇水系统和手动喷壶使用。它应该与影响耕种系统的其他插件兼容。

▸ 我的农场没被浇水——哪里出了问题?

请检查以下几点:

  • 土壤是否已耕好?该插件只浇灌耕好的土壤(Soil_Dirt_Tilled)。
  • 水是否在4格范围内?数一下格子——水距离农田的水平距离不能超过4格。
  • 水是否在正确的高度?水必须与农田处于同一 Y 高度,或在其下方一格。
  • 区块是否已加载?农田必须位于已加载的区块中。
  • 检查服务器日志中的启动信息,确认插件已正确加载。

◆ 版本历史

▸ v1.2.0(当前版本)

  • 重大优化:直接 BlockSection 访问替代 world.getBlockType()
  • 添加了方块 ID 缓存以实现更快的查找
  • 每个周期进行完整的区块扫描(无部分扫描)
  • 多层区块和方块区域过滤
  • 位打包位置存储以减少内存使用

▸ v1.1.0

  • 切换到基于区块的发现(无需玩家接近)
  • 现在可以发现并跟踪所有已加载区块中的农田

▸ v1.0.0

  • 初始发布
  • 基本的农田浇水,水方块4格半径范围内

◆ 支持

有问题或疑问?在此留言或访问我们的 Discord!


由 GlymeraCraft 开发