162 lines
6.8 KiB
Python
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 |