Files
rtdd/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/InterceptData.py
T
2026-09-22 11:50:30 +08:00

162 lines
6.8 KiB
Python

# -*- coding: utf-8 -*-
"""
================================================================================
右键拦截白名单数据(共享,客户端/服务端共用)
================================================================================
【作用】
统一管理"手持物品右键功能方块"时, 需要【提前取消该物品默认行为
(右键吃/放置)】的精确组合。客户端 ClientFeatureDispatcher 用它提前
cancel/ret 消除闪烁; 服务端 FeatureDispatcher 读同一份, 保持一致。
【为什么需要】
不精确拦截会造成两种问题:
1. 宽泛拦截(以前): 手持任意方块右键"任何功能方块"就取消放置 -> 正常放置失效
2. 不拦截: 手持南瓜派右键盘子时, 原版先触发"吃/放"前摇, 由服务端取消就"闪一下"
因此只对下面明确列出的组合拦截, 其余一律放行。
【集合】
ITEM_USE_ON_CANCEL : set of (手持item, 被点block) 仅这两者匹配才取消
ITEM_USE_ON_CANCEL_BY_ITEM : set of 手持item 只看手持item即可取消
BLOCK_USE_CANCEL : set of 被右键的block 右键这些功能方块提前cancel
================================================================================
"""
# ============================================================================
# 一、精确组合: (手持item, 被点block) -> 两者都匹配才取消
# ============================================================================
# ---- 盘子装盘 (YuanbanService PLATE_RULES) ----
PLATE_CANCEL = {
("minecraft:pumpkin_pie", "rtdd:plate_0"),
("minecraft:cod", "rtdd:plate_0"),
("minecraft:salmon", "rtdd:plate_0"),
("minecraft:tropical_fish", "rtdd:plate_0"),
("minecraft:fish", "rtdd:plate_0"),
("minecraft:melon_slice", "rtdd:plate_0"),
("minecraft:bread", "rtdd:plate_0"),
("minecraft:cookie", "rtdd:plate_0"),
("minecraft:cooked_chicken", "rtdd:plate_0"),
}
# ---- 面食.甜食手持转换 (Mianshi ITEM_USE_ON_RULES) ----
MIANSHI_CANCEL = {
("rtdd:dought_7", "rtdd:oven"),
("rtdd:farineblock_1", "rtdd:bowlasoup"),
("rtdd:dumplings_4", "rtdd:steamer"),
("rtdd:roubaozi_3", "rtdd:steamer"),
("rtdd:bamboo_4", "rtdd:steamer"),
("rtdd:plate_34", "rtdd:steamer"),
}
# ---- 汤锅手持转换 (Tangguo ITEM_USE_ON_RULES) ----
TANGGUO_CANCEL = {
("rtdd:mushroomsoup", "rtdd:noodle_soup"),
("rtdd:vegetablesoup", "rtdd:noodle_soup"),
("rtdd:eggsoup", "rtdd:noodle_soup"),
}
# ---- 炒锅 盖饭双重转换 (Chaoguo ITEM_USE_ON_RULES) ----
# 正向: 手持成品菜 -> 右键 米饭三形态 (米饭在物品/方块双向, 以方块被点为准)
CHAOGUO_CANCEL = {
("rtdd:plate_47", "rtdd:bowlofrice"),
("rtdd:plate_47", "rtdd:bowlofrice_2"),
("rtdd:plate_47", "rtdd:bowlofrice_3"),
("rtdd:plate_54", "rtdd:bowlofrice"),
("rtdd:plate_54", "rtdd:bowlofrice_2"),
("rtdd:plate_54", "rtdd:bowlofrice_3"),
("rtdd:plate_32", "rtdd:bowlofrice"),
("rtdd:plate_32", "rtdd:bowlofrice_2"),
("rtdd:plate_32", "rtdd:bowlofrice_3"),
("rtdd:plate_15", "rtdd:bowlofrice"),
("rtdd:plate_15", "rtdd:bowlofrice_2"),
("rtdd:plate_15", "rtdd:bowlofrice_3"),
# 反向: 手持米饭 -> 右键 成品菜方块
("rtdd:bowlofrice", "rtdd:plate_47"),
("rtdd:bowlofrice_2", "rtdd:plate_47"),
("rtdd:bowlofrice_3", "rtdd:plate_47"),
("rtdd:bowlofrice", "rtdd:plate_54"),
("rtdd:bowlofrice_2", "rtdd:plate_54"),
("rtdd:bowlofrice_3", "rtdd:plate_54"),
("rtdd:bowlofrice", "rtdd:plate_32"),
("rtdd:bowlofrice_2", "rtdd:plate_32"),
("rtdd:bowlofrice_3", "rtdd:plate_32"),
("rtdd:bowlofrice", "rtdd:plate_15"),
("rtdd:bowlofrice_2", "rtdd:plate_15"),
("rtdd:bowlofrice_3", "rtdd:plate_15"),
# 蛋炒饭: 手持米饭(三形态任一) 右键 炒锅_86(蛋炒饭_加胡萝卜_熟) -> 炒锅_87(加米饭_熟)
("rtdd:bowlofrice", "rtdd:riceegg_2"),
("rtdd:bowlofrice_2", "rtdd:riceegg_2"),
("rtdd:bowlofrice_3", "rtdd:riceegg_2"),
}
# ---- 厨具 锅铲/带油锅铲 (Chuju) ----
CHUJU_CANCEL = {
("rtdd:spatula", "rtdd:oilcan"),
("rtdd:spatula_oil", "rtdd:oilcan"),
("rtdd:spatula_oil", "rtdd:wok"),
}
# ---- 寿司: 手持寿司方块物品 右键 自家寿司方块 (取消默认放置) ----
# 被点block为寿司方块时, 手持任何寿司方块物品都取消放置(意图是堆叠/取走/转换)
SUSHI_BLOCKS = {
"rtdd:sushi_0", "rtdd:sushi_1",
"rtdd:codsushi_1", "rtdd:codsushi_2", "rtdd:codsushi_3",
"rtdd:codsushi_4", "rtdd:codsushi_5", "rtdd:codsushi_6",
"rtdd:salmonsushi_1", "rtdd:salmonsushi_2", "rtdd:salmonsushi_3",
"rtdd:salmonsushi_4", "rtdd:salmonsushi_5", "rtdd:salmonsushi_6",
"rtdd:fishsushi_1", "rtdd:fishsushi_2", "rtdd:fishsushi_3",
"rtdd:fishsushi_4", "rtdd:fishsushi_5", "rtdd:fishmonsushi_6",
"rtdd:nigirisushi",
"rtdd:sushipile_0", "rtdd:sushipile_1", "rtdd:sushipile_2",
"rtdd:sushipile_3", "rtdd:sushipile_4", "rtdd:sushipile_5",
"rtdd:nigirisushifishcod", "rtdd:nigirisushicod_2", "rtdd:nigirisushicod_3",
"rtdd:nigirisushifishsalmon_1", "rtdd:nigirisushisalnom_2", "rtdd:nigirisushisalnom_3",
"rtdd:nigirisushifish_1", "rtdd:nigirisushifish_2", "rtdd:nigirisushifish_3",
"rtdd:squid_sushi", "rtdd:squidsushi_2", "rtdd:squidsushi_3",
}
SUSHI_CANCEL = set(
(held, block) for held in SUSHI_BLOCKS for block in SUSHI_BLOCKS
)
# ---- 裹粉 (Shicai COATING_RULES): 手持生食材右键 面粉块 (取消默认放置) ----
COATING_ITEMS = {
"rtdd:sashimi", # 生鱼片
"rtdd:lobster", # 龙虾
"minecraft:porkchop", # 生猪肉
"minecraft:chicken", # 生鸡肉
"minecraft:potato", # 生土豆
}
COATING_CANCEL = set(
(item, "rtdd:farineblock_3") for item in COATING_ITEMS
)
# ---- 汇总精确组合 ----
ITEM_USE_ON_CANCEL = (PLATE_CANCEL | MIANSHI_CANCEL | TANGGUO_CANCEL
| CHAOGUO_CANCEL | CHUJU_CANCEL | SUSHI_CANCEL
| COATING_CANCEL)
# ============================================================================
# 二、纯手持物品取消: 只看手持item (右键任意方块表面/空中)
# ============================================================================
# ---- 原版相邻放置 (YuanbanService ITEM_USE_ON_RULES) + 水稻种植 (Natural RICE_PLANT) ----
PLACE_ITEMS = {
"minecraft:chicken",
"minecraft:salmon",
"minecraft:cod",
"minecraft:fish",
"minecraft:carrot",
"minecraft:potato",
"rtdd:qingcai",
"rtdd:scallions",
"rtdd:rice_seeds", # 稻谷: 右键耕地相邻放置水稻苗(RICE_PLANT)
}
# ---- 总食用 手持直接吃 (Shiyongfood TRY_USE_RULES) ----
EAT_ITEMS = {
"rtdd:rice_balls", # 饭团
"rtdd:boiled_egg", # 水煮蛋
"rtdd:beancurd", # 豆腐
}
ITEM_USE_ON_CANCEL_BY_ITEM = PLACE_ITEMS | EAT_ITEMS