# -*- coding: utf-8 -*- """ ================================================================================ 寿司(xy_sushi)转化规则数据 ================================================================================ 统一管理"寿司"分类下的转化规则常量。只被 ShousiService 读取, FeatureDispatcher 通过方块名/物品名集合路由到对应服务。 【实现范围(对应 寿司转化关系.txt)】 基础组 : 干海带 + 手持饭团右键 -> 干海带(加饭团), 消耗4个饭团 加鱼 : 干海带(加饭团) + 手持鱼右键 -> 对应寿司(加鱼), 消耗1个 卷制 : 空手右键逐级卷制(四级), 鲑鱼链无"卷_3"标注(成品卷=链尾) 切块 : 手持菜刀右键卷寿司两次 -> 寿司块(三个) 手握组 : 手握普通寿司 + 手持鱼右键 -> 手握X寿司(一个); 手持 手握X寿司(一个) 右键 逐级堆叠到(三个) 寿司堆组: 手持卷寿司右键 -> 寿司堆(两个) -> 寿司堆(三个); 空手右键递减取走, 退回卷寿司 饭团放置: 手持饭团右键方块表面 -> 在表面上方放置 手握普通寿司 (txt 第18条 todo, 手握组起点) 【不实现(txt 明确"后续实现")】 - 吃: 寿司块递减(5/9/13)、手握递减(14~17) 的空手右键吃, 后续实现 - 饭团来源: 汤锅熟米饭捏饭团(属 汤锅 分类, 本次不做) ================================================================================ """ # ---- 物品 ---- RICE_BALL = "rtdd:rice_balls" # 饭团 CLEAVER_ITEM = "rtdd:cleaver" # 菜刀(刀) # ---- 鱼物品(手持原料) ---- FISH_COD = "minecraft:cod" # 鳕鱼 FISH_SALMON = "minecraft:salmon" # 鲑鱼 FISH_TROPICAL = "minecraft:tropical_fish" # 热带鱼 FISH_SQUID = "rtdd:rawsquidwhiskersr" # 鱿鱼须(游戏中代表鱿鱼) # ---- 干海带 ---- NORI_0 = "rtdd:sushi_0" # 干海带 NORI_1 = "rtdd:sushi_1" # 干海带(加饭团), 游戏内名"干海带(加米)" # ---- 手握普通寿司(手握组起点) ---- NIGIRI_BASE = "rtdd:nigirisushi" # ============================================================================ # 四组鱼寿司 # roll : 卷链(加鱼 -> 卷_1 -> 卷_2 -> 卷_3 -> 卷_4/成品卷), 空手右键逐级 # cubes : 切块得到的 寿司块(三个) # nigiri1/2/3 : 手握X寿司(一个/两个/三个) # pile2/3: 寿司堆(X_两个/X_三个) # ============================================================================ SUSHI_GROUPS = [ { "key": "cod", "fish": FISH_COD, "roll": ["rtdd:codsushi_1", "rtdd:codsushi_2", "rtdd:codsushi_3", "rtdd:codsushi_4", "rtdd:codsushi_5"], "cubes": "rtdd:codsushi_6", "nigiri1": "rtdd:nigirisushifishcod", "nigiri2": "rtdd:nigirisushicod_2", "nigiri3": "rtdd:nigirisushicod_3", "pile2": "rtdd:sushipile_2", "pile3": "rtdd:sushipile_3", "addTip": None, "rollTip": None, "cutTip": None, "nigiriTip": None, "pileTip": None, "takeTip": None, }, { "key": "salmon", "fish": FISH_SALMON, "roll": ["rtdd:salmonsushi_1", "rtdd:salmonsushi_2", "rtdd:salmonsushi_3", "rtdd:salmonsushi_4", "rtdd:salmonsushi_5"], "cubes": "rtdd:salmonsushi_6", "nigiri1": "rtdd:nigirisushifishsalmon_1", "nigiri2": "rtdd:nigirisushisalnom_2", "nigiri3": "rtdd:nigirisushisalnom_3", "pile2": "rtdd:sushipile_4", "pile3": "rtdd:sushipile_5", "addTip": None, "rollTip": None, "cutTip": None, "nigiriTip": None, "pileTip": None, "takeTip": None, }, { "key": "fish", "fish": FISH_TROPICAL, "roll": ["rtdd:fishsushi_1", "rtdd:fishsushi_2", "rtdd:fishsushi_3", "rtdd:fishsushi_4", "rtdd:fishsushi_5"], "cubes": "rtdd:fishmonsushi_6", "nigiri1": "rtdd:nigirisushifish_1", "nigiri2": "rtdd:nigirisushifish_2", "nigiri3": "rtdd:nigirisushifish_3", "pile2": "rtdd:sushipile_0", "pile3": "rtdd:sushipile_1", "addTip": None, "rollTip": None, "cutTip": None, "nigiriTip": None, "pileTip": None, "takeTip": None, }, { "key": "squid", "fish": FISH_SQUID, "roll": None, "cubes": None, "pile2": None, "pile3": None, "nigiri1": "rtdd:squid_sushi", "nigiri2": "rtdd:squidsushi_2", "nigiri3": "rtdd:squidsushi_3", "addTip": None, "rollTip": None, "cutTip": None, "nigiriTip": None, "pileTip": None, "takeTip": None, }, ] # 干海带铺饭团消耗数(基础组) NORI_RICE_CONSUME = 4 # 切块需要菜刀右击次数 CUT_COUNT = 2 # 手握堆叠/寿司堆 每次消耗手持数 STACK_CONSUME = 1 # ============================================================================ # 手持物品右键"寿司方块本体"的转换对(block + item) # 寿司的规则都内联在 ShousiService 里, 不像其它分类写在 *Data 的 SWITCH_RULES, # 客户端拦截白名单无法自动派生 -> 手持饭团/鱼右键寿司方块时会被当成"吃/放置" # (饭团被吃、鱼被放成死鱼), 转换不触发。 # 这里按 SUSHI_GROUPS 反向导出一份 (block, item) 表, 供 InterceptData 汇入 # BLOCKUSE_CANCEL, 使客户端命中后显式发 BlockUseRequest, 由服务端 # ShousiService.handleBlockUse 执行转换。 # ============================================================================ def _build_shousi_switches(): pairs = [{"block": NORI_0, "item": RICE_BALL}] # 基础组: 干海带 + 饭团 for g in SUSHI_GROUPS: fish = g.get("fish") roll = g.get("roll") # 手握: 手握普通寿司 + 鱼 pairs.append({"block": NIGIRI_BASE, "item": fish}) # 手握堆叠: 手持 手握X(一个) 右键 手握X(一/两个) pairs.append({"block": g["nigiri1"], "item": g["nigiri1"]}) pairs.append({"block": g["nigiri2"], "item": g["nigiri1"]}) if roll: # 加鱼: 干海带(加饭团) + 鱼 pairs.append({"block": NORI_1, "item": fish}) # 寿司堆: 手持 卷寿司(链尾) 右键 卷寿司/寿司堆(两个) pairs.append({"block": roll[-1], "item": roll[-1]}) if g.get("pile2"): pairs.append({"block": g["pile2"], "item": roll[-1]}) return pairs SHOUSI_SWITCHES = _build_shousi_switches()