200 lines
12 KiB
Plaintext
200 lines
12 KiB
Plaintext
========================================
|
|
右键拦截白名单清单(手持 item 右键 功能方块)
|
|
(供"客户端拦截 + 白名单精确化"改造参考,审核稿)
|
|
========================================
|
|
说明:
|
|
- 本清单列出所有"手持物品右键某个功能方块"时, 需要【取消该物品默认行为
|
|
(右键吃/放置)】、改由模组处理的 精确 (手持item, 被点block) 组合。
|
|
- 目标是"精确白名单, 不误伤": 只有以下组合会在客户端提前 cancel/ret,
|
|
其余手持物品右键任何方块一律放行, 正常放置回归。
|
|
- 来源: 逐服务从代码中已注册的 itemUseOnRules 自动提取。
|
|
|
|
【分类】
|
|
一、原版放置(相邻空格放置, 手持原版物品右键任意表面 -> 放置到相邻格)
|
|
- 这类其实不强依赖"被点方块", 但右键时会触发原版"放置前摇";
|
|
客户端拦截 key = 手持item(不做被点block限制), 取消后由服务端放块。
|
|
二、盘子装盘(手持原版食物右键 空盘子 plate_0 -> 盘子变换)
|
|
三、面食.甜食 手持转换(右键 烤炉/木碗/蒸笼)
|
|
四、汤锅 手持转换(右键 熟面条碗)
|
|
五、炒锅 盖饭转换(手持成品菜右键 米饭/米饭右键 成品菜)
|
|
六、乡野食材 裹粉(手持生食材右键 面粉块)
|
|
七、厨具 锅铲/带油锅铲(右键 油罐/炒锅)
|
|
八、乡野自然 水稻种植(手持稻谷右键地面/水)
|
|
九、寿司 手持方块物品右键自家寿司方块(取消默认放置)
|
|
十、总食用 手持直接吃物品(饭团/水煮蛋/豆腐)
|
|
|
|
|
|
========================================
|
|
一、原版放置 (YuanbanService ITEM_USE_ON_RULES)
|
|
========================================
|
|
右键场景: 手持原版/自定义生食材 右键 任意方块表面 -> 在相邻空格放置切配块/生肉。
|
|
取消key: 手持item (客户端不限制被点block, 仅知道要取消放置, 由服务端落块)
|
|
- minecraft:chicken -> 放置 生鸡肉(放置后) roastchickenplace_0
|
|
- minecraft:salmon -> 放置 死鲑鱼 killfish_0
|
|
- minecraft:cod -> 放置 死鳕鱼 killcod_0
|
|
- minecraft:fish(网易兼容) -> 放置 死鳕鱼 killcod_0
|
|
- minecraft:carrot -> 放置 切胡萝卜 cutcarrot_0
|
|
- minecraft:potato -> 放置 切土豆 cutpotato_0
|
|
- rtdd:qingcai(青菜) -> 放置 切青菜 cutvegetable_0
|
|
- rtdd:scallions(葱) -> 放置 葱花_1 cutscallions_1
|
|
|
|
|
|
========================================
|
|
二、盘子装盘 (YuanbanService PLATE_RULES)
|
|
========================================
|
|
右键场景: 手持原版食物 右键 空盘子(rtdd:plate_0) -> 盘子变为对应成品盘。
|
|
取消key: (手持item, 被点block=rtdd:plate_0)
|
|
- minecraft:pumpkin_pie + plate_0 -> plate_16 (南瓜派盘)
|
|
- minecraft:cod + plate_0 -> plate_17 (生鱼片盘)
|
|
- minecraft:salmon + plate_0 -> plate_17
|
|
- minecraft:tropical_fish + plate_0 -> plate_17
|
|
- minecraft:fish(网易) + plate_0 -> plate_17
|
|
- minecraft:melon_slice + plate_0 -> plate_18 (西瓜盘)
|
|
- minecraft:bread + plate_0 -> plate_20 (面包盘)
|
|
- minecraft:cookie + plate_0 -> plate_21 (曲奇盘)
|
|
- minecraft:cooked_chicken + plate_0 -> plate_4 (熟鸡肉盘)
|
|
|
|
|
|
========================================
|
|
三、面食.甜食 (Mianshi ITEM_USE_ON_RULES)
|
|
========================================
|
|
右键场景: 手持半成品 右键 烤炉/木碗/蒸笼。
|
|
取消key: (手持item, 被点block)
|
|
- rtdd:dought_7(生面饼) + OVEN(rtdd:oven) -> 烤炉上方放置 馍 roujiamo_0
|
|
- rtdd:farineblock_1(面粉加鸡蛋) + BOWL(rtdd:bowlasoup木碗)
|
|
-> 木碗变 蛋糕面糊(生) cakebatterblock_0
|
|
- rtdd:dumplings_4(生饺子) + STEAMER(rtdd:steamer) -> 蒸笼变 蒸饺子(生) steamerdumplings_0, 计时
|
|
- rtdd:roubaozi_3(生肉包子) + STEAMER -> 蒸笼变 蒸包子(生) baozilong_1, 计时
|
|
- rtdd:bamboo_4(竹筒加肉) + STEAMER -> 蒸笼变 竹筒饭(生) bamboo_6, 计时
|
|
- rtdd:plate_34(蛋液半成品) + STEAMER -> 蒸笼变 蒸牛奶鸡蛋 steamermilkandegg, 计时
|
|
|
|
|
|
========================================
|
|
四、汤锅 (Tangguo ITEM_USE_ON_RULES)
|
|
========================================
|
|
右键场景: 手持锅态汤方块 右键 熟面条碗(noodle_soup) -> 面条碗变对应汤面。
|
|
取消key: (手持item, 被点block=rtdd:noodle_soup)
|
|
- 蘑菇汤(rtdd:mushroomsoup) -> mushroomnoodles(香菇面)
|
|
- 蔬菜汤(rtdd:vegetablesoup) -> vegetable_noodles(蔬菜面)
|
|
- 蛋花汤(rtdd:eggsoup) -> noodles_1(蛋花面)
|
|
- (该表还被组装成 胡萝卜牛肉汤等 熟品 -> 各汤面, 见 ITEM_USE_ON_RULES)
|
|
|
|
|
|
========================================
|
|
五、炒锅 盖饭 (Chaoguo ITEM_USE_ON_RULES)
|
|
========================================
|
|
右键场景: 双向转换(手持成品菜右键米饭 / 手持米饭右键成品菜)。
|
|
取消key: 手持item + 被点block 双向都要取消默认放置。
|
|
正向(手持成品菜 -> 右键 米饭 bowlofrice/2/3):
|
|
- 辣子鸡丁(plate_47) -> 辣子鸡丁盖饭(全份) plate_48
|
|
- 香菇滑鸡(plate_54) -> 香菇滑鸡盖饭(全份) plate_55
|
|
- 麻婆豆腐(plate_32) -> 麻婆豆腐盖饭 plate_56
|
|
- 胡萝卜炒鳕鱼(plate_15) -> 鳕鱼盖饭 plate_50
|
|
反向(手持米饭 bowlofrice/2/3 -> 右键上述成品菜方块):
|
|
- 米饭三形态 右键 辣子鸡丁plate_47/香菇滑鸡plate_54/麻婆豆腐plate_32/胡萝卜炒鳕鱼plate_15
|
|
被点方块原地变对应盖饭
|
|
蛋炒饭(手持米饭三形态 右键 炒锅_86 riceegg_2 -> 炒锅_87 riceegg_3):
|
|
- bowlofrice/2/3 x riceegg_2 = 3组
|
|
|
|
|
|
========================================
|
|
六、乡野食材 裹粉 (Shicai COATING_RULES)
|
|
========================================
|
|
右键场景: 手持生食材 右键 面粉块(farineblock_3) -> 裹粉。
|
|
取消key: 手持item + 被点block=rtdd:farineblock_3
|
|
- rtdd:sashimi(生鱼片) 等裹粉食材(具体清单见 ShicaiData.COATING_RULES)
|
|
|
|
|
|
========================================
|
|
七、厨具 (Chuju 锅铲/带油锅铲)
|
|
========================================
|
|
右键场景: 手持锅铲 右键 油罐/炒锅。
|
|
取消key:
|
|
- rtdd:spatula(锅铲) + rtdd:oilcan(油罐) -> 锅铲变带油锅铲, 油罐次数-1
|
|
- rtdd:spatula_oil(带油锅铲) + rtdd:oilcan -> 变回锅铲, 油罐次数+1
|
|
- rtdd:spatula_oil(带油锅铲) + rtdd:wok(炒锅) -> 炒锅变炒锅(添油), 油铲变回锅铲
|
|
|
|
|
|
========================================
|
|
八、乡野自然 水稻 (Natural RICE_PLANT)
|
|
========================================
|
|
右键场景: 手持稻谷 右键 水面/地面 -> 种植水稻。
|
|
取消key: 手持item=rtdd:rice_seeds(稻谷)
|
|
|
|
|
|
========================================
|
|
九、寿司 (Shousi)
|
|
========================================
|
|
右键场景: 手持寿司方块物品 右键 自家寿司方块 -> 取消默认放置(意图是堆叠/转换)。
|
|
取消key: 手持item=全部寿司方块物品 + 被点block=自家寿司方块
|
|
- 卷寿司/手握/寿司堆 等全部 sushiBlockItems 右键 自家方块
|
|
|
|
|
|
========================================
|
|
十、总食用 手持直接吃 (Shiyongfood TRY_USE_RULES)
|
|
========================================
|
|
右键场景: 手持物品 右键空中/方块 -> 直接吃(不放置)。
|
|
取消key: 手持item (ClientItemTryUseEvent cancel)
|
|
- rtdd:rice_balls(饭团) -> 直接吃
|
|
- rtdd:boiled_egg(水煮蛋) -> 直接吃
|
|
- rtdd:beancurd(豆腐) -> 直接吃
|
|
|
|
|
|
========================================
|
|
十一、盛出/出锅消闪 (InterceptData.TAKEOUT_CANCEL, 2026-09-23)
|
|
========================================
|
|
右键场景: 手持 木碗/盘子 右键 成品方块(汤锅成品/炒锅熟盘装/油锅熟炸物) -> 盛出/出锅。
|
|
问题: 手持可放置方块物品右键, 客户端先渲染一帧"放置前摇/幽灵方块",
|
|
服务端取消指令往返后才撤掉 -> "闪一下"(服务端顺序正确, 碗/盘从未真落, 见日志 FD-Placed-AFTER=air)。
|
|
方案: 客户端对该组合 ClientItemUseOnEvent ret=True(取消放置预览, 消闪)
|
|
+ NotifyToServer('TakeoutRequest') 显式通知服务端执行盛出(纠正"客户端拦截吞服务端盛出")。
|
|
取消key: (手持item, 被点block), 由 汤锅/炒锅/油锅 SWITCH_RULES 里 action=="take_out"
|
|
且 item 是容器(木碗bowlasoup / 盘子plate_0) 的规则自动派生。
|
|
- 汤锅: 木碗(bowlasoup)/盘子(plate_0) + 各成品汤方块(30条, 含 美味饺子全份盘装plate_30a)
|
|
- 炒锅: 盘子(plate_0) + 各炒锅熟成品(38条, 含蛋炒饭 riceegg_3)
|
|
- 油锅: 盘子(plate_0) + 6条熟炸物方块
|
|
特殊:
|
|
- 空手取出(item=None, 捏饭团/取水煮蛋/煎饼/馍出锅)、菜刀(item=CLEAVER)不走此路, 照旧 ServerBlockUseEvent。
|
|
- 服务端在 FeatureDispatcher.OnTakeoutRequest -> 各 Service.handleTakeoutRequest,
|
|
校验落点仍是成品方块才执行(防客户端事件与服务端事件双份)。
|
|
|
|
|
|
========================================
|
|
十二、盖饭/蛋炒饭 消闪 (InterceptData.GAI_FAN_CANCEL, 2026-09-23)
|
|
========================================
|
|
右键场景: 手持 成品菜 右键 米饭(盖饭正向) / 手持 米饭 右键 成品菜(盖饭反向) /
|
|
手持 米饭 右键 炒锅蛋炒饭(蛋炒饭改造)。
|
|
问题: 这些组合走 ServerItemUseOnEvent, 但也被 ITEM_USE_ON_CANCEL 纯 ret=True 吞掉,
|
|
导致服务端 ServerItemUseOnEvent 不触发 -> 盖饭"点无反应"(与盛出被吞同机制)。
|
|
方案: 客户端对该组合 ret=True(消闪) + NotifyToServer('GaifanRequest') 显式触发
|
|
-> FeatureDispatcher.OnGaifanRequest -> ChaoguoService.handleItemUseOn。
|
|
取消key: (手持item, 被点block), 由 ChaoguoData.ITEM_USE_ON_RULES 的 surface 字段自动派生
|
|
(盖饭正向/反向 + 蛋炒饭改造, 共若干组)。
|
|
|
|
【通用】客户端 1.5 秒放置冷却(_afterCd): 盛出/盖饭/出锅后, 同一坐标短时间内引擎
|
|
再触发的"放置"直接 ret 吞掉, 消除"转换后多放置一次"的闪烁 (2026-09-23)。
|
|
|
|
|
|
========================================
|
|
十三、其余 itemUseOn 转换 统一显式事件修复 (InterceptData / FeatureDispatcher, 2026-09-23)
|
|
========================================
|
|
问题: 与盖饭同款 —— 客户端对"走 handleItemUseOn 的 itemUseOn 转换"纯 ret=True 时,
|
|
会吞掉服务端 ServerItemUseOnEvent, 导致一端(面食/汤锅/装盘/相邻放置/厨具蘸油/寿司/
|
|
裹粉/种水稻)转换"点无反应"。
|
|
方案: 客户端对所有这些组合改为 ret=True(消闪) + NotifyToServer('ItemUseOnRequest')
|
|
显式触发; 服务端新增 FeatureDispatcher.OnItemUseOnRequest, 复用按 itemName 路由到
|
|
itemUseOnAll 各服务 handleItemUseOn(与 OnGaifanRequest 同机制), 逐个 fallback。
|
|
去重: 各服务 handleItemUseOn 自带 checkCooldown(同坐标/同物品), 即使与真实
|
|
ServerItemUseOnEvent 重复触发也会被冷却拦截, 不双重消耗。
|
|
- 一、原版相邻放置(手持原版生食右键任意表面 -> 相邻格放切配块/生肉) [已统一]
|
|
- 二、盘子装盘(手持原版食物右键 plate_0 -> 盘子变换) [已统一]
|
|
- 三、面食.甜食 手持转换(右键 烤炉/木碗/蒸笼) [已统一]
|
|
- 四、汤锅 手持转换(右键 熟面条碗 -> 汤面) [已统一]
|
|
- 六、乡野食材 裹粉(手持生食材右键 面粉块) [已统一]
|
|
- 七、厨具 锅铲/带油锅铲(右键 油罐/炒锅) [已统一]
|
|
- 八、乡野自然 水稻种植(手持稻谷右键地面) [已统一]
|
|
- 九、寿司 手持方块物品右键自家寿司方块(取消默认放置) [已统一]
|
|
- 十、总食用 手持直接吃(饭团/水煮蛋/豆腐, 右键表面吃) [已统一]
|
|
【注意】"相邻放置/装盘"分支(ITEM_USE_ON_CANCEL_BY_ITEM)因被点【表面坐标】不变,
|
|
不设 _afterCd(避免误吞同一表面 1.5s 内连续放置), 去重交给服务端 handleItemUseOn 冷却。
|
|
"盖饭/蛋炒饭"(GAI_FAN_CANCEL)、"盛出/出锅"(TAKEOUT_CANCEL) 仍用各自专用事件, 不变。 |