Crop Sticks(作物 Stick)
基本信息
| 属性 | 值 |
|---|---|
| Block 类 | BlockCropSticks |
| 父类 | BlockContainerCropsNH |
| TileEntity | TileEntityCropSticks |
| 材质 | Material.plants(植物音效) |
| 硬度 | 0.8F / 0.2F |
| 注册名 | cropsnh:cropSticks |
功能
Crop Sticks 是 CropsNH 的核心方块,负责承载作物生长。每个 Stick 上方可以种植一株作物,作物在该方块上进行生长、变异、收割。
种植与生长
- 种植:右键点击空 Stick,手持种子可种植(需要下方是注册的土壤方块)
- 生长 Tick:每 128 刻(TileEntityCropSticks.TICK_RATE)作物尝试生长一次
- 生长要素:作物需要光照、水分、化肥、土壤才能正常生长;缺水/缺肥会减速,杂草会降低产量
- 变异:两株相邻(同种类/不同种类)作物有机会在生长过程中触发 cross-breed,产生新种子
交互处理
BlockCropSticks 通过 onBlockActivated / onBlockClicked 将交互委托给 ICropStickTile:
// 右键:优先检查 ICropRightClickHandler(如 ItemCropRightClick)
// 再调用 crop.onRightClick(player, heldItem)
onBlockActivated → ICropRightClickHandler → ICropStickTile.onRightClick()
// 左键:优先检查 ICropLeftClickHandler(如 ItemSpadeNH 铲平)
// 再调用 crop.onLeftClick(player, heldItem)
onBlockClicked → ICropLeftClickHandler → ICropStickTile.onLeftClick()
收割与掉落
- 作物成熟后右键收割,掉落
getBreakItems():包含 Stick 本身(不破坏)+ 作物掉落物 - 破坏 Stick 时若上有作物,也会触发收割逻辑并掉落
相邻方块变化检测
onNeighborBlockChange检测下方土壤是否被移除,若作物无法在新土壤上生长则转化为迁居者(Migrator)作物
渲染
renderAsNormalBlock() = false,使用自定义RenderCrop渲染器- 无碰撞箱(
getCollisionBoundingBoxFromPool = null),允许实体通过
摆放要求
- 下方必须有注册的土壤:
SoilRegistry.instance.isRegistered(blockBelow, metaBelow) - 土壤类型变更时作物会转为 Migrator(杂草化)
- 不需要光照即可放置(但作物生长需要光照)
TileEntityCropSticks 关键方法
| 方法 | 功能 |
|---|---|
plantSeed(EntityPlayer, ItemStack) |
种植种子 |
onRightClick(EntityPlayer, ItemStack) |
右键交互:收割/查看信息 |
onLeftClick(EntityPlayer, ItemStack) |
左键交互:拔除作物 |
harvest() |
触发收割,返回掉落物列表 |
cross(ICropStickTile other) |
与相邻 Stick 上的作物进行变异 |
getNeighbours() |
获取相邻的 ICropStickTile |
getSeed() |
获取当前作物种子数据 ISeedData |
hasCrop() |
是否有作物 |
getBreakItems() |
获取破坏时的掉落物 |
onInvalidSoilDetected() |
检测到无效土壤,转化为 Migrator |
onEntityCollision(Entity) |
实体碰撞回调(如肥料效果) |
核心注册表
| 注册表 | 作用 |
|---|---|
CropRegistry |
注册所有作物类型(ICropCard) |
MutationRegistry |
注册作物变异规则(亲本A + 亲本B → 子代) |
SoilRegistry |
注册可用土壤方块 |
FertilizerRegistry |
化肥效率修正 |
HydrationRegistry |
水分需求与容量 |
WeedEXRegistry |
杂草-EX 效果注册 |
BootProtectionRegistry |
保护作物不被踩踏损坏 |
第三方集成
| 集成 Mod | 集成类型 | 功能 |
|---|---|---|
| GregTech | 核心依赖 | GTNH 核心依赖,所有配方和物品类均依赖 GregTech API |
| NEI | 配方显示 | NEI 配方处理器和数据导出器 |
| Waila | 工具提示 | 作物生长进度和状态显示 |
| Forestry | 多农场兼容 | Forestry 多农场作物支持 |
| IC2 | 物品/效果 | IC2 辐射药水降低和物品引用 |
| Thaumcraft | 要素/作物卡片 | TC 要素注册和 TC 作物卡片 |
| TinkerConstruct | 收成处理 | Tinkers’ 工具收成处理和矿石浆果 |
| StructureLib | 结构通道 | 结构通道注册 |
| ExtraUtilities | 浇水交互 | ExtraUtilities 浇水壶对作物的作用 |
| FindIt | 过滤器 | FindIt 物品/方块过滤器 |
| BetterBuildersWands | 魔杖交互 | 魔杖与 crop stick 的交互映射 |
| Backhand | 副手拦截 | 副手交互事件拦截 |
| MCLib | 音效 | MCLib 音效事件注册 |
| ForbiddenMagic | TC 扩展要素 | Forbidden Magic 额外 Thaumcraft 要素 |