========================================
全部功能 - 已实现功能记录
（汇总所有功能分类的"做了什么"，按分类分节）
========================================
说明:
- 本文件汇总全部功能分类的已实现内容
- 每节对应一个功能分类（如 动物养殖 / 烧烤），后续新分类在此追加
- 各分类的详细转换流程见 tuilun 下对应的《XX转化关系.txt》


########################################
【动物养殖】(xy_animal)
########################################

一、鸡窝(产蛋) —— 低级机制
- 放蛋: 手持鸡蛋右键鸡窝逐级放置递增 (0蛋→1蛋→…→5蛋), 每次消耗1个鸡蛋,
  提示 "鸡蛋已放入鸡窝 (N/5)" [已实现]
- 取蛋: 空手右键取走对应数量鸡蛋, 以掉落物形式获得, 回到0蛋形态,
  提示 "取走了 N 个鸡蛋" (5/4/3/2/1蛋均可取) [已实现]

二、鸡饲料盆 (chickenmanger_0/1)
- 填充: 手持种子右键, 消耗16个种子 → 满, 提示 "鸡饲料已加满" [已实现]
- 计时变空: 满盆计时60秒 → 自动变空, 开始提示 "鸡饲料已加满，鸡正在进食…",
  完成提示 "鸡饲料已吃完" [已实现]

三、饲料槽-小麦 (manger_0/3/2/1)
- 填充: 手持小麦右键, 消耗32个小麦 → 满, 提示 "小麦饲料已加满" [已实现]
- 计时逐级变空: 满→半量→少量→空, 每级计时60秒, 吃完提示 "小麦饲料已吃完" [已实现]

四、饲料槽-水 (manger_0/mangerwater)
- 加水: 手持水桶右键 → 水槽, 消耗水桶返还空桶, 提示 "已给饲料槽加水" [已实现]

五、饲料槽-胡萝卜 (manger_0/pigmanger_1/2)
- 填充: 手持胡萝卜右键, 消耗32个胡萝卜 → 满, 提示 "胡萝卜饲料已加满" [已实现]
- 计时逐级变空: 满→半量→空, 每级计时60秒, 吃完提示 "胡萝卜饲料已吃完" [已实现]

六、粪便 (feces_3/2/1)
- 清理: 空手右键逐级清理 (一坨→半坨→仅痕迹→消失), 提示 "清理了粪便" [已实现]


########################################
【烧烤】(xy_barbecue)
########################################

一、烧烤架 (barbecuegrill_0/1)
- 点火: 无火烧烤架_1 + 打火石 → 点燃烧烤架_2 (打火石不消耗) [已实现]
- 点火: 无火烧烤架_1 + 烈焰弹 → 点燃烧烤架_2 (消耗1个烈焰弹) [已实现]
- 灭火: 点燃烧烤架_2 + 水桶 → 无火烧烤架_1 (消耗水桶,返还空桶) [已实现]

二、烤串 (放烧烤架上,右键2次转换,不计时,需下方点燃烧烤炉)
- 牛肉串: beefkebabs_1(生) → beefkebabs_0(半熟) → beefkebabs_3(熟) [已实现]
- 羊肉串: lambkebabs_1(生) → lambkebabs_0(半熟) → lambkebabs_3(熟) [已实现]
- 烤蔬菜串: roasted_vegetables_0(生) → _1(半熟) → _3(熟) [已实现]
- 烤香菇串: roastedmushrooms_0(生) → _1(半熟) → _3(熟) [已实现]
- 失败提示: 下方不是点燃的烧烤炉 → "§c下方不是点燃的烧烤炉，无法翻烤！" [已实现]

三、上杆 (手持生食材右键 支杆b_34)
- 生鸡肉(放置后) roastchickenplace_0 → 烤鸡(上烤架_生) roastchicken_0 [已实现]
- 死猪 dead_pig → 烤乳猪(生) roastpig_0 [已实现]
- 鳕鱼 minecraft:cod → 烤鳕鱼(生) grilledcod_0 [已实现]
- 鲑鱼 minecraft:salmon → 烤鲑鱼(生) grilled_fish [已实现]

四、计时烤制 (支杆下方篝火 campfire,约60秒,右键激活 autoStart=False)
- 烤鸡: roastchicken_0(生) → roastchicken_1(熟) [已实现]
- 烤乳猪: roastpig_0(生) → roastpig_1(熟) [已实现]
- 烤鳕鱼: grilledcod_0(生) → grilledcod_1(熟) [已实现]
- 烤鲑鱼: grilled_fish(生) → grilled_salmon(熟) [已实现]
- 开始提示 "§e开始烤制烤X，约60秒…" / 完成提示 "§e烤X烤熟了！" [已实现]
- 下方无篝火: 拒绝开始 "§c支杆下方需要放一个篝火(营火)才能烤制！" [已实现]
- 烤制中拿走篝火: 暂停,篝火放回继续 (保持原时间戳) [已实现]
- 退出/重启游戏: 继续计时 (绝对时间戳写入方块实体数据持久化) [已实现]

五、取下 (空手右键烤熟方块,以掉落物形式获得整只)
- 烤鸡(熟) roastchicken_1 → b_34 + 掉落 烤鸡整只 roast_chickenplace_1,
  提示 "§a取下了烤鸡（整只）" [已实现]
- 烤乳猪(熟) roastpig_1 → b_34 + 掉落 烤乳猪整只 roastpignew_1,
  提示 "§a取下了烤乳猪（整只）" [已实现]

六、手持物品右键方块表面 (ServerItemUseOnEvent)
- 手持原版生鸡肉 minecraft:chicken 右键任意方块表面 → 生成 生鸡肉(放置后)
  roastchickenplace_0, 消耗1个, 提示 "已放置生鸡肉，可右键支杆上杆烤制" [已实现]


########################################
【通用架构】
########################################
- 右键转换与计时转换已拆分为两个独立类 (XxxService / XxxTimerService), 解耦 [已实现]
- 事件由 FeatureDispatcher 统一监听路由 (blockOwner/itemUseOnOwner/timerOwner) [已实现]
- 右键服务通过 FeatureDispatcher.startTimerFor 把计时启动转发给计时服务 [已实现]
- 计时用绝对时间戳写入方块实体数据, 支持退出/重启后继续计时 [已实现]
- 计时源方块"空手右键开始计时"(2026-09-15): 所有下方必须是点燃炉灶(stove_2)的
  计时源方块(汤锅汤羹/生米锅、油锅炸物生/半熟、丸子机加料后/半熟、蒸笼蒸X_生),
  单独放置或转换后未触发计时时, 空手右键该方块即可开始/继续计时;
  下方是点燃炉灶才真正开始(否则提示"需要放在点燃的炉灶上"), 已在计时中再空手右键
  提示"已经在计时中"; 实现于 汤锅/油锅/丸子机(ChujuService)/面食蒸笼(MianshiService)
  的 handleBlockUse + 各自 _handleStartTimer, 经 FeatureDispatcher.startTimerFor 转发,
  计时服务 startTimer 内做下方判定(丸子机 ChujuTimerService 已补下方检查) [已实现]
- 计时提示含"总共多少秒"(2026-09-16): 放料/入笼开始计时 与 空手右键开始计时 的提示,
  均按计时链累加算出总时长(如 胡萝卜牛肉汤 3级、油锅炸物 2级、蘑菇炖鸡 3级、生米锅 单级);
  汤锅/油锅 右键提示还会带出成品名(从"盛出/取出"规则提取);
  空手右键"已在计时中"的方块同样提示剩余级数("正在熬制中…") 
  【2026-09-22 更新】汤锅计时统一 1秒/级、油锅计时统一 2秒/级, 提示不再报秒数 [已实现]
- 空手右键中间态提示剩余级数(2026-09-22): 每个计时源方块(含 三分熟/半熟 等中间态)
  从当前状态沿链累加剩余级数, 提示只报成品/进度, 无秒数 [已实现]
- 蔬菜鱼片汤计时链补全(2026-09-16): 补 3 级计时规则(_0->_1->_2->_3, 每级1秒),
  vegetablefishsoup_0/1/2 方块 json tick 开启(true), 放料提示不含秒数 [已实现]
- 原版放置(手持原版生鸡肉/鲑鱼/鳕鱼右键方块表面放置对应方块)已拆到独立目录
  xiangyemod/yuanbanfangzhi (YuanbanData/YuanbanService), 从烧烤/死亡生物中剔除 [已重构]
- 原版食物成品盘转换(乡野食物·原版食物): 手持原版食物右键 空盘子(rtdd:plate_0) →
  盘子本身变为对应成品盘, 消耗1个食物; 生鱼片(plate_17)可用 鳕鱼/鲑鱼/热带鱼
  (含网易端鳕鱼报 minecraft:fish 兼容) [已实现]
  南瓜派→plate_16 / 西瓜片→plate_18 / 面包→plate_20 / 曲奇→plate_21 / 熟鸡肉→plate_4
  (实现于 xiangyemod/yuanbanfangzhi/YuanbanData.py PLATE_RULES + YuanbanService, 替换模式)


########################################
【食材补齐】(2026-09-02 第二批)
########################################
- 大米(brownrice): 从Java版迁入, 归乡野食材/谷物·米面组, 用于生米锅/米饭/竹筒饭/蛋炒饭 [已迁移]
- 生面(noodles): 从Java版迁入, 归面食.甜食/面粉·面团组, 用于汤锅生面汤/炒锅意面 [已迁移]
- 牛肋(costillavacaes): 从Java版迁入, 归乡野食材/肉类·肉馅组, 用于胡萝卜牛排骨(菜名保留"牛排骨") [已迁移]
- 葱(scallions): 从Java版迁入, 归乡野食材/蔬菜·切配组, 用于炒锅加葱/葱花锅底 [已迁移]
- 香菜锅底 → 改名"葱花锅底"(食材用葱): Java版无香菜, 触发食材已从青菜改为葱 [已改]


########################################
【死亡生物】(xy_deadmob) 2026-09-02
########################################
一、挂肉钩-挂放 (手持尸体/原版鱼右键空钩 meathook, 消耗1)
- 死牛→整只牛(cow_0)、死猪→整只猪(pig_0)、死羊→整只羊(sheep) [已实现]
- 原版鲑鱼(salmon)→鲑鱼挂一条→两条(hang_meat_hooks_1/2) [已实现]
- 原版鳕鱼(cod)→鳕鱼挂一条→两条(meathookcod_1/2) [已实现]

二、挂肉钩-切肉 (手持 菜刀cleaver, 不可逆, 掉落物随机数量)
- 牛: 去头掉牛头骨1+原版牛肉4~5 → 去四肢掉牛腿肉4 → 去肉掉牛肋2~3+牛里脊2~3+牛肉4~5 → 空钩掉碎肉2~3+牛肉4~5 [已实现]
- 猪: 去皮掉五花肉2~3+生猪排4~5 → 去四肢掉猪蹄4 → 去肉掉猪肋排2~3+生猪排4~5 → 空钩掉碎肉2~3+生猪排4~5 [已实现]
- 羊: 去皮掉羊小排2~3+生羊肉4~5 → 去四肢掉羊腿4 → 去肉掉羊里脊2~3+生羊肉4~5 → 空钩掉碎肉2~3+生羊肉4~5 [已实现]

三、挂肉钩-取下退回 (切前空手右键, 掉落回尸体)
- 整只牛/猪/羊 → 空钩 + 掉落回 死牛/死猪/死羊 [已实现]

四、鱼晾干 (计时300秒, 挂上自动开始 autoStart=True)
- 鲑鱼挂一条→干一条、两条→干两条; 鳕鱼挂两条→干两条 [已实现]

五、取鱼干 (空手右键干钩, 掉落物)
- 干鲑鱼/干鳕鱼钩 → 掉落 鱼干(thedriedfish) [已实现]

六、死鱼/死鱿鱼切块 (手持菜刀)
- 死鲑鱼: 4刀每刀掉1份生鱼片, 共4份 → 消失 [已实现]
- 死鳕鱼: 3刀每刀掉1份生鱼片, 共3份 → 消失 [已实现]
- 死鱿鱼: 切须掉5~6个鱿鱼须 → 变死鱿鱼(切掉鱿鱼须) [已实现]

七、手持原版鱼右键方块表面放置死鱼 (ServerItemUseOnEvent)
- 原版生鲑鱼(salmon) 右键方块表面 → 在其表面放置 死鲑鱼(killfish_0), 消耗1条 [已实现]
- 原版鳕鱼(cod) 右键方块表面 → 在其表面放置 死鳕鱼(killcod_0), 消耗1条 [已实现]
- 注意: 网易端 ItemUseOn 事件对生鳕鱼报的 itemName 是 minecraft:fish, 已额外注册, 否则放置不了 [已实现]
- 被点方块是挂肉钩/挂鱼钩/尸体等死亡生物方块时跳过, 交还挂鱼逻辑 [已实现]

七之补、拆方块掉回原版生食材 (ServerPlayerTryDestroyBlockEvent)
- 破坏 死鲑鱼(killfish_0) → 掉落 原版生鲑鱼 1条 [已实现]
- 破坏 死鳕鱼(killcod_0) → 掉落 原版生鳕鱼 1条 [已实现]
- 破坏 生鸡肉(放置后 roastchickenplace_0) → 掉落 原版生鸡肉 1个 [已实现]
- 取消默认掉落, 不把方块本身掉出来

八、去皮额外掉落原版皮革
- 牛/猪/羊 去皮步骤额外掉落 原版皮革(minecraft:leather) 4~6个 [已实现]

【未做】尸体生成机制(玩家杀死生物生成尸体) 按txt标注暂时不搞


########################################
【手办】(xy_shouban) 2026-09-02
########################################
一、盲盒开盒 (空手右键 盲盒_未开 jewelrybox_0)
- 换为 盲盒_开过 jewelrybox_1, 随机开出 1 个手办(掉落物形式), 提示 "盲盒开出了XX！" [已实现]
- 开出范围: 猫手办_0(cat_0)、狐狸手办_0(fox_0)、赞助者手办_1~6(figurines~5) 共8种均等概率 [已实现]
- 注意: 只开猫/狐狸转换链【第一个】, cat_1~3、fox_1~3 无法从盲盒开出 [已实现]

二、猫/狐狸手办循环切换 (空手右键逐级切换)
- 猫: cat_0 → cat_1 → cat_2 → cat_3 → cat_0 (循环) [已实现]
- 狐狸: fox_0 → fox_1 → fox_2 → fox_3 → fox_0 (循环) [已实现]
- 说明: cat_1~3、fox_1~3 只能通过循环转换获得

三、静态手办 (无转换)
- 赞助者手办_1~6(figurines~5) 仅由盲盒开出, 无右键转换 [已实现]


########################################
【市场贸易】(xy_market) 2026-09-03
########################################
一、条箱 放入/取出 (woodenbox_0~7)
- 放入: 手持对应物品右键 空条箱 → 消耗32个 → 变为对应条箱(苹果/胡萝卜/土豆/桃子/橘子/鳕鱼/鲑鱼) [已实现]
- 取出: 空手右键装满条箱 → 空条箱 + 掉落32个对应物品 [已实现]

二、货桶 放入/取出 (fishbucket_0 等)
- 放入: 手持对应物品右键 空货桶 → 消耗32个 → 变为对应货桶(鳕鱼/鲑鱼/胡萝卜/土豆/桃子/橘子/苹果) [已实现]
- 取出: 空手右键装满货桶 → 空货桶 + 掉落32个对应物品 [已实现]

三、售卖盒 放入/取出 (sellingboxes 等)
- 放入: 手持对应物品右键 空售卖盒 → 除南瓜/西瓜消耗1个原版方块外, 其余消耗32个 → 变为对应售卖盒(含 售卖盒(鲑鱼) b_30) [已实现]
- 取出: 空手右键装满售卖盒 → 空售卖盒 + 取回(南瓜/西瓜1个原版方块, 其余32个) [已实现]

四、悬赏纸循环 (空手右键逐级切换)
- bountypaper → bountypaper_1 → bountypaper_2 → bountypaper [已实现]

五、布料已按标注禁用 [已处理]
- 售卖盒(黄绿布料 clothbox_1)、售卖盒(棕色布料 clothbox_2): 名字带"禁用", 已调去 禁用(xy_jinyong) 标签, 移出市场分组, 旧切换规则已移除


########################################
【家具家私】(xy_furniture) 2026-09-03
########################################
（旧 BlockSwitchService 已废弃, 全部 7 个功能统一由 xiangyemod/jiaju 的
FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher）

一、箭桶 (arrowbarrel_0 无箭 / arrowbarrel_1 有箭)
- 存箭: 手持箭(普通箭/药水箭)右键, 批量存入手中所有箭, 至多32只, count记录
  (类型/药水效果aux不符不能混存, 记录写方块实体数据 rtdd_swt=count, 退出重进不丢) [已实现]
- 取箭: 空手右键, 一次性取回方块记录的全部箭(数量+类型+药水效果aux) [已实现]

二、水槽 (flume_0~5)
- 加水: 空手右键空槽 → 满水 [已实现]
- 取水: 手持空水桶右键满水 → 空槽 + 返还装满水的水桶 [已实现]
- 放水: 空手右键满水 → 直接把水放掉回到空槽(不放水桶取水) [已实现]
- 放脏盘子: 满水起手持脏盘子(rtdd:plate_0a)逐个放入(最多4个), 消耗1个 [已实现]
- 取盘子: 空手右键逐个取回, 取回的是洗好的 盘子(rtdd:plate_0); 取完最后一个 → 空槽 [已实现]

三、盘子架 (trayracks_1 空 ~ trayracks_6 五个)
- 放盘子: 手持盘子逐个放入(最多5个), 消耗1个 [已实现]
- 取盘子: 空手右键逐个取回 [已实现]

三b、碗柜 (cupboard_0 空 ~ cupboard_3 三个碗)
- 放碗: 手持木碗(rtdd:bowlasoup)右键逐个放入(最多3个), 消耗1个 [已实现]
- 取碗: 空手右键逐个取回(掉落物形式) [已实现]
- 满柜: 手持木碗右键三个碗的碗柜 → 提示"碗柜已满", 拦截默认行为 [已实现]

四、书柜 (bookcase 系列, 后放先取, 至多13本)
- 放书: 手持书/附魔书右键逐个放入, 消耗1本; 堆栈"替换方块前从旧方块读出→替换后写回新方块",
  多本连续放入不会丢 [已实现]
- 取书: 空手右键后放先取(LIFO), 取回的书以掉落物形式掉在书柜前(不进背包) [已实现]
- 附魔书: 附魔以扁平ench字段([[附魔ID,等级],...])存方块实体(rtdd_swt=stack/rtdd_sws),
  取回时重建userData; 不存含__type__/__value__的userData(引擎写不进方块实体),
  退出重进词条不丢(掉落保护仍是掉落保护) [已实现]
- 健壮性: 方块实体里损坏/为None的旧堆栈数据按空堆栈处理, 不再报错(TypeError) [已实现]

四b、药水架 (lotion 系列, 后放先取, 至多3瓶)
- 从药物系统(xy_medicine)移至家具分类(xy_furniture) [已实现]
- 放药水: 手持任意药水(普通/喷溅/滞留)右键逐个放入, 消耗1瓶, 记录药水名+aux(aux决定效果) [已实现]
- 取药水: 空手右键后放先取(LIFO), 取回的药水以掉落物形式掉在架前(原样返还, 含aux效果) [已实现]
- 满架: 手持药水右键三瓶满的药水架 → 提示"已满", 拦截默认行为(防止误喝药水) [已实现]
- 方块链: 药水架_1(空)=lotion_0, 药水架_2(一瓶)=lotion_1, 药水架_3(两瓶)=lotion_2,
  药水架_4(三瓶)=lotion_3 [已实现]

五、厨具架 (kitchenwarerack 系列, 组合顺序无关, 后放先取, 至多2件)
- 放入: 手持 锅铲/锅勺/菜刀/炒锅 右键空架/未满架 → 消耗1个 → 按组合成型 [已实现]
  (组合与顺序无关: 先放锅再放刀 == 先放刀再放锅, 都是 炒锅+菜刀;
   空+锅铲→单锅铲, 空+锅勺→单锅勺, 空+菜刀→单菜刀, 空+炒锅→单炒锅;
   双锅铲/锅铲+锅勺/双锅勺/炒锅+菜刀/菜刀+锅铲/双菜刀/菜刀+锅勺)
- 取回: 空手右键 → 后放先取(LIFO), 取回最后放入的厨具, 形态退回剩余单件/空 [已实现]

六、古式唱片机 (b_108 无碟 / b_109 有碟)
- 放入: 手持任意原版唱片(minecraft:music_disc_*)右键无碟 → 有碟, 消耗1个, 记录唱片 [已实现]
- 取回: 空手右键 → 无碟 + 掉落该唱片(原样返还, 记录在方块实体数据, 退出重进不丢) [已实现]
- 注: 放入后播放对应唱片曲目 待后续实现 【未做】

七、垃圾桶 (storage_buckets 关闭 / rubbish_bin_2 打开 / b_160 有垃圾)
- 打开: 右键垃圾桶(空手/手持均可) → 打开桶盖(不消耗物品) [已实现]
- 扔垃圾: 打开时手持任意物品右键 → 变为 有垃圾 状态 + 清空主手物品 [已实现]
- 关闭: 右键(空手/手持均可) 打开/有垃圾 → 关闭桶盖 [已实现]

七b、壁炉 (b_88 壁炉 / b_89 壁炉(加柴火) / b_90 壁炉(点燃))
- 加柴: 手持木条(rtdd:b_15)右键空壁炉 → 加柴火, 消耗4个木条 [已实现]
- 点燃: 手持打火石(不消耗)/烈焰弹(消耗1)右键加柴火 → 点燃 [已实现]

八、左键破坏存物方块掉落 (书柜/药水架/厨具架)
- 存了东西的家具方块被左键打碎时: 取消默认掉落 → 掉 空方块本体(保留朝向) + 全部存储物品 [已实现]
  (书柜掉空书柜bookcase+里面的书; 药水架掉空药水架lotion_0+里面的药水; 厨具架掉空架+厨具)
- 附魔书/药水效果在掉落物中保留(取回时重建, 词条/效果不丢) [已实现]
- 与售卖盒区分: 售卖盒破坏重放仍可右键取物; 书柜这类破坏后记录随方块消失, 重放取不到 [已实现]


########################################
【乡野饮料】(xy_drink) 2026-09-04
########################################
实现于 xiangyemod/yinliao (YinliaoData + YinliaoService + YinliaoTimerService, 注册到 FeatureDispatcher)

一、榨汁机 (果汁·榨汁饮品, juicer 系列, 全流程右键)
- 空(juicer) + 水果(消耗1) → 放入水果(juicer_0), 并把水果类型写入方块实体数据(rtdd_jf) [已实现]
- 放入水果 → 榨汁中1 → 榨汁中2 → 榨汁中3 → 完成: 右键逐级推进(每级0.5s冷却) [已实现]
- 完成(juicer_4) 手持玻璃杯(fruitjuice_0)右键(消耗1玻璃杯) → 掉落对应果汁 + 还原空(juicer) [已实现]
- 果汁由第一步放入的水果决定: 西瓜片→西瓜汁(fruitjuice_1)/橙子→橙汁(_2)/苹果→苹果汁(_3)/
  桃子→桃子汁(_4)/葡萄→葡萄汁(_6)/黄豆→豆浆(_7) [已实现]
- 持久化: 每次换态 SetBlockNew 会清空方块实体, 都"先读旧→替换→写回新", 玩家在 榨汁2→榨汁3
  过程中退出游戏, 重进后取出的果汁仍是第一步放入的水果类型 [已实现]
- 黄豆(rtdd:soybean) 物品已从Java版迁入(物品/纹理/名称齐全) [已实现]

二、冰棍盒 (冰棍, icelollybox 系列)
- 未定型(icelollybox_1) + 冰块(消耗1, 原版冰/冰砖/蓝冰/霜冰) → 启动30秒定型计时
  (autoStart=False, 右键激活; 已在定型中不重复消耗) → 定型(icelollybox_2) [已实现]
- 定型 + 对应水果(消耗2) → 各口味冰棍盒(icelollyboxb 橙子/c 苹果/d 桃子/e 葡萄/f 西瓜) [已实现]
- 各口味冰棍盒 空手右键 → 掉落2根对应冰棍 + 还原未定型 [已实现]
- 定型计时用绝对时间戳写方块实体数据, 退出重进继续计时 [已实现]

三、冰棍堆 (组合, 顺序无关, 空手取回按方块状态固定, 不存数据)
- 单根 橙子冰棍/西瓜冰棍 放地上 + 手持另一根右键(消耗1) → 冰棍堆(橙子+西瓜 popsiclepile_2)
  (先放橙子再放西瓜 == 先放西瓜再放橙子, 都会变成 冰棍堆) [已实现]
- 冰棍堆 + 苹果冰棍(消耗1) → 冰棍堆2(橙子+西瓜+苹果 popsiclepile_3) [已实现]
- 空手右键: 冰棍堆2 取出 苹果冰棍 → 退回 冰棍堆; 冰棍堆 取出 西瓜冰棍 → 变回 单根橙子冰棍 [已实现]

四、炒冰盒 (冰棍盒·炒冰盒, frytheicebox 系列)
- 空(frytheicebox) + 冰块(消耗1) → 放冰(frytheicebox_1) [已实现]
- 放冰 + 对应水果(消耗1) → 各口味炒冰盒(苹果/葡萄/西瓜/橘子/桃子) [已实现]
- 各口味炒冰盒 空手右键 → 掉落1个对应冰沙 + 还原空 [已实现]
- 五种口味冰沙齐全: 西瓜冰沙(melonicecreamplace) 已从禁用移回乡野饮料, 正常取出 [已实现]

五、分类/分组调整
- 西瓜冰沙(melonicecreamplace): 分类 禁用(xy_jinyong) → 乡野饮料(xy_drink),
  名称 西瓜冰棍_2(西瓜冰棍)禁用 → 西瓜冰沙, 放入 冰棍(drink_03_popsicle) 分组 [已调整]
- 黄豆(rtdd:soybean): 归乡野食材(xy_ingredients), 放入 谷物·米面(ingr_08_grain) 分组 [已调整]
- 玻璃罐(rtdd:medicinetank): 分类 药物系统(xy_medicine) → 厨具(xy_kitchenware) [已调整]
  (药罐_1~4 medicinetank_1~4 仍留在药物系统分类)
- 天妇罗炸虾(半份)(plate_49a): 分类 炒锅(xy_chaoguo) → 油锅(xy_youguo) [已调整]
- 天妇罗炸虾(半份)(plate_49a): 从 盖饭分组(food_11_rice_meal) 移除, 不再挂"盖饭"分组
  (盖饭分组只剩炒锅盖饭成品: 辣子鸡丁/鳕鱼/香菇滑鸡/麻婆豆腐盖饭) [已调整]


########################################
【文档重写】(2026-09-04 关联整理)
########################################
- 厨具转化关系.txt: 重写, 把已写好的 todo 转正为正式规则:
  搅拌器(肉馅取出/牛奶蛋互通到鸡蛋牛奶/盘子取蛋液半成品)、蒸笼(反向开盖)、
  带油锅铲(上油后变回锅铲)、锅勺(汤锅翻煮)、新增 石磨(磨黄豆->玻璃罐->油罐)、
  擀面杖(加工中消耗, 最后一步掉落返还) [已整理]
- 乡野食材转化关系.txt: 重写, 分组调整为8组, 各类"XX堆"集中到新组【食材堆】;
  新增【原版放置】说明(原版胡萝卜/土豆/青菜右键放置成切配方块);
  标注缺失 青菜原版态(plantvegetables/vegetable) 需从Java版迁入 [已整理]
- 寿司转化关系.txt: 重写, "干海带+大米"改为"干海带+米饭"(米饭=汤锅煮米木碗盛出),
  逻辑严谨区分 竹筒饭用生大米 [已整理]
- 面食.甜食转化关系.txt: 重写, 补 擀面杖消耗/蛋液半成品来源(搅拌器)/米饭vs大米区分 [已整理]
- 乡野自然转化关系.txt: 重写, 柴火堆放/取用转正, 关联水果/大米到食材分类 [已整理]
- 汤锅/炒锅/油锅: 补关联, 米饭来源(汤锅盛出供寿司/蛋炒饭)、油罐来源(石磨制) [已整理]
- 汤锅/炒锅/油锅 转化txt 二次重写(2026-09-11): 全面具体化, 每个步骤标注操作类型
  (【右键转换】/【计时】/【吃】), 补充跨分类关联与食材来源(油罐/裹粉/生饺子/米饭/煎蛋/
  豆腐/豆浆/生面/馍等); 正文全用中文方块名, 英文id统一移入文末【方块清单】对照 [已整理]
- 汤锅/炒锅 转化txt 三次重写(2026-09-11): 食材全部用实际物品名(土豆块/青菜碎/胡萝卜碎/
  葱花碎/蒜末), 不再笼统写"土豆/青菜"; 菜谱每个菜名单独一条, 可多食材的拆开逐条
  (如蔬菜乱炖 20/20a/20b, 蔬菜锅底 5/5a, 煎饼四兄弟 42/42a/42b/42c) [已整理]
- 油锅转化txt 按用户todo转正(2026-09-11): 油罐倒油直接变玻璃罐+玻璃罐取油回罐;
  各炸物消耗数量(鸡块1/猪肉1/薯条3/鱼1/天妇罗4/生饺子3); 计时分级(生60秒->半熟30秒->熟,
  天妇罗/炸饺子单级60秒); 出锅盘装成品掉落物形式; 炸饺子=油锅合体(计时/取出均在油锅_1上);
  天妇罗炸虾递减(整份->半份 plate_49a) [已整理]

【缺失食材·已创建】(对比Java版, 已迁入基岩版行为包)
- 物品类(8个, 均归乡野食材/成品分类, 贴图/JSON/item_texture/lang 齐全):
  胡萝卜碎(crushed_carrots)、葱花碎(crushed_scallions)、土豆块(potato_wedges)、
  奶油(cream_0)、稻谷(rice_seeds)、青菜(qingcai)、青菜碎(vegetable)、
  饭团(rice_balls,乡野食物)、水煮蛋(boiled_egg,乡野食物)
- 青菜物品(qingcai): 整颗未切青菜, 贴图 meiqiedeqingcai.png, 与原版放置衔接
  (手持青菜物品右键放置→切青菜摆放地上); 原 vegetable 物品改名"青菜碎" [已调整]
- 青菜方块(plantvegetables): 已删除(不再使用原版态放置方块) [已删除]

【已放弃·不创建】(用户确认不迁入)
- 鸡腿(raw_chicken_thighs)、鸡翅(raw_chicken_wings)、大饼(bannock) —— 已删除已建文件
- 调料瓶(spicebottle)、香菇串(shiitake_mushroom_skewers)、烤白菜串(cabbage_skewers)、
  蒜苗(a_14/a_16/a_17/a_21)、黑胡椒(blackpepper) —— 未创建, 不再迁入

【食材分组·已落地】(ingredients_groups.json / xy_Ingredients.json / lang 三处同步)
- 新建"食材堆"分组(ingr_09_pile): 土豆堆/胡萝卜堆/桃子堆/橙子堆/苹果堆/鸡蛋堆/鲑鱼堆/鳕鱼堆/面包堆 集中
- 原"蔬果·堆类"(ingr_04_crop) 改名"蔬果·水果": 只留 葡萄/桃子/橙子(单个水果)
- 新食材归组: 胡萝卜碎/葱花碎/土豆块/青菜/青菜碎→蔬菜·切配; 稻谷→谷物·米面; 奶油→调味·佐料 [已调整]
- 乡野食材转化关系.txt 重写纳入新食材(8分组+新食材+稻谷/奶油/切配半成品) [已整理]
- 关联补充: 稻谷→水稻种植(乡野自然)、土豆块→裹粉薯条(油锅) [已整理]

【全局重写·基于行为包实际方块清单】(2026-09-04 第二轮)
- 8个转化关系txt 全部按行为包 netease_blocks/netease_items_beh 实际方块名重写,
  不再沿用旧文档的"翻译名", 并串联分类间关联:
  - 厨具: stove/beater/meatballmaker/steamer/stonemill/oilcan/medicinetank 等工具层
  - 炒锅: wok/coverthepan/oilpan + carrotpotbase/vegetablespotbase/cooking_pepper 锅底 + 各菜谱方块
  - 汤锅: stewedsoup/stewedsoupwater/coverthepot + 各汤底/汤羹 + rawricepot/ricepot 米饭流程
  - 油锅: oilpot_0/1 + 各炸物方块 + plate_* 成品
  - 面食: farineblcok/rawdough/dough 面团链 + dumplings/baozipi/bamboo/bread/cake 各系列
  - 寿司: sushi_0/1 + codsushi/salmonsushi/fishsushi/nigirisushi/sushipile/plate 系列
  - 乡野食材: 8分组(含食材堆/蔬果·水果) + 新食材 + 切配半成品
  - 乡野自然: apple_leaves/tangerine/grapebushes/firewood/riceseedlings + 稻谷种植 [已重写]


########################################
【厨具】(xy_kitchenware) 2026-09-07
########################################
实现于 xiangyemod/chuju (ChujuData + ChujuService + ChujuTimerService, 注册到 FeatureDispatcher)

一、炉灶 (stove -> stove_1 -> stove_2)
- 加柴: 手持木条(b_15)右键空炉灶 → 加木条(stove_1), 消耗4个木条 [已实现]
- 点燃: 手持打火石(不消耗)/烈焰弹(消耗1)右键加木条 → 点燃(stove_2) [已实现]

二、丸子机 (meatballmaker_0~5, 章鱼小丸子)
- 放面团: 手持面团(dough_0)右键空丸子机 → 加入面团(meatballmaker_1), 消耗1个 [已实现]
- 放鱿鱼须: 手持鱿鱼须(rawsquidwhiskersr)右键 → 加入鱿鱼(meatballmaker_2), 消耗4个 [已实现]
- 放配料: 手持任意物品右键 → 加入配料(meatballmaker_3), 消耗1个;
  需下方是点燃的炉灶(stove_2), 否则提示拒绝 [已实现]
- 计时熟化: 加料完成(_3) 计时30秒 → 半熟(_4) 计时30秒 → 熟(_5)
  (autoStart 自动启动, 绝对时间戳写方块实体数据, 退出重进继续计时;
   全程需下方持续存在 stove_2, 中途拿走则暂停, 放回继续) [已实现]
- 取成品: 手持盘子(plate_0)右键熟 → 掉落 章鱼小丸子_完整(plate_40) + 还原空 [已实现]

三、搅拌器 (beater 系列)
- 搅肉: 空+肉(一次性消耗2个) → 肉_1, 空手右键搅打 → 肉_2; 空手取 生猪肉馅(rawmeatball_0)/
  生牛肉馅(rawmeatball_1), 按放入肉的种类决定 [已实现]
- 搅奶: 空+牛奶桶(消耗1个, 返还空桶) → 牛奶_1, 空手右键搅打 → 牛奶_2 → 牛奶_3 [已实现]
- 搅蛋: 空+鸡蛋(一次性消耗3个) → 蛋_1, 空手右键搅打 → 蛋_2 → 蛋_3 [已实现]
- 取奶油: 蛋完成态(beater_custard_2) + 木碗(消耗1) → 掉落 奶油(cream_0) + 还原空 [已实现]
- 鸡蛋牛奶: 牛奶_3+蛋 或 蛋_3+牛奶桶(返空桶) → 鸡蛋牛奶_1; 空手搅打 → 鸡蛋牛奶_3 [已实现]
- 取蛋液: 鸡蛋牛奶_3 + 盘子(消耗1) → 掉落 蛋液半成品(plate_34) + 还原空 [已实现]

四、石磨 (stonemill)
- 加黄豆: 手持黄豆(soybean)右键石磨 → 加入黄豆, 消耗16个 [已实现]
- 研磨: 空手右键旋转(每次90度), 4次回归完成; 进度存方块实体数据 rtdd_mill(退出重进不丢) [已实现]
- 取油罐: 研磨完成 + 玻璃罐(medicinetank, 消耗1) → 掉落 油罐(oilcan) + 石磨回空 [已实现]

五、蒸笼 (steamer <-> steamercover)
- 盖盖/掀盖: 空手右键双向切换 [已实现]

六、手持厨具物品·锅铲蘸油/上油 (2026-09-16)
- 19. 锅铲(spatula) 右键 油罐方块(oilcan) → 手持变 带油锅铲(spatula_oil, 附魔光效),
  油罐次数-1; 次数存油罐方块实体 rtdd_oc(初始16次), 用完(0次)油罐方块变 玻璃罐(medicinetank) [已实现]
- 19a. 带油锅铲 右键 油罐 → 变回锅铲, 油罐次数+1(满16提示"油罐是满的") [已实现]
- 20. 带油锅铲 右键 炒锅(wok) → 炒锅变 炒锅(添油)(oilpan), 不消耗油铲,
  带油锅铲变回锅铲 [已实现]
- 说明: 物品形态变化直接替换手持物品(SetEntityItem), 不以掉落物形式产出;
  实现于 ChujuService.handleItemUseOn + _dipOil/_returnOil/_oilWok [已实现]

【留后】见 全部功能没做什么.txt 厨具节 (盘子→脏盘子、油罐直接上油空炒锅18a、蒸笼蒸熟、锅铲翻炒/锅勺翻煮/菜刀切割/擀面杖具体用法)


########################################
【乡野自然·稻谷移动】(2026-09-07)
########################################
- 稻谷(rice_seeds): 分类 xy_ingredients → xy_natural, 从 乡野食材/谷物·米面(ingr_08_grain)
  移入 乡野自然/水稻·作物(nat_03_crop) [已调整]
- 乡野自然转化关系.txt: 把新加的 todo 全部转正为正式规则并标【待实现】:
  果树"树苗成长"机制、葡萄藤取葡萄(4a)、柴火分解9木条(5b, 现已改切石机获得木条)、水稻成熟取16大米(7a) [已整理]
- 乡野食材转化关系.txt: 移除 稻谷 条目(谷物·米面 只留 大米/生面) [已整理]
- 上述待实现功能已记录到 全部功能没做什么.txt 乡野自然 节


########################################
【乡野自然】(xy_natural) 2026-09-07
########################################
实现于 xiangyemod/ziran (NaturalData + NaturalService + NaturalTimerService, 注册到 FeatureDispatcher)

一、果树结果 (计时, 苹果/桃/橘三条链, autoStart 自动结果)
- 苹果: apple_leaves 计时60秒 -> apple_fruit_1 计时60秒 -> apple_fruit_3 [已实现]
- 桃子: peach_leaves -> b_173(一个) -> b_176(两个) [已实现]
- 橘子: orange_leaves -> tangerine_0 -> tangerine_1 -> tangerine_2 [已实现]

二、葡萄藤 (计时生长 + 取葡萄)
- 生长: grapebushes_1 计时180秒 -> grapebushes_2 [已实现]
- 取葡萄: grapebushes_2 空手右键 -> 掉落3个葡萄(grape) + 变回 grapebushes_1 [已实现]

三、柴火 (堆叠/取用)
- 堆叠: firewood_2(柴火_2) + 手持柴火右键 -> firewood(柴火_1 堆放, 消耗1) [已实现]
- 取用: firewood(堆放) 空手右键 -> firewood_2 + 返还1柴火 [已实现]
- 木条(b_15) 改为 切石机获得: 任意原木(minecraft:logs) x1 -> 木条 x2 (配方 xy_woodstick_stonecut) [已调整]

四、水稻 (种植 + 生长 + 收获)
- 种植: 手持稻谷(rice_seeds) 右键原版耕地(farmland) -> 耕地上方放置 水稻刚种下(riceseedlingsb) [已实现]
- 生长: riceseedlingsb 计时120秒 -> riceseedlingsc 计时120秒 -> riceseedlingsd [已实现]
- 收获(左键破坏): 破坏 刚种下/生长中 -> 掉1稻谷(rice_seeds); 破坏成熟(riceseedlingsd) -> 掉1稻谷 + 16大米(brownrice) [已实现]

【留后】果树"树苗成长"机制 见 全部功能没做什么.txt 乡野自然节


########################################
【乡野食材·切配与裹粉】(xy_ingredients) 2026-09-08
########################################
实现于 xiangyemod/shicai (ShicaiData + ShicaiService, 注册到 FeatureDispatcher)
+ 原版放置扩展 (yuanbanfangzhi/YuanbanData)

一、原版放置(手持原版食材右键方块表面, 放置成"摆放地上"切配方块)
- 胡萝卜(minecraft:carrot) -> 切胡萝卜(摆放地上 cutcarrot_0) [已实现]
- 土豆(minecraft:potato)   -> 切土豆(摆放地上 cutpotato_0) [已实现]
- 青菜(rtdd:qingcai)      -> 切青菜(摆放地上 cutvegetable_0) [已实现]
- 葱(rtdd:scallions)      -> 葱花_1(cutscallions_1) [已实现]

二、菜刀切分(手持 菜刀cleaver 右键, 逐级切, 最后一级再切掉碎)
- 切胡萝卜: cutcarrot_0 -> _1 -> _2 -> _3 -> _4, 再切 -> 掉3胡萝卜碎 + 变空气 [已实现]
- 切土豆: cutpotato_0 -> _1 -> _2 -> _3 -> _4, 再切 -> 掉3土豆块 + 变空气 [已实现]
- 切青菜: cutvegetable_0 -> _1 -> _2 -> _3, 再切 -> 掉3青菜碎(vegetable) + 变空气 [已实现]
- 葱花: cutscallions_1 -> _2 -> _3 -> _4, 再切 -> 掉3葱花碎 + 变空气 [已实现]

三、左键打碎切配方块 -> 掉原版食材(ShicaiService.handleDestroy)
- cutcarrot_0~4 -> 原版胡萝卜; cutpotato_0~4 -> 原版土豆 [已实现]
- cutvegetable_0~3 -> 青菜(qingcai); cutscallions_1~4 -> 葱(scallions) [已实现]

四、蒜末(手持 菜刀 右键 大蒜cutgarlic, 3次)
- 大蒜 -> 掉16蒜末(crushedgarlic) + 变空气 [已实现]

五、裹粉半成品(手持生食材右键 面粉块farineblock_3 表面, 消耗面粉块变空气 + 掉落产物)
- 只认"面粉块"farineblock_3 这一个方块(用户指定) [已实现]
- 事件路径: 裹粉是"手持物品右键方块表面"场景, 走 OnItemUseOn(ServerItemUseOnEvent);
  因此 ShicaiService 注册裹粉食材到 itemUseOnOwner, FeatureDispatcher 改造成
  多服务 fallback(itemUseOnAll), 与原版放置(YuanbanService) 共享 土豆/鸡肉/猪肉
  的注册: 右键面粉块→裹粉先命中; 右键地面→裹粉返回False后交给原版放置 [已实现]
- 生鱼片(sashimi) x6 -> 裹粉的鱼(oilfish_0) x1 [已实现]
- 龙虾(lobster) x2 -> 裹粉的天妇罗(oiltempura) x1 [已实现]
- 原版猪肉 x1 -> 裹粉的猪肉(oilpork) x1 [已实现]
- 原版生鸡肉 x1 -> 裹粉的鸡块(oil_chickennuggets) x6 [已实现]
- 原版土豆 x1 -> 裹粉的薯条(oilfrenchfries) x10 [已实现]

七、肉馅按压(空手右键, ShicaiService._handleMeatPress) [已实现]
- 生猪肉馅(rawmeatball_0) 空手右键 -> 生猪肉馅(按压 rawmeatball_2) [已实现]
- 生牛肉馅(rawmeatball_1) 空手右键 -> 生牛肉馅(按压 rawmeatball_3) [已实现]

八、工作台配方(netease_recipes)
- 大蒜串: 大蒜x7 + 支杆(b_34)x2 -> garlicskewers (xy_garlicskewers) [已实现]
- 辣椒串: 辣椒(pepper)x7 + 支杆x2 -> chiliskewer (xy_chiliskewer) [已实现]
- 食材堆合成(9满格): 苹果/面包/胡萝卜/鳕鱼/土豆/鲑鱼堆 由原 8合1(中间空) 统一改 9满格 [已实现]
- 桃子堆/橙子堆: 9满格 (xy_peachpile_0 / xy_orangepile_0) [已实现]
- 食材堆分解(堆放工作台): 9个堆均新增分解配方 xy_*_pile_unpack -> 对应食材x9 [已实现]


########################################
【寿司】(xy_sushi) 2026-09-09
########################################
实现于 xiangyemod/shousi (ShousiData + ShousiService, 注册到 FeatureDispatcher)
+ 盘装寿司 工作台配方 (netease_recipes/xy_plate_27/28/29/42)
(对应 寿司转化关系.txt 一~七组; 方块中文名/英文id 见该 txt 文末【方块清单】)

一、寿司·基础组
- 干海带 -> 干海带(加饭团)  [手持 饭团 右键, 消耗4个饭团] [已实现]
  机制: 海苔上铺饭团

二、鳕鱼寿司组
- 干海带(加饭团) + 鳕鱼 -> 鳕鱼寿司(加鳕鱼)  [手持 鳕鱼 右键, 消耗1个] [已实现]
- 鳕鱼寿司(加鳕鱼) -> 鳕鱼寿司(卷_1) -> 鳕鱼寿司(卷_2) -> 鳕鱼寿司(卷_3) -> 鳕鱼寿司(卷_4)
  [空手右键, 逐级卷制, 每卷一级共四级] [已实现]
- 鳕鱼寿司(卷_4) -> 鳕鱼寿司块(三个)  [手持 菜刀 右键, 两次] [已实现]
  机制: 第一刀"切寿司中…", 第二刀切好, 得 鳕鱼寿司块(三个)

三、鲑鱼寿司组
- 干海带(加饭团) + 鲑鱼 -> 鲑鱼寿司(加鲑鱼)  [手持 鲑鱼 右键, 消耗1个] [已实现]
- 鲑鱼寿司(加鲑鱼) -> 鲑鱼寿司(卷_1) -> 鲑鱼寿司(卷_2) -> 鲑鱼寿司(卷_4) -> 鲑鱼寿司(成品卷)
  [空手右键, 逐级卷制, 每卷一级共四级] [已实现]
  (注: 鲑鱼卷的游戏内卷序命名不整齐, 无"卷_3"标注; 链顺序以转化关系 txt 为准)
- 鲑鱼寿司(成品卷) -> 鲑鱼寿司块(三个)  [手持 菜刀 右键, 两次] [已实现]

四、热带鱼寿司组
- 干海带(加饭团) + 热带鱼 -> 热带鱼寿司(加热带鱼)  [手持 热带鱼 右键, 消耗1个] [已实现]
- 热带鱼寿司(加热带鱼) -> 热带鱼寿司(卷_1) -> 热带鱼寿司(卷_2) -> 热带鱼寿司(卷_3) -> 热带鱼寿司(卷_4)
  [空手右键, 逐级卷制, 每卷一级共四级] [已实现]
- 热带鱼寿司(卷_4) -> 热带鱼寿司块(三个)  [手持 菜刀 右键, 两次] [已实现]

五、手握寿司组
- 手握普通寿司来源: 饭团 右键 任意非寿司方块表面 -> 表面上方放置 手握普通寿司, 消耗1个饭团
  (txt 第18条 todo, 一并实现, 否则手握组无起点) [已实现]
- 手握普通寿司 + 鳕鱼 -> 手握鳕鱼寿司(一个)  [手持 鳕鱼 右键, 消耗1个] [已实现]
- 手握鳕鱼寿司(一个) -> 手握鳕鱼寿司(两个) -> 手握鳕鱼寿司(三个)
  [手持 手握鳕鱼寿司(一个) 右键, 逐级堆叠, 每级消耗1个] [已实现]
- 手握普通寿司 + 鲑鱼 -> 手握鲑鱼寿司(一个)  [手持 鲑鱼 右键, 消耗1个] [已实现]
- 手握鲑鱼寿司(一个) -> 手握鲑鱼寿司(两个) -> 手握鲑鱼寿司(三个)
  [手持 手握鲑鱼寿司(一个) 右键, 逐级堆叠, 每级消耗1个] [已实现]
- 手握普通寿司 + 热带鱼 -> 手握热带鱼寿司(一个)  [手持 热带鱼 右键, 消耗1个] [已实现]
- 手握热带鱼寿司(一个) -> 手握热带鱼寿司(两个) -> 手握热带鱼寿司(三个)
  [手持 手握热带鱼寿司(一个) 右键, 逐级堆叠, 每级消耗1个] [已实现]
- 手握普通寿司 + 鱿鱼须 -> 手握鱿鱼寿司(一个)  [手持 鱿鱼须 右键, 消耗1个] [已实现]
- 手握鱿鱼寿司(一个) -> 手握鱿鱼寿司(两个) -> 手握鱿鱼寿司(三个)
  [手持 手握鱿鱼寿司(一个) 右键, 逐级堆叠, 每级消耗1个] [已实现]

六、寿司堆组
- 鳕鱼寿司(卷_4) -> 寿司堆(鳕鱼_两个) -> 寿司堆(鳕鱼_三个)
  [手持 鳕鱼寿司(卷_4) 右键, 逐级堆叠, 每级消耗1个] [已实现]
- 鲑鱼寿司(成品卷) -> 寿司堆(鲑鱼_两个) -> 寿司堆(鲑鱼_三个)
  [手持 鲑鱼寿司(成品卷) 右键, 逐级堆叠, 每级消耗1个] [已实现]
- 热带鱼寿司(卷_4) -> 寿司堆(热带鱼_两个) -> 寿司堆(热带鱼_三个)
  [手持 热带鱼寿司(卷_4) 右键, 逐级堆叠, 每级消耗1个] [已实现]
- 递减: 寿司堆(X_三个) -> 寿司堆(X_两个) -> 卷寿司  [空手右键, 逐级取走]
  机制: 每级取走一个并以掉落物形式返还1个卷寿司; 鳕鱼/鲑鱼/热带鱼 同规则 [已实现]

七、盘装寿司组 (工作台合成)
- 盘子 + 手握热带鱼寿司(三个) + 热带鱼寿司(卷_4) -> 盘装寿司(手握热带鱼三份+热带鱼寿司) (plate_27) [已实现]
- 盘子 + 手握鳕鱼寿司(三个) + 鳕鱼寿司(卷_4) -> 盘装寿司(手握鳕鱼三份+鳕鱼寿司) (plate_28) [已实现]
- 盘子 + 手握鲑鱼寿司(三个) + 鲑鱼寿司(成品卷) -> 盘装寿司(手握鲑鱼三份+鲑鱼寿司) (plate_29) [已实现]
- 盘子 + 手握鱿鱼寿司(三个) + 热带鱼寿司(卷_4) -> 盘装寿司(手握鱿鱼三份+热带鱼寿司) (plate_42) [已实现]
(盘子 = 盘子方块 plate_0, 厨具分类可工作台合成)

【留后】吃(寿司块/手握 递减 空手右键吃)、饭团来源(汤锅熟米饭捏饭团, 属汤锅分类)
见 全部功能没做什么.txt 寿司节


########################################
【面食·整理】(xy_mianshi) 2026-09-10
########################################
- 工具·擀面杖组(rollingpin_1/2/3) 整个移入禁用分类(xy_jinyong):
  三个方块 category 由 xy_mianshi 改为 xy_jinyong, 并从 面食 分组(mianshi_01_tool)移除 [已调整]
- 面食.甜食转化关系.txt 重写: 10组改9组(去掉 工具·擀面杖组),
  擀面/和面统一用 厨具擀面杖(rollingpin, 加工中消耗最后一步掉落返还),
  已归入禁用清单补 rollingpin_1/2/3 [已整理]
- 面食.甜食转化关系.txt 中文名规范: 正文全部改用中文方块名, 英文id集中文末【方块清单】,
  与 寿司转化关系.txt 一致 [已整理]
- 厨具转化关系.txt: 擀面杖条目同步去掉"面食分类还有 rollingpin_1/2/3"提及, 注明已禁用 [已整理]
- 吐司面胚(面包面团_4)(breaddough_4) 移入禁用分类(xy_jinyong):
  category 由 xy_mianshi 改为 xy_jinyong, 从 面团·胚料(food_04_dough) 分组移除,
  面食txt 已归入禁用清单补记 (吐司面胚现仅 breaddough_2) [已调整]


########################################
【面食.甜食】(xy_mianshi) 2026-09-10 实现
########################################
实现于 xiangyemod/mianshi (MianshiData + MianshiService + MianshiTimerService, 注册到 FeatureDispatcher)
+ FeatureDispatcher 升级: 方块路由 blockOwner 改为多服务 fallback(blockOwnerAll),
  与物品路由 itemUseOnAll 一致 (面粉块: 食材裹粉去重 + 面食和面 共管) [已实现]
+ 16个计时源方块 netease:block_entity tick 改为 true (发酵/蒸/烤炉)

一、面粉·面团组
- 面粉+鸡蛋x3 -> 面粉(加鸡蛋); +水桶(水桶变空桶) -> 面粉(加水) [已实现]
- 揉面(空手x2) -> 面粉块; 和面(空手x3) -> 生面团; 空手和面四级(和面_1~4) [已实现]
- 和面_4 计时60秒 -> 发酵后; 和面_4 + 菜刀 -> 掉落8个小面团 [已实现]
- 擀面链: 发酵后 手持擀面杖(消耗1根) -> 擀面_1, 空手逐级 -> 擀面_6 -> 生面饼(返还擀面杖) [已实现]
- 生面饼+菜刀 -> 面饼切开; 面饼切开 空手 -> 可颂胚 / +菜刀 -> 掉落生面 [已实现]
- 小面团链: 手持擀面杖(消耗1根) -> 擀面_1, 空手 -> 擀面_3 -> 面团消失, 掉落1个饺子皮(物品) + 返还擀面杖 [已实现]

二、饺子组
- 饺子皮 + 猪肉馅/青菜碎 双向组合 -> 饺子皮(猪肉馅加蔬菜); 捏合 -> 面团消失, 掉落1个生饺子(物品) [已实现]
- 生饺子 手持右键蒸笼(消耗4个) -> 蒸笼(蒸饺子_生), 60秒 -> 熟 [已实现]
- 手持盘子(plate_0)右键熟 -> 掉落美味饺子(全份)盘装(plate_30a) + 蒸笼归位 [已实现]

三、包子组
- 饺子皮 空手 -> 包子皮; +猪/牛肉馅 -> 包子皮(加肉); 捏合/塑形 -> 面团消失, 掉落1个生肉包子(物品) [已实现]
- 生肉包子 手持右键蒸笼(消耗3个) -> 蒸笼(包子_生), 60秒 -> 熟;
  空手取出 掉落3个熟肉包子 + 蒸笼归位 [已实现]
- 熟肉包子+菜刀 -> 半个 -> 1/4个; 手持熟肉包子堆叠(两个/三个); 空手递减取走(掉落1个) [已实现]

四、馍·肉夹馍组
- 生面饼 右键 烤炉(表面) -> 烤炉上方放置 馍 [已实现]
- 馍+菜刀 -> 馍(切开); +熟牛肉/熟猪肉(消耗2个) -> 肉夹馍 [已实现]

五、煎饼卷组
- 煎饼+青菜碎(消耗1个) -> 煎饼(加蔬菜); +熟牛肉(消耗1个)/熟土豆(消耗1个) -> 煎饼卷牛肉(卷制3级);
  +熟鳕鱼/熟土豆(消耗1个) -> 煎饼卷鳕鱼 [已实现]

六、竹筒饭组
- 竹筒+菜刀 -> 竹筒(切开); +大米x32 -> 竹筒(加入米); +肉类 -> 竹筒(加入肉) [已实现]
- 竹筒(加入肉) 手持右键蒸笼 -> 蒸笼(竹筒饭_生), 60秒 -> 熟; 空手取出 熟竹筒饭 + 蒸笼归位 [已实现]

七、面包·烘焙组
- 法棍/吐司/可颂/甜甜圈: 手持整份右键堆叠(2份/3份); 空手递减取走(掉落1个) [已实现]
- 甜甜圈胚(烤熟)+奶油 -> 甜甜圈(成品1个) [已实现]

八、面团·胚料组
- 发酵后/法棍面胚_1/吐司面胚/甜甜圈胚(生) 空手右键循环转换 [已实现]
- 法棍面胚_1 60秒发酵 -> 发面; 发面/吐司面胚/甜甜圈胚(生)/可颂面胚 放烤炉上 60秒烘焙 -> 成品 [已实现]
- 胚/面糊等放到烤炉上后固定(右键不再循环转换), 自动开始计时烤制, 右键提示"开始烤制(60秒)"
  (含 蛋糕面糊/可颂胚/舒芙蕾半成品/发面 等不在右键规则里的烤炉源) [已实现]

九、甜点·蛋糕组
- 面粉(加鸡蛋) 右键 木碗 -> 蛋糕面糊(生); 放烤炉 60秒 -> 烤熟; 脱模 -> 蛋糕胚 + 掉落木碗 [已实现]
- 蛋糕胚+奶油x4 -> 奶油蛋糕; 蛋糕胚+蜂蜜x3 -> 蜂蜜蛋糕; 蛋糕胚+可可豆x16 -> 巧克力蛋糕;
  奶油蛋糕+浆果x4 -> 浆果蛋糕 [已实现]
- 菜刀切分: 整块 -> 3/4块 -> 半块(每次掉落1个小块) -> 半块菜刀拆分消失 + 掉落2个小块;
  蜂蜜(cake_1->1a->1b->2个1d) / 浆果(cake_2->2a->2b->2个2d) / 巧克力(cake_3->3a->3b->2个3d);
  奶油蛋糕不可切分 [已实现]
- 蛋液半成品: 放烤炉 60秒 -> 布丁半成品; +糖x16 -> 焦糖布丁; +奶油 -> 舒芙蕾半成品;
  舒芙蕾半成品 放烤炉 60秒 -> 舒芙蕾 [已实现]
- 蛋液半成品 手持右键蒸笼 -> 蒸笼(蒸牛奶鸡蛋_生), 60秒 -> 熟 [已实现]

【烤炉机制】下方判定为烤炉才对该方块计时(烤炉只做判断); 计时中烤炉被打碎 ->
终止计时 + 烤炉上方方块变掉落物 + 提示; 烤制完成成品 空手右键(下方是烤炉) ->
成品掉落取走(烤炉不动) [已实现]
【蒸笼机制】手持生食右键蒸笼 -> 蒸笼变蒸X_生(蒸笼原位); 蒸X_生下方是
点燃的炉灶(stove_2)才计时60秒 -> 熟; 取出时蒸笼归位 [已实现]
【信息提示】所有转换有成功提示(含消耗数量); 计时开始提示(和面完成开始发酵/
转法棍胚开始发酵/烤制60秒/蒸制)并说清"等计时(X秒)结束变成什么"; 计时结束提示
【已取消】(只保留开始计时提示); 烤炉被打碎/蒸笼下炉灶移走有中断/暂停提示 [已实现]
【操作方向提示】每个转换完成后自动追加可读的下一步指引: 加料类说"你可以加入 猪肉馅、
青菜碎", 计时类说"你可以等计时(60秒)结束变成 法棍"/"放在烤炉上等计时(60秒)结束变成
可颂", 工具类说"手持菜刀右键/手持盘子右键取出"等, 玩家始终知道下一步干什么 [已实现]
【右键体验】右键转换/放入/取出均有0.4秒冷却(长按不会疯狂弹提示); 手持方块物品
右键"功能方块"时若无非处理服务, 直接取消默认放置, 不会"先放一个方块再消失" [已实现]

【留后】吃(熟肉包子/馍/煎饼卷/熟竹筒饭/蛋糕小块 右键吃)、巧克力蛋糕系列
见 全部功能没做什么.txt 面食节

########################################
【油锅】(xy_youguo) 2026-09-11
########################################
实现于 xiangyemod/youguo (YouguoData + YouguoService + YouguoTimerService, 注册到 FeatureDispatcher)
(10个计时炸物方块 netease:block_entity tick 已改 true)

一、油锅基础
- 倒油: 手持油罐右键空油锅 -> 满油锅 + 油罐变回玻璃罐 [已实现]
- 取油: 手持玻璃罐右键满油锅 -> 空油锅 + 获得油罐 [已实现]
- 放料: 手持裹粉半成品/生饺子右键满油锅(油锅下须点燃炉灶 stove_2, 否则提示不放料) -> 炸物(生) [已实现]
  消耗: 裹粉鸡块1 / 裹粉猪肉1 / 裹粉薯条3 / 裹粉鱼1 / 裹粉天妇罗4 / 生饺子3 [已实现]

二、炸制计时(炸物方块正下方是点燃炉灶才计时, 计时数据在炸物方块本身; 炉灶移走暂停+提示)
- 所有炸物计时统一 2秒/级 [已实现]
- 炸鸡块/炸猪排/炸薯条/炸鱼块: 生 -> 半熟 -> 熟(各2秒) [已实现]
- 炸天妇罗/炸饺子: 生 -> 熟(单级2秒); 炸饺子=油锅+饺子合体, 计时/取出均在炸饺子上 [已实现]
- 计时结束提示【已取消】(只保留放料时的开始提示"等计时(X秒)结束变成什么") [已实现]

三、出锅(手持盘子右键熟炸物, 消耗1盘子, 熟炸物取出后【变回油锅(满油)】可直接再放料,
   盘装成品以掉落物形式出现)
- 炸鸡块熟 -> 盘装鸡块(plate_38); 炸猪排熟 -> plate_36; 炸薯条熟 -> plate_37;
  炸鱼块熟 -> plate_39; 炸天妇罗熟 -> 天妇罗炸虾(plate_49); 炸饺子熟 -> plate_51 [已实现]

【提示/体验】倒油/取油/放料/出锅均有提示(含消耗数量与计时时长); 数量不足/油锅下无点燃炉灶
有提示并拦截; 右键冷却0.4秒; 手持方块物品右键油锅类功能方块取消默认放置(全局) [已实现]
【盛出消闪 2026-09-23】手持盘子右键熟炸物(盘子 take_out, 6条), 改走客户端拦截+显式触发
(同汤锅): 客户端 ClientItemUseOnEvent ret=True 消闪 + NotifyToServer('TakeoutRequest')
-> YouguoService.handleTakeoutRequest(校验落点仍是成品防重复). 由 InterceptData.TAKEOUT_CANCEL
自动派生 [已实现]
【留后】各盘装成品 右键吃(总食用功能后续实现)、天妇罗炸虾递减吃(整份->半份 plate_49a)、
盘子用后变脏


########################################
【汤锅】(xy_tangguo) 2026-09-14
########################################
实现于 xiangyemod/tangguo (TangguoData + TangguoService + TangguoTimerService, 注册到 FeatureDispatcher)
(59个计时汤羹方块 netease:block_entity tick 已改 true)

一、汤锅基础
- 加水: 手持水桶右键空汤锅 -> 汤锅(加水) + 水桶变回空桶 [已实现]
- 倒水: 手持空桶右键汤锅(加水) -> 汤锅(空) + 掉落1个水桶 [已实现]
- 盖/掀锅盖: 空手右键双向切换 汤锅(加水)<->汤锅(盖锅) [已实现]

二、汤底(汤锅(加水)+食材右键 -> 汤底, 消耗数量按txt)
- 胡萝卜碎x4->胡萝卜汤 / 青菜碎x4->蔬菜汤 / 鸡蛋x3->蛋花汤 / 土豆块x4->土豆汤 /
  红蘑菇x5->红蘑菇汤 / 棕蘑菇x5->棕蘑菇汤 / 鳕鱼x1->鳕鱼汤 / 鲑鱼x1->鲑鱼汤 /
  豆腐x4->豆腐汤 [已实现]
- 组合汤: 土豆汤+胡萝卜碎x4 或 胡萝卜汤+土豆块x4 -> 胡萝卜土豆汤;
  红蘑菇汤+棕蘑菇x5 或 棕蘑菇汤+红蘑菇x5 -> 蘑菇汤;
  土豆汤+鸡蛋x3 或 蛋花汤+土豆块x4 -> 土豆蛋花汤 [已实现]

三、加肉/鱼/豆腐 -> 汤羹(生), 开始计时(下方须点燃炉灶 stove_2 才计时;
   无炉灶时提示"熬制需要下方是点燃的炉灶", 放上后自动开始)
- 胡萝卜汤+牛肉x2->胡萝卜牛肉汤 / +羊肉x2->胡萝卜羊肉汤 / +猪肋排x2->胡萝卜排骨汤 /
  +鳕鱼->胡萝卜鳕鱼汤 / +鲑鱼->胡萝卜鲑鱼汤 [已实现]
- 蔬菜汤+羊肉x2->清汤羊肉 / +牛肉x2->蔬菜牛肉汤 / +碎肉x5->蔬菜瘦肉汤 /
  +胡萝卜土豆汤x1->蔬菜乱炖 / +生鱼片x10->蔬菜鱼片汤 [已实现]
- 胡萝卜土豆汤+青菜碎x3->蔬菜乱炖 / +牛肋x2->胡萝卜土豆牛骨汤 / +羊肉x2->土豆胡萝卜炖羊肉 /
  +羊小排x2->胡萝卜土豆羊排汤 [已实现]
- 鳕鱼汤+鸡蛋x3 或 蛋花汤+鳕鱼->蛋花鳕鱼汤; 蛋花汤+碎肉x5 或 蔬菜瘦肉汤+鸡蛋x3->瘦肉蛋花汤;
  豆腐汤+鲑鱼 或 鲑鱼汤+豆腐x4->豆腐鲑鱼汤; 蘑菇汤+生鸡肉->蘑菇炖鸡 [已实现]
- 猪蹄汤: 汤锅(加水)+猪蹄x2->生; 生+土豆块x3->加土豆, 开始计时 [已实现]
- 羊肉泡馍汤: 汤锅(加水)+馍->生, 开始计时 [已实现]
- 生面汤: 汤锅(加水)+生面->生, 开始计时 [已实现]
- 饺子汤: 汤锅(加水)+生饺子->生, 开始计时 [已实现]
- 生米锅: 汤锅(加水)+大米x64->生米锅, 开始计时 [已实现]
- 煮鸡蛋: 汤锅(加水)+鸡蛋堆->生, 开始计时 [已实现]
- 煮豆腐: 汤锅(加水)+豆浆->生, 开始计时 [已实现]

四、计时熬制(汤羹方块正下方是点燃炉灶才计时, 计时数据在汤羹本身; 炉灶移走暂停+提示;
   计时结束提示【已取消】, 只保留加料时的开始提示)
- 所有汤羹计时统一 1秒/级 [已实现]
- 胡萝卜牛肉汤(生->四分熟->八分熟->熟)3级; 瘦肉蛋花汤4级;
  猪蹄汤(加土豆->三分熟->七分熟->全熟)3级; 羊肉泡馍汤1级 [已实现]
- 胡萝卜羊肉汤/胡萝卜排骨汤/清汤羊肉/蔬菜牛肉汤/蔬菜瘦肉汤/蔬菜乱炖/
  胡萝卜土豆牛骨汤/土豆胡萝卜炖羊肉/胡萝卜土豆羊排汤/胡萝卜鳕鱼汤/胡萝卜鲑鱼汤/
  蛋花鳕鱼汤/豆腐鲑鱼汤/生面汤/饺子汤(2级)/煮鸡蛋/煮豆腐 [已实现]
- 蘑菇炖鸡3级; 生米锅1级到点后 熟米饭形态1/2/3 随机出一个 [已实现]

五、出锅(熟汤羹+木碗右键, 消耗1木碗, 获得碗装成品(掉落物), 锅变回 汤锅(空))
- 胡萝卜牛肉汤/胡萝卜羊肉汤/胡萝卜排骨汤/清汤羊肉/蔬菜牛肉汤/蔬菜瘦肉汤/蔬菜乱炖/
  胡萝卜土豆牛骨汤/土豆胡萝卜炖羊肉/胡萝卜土豆羊排汤/胡萝卜鳕鱼汤/胡萝卜鲑鱼汤/
  蛋花鳕鱼汤/瘦肉蛋花汤/豆腐鲑鱼汤/蘑菇炖鸡/猪蹄汤/羊肉泡馍汤/熟面条/饺子_碗装/
  蔬菜鱼片汤/碗装米饭(米饭_1/2/3)/美味饺子(全份)盘装(plate_30a) [已实现]
  (饺子汤_熟 除木碗盛 饺子_碗装 外, 手持盘子右键可捞出 美味饺子(全份)盘装) [已实现]
- 全部成品 归 tangguo_finished, 均【吃】, 右键吃 后续由总食用功能实现

六、取出(锅变回 汤锅(空), 掉落物形式)
- 熟米饭 空手右键 -> 饭团x16 (供寿司) [已实现]
- 煮鸡蛋(熟) 空手右键 -> 水煮蛋x9 [已实现]
- 煮豆腐(熟) + 菜刀右键(不消耗) -> 豆腐x16 [已实现]

七、汤面分组(food_02_rice_noodle)
- 手持汤锅成品菜 右键 熟面条(方块) -> 汤面, 消耗1成品菜, 掉落1个木碗
  (含 手持锅态汤(蛋花汤/蔬菜汤/蘑菇汤) 浇面, 同样掉落1个木碗) [已实现]
- 锅态汤面(香菇面/蔬菜面/蛋花面)走 itemUseOn 路径: 手持锅态汤方块右键熟面条表面,
  转换与取消放置在同一事件完成, 避免手持方块物品时引擎把"锅"放出来/掉出来 [已实现]
- 猪排蔬菜面=胡萝卜排骨汤+熟面条 / 羊排蔬菜面=胡萝卜土豆羊排汤+熟面条 /
  牛骨面=胡萝卜土豆牛骨汤+熟面条 / 小鸡炖蘑菇面=蘑菇炖鸡+熟面条 /
  胡萝卜蔬菜面=蔬菜乱炖+熟面条 / 胡萝卜蔬菜牛肉面=蔬菜牛肉汤+熟面条 /
  香菇面=蘑菇汤+熟面条 / 蔬菜鱼片面=蔬菜鱼片汤+熟面条 / 蔬菜面=蔬菜汤+熟面条 /
  蛋花面=蛋花汤+熟面条 / 鸡蛋面=水煮蛋+熟面条 [已实现]
- 蛋花面(加葱花): 蛋花面+葱花碎x1 -> 蛋花面(加葱花) [已实现]
- 猪排蔬菜面加水煮蛋(tonkotsu_ramen): 猪排蔬菜面+水煮蛋x1 -> 猪排蔬菜面加水煮蛋
  (原"猪排拉面"改名, 配方由 胡萝卜排骨汤+熟面条 改为 猪排蔬菜面+水煮蛋) [已实现]
- 所有汤面 均 空手右键直接吃, 归【吃】, 后续由总食用功能实现

【提示/体验】所有转换有提示(含消耗数量与下一步指引: "可继续加料 或 等计时结束变成X,
手持木碗出锅"); 数量不足/下方无点燃炉灶有提示并拦截; 右键冷却0.4秒; 手持方块物品右键
汤锅类功能方块取消默认放置(全局) [已实现]
【盛出消闪 2026-09-23】手持木碗/盘子右键成品汤方块(碗/盘 take_out), 改走客户端拦截+
显式触发: 客户端 ClientItemUseOnEvent 对该组合 ret=True(取消放置前摇, 消除"闪一下"),
再 NotifyToServer('TakeoutRequest') 显式通知服务端执行盛出(FeatureDispatcher.OnTakeoutRequest
-> TangguoService.handleTakeoutRequest, 校验落点仍是成品防重复). 空手取出/菜刀切豆腐不走此路,
照旧 ServerBlockUseEvent. 由 InterceptData.TAKEOUT_CANCEL 自动派生 [已实现]
- 后续修复: 客户端新增 1.5 秒放置冷却(_afterCd): 盛出/出锅后, 同一坐标短时间内再被引擎
  当作"放置"直接 ret 吞掉, 消除"变锅后多放置一次碗/盘"的闪烁 (2026-09-23 修) [已实现]
- 服务端 OnTakeoutRequest 不再设 _cancelItemUse(避免标记残留吞后续 itemUseOn), 由客户端 CD 兜 [已实现]
【留后】各碗装成品/汤面 右键吃(总食用功能后续实现)


########################################
【炒锅】(xy_chaoguo) 2026-09-18
########################################
实现于 xiangyemod/chaoguo (ChaoguoData + ChaoguoService + ChaoguoTimerService, 注册到 FeatureDispatcher)
(4个计时方块 netease:block_entity tick 已改 true: cookedegg / cooking_scallion_pancake_0 /
 cookingdough_0 / cookingdought_0; 全部方块/食材 id 见 炒锅转化关系.txt 与 ChaoguoData.py)

一、炒锅基础
- 炒锅(空)<->炒锅(盖锅): 空手右键双向切换 [已实现]
- 辣椒锅底: 炒锅(空) + 辣椒(rtdd:pepper)x2 -> 炒锅_15(辣椒锅底) [已实现]
- 葱花锅底: 炒锅(空) + 葱花碎x3 -> 炒锅_94(葱花锅底) [已实现]
- 炒锅(空)->炒锅(添油): 带油锅铲右键, 已实现于 ChujuService(不重复注册);
  为保持该 itemUseOn 可达, ChujuService 已把 wok 同时登记为管辖方块
  (否则分发器会因"被点方块归属不含本服务"跳过上油) [已实现]

二、放料(炒锅(添油) + 食材右键 -> 菜生态, 消耗数量按txt)
- 生猪肉x1->炒猪肉_生 / 土豆块x1->炒土豆_生 / 葱花碎x3->加葱 / 蒜末x3->加大蒜 /
  胡萝卜(原版)x2->炒胡萝卜_生 / 生面x2->意面_生 / 碎肉x4->炒碎肉_生 /
  鱿鱼须x3->炒鱿鱼须_生 / 鲑鱼x1->煎鲑鱼_生 / 死鱿鱼(切掉鱿鱼须)x1->炒鱿鱼_生 /
  鸡蛋x1->煎蛋 / 生牛肉x1->黑椒牛排_生 / 牛腿肉x1->黑椒牛腿_生 / 五花肉x1->小炒五花肉_生 /
  青菜碎x4->炒时蔬_加蔬菜_生 / 生面团(发酵后)x1->煎馍_生 / 生面饼x1->煎面饼_生 /
  生鸡肉x1->小炒鸡肉_生 [已实现]

三、基底/中间态 + 主料 -> 菜生态
- 加大蒜+螃蟹x1->炒蟹_生; 炒胡萝卜_熟(基底) + 牛肋x2->胡萝卜牛排骨_生 / +鲑鱼->胡萝卜鲑鱼_生 /
  +羊腿->胡萝卜羊腿_生 / +鳕鱼->胡萝卜炒鳕鱼_生 / +牛里脊->胡萝卜牛里脊_生 /
  +猪肋排x2->胡萝卜炒猪排骨_生 / +羊里脊x2->胡萝卜炒羊里脊_生 / +羊小排x2->胡萝卜炒羊排_生 /
  +生猪肉->胡萝卜炒猪肉_生(组合B) [已实现]
- 葱花锅底+羊肉->清炒羊肉_生 / +生猪肉->清炒猪排_生 [已实现]
- 辣椒锅底+鸡肉->辣子鸡丁_生 / +兔肉x2->辣炒兔肉_生 / +鲑鱼->辣炒鲑鱼_生 /
  +牛肉->辣椒炒牛肉_生 [已实现]
- 辣椒炒牛肉_生+豆腐x1->麻婆豆腐_生 [已实现]
- 小炒鸡肉_半熟+香菇(原版棕/红蘑菇)x8->香菇滑鸡_生 [已实现]
- 炒猪肉_生+土豆块x3->土豆炒猪肉_生(组合A); 炒土豆_熟+生猪肉x1->土豆炒猪肉_生(组合B) [已实现]
- 炒猪肉_生+胡萝卜碎x3->胡萝卜炒猪肉_生(组合A); 炒胡萝卜_熟+生猪肉x1->胡萝卜炒猪肉_生(组合B) [已实现]
- 炒时蔬_加蔬菜_熟+胡萝卜碎x1->炒时蔬_加胡萝卜_生 [已实现]
- 煎面饼_生+葱花碎x3->煎葱油饼_生; 煎面饼_熟+辣椒x3->煎酱香饼 [已实现]
- 意面_熟(基底)+熟牛肉->牛肉意面_生 / +棕蘑菇x5->香菇意面_生 / +胡萝卜碎x3->胡萝卜意面_生 /
  +鸡肉->鸡肉番茄意面_生 [已实现]
- 煎蛋+胡萝卜碎x3->蛋炒饭_加胡萝卜_生 [已实现]

四、翻炒(手持锅铲右键, 需下方点燃炉灶 stove_2, 冷却0.3秒, 每次右键方块旋转90度+
   计数+1(rtdd_cf), 满4次(转回原位)变下一态, 计数存方块实体数据, 换方块自动清零;
   照石磨旋转机制)
- 炒胡萝卜_生->半熟->熟(两级) / 意面_生->熟 / 炒土豆_生->熟 / 炒碎肉_生->熟 /
  炒鱿鱼须_生->熟 / 炒蟹_生->熟 / 煎鲑鱼_生->熟 / 炒鱿鱼_生->半熟->熟(两级) /
  黑椒牛排_生->熟 / 胡萝卜牛排骨_生->熟 / 黑椒牛腿_生->熟 / 清炒羊肉_生->熟 /
  清炒猪排_生->熟 / 胡萝卜鲑鱼_生->熟 / 胡萝卜羊腿_生->熟 / 胡萝卜炒鳕鱼_生->熟 /
  胡萝卜牛里脊_生->熟 / 小炒五花肉_生->熟 / 胡萝卜炒猪排骨_生->熟 /
  胡萝卜炒羊里脊_生->熟 / 胡萝卜炒羊排_生->熟 / 辣子鸡丁_生->熟 / 辣炒兔肉_生->熟 /
  辣炒鲑鱼_生->熟 / 辣椒炒牛肉_生->熟 / 麻婆豆腐_生->熟 / 香菇滑鸡_生->熟 /
  土豆炒猪肉_生->熟 / 胡萝卜炒猪肉_生->熟 / 炒时蔬_加蔬菜_生->熟 / 炒时蔬_加胡萝卜_生->熟 /
  小炒鸡肉_生->半熟->熟(两级) / 牛肉意面_生->熟 / 香菇意面_生->熟 / 胡萝卜意面_生->熟 /
  鸡肉番茄意面_生->熟 / 蛋炒饭_加胡萝卜_生->熟 [已实现]
- 煎酱香饼: 翻炒4次(方块不变, 门控 rtdd_cf=4), 满4次才可空手出锅 [已实现]
- 下方无点燃炉灶 -> 提示"炒锅需要放在点燃的炉灶上才能翻炒"并拦截 [已实现]

五、计时(计时方块正下方是点燃炉灶 stove_2 才计时; 计时数据在方块本身; 炉灶移走暂停+提示;
   放置后 autoStart 自动启动; 未启动时 空手右键计时源方块可手动启动)
- 煎蛋: 2秒煎熟(方块不变, 门控标记 rtdd_cg=1, 之后才可盘子出锅) [已实现]
- 煎葱油饼_生: 2秒 -> 煎葱油饼_熟 [已实现]
- 煎馍_生: 2秒 -> 煎馍_熟 [已实现]
- 煎面饼_生: 2秒 -> 煎面饼_熟 [已实现]
- 计时提示只报"开始", 不报秒数 (2026-09-22, 与汤锅1秒/油锅2秒对齐) [已实现]

六、出锅(手持盘子右键熟态, 消耗1盘子, 锅变回 炒锅(空), 盘装成品以掉落物形式出现)
- 炒土豆->plate_14 / 炒碎肉->plate_24 / 炒鱿鱼须->plate_26d / 炒蟹->plate_33 /
  煎鲑鱼->plate_25 / 炒鱿鱼->plate_26 / 元气煎蛋->plate_22(需 rtdd_cg=1 门控) /
  黑椒牛排->plate_2 / 胡萝卜牛排骨->plate_6 / 黑椒牛腿->plate_7 / 清炒羊肉->plate_3 /
  清炒猪排->plate_1 / 胡萝卜鲑鱼->plate_5 / 胡萝卜羊腿->plate_9 / 胡萝卜炒鳕鱼->plate_15 /
  胡萝卜牛里脊->plate_8 / 小炒五花肉->plate_12 / 胡萝卜炒猪排骨->plate_13 /
  胡萝卜炒羊里脊->plate_10 / 胡萝卜炒羊排->plate_11 / 辣子鸡丁->plate_47 /
  辣炒兔肉->plate_19 / 辣炒鲑鱼->plate_41 / 辣椒炒牛肉->plate_47a / 麻婆豆腐->plate_32 /
  香菇滑鸡->plate_54 / 土豆炒猪肉->plate_52 / 胡萝卜炒猪肉->plate_53 / 炒时蔬->plate_23 /
  小炒鸡肉->plate_31 / 牛肉意面->plate_43 / 香菇意面->plate_44 / 胡萝卜意面->plate_45 /
  鸡肉番茄意面->plate_46 / 蛋炒饭->bowlofriceegg [已实现]

七、空手出锅(空手右键, 锅变回 炒锅(空), 成品掉落物形式)
- 煎葱油饼_熟 空手出锅 -> 葱油饼(scallion_pancake_0) [已实现]
- 煎馍_熟 空手出锅 -> 馍(roujiamo_0) [已实现]
- 煎面饼_熟 空手出锅 -> 煎饼(cooked_dought) [已实现]
- 煎酱香饼(需翻炒4次门控 rtdd_cf=4) 空手出锅 -> 酱香饼(cookedpancake) [已实现]

八、盖饭(food_11_rice_meal, 走 itemUseOn 路径, 转换与取消默认放置同一事件完成)
- 正向: 手持 辣子鸡丁(plate_47)/香菇滑鸡(plate_54)/麻婆豆腐(全份)(plate_32)/胡萝卜炒鳕鱼(plate_15)
  右键 米饭(形态1/2/3任一), 消耗1个成品菜, 米饭原地变对应盖饭:
  辣子鸡丁盖饭(全份)(plate_48) / 香菇滑鸡盖饭(全份)(plate_55) / 麻婆豆腐盖饭(plate_56) /
  鳕鱼盖饭(plate_50) [已实现]
- 反向: 手持 米饭(形态1/2/3任一) 右键 上述成品菜方块, 消耗1个米饭, 菜品原地变对应盖饭 [已实现]
- 蛋炒饭加米饭: 手持米饭(任一形态)右键 炒锅_86(蛋炒饭_加胡萝卜_熟) -> 炒锅_87(蛋炒饭_加米饭_熟) [已实现]
- 手持成品菜/米饭 右键 本分类功能方块 无对应转换时直接取消默认放置(不"先放再消失") [已实现]
- 修复: 盖饭被客户端白名单吞掉而"点无反应"(成品菜/米饭组合在 ITEM_USE_ON_CANCEL,
  客户端 ret=True 吞掉服务端 ServerItemUseOnEvent) -> 改走客户端拦放置预览(消闪)
  + 显式 NotifyToServer('GaifanRequest') -> FeatureDispatcher.OnGaifanRequest
  -> ChaoguoService.handleItemUseOn(构造 itemUseOn args), 同盛出机制 (2026-09-23 修) [已实现]

【提示/体验】所有转换有提示(含消耗数量与下一步指引); 数量不足/翻炒无下方点燃炉灶/
出锅门控未达成(煎蛋未熟/酱香饼未翻炒) 有提示并拦截; 翻炒冷却0.3秒, 其余右键冷却0.4秒;
手持方块物品右键炒锅类功能方块取消默认放置(全局) [已实现]
【盛出消闪 2026-09-23】手持盘子右键炒锅熟成品(盘子 take_out, 38条), 改走客户端拦截+
显式触发(同汤锅): 客户端 ClientItemUseOnEvent ret=True 消闪 + NotifyToServer('TakeoutRequest')
-> ChaoguoService.handleTakeoutRequest(校验落点仍是成品防重复). 空手出锅(煎饼/馍等 item=None)
不走此路, 照旧 ServerBlockUseEvent. 由 InterceptData.TAKEOUT_CANCEL 自动派生 [已实现]
【留后】各盘装成品/盖饭 右键吃(总食用功能后续实现)、半份/部分份变体出锅(见 全部功能没做什么.txt)


########################################
【总食用】(shiyongfood) 2026-09-21
########################################
实现于 xiangyemod/shiyongfood (ShiyongfoodData + ShiyongfoodService, 注册到 FeatureDispatcher:
右键方块 blockOwner + 手持右键表面 itemUseOn + 手持直接吃 tryUse[新增路由])
规范: tuilun/总食用转化关系.txt (用户最终稿); 所有数值/效果以该txt为准
机制: 成品放置成方块后 空手右键方块 吃一级(方块转换下一级/完全消耗消失+容器掉落);
      例外: 饭团/水煮蛋/豆腐 手持右键直接吃(消耗1个, 无容器)
      饱食度: 在现有值上累加(当前+回复, 上限20点); 效果 AddEffectToEntity(amplifier=等级-1); 冷却0.4秒

一、炒锅成品吃 [已实现]
- 盘装菜(plate_1~54系列)全份->半份递减吃(黑椒牛排/清炒猪排/胡萝卜鲑鱼/胡萝卜羊腿/
  胡萝卜炒羊里脊/小炒五花肉/胡萝卜炒猪排骨/辣炒兔肉/炒鱿鱼[三分之二/三分之一]/
  炒鱿鱼须/小炒鸡肉/麻婆豆腐/炒蟹/牛肉意面/香菇意面/胡萝卜意面/鸡肉番茄意面);
  无半份的整盘吃完; 吃完掉落 脏盘子(plate_0a)
- 盖饭: 辣子鸡丁盖饭(全/半份)/香菇滑鸡盖饭(全/半份)/麻婆豆腐盖饭/鳕鱼盖饭 吃完掉 脏盘子
- 蛋炒饭(bowlofriceegg)吃完掉 木碗(bowlasoup)
- 葱油饼/酱香饼 放置成方块吃, 无容器 [已实现]
二、油锅成品吃 [已实现]
- 盘装鸡块/炸猪排/炸薯条/盘装炸鱼/炸饺子 单次吃完掉 脏盘子
- 天妇罗炸虾 整份->半份递减吃(归属油锅), 半份吃完掉 脏盘子
三、汤锅成品吃 [已实现]
- 碗装汤品20种 + 熟面条 + 熟米饭(三形态) + 汤面13种 单次吃完掉 木碗
- 美味饺子(全份plate_30a->半份plate_30)递减吃, 半份吃完掉 脏盘子
四、面食.甜食吃 [已实现]
- 熟肉包子 分食链: 整->半个->1/4个->消失(每级回复1点, 整级带生命恢复I30秒)
- 肉夹馍/煎饼卷牛肉/煎饼卷鳕鱼/熟竹筒饭/馍/煎饼 放置成方块吃, 无容器
- 法棍/吐司/可颂(一份)/甜甜圈(一份) 放置成方块吃, 无容器
- 奶油蛋糕(整块, 无切分变体)/蜂蜜/浆果/巧克力蛋糕小块 放置成方块吃, 无容器
- 焦糖布丁/舒芙蕾 放置成方块吃, 无容器
五、寿司吃 [已实现]
- 鳕鱼/鲑鱼/热带鱼寿司块 + 手握(鳕鱼/鲑鱼/热带鱼/鱿鱼) 三->两->一->空 递减吃, 无容器
- 盘装寿司(plate_27/28/29/42)单次吃完掉 脏盘子
六、烧烤吃 [已实现]
- 烤鸡 整只->3/4->半只->1/4->消失; 烤乳猪 整只->5/6->4/6->3/6->2/6->1/6->消失; 无容器
- 烤鳕鱼(熟)/烤鲑鱼(熟) 吃完掉落 支杆(b_34)1个
- 熟牛肉串/熟羊肉串/熟蔬菜串/熟香菇串 单次吃完, 无容器
七、乡野食物吃 [已实现]
- 章鱼小丸子 完整->半份递减吃, 半份吃完掉 脏盘子
- 原版食物成品盘(plate_16/17/18/20/21/4) 单次吃完掉 脏盘子
八、乡野饮料 [已实现]
- 西瓜汁/橙汁/苹果汁/桃子汁/葡萄汁/豆浆 喝完掉 玻璃杯(fruitjuice_0)
- 冰棍5口味/冰沙5口味 单次吃完, 无容器
九、手持直接吃(不放置) [已实现]
- 饭团(rice_balls)/水煮蛋(boiled_egg)/豆腐(beancurd) 手持右键直接吃, 消耗1个, 无容器
  (已给 饭团/水煮蛋 补 use_animation:eat + food 组件, 使其长按右键可触发食用事件;
   豆腐原本就有 food 组件)

【提示/体验】每次吃有提示"回复X点饱食度, 获得 XX效果(时长)"; 右键冷却0.4秒;
所有成品方块与手持吃物品经 FeatureDispatcher 统一路由(新增 tryUse 路由表) [已实现]
- 修复(2026-09-21): 效果接口调用修正为 CreateEffect(玩家ID).AddEffectToEntity(
  effectName, 时长秒, amplifier, showParticles) —— 实体ID在 CreateEffect 传, 不再传 5 参;
  饱食度接口修正为 CreatePlayer(玩家ID).GetPlayerHunger/SetPlayerHunger(PlayerCompServer,
  非 CreateAttr); 提示颜色符改用真正的 § 字符(不再写 \u00a7 转义, Py2 字节串会原样显示); 补 getCarriedItem


########################################
【右键取消方块清单】2026-09-21
########################################
- 新增 tuilun/右键取消方块清单.txt: 汇总全部"右键被拦截取消默认行为"的方块
  (FeatureDispatcher.blockOwnerAll 中所有服务注册的 featureBlocks), 按17个功能分类
  逐条列出(汉语名+rtdd:id+右键行为), 并附:
  ①手持方块物品右键功能方块的取消放置规则 ②特殊注册(水稻方块/面粉块去重)说明
  ③同一方块多服务登记(wok/steamer/farineblock_3 等)的 fallback 说明 [已实现]
- 二次核查补全(2026-09-21): 汤锅补全计时中间态与半成品(蘑菇炖鸡1~3/猪蹄汤
  rawpigfoodsoup_0~5/羊肉泡馍汤 roujiamosoup_0~1/生面汤/饺子汤0~2/煮鸡蛋/煮豆腐/
  蔬菜鱼片汤0~3/生米锅+熟米饭ricepot_1~3/熟面条碗noodle_soup/蛋花面noodles_1);
  面食补 蒸牛奶鸡蛋(steamermilkandegg); 死亡生物修正 挂鱼晾干钩(meathookcoddry)
  为"空手右键取鱼干"并补挂肉架_3/4 [已实现]


########################################
【右键拦截白名单化 + 客户端拦截】2026-09-22
########################################
- 问题: 原 OnItemUseOn 有宽泛兜底"手持方块物品右键任意功能方块且无 itemUseOn
  服务就 ret=True 取消默认放置", 导致正常放置失效。
- 修复: ①删除该宽泛兜底, 服务端只处理真正注册了 itemUseOn 的组合, 其余放行 → 放置恢复
  ②新增共享白名单 InterceptData.py(客户端/服务端同一份): PLATE_CANCEL装盘/
  MIANSHI_CANCEL面食/ TANGGUO_CANCEL汤锅/ CHAOGUO_CANCEL盖饭双向/
  CHUJU_CANCEL锅铲油罐炒锅/ SUSHI_CANCEL寿司堆叠/ COATING_CANCEL裹粉/
  PLACE_ITEMS原版相邻放置/ EAT_ITEMS手持直接吃/ BLOCK_USE_CANCEL右键功能方块
  ③新增 ClientFeatureDispatcher.py(继承 BlueFoxClientSystem): 监听
  ClientBlockUseEvent(cancel功能方块)/ ClientItemUseOnEvent(ret白名单组合)/
  ClientItemTryUseEvent(cancel手持吃物品), 客户端提前拦截消除"闪一下"
  ④modMain.py 客户端分支导入 ClientFeatureDispatcher, 由 BlueFox 框架自动注册 [已实现]
- 复查补漏(2026-09-22): 白名单核对全部17服务 getItemUseOnRules + handleItemUseOn 后补:
  ①水稻种植 rtdd:rice_seeds 加入相邻放置 PLACE_ITEMS(Natural RICE_PLANT 漏)
  ②蛋炒饭 米饭三形态 x rtdd:riceegg_2 补 3 组进 CHAOGUO_CANCEL
  核对确认已覆盖无遗漏: 装盘PLATE_CANCEL9项/面食MIANSHI_CANCEL6项/汤锅TANGGUO_CANCEL
  3项/盖饭CHAOGUO_CANCEL 24+3项/锅铲CHUJU_CANCEL3项/寿司SUSHI_CANCEL/裹粉COATING_
  CANCEL/原版放置PLACE_ITEMS/手持吃EAT_ITEMS。注意: Chaoguo.handleItemUseOn 有"手持
  成品菜/米饭右键炒锅中间态方块→取消放置"的服务端兜底, 因要使客户端白名单宁少勿多
  (避免误拦正常放置), 该边缘防误触仍只服务端处理(功能正确, 仅轻微闪烁), 暂不搬客户端 [已复查]

########################################
【统一 itemUseOn 转换 消闪修复】(2026-09-23)
########################################
背景: [总食用转化关系.txt] 中"盖饭/盛出"等走 handleItemUseOn / handleBlockUse 的转换
被客户端纯 ret=True 吞掉服务端 ServerItemUseOnEvent / ServerBlockUseEvent, 导致"点无反应"
(盖饭此前已用 GAI_FAN_CANCEL + GaifanRequest 修复)。
本轮审计其余所有"走 handleItemUseOn 的 itemUseOn 转换", 发现同款风险, 统一修复:
- 覆盖: 原版相邻放置 / 盘子装盘 / 面食手持转换(烤炉/木碗/蒸笼) / 汤锅手持转换(熟面条碗)
  / 裹粉(面粉块) / 厨具锅铲蘸油(油罐/炒锅) / 种水稻 / 寿司堆叠 / 手持直接吃(右键表面)
- 方案:
  ①新增 FeatureDispatcher.OnItemUseOnRequest(服务端), 按 itemName 路由 itemUseOnAll
    各服务 handleItemUseOn(与 OnGaifanRequest 同机制, 逐个 fallback)
  ②客户端 ClientFeatureDispatcher.OnItemUseOn 将这些纯 ret 分支统一改为
    ret=True(消闪) + NotifyToServer('ItemUseOnRequest') 显式触发
  ③去重: 各服务 handleItemUseOn 自带 checkCooldown(同坐标/同物品), 重复触发被冷却拦截
- 细节:
  ①"相邻放置/装盘"(ITEM_USE_ON_CANCEL_BY_ITEM) 分支【不设 _afterCd】, 因被点表面坐标
    不变, 设了会误吞同一表面 1.5s 内连续放置(如连摆多个切配块); 去重靠服务端冷却
  ②"盖饭/蛋炒饭"(GAI_FAN_CANCEL)、"盛出/出锅"(TAKEOUT_CANCEL) 仍用各自专用事件, 不变
- 文件:
  ①FeatureDispatcher.py: 新增 ITEM_USE_ON_REQUEST 常量 / ListenEvent / UnListenEvent /
    OnItemUseOnRequest
  ②ClientFeatureDispatcher.py: 导入 SUSHI_CANCEL, 新增 ITEM_USE_ON_REQUEST 常量,
    OnItemUseOn 的 BY_ITEM / ITEM_USE_ON_CANCEL / SUSHI / COATING 分支全部改为 ret+显式事件
  ③白名单清单: 新增"十三、其余 itemUseOn 转换 统一显式事件修复" [已实现]

########################################
【统一消闪修复·第二轮】(2026-09-23)
########################################
用户批量反馈后的统一修复, 分根因A/B/C/D四块:
【根因A】操作后任意位置放置被吞(全模组, 最严重)
- 症状: 日志 [FD-BlockUse-DONE]hand:NONE吃roastedmushrooms_3 设 _cancelItemUse=True 后,
  玩家之后在任意位置放方块都被 [FD-ItemUseOn-CONSUME-CANCEL] 吞掉。
- 根因: _cancelItemUse 是无时限的玩家级布尔标记, OnBlockUse 设 True 后残留;
  空手右键(吃/取)只触发 BlockUse 不触发 ItemUseOn, 标记无人消费残留到下一次真实放置。
- 修复: FeatureDispatcher.py 加 CANCEL_WINDOW=0.5, _cancelItemUse 改存时间戳,
  OnBlockUse/OnItemUseOn(itemUseOn成功)/OnItemTryUse 三处消费处均判断 time.time()-ts<0.5,
  过期残留 pop 后直接放行, 不再吞后续放置/吃。 [已实现]
【根因D】面食计时改2秒+去秒提示+移除右键启动(参照烤乳猪自动判定)
- MianshiData.TIMER_RULES 全部 time:60->2 (发酵/蒸笼/烤炉烘焙 共13条)
- MianshiService: 移除"烤炉固定 OVEN_FIX_BLOCKS 右键 startTimerFor+提示"、"空手右键蒸笼计时源
  timerSources 启动"两段; 改由 MianshiTimerService autoStart tick 按下方烤炉/点燃炉灶自动启动
- 提示去秒数: startTimerTips/timingTips 去掉"还需%d秒", 蒸笼入笼 tip 去掉"(共60秒)", 只报开始蒸制
【根因C】家具家私获得物品改掉落物形式
- FurnitureService: 箭盒取箭 giveItem->_dropItemDict; 厨具架取回 giveItemObj/giveItem->_dropItemObj/
  _dropItemDict; 通用 recipe giveItem(水槽取水/取脏盘子/盘子架取回)->_dropItemDict。 [已实现]
【根因B】手持可放置/可投掷物品右键功能方块"想转换却被放置/投掷"
- 症状: 持鸡蛋右键鸡窝扔蛋/放不进; 持胡萝卜右键饲料槽摆切萝卜; 烧烤上杆/死亡生物挂肉钩/
  厨具丸子机/石磨/炉灶/面食加水/寿司 等闪一下或真放出去。
- 根因: 这些转换走 ServerBlockUseEvent(handleBlockUse), 但手持物是真块/可投掷, 客户端
  ClientItemUseOnEvent 未拦(手持物,功能方块), 原版先播放放置/投掷预览; 且部分物品(鸡/鳕/
  鲑/胡萝卜/稻谷)在 PLACE_ITEMS 里, 客户端拦截后走 ItemUseOnRequest 相邻放置, 绕开 owners 检查。
- 修复: 新增 BlockUseRequest 统一显式事件通道(与盛出同架构):
  ①InterceptData: 新增 BLOCKUSE_CANCEL, 扫描 ANIMAL_SWITCHES/BARBECUE_SWITCHES/DEADMOB_SWITCHES/
    STOVE_RULES/MEATBALLMAKER_RULES/STEAMER_RULES/Mianshi SWITCH_RULES 中 item非空且非* 的
    (手持物品,source/block) 对
  ②FeatureDispatcher: 新增 BLOCK_USE_REQUEST 常量/监听/路由 OnBlockUseRequest(按 blockOwnerAll
    handleBlockUse)
  ③ClientFeatureDispatcher: 新增 BLOCK_USE_REQUEST 常量, OnItemUseOn 中 BLOCKUSE_CANCEL 分支
    优先于 ITEM_USE_ON_CANCEL_BY_ITEM(避免相邻放置抢走), ret+Notify 显式触发 [已实现]
【注意事项】
- 烧烤上杆烤鸡规则 item=rtdd:roastchickenplace_0(放置后的块), 不是 minecraft:chicken;
  若玩家想"手持生鸡肉右键支杆", 该组合不属于转换(需先放出生鸡肉块), 待用户确认是否要改数据。
- 面食/汤锅/装盘(ITEM_USE_ON_CANCEL_BY_ITEM) 仍走 ItemUseOnRequest; 他们不属于 blockUse 转换。
- 炒锅放料补充: 用户反馈"炒锅放胡萝卜"同款问题。已把 ChaoguoData.SWITCH_RULES 纳入 BLOCKUSE_CANCEL
  派生(InterceptData), 且派生时跳过 action==take_out(避免与 TAKEOUT_CANCEL 抢盘子出锅)。这样手持
  胡萝卜/葱花/蒜末等食材右键炒锅(油锅/添油) 会走 BlockUseRequest, 不再被相邻放置抢走。 [已补]
- 汤锅/油锅放料补充: 用户要求把炒锅/汤锅/油锅"手持食材放置"全部处理, 不只是胡萝卜。
  已将 TangguoData.SWITCH_RULES、YouguoData.SWITCH_RULES 一并纳入 BLOCKUSE_CANCEL 派生
  (同样过滤 action==take_out)。汤锅/油锅/炒锅放料(手持食材/锅态汤右键锅身) 现在都走
  BlockUseRequest, 不再被相邻放置/放置物品抢走。 [已补]
- 投掷物(鸡蛋等)扔蛋修复: 扔蛋是独立投掷事件 ClientItemTryUseEvent 触发(非 ItemUseOn放置)。
  方案(用户指定): 右键鸡窝放蛋时客户端记玩家级 _blockCdPlayer[pId]=now(0.2s 短标记);
  OnItemTryUse 中该玩家 0.2s 内手持 BlockUse 可投掷/可用物品(BLOCKUSE_CANCEL_ITEMS)直接
  cancel 掉投掷动画; 窗口过后放行, 对地扔蛋正常。不设全局取消(会破坏对地投掷, 已弃)。
  时长 0.2s, 不卡翻炒(0.3s 间隔)。 [已修]

########################################
【死亡生物·生成引擎】(2026-09-24)
########################################
新增 死亡生物包 下新文件 DeadmobGeneratorService.py (在 modMain 注册), 两个功能:
一、玩家杀死生物生成死亡方块
- 监听 ServerEntityDieEvent, 判断击杀者是否为玩家(attackedByEntId 判断 Player)。
- 死亡生物为 牛/猪/羊/鱿鱼/村民 时, 在死亡位置附近生成对应死亡方块:
  牛=dead_cow, 猪=dead_pig, 羊=dead_sheep, 鱿鱼=deadsquida, 村民=dead_villager
- 该格被占则向上寻 1~3 格找空气放; aux 强制 0。
- 实体类型判定: 用 comp.CreateEngineType(entId).GetEngineType() 与
  serverApi.GetMinecraftEnum().EntityType 枚举比对(Cow/Pig/Sheep/Squid/Villager)。
二、打碎草概率获得黄豆(参照原版打草掉小麦种子)
- 监听 ServerPlayerTryDestroyBlockEvent, 被破坏方块为 minecraft:tallgrass /
  short_grass / double_plant 时, 以 15% 概率生成 1 个 黄豆(rtdd:soybean) 掉落物。
- 不取消破坏本身(只额外掉落黄豆, 不动默认破坏)。
【待验证】网易事件参数名(entityId/attackedByEntId)、实体类型枚举名在不同版本可能不同,
  需进游戏验证; 若类型判定不准, 改用实体类型字符串接口再调。


########################################
【生存模式获取渠道补齐】2026-09-24
########################################
目的: 给"无任何获取渠道"的食材/工具补来源。此前盘点过 4 分类无渠道物品:
  食材(青菜/葱/大蒜/辣椒/螃蟹/龙虾/桃子/橙子)、面食(面粉/竹筒)、寿司(干海带)、
  死亡生物(挂肉钩)。本轮完成: 村民交易/石磨磨面/竹筒·挂肉钩配方/钓鱼掉落。

一、村民交易(傻子职业卖乡野食材) —— 解决 青菜/葱/大蒜/辣椒/桃子/橙子/干海带
- 新建 交易表 trading/xiangye_farmer_trades.json(网易自定义交易表正确目录为 trading/,
  非 trading/economy_trades/):
  7 笔交易, 单一品质全解锁, 玩家花 绿宝石 买, 价格: 干海带2 / 青菜1(量3) /
  葱1(量3) / 大蒜2(量2) / 辣椒2(量2) / 桃子2 / 橙子2 (max_uses 64)。
- 在 entities/minecraft_villager_v2.json 的 傻子(nitwit) 职业组件组(约1510行) 加
  minecraft:economy_trade_table, table 指向 trading/xiangye_farmer_trades.json。
  当初的坑: 交易表误放 trading/economy_trades/ 导致编辑器交易列表空 → 改回 trading/ 后正常。
- 覆盖傻子职业因原版傻子本无交易(开不了交易界面), 故不挤掉任何原版有用交易。

二、石磨磨小麦→面粉 —— 解决 面粉(整棵面食树根源)
- 在厨具包内(未新建包): ChujuData.py 加 WHEAT_ITEM/小麦/面粉常量,
  ChujuService.py 石磨(_handleStonemill)分材料处理:
    黄豆(16)  → 研磨4次 → 玻璃罐取油罐(原逻辑不变)
    小麦(6)   → 研磨4次 → 空手取出 1 面粉(rtdd:farineblcok)
  打碎按材料返还(返面粉原料=小麦6; 返黄豆16); 材料标识存方块实体 rtdd_stm。

三、竹筒 配方 —— 解决 竹筒(竹筒饭原料)
- 新增 netease_recipes/xy_bamboo_0.json: 3 原版竹子 → 1 竹筒(rtdd:bamboo_0)。

四、挂肉钩 配方 —— 解决 挂肉钩(切肉/挂鱼核心)
- 新增 netease_recipes/xy_meathook.json: 支撑杆(support_rod) + 铁锭 → 1 挂肉钩。

五、螃蟹/龙虾 钓鱼掉落 —— 解决 螃蟹/龙虾
- 新建 yuanbanfangzhi/service/YuanbanFishing.py(普通逻辑类 YuanbanFishingService,
  照 deadmobGen 架构, 逻辑不在分发器内联)。
- FeatureDispatcher 导入并实例化 self._fishing, 监听 PlayerFishingServerEvent(收杆、
  掉落物生成前) 转发到 _fishing.OnFishing:
    先 args["cancel"]=True 取消默认钓物(避免原版鱼再出现),
    再在鱼钩位置 SpawnItemToLevel 生成 1 只 螃蟹/龙虾(测试用100%,50/50)。
- 【待验证】PlayerFishingServerEvent 的 cancel 是否生效需进游戏实测;
  若 cancel 不生效(仍出原版鱼), 需改用"覆盖钓鱼掉落表 loot_tables/gameplay/fishing/"
  方案。正式概率待定(草稿: 螃蟹10% / 龙虾6%), 测试完调回。

########################################
【死亡生物尸体生成修复 + 黄豆打草移位 + 榨汁机/石磨消闪 + 石磨复用】2026-09-24
########################################

一、死亡生物·尸体方块生成(玩家杀 猪/牛/羊/鱿鱼/村民 → 死亡位置生成尸体方块)
- DeadmobGeneratorService.py 改为【普通逻辑类】(不再继承 BlueFoxServerSystem 自监听),
  由 FeatureDispatcher 在自身 __init__ 实例化 self._deadmobGen 并监听死亡事件转发。
  起因: 新类按原架构(继承 BlueFoxServerSystem)无法被框架 GetLastSubclass 注册实例化,
  日志里连 init 都没有。
- 死亡事件用 MobDieEvent(官方文档: 参数 id=死亡实体, attacker=击杀者, cause=伤害来源),
  不是 ServerEntityDieEvent(该 SDK 里不存在)。
- 类型判断改 GetEngineTypeStr() 精确匹配:
  minecraft:pig→dead_pig / cow→dead_cow / sheep→dead_sheep / squid→deadsquida /
  villager(+villager_v2)→dead_villager。
- 远程击杀: attacker 若是抛射物(箭等), 用 CreateBulletAttributes(attacker).GetSourceEntityId()
  取发射者, 发射者是玩家才计为玩家击杀。
- 生成延迟: 死亡后 1.5 秒才放尸体方块(comp.CreateGame(LevelId).AddTimer), 不刚死瞬间出现。
- 死亡 cause 过滤: 只有 cause∈{entity_attack(近战), projectile(远程)} 才生成;
  排除 /kill/指令(self_destruct) 及摔/溺/火等一切非玩家攻击的死亡。

二、黄豆打草掉黄豆 移回 乡野食材(Shicai)
- 从死亡生物包移走(职责不应在死亡生物):
  常量 SOYBEAN_ITEM / GRASS_DROP_CHANCE=0.15 / GRASS_BLOCKS → ShicaiData.py
  掉落方法 handleGrassDrop → ShicaiService.py, __init__ 里 FeatureDispatcher.registerGrassDrop(self)
- FeatureDispatcher.OnDestroy 顶部先试 grassDropOwners 的路由: 草/杂草 概率掉黄豆,
  不取消破坏本身(与打草掉小麦种子一致)。

三、榨汁机 玻璃杯/水果 右键 消闪
- YinliaoData.py 新增 GLASS_CUP(=rtdd:fruitjuice_0 玻璃杯) + JUICER_BLOCKUSE
  (玻璃杯 + 6 水果 × 榨汁机 6 状态 全组合)。
- InterceptData.py 把 JUICER_BLOCKUSE 并入 _BLOCK_USE_TABLES → 自动派生进 BLOCKUSE_CANCEL,
  客户端提前 ret 放置预览 + Notify BlockUseRequest, 消闪。
- 注意: 榨汁机取汁走 BlockUse(右击方块)通道, 不能标 action==take_out
  (否则会被 BLOCKUSE_CANCEL 派生过滤掉; 且与汤锅/炒锅/油锅的盛出 ItemUseOn 通道不同)。

四、石磨(厨具) 两处修复
- 玻璃罐/黄豆/小麦 右键石磨 消闪:
  ChujuData.py 新增 STONEMILL_BLOCKUSE = [(玻璃罐 rtdd:medicinetank, 石磨),
       (黄豆 rtdd:soybean, 石磨), (小麦 minecraft:wheat, 石磨)];
  InterceptData.py 把 STONEMILL_BLOCKUSE 并入厨具 _BLOCK_USE_TABLES → BLOCKUSE_CANCEL 消闪。
- 研磨完成后可再次放料(先取成品再放): ChujuService._handleStonemill 空磨判定
  由 prog is None 扩为 prog is None 或 prog<0 —— 取走成品后 _clearMill 把进度写成
  -1(非 None), 否则取完仍进不了"可加入材料"分支(已修)。
  修正: 只有"空磨"(从未放料 或 已取走成品) 才能放料开工;
  完成态(prog=4)必须先取走成品(小麦空手取面粉 / 黄豆玻璃罐取油罐)变回空磨,
  之后才能手持 黄豆(16)/小麦(6) 重新放入再开一轮研磨。
- 待实测: /kill 后 cause 是否为 self_destruct、村民实际类型串是否为 villager_v2。

