# -*- 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"), } # ---- 厨具 锅铲/带油锅铲 (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) ---- PLACE_ITEMS = { "minecraft:chicken", "minecraft:salmon", "minecraft:cod", "minecraft:fish", "minecraft:carrot", "minecraft:potato", "rtdd:qingcai", "rtdd:scallions", } # ---- 总食用 手持直接吃 (Shiyongfood TRY_USE_RULES) ---- EAT_ITEMS = { "rtdd:rice_balls", # 饭团 "rtdd:boiled_egg", # 水煮蛋 "rtdd:beancurd", # 豆腐 } ITEM_USE_ON_CANCEL_BY_ITEM = PLACE_ITEMS | EAT_ITEMS # ============================================================================ # 三、右键功能方块集合 (ClientBlockUseEvent 提前 cancel) # 右键这些功能方块, 无论空手/手持, 客户端都提前取消"默认交互", # 由服务端 OnBlockUse 精确路由处理(不误伤放置)。 # 注意: 仅列出"交互型"功能方块(灶台/蒸笼/炒锅/汤锅/锅具/柴火/水箱等), # 不放被右键时应当正常放置的方块。 # ============================================================================ BLOCK_USE_CANCEL = { "rtdd:stove", "rtdd:stove_1", "rtdd:stove_2", "rtdd:steamer", "rtdd:steamercover", "rtdd:wok", "rtdd:coverthepan", "rtdd:oilpan", "rtdd:stewedsoup", "rtdd:stewedsoupwater", "rtdd:coverthepot", "rtdd:oilpot_0", "rtdd:oilpot_1", "rtdd:oilcan", "rtdd:manger_0", "rtdd:manger_1", "rtdd:manger_2", "rtdd:manger_3", "rtdd:pigmanger_1", "rtdd:pigmanger_2", "rtdd:chickenmanger_0", "rtdd:chickenmanger_1", "rtdd:firewood", "rtdd:firewood_2", "rtdd:stonemill", "rtdd:beater", "rtdd:beatermeat_0", "rtdd:beatermeat_1", "rtdd:beatermike_0", "rtdd:beatermike_1", "rtdd:beatermike_2", "rtdd:beater_custard_0", "rtdd:beater_custard_1", "rtdd:beater_custard_2", "rtdd:beater_eggsandmilk_0", "rtdd:beater_eggsandmilk_1", "rtdd:beater_eggsandmilk_2", }