From 1413a3abc675e3951b638e6c06cb0ab8b4c20334 Mon Sep 17 00:00:00 2001 From: wenhe <1046926120@qq.com> Date: Thu, 3 Sep 2026 15:23:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=B6=E5=85=B7=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Script_NeteaseModousIY5aSF/modMain.py | 3 +- .../xiangyemod/BlockSwitchData.py | 1392 ------ .../xiangyemod/RecipeData.py | 4323 ----------------- .../xiangyemod/client/CookingClient.py | 19 - .../xiangyemod/client/__init__.py | 0 .../xiangyemod/jiaju/FurnitureData.py | 266 + .../xiangyemod/jiaju/__init__.py | 1 + .../jiaju/service/FurnitureService.py | 603 +++ .../xiangyemod/jiaju/service/__init__.py | 1 + .../xiangyemod/service/BlockSwitchService.py | 764 --- .../xiangyemod/service/CookingService.py | 791 --- resource_pack_Are13Lvd/texts/zh_CN.lang | 2 +- tuilun/乡野食物转化关系.txt | 36 +- tuilun/全部功能做了什么.txt | 45 + tuilun/全部功能没做什么.txt | 25 + tuilun/家具家私转化关系.txt | 237 +- 代办设计.txt | 1 - 已有自定义配方列表.txt | 1353 ------ 未使用方块列表.txt | 694 --- 19 files changed, 1076 insertions(+), 9480 deletions(-) delete mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/BlockSwitchData.py delete mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/RecipeData.py delete mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/client/CookingClient.py delete mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/client/__init__.py create mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/FurnitureData.py create mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/__init__.py create mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py create mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/__init__.py delete mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/BlockSwitchService.py delete mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/CookingService.py delete mode 100644 已有自定义配方列表.txt delete mode 100644 未使用方块列表.txt diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/modMain.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/modMain.py index 3fcaa0c..b08c30a 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/modMain.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/modMain.py @@ -1,6 +1,4 @@ from BlueFoxTools.ModLoader import * -from xiangyemod.service.CookingService import CookingService -from xiangyemod.service.BlockSwitchService import BlockSwitchService from xiangyemod.service.FeatureDispatcher import FeatureDispatcher from xiangyemod.dongwuyangzhi.service.AnimalService import AnimalService from xiangyemod.dongwuyangzhi.service.AnimalTimerService import AnimalTimerService @@ -11,6 +9,7 @@ from xiangyemod.siwangshengwu.service.DeadmobTimerService import DeadmobTimerSer from xiangyemod.shouban.service.ShoubanService import ShoubanService from xiangyemod.shichangmaoyi.service.MarketService import MarketService from xiangyemod.yuanbanfangzhi.service.YuanbanService import YuanbanService +from xiangyemod.jiaju.service.FurnitureService import FurnitureService if not serverApi.IsInServer(): pass diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/BlockSwitchData.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/BlockSwitchData.py deleted file mode 100644 index 9cce812..0000000 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/BlockSwitchData.py +++ /dev/null @@ -1,1392 +0,0 @@ -# -*- coding: utf-8 -*- -""" -工具方块切换规则数据 -==================== -所有"右键方块→消耗物品→替换方块"的工具切换规则都在这里。 - -与 RecipeData.py 的关系: - RecipeData.py = 做菜配方(食材+锅 → 菜) - BlockSwitchData.py = 工具切换(箭桶、挂肉钩、水槽、盘子架、药水架、书柜等) - -CookingService 启动时会自动把两边的数据合并成一份字典,O(1) 查找。 - -字段说明: - source: 被右键的方块ID(必填) - item: 玩家手里必须拿的物品,None=空手也行 - target: 替换成什么方块 - consume: 消耗物品数量,0=不消耗(默认1) - giveItem: 额外给玩家什么物品,None=取回记录的物品 - type: "switch"=工具切换, "timer"=计时自动转换 - record: True=需要记录放入的物品,取回时原样返还 - recordType: "count"=记录一种物品+数量, "stack"=后放先取堆栈 - maxCount: 记录型最多存多少(箭桶32只、盘子架5个等) - time: 计时型转换需要多少秒 - tool: 特定工具要求(如"剑") - arrowMode: 箭桶专用,"store"=存箭模式,"retrieve"=取箭模式 - 存箭:批量存入手中所有箭(至多maxCount),支持普通箭+药水箭 - 取箭:一次性取回方块记录的所有箭 -""" - -BLOCK_SWITCHES = [ - - # 一、箭桶 - # ============================================================ - # 【存箭】箭桶_0 → 箭桶_1 - # 支持所有箭类型:minecraft:arrow(普通箭)、minecraft:tipped_arrow(药水箭) - # 批量存入手中所有箭(至多 maxCount 只),记录箭类型(itemName + auxValue) - # 例如:手持 64 只中毒之箭右键 → 存 32 只,手上剩 32 只 - # 手持 31 只中毒之箭右键 → 存 31 只,手上清空 - { - "source": "rtdd:arrowbarrel_0", - "item": None, - "target": "rtdd:arrowbarrel_1", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "count", - "maxCount": 32, - "giveItem": None, - "arrowMode": "store", - }, - # 【取箭】箭桶_1 → 箭桶_0 - # 一次性取回方块内记录的所有箭(数量、类型按记录来) - { - "source": "rtdd:arrowbarrel_1", - "item": None, - "target": "rtdd:arrowbarrel_0", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "count", - "giveItem": None, - "arrowMode": "retrieve", - }, - - - # 二、纺纱机 - # ============================================================ - { - "source": "rtdd:b_110", - "item": None, - "target": "rtdd:spinner", - "consume": 0, - "type": "switch", - "giveItem": None, - }, - - - # 三、售卖盒(鲑鱼) - # ============================================================ - # 旧"售卖箱↔鲑鱼箱"规则已移除: clothbox_1/2 已禁用, b_30(售卖盒(鲑鱼)) - # 归 市场贸易 MarketService 处理(空售卖盒+32条鲑鱼放入 / 空手右键取出)。 - - - # 四、烧烤架 - # ============================================================ - # 【点火-打火石】烧烤架_0 → 烧烤架_1 - { - "source": "rtdd:barbecuegrill_0", - "item": "minecraft:flint_and_steel", - "target": "rtdd:barbecuegrill_1", - "consume": 0, - "type": "switch", - "giveItem": None, - }, - # 【点火-烈焰弹】烧烤架_0 → 烧烤架_1 - { - "source": "rtdd:barbecuegrill_0", - "item": "minecraft:fire_charge", - "target": "rtdd:barbecuegrill_1", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【灭火】烧烤架_1 → 烧烤架_0(消耗水桶,获得空桶) - { - "source": "rtdd:barbecuegrill_1", - "item": "minecraft:water_bucket", - "target": "rtdd:barbecuegrill_0", - "consume": 1, - "type": "switch", - "giveItem": "minecraft:bucket", - }, - - - # 五、炉灶 - # ============================================================ - # 【加柴-木条】炉灶_1 → 炉灶_2 - { - "source": "rtdd:stove", - "item": "rtdd:barwood", - "target": "rtdd:stove_1", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【加柴-木块】炉灶_1 → 炉灶_2 - { - "source": "rtdd:stove", - "item": "rtdd:b_15", - "target": "rtdd:stove_1", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【点火-打火石】炉灶_2 → 炉灶_3 - { - "source": "rtdd:stove_1", - "item": "minecraft:flint_and_steel", - "target": "rtdd:stove_2", - "consume": 0, - "type": "switch", - "giveItem": None, - }, - # 【点火-烈焰弹】炉灶_2 → 炉灶_3 - { - "source": "rtdd:stove_1", - "item": "minecraft:fire_charge", - "target": "rtdd:stove_2", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - - - # 六、挂肉钩 - 牛 - # ============================================================ - # 正向:挂死牛 → 拿剑切肉 → 切完回空钩(掉落牛肉) - # 逆向:空手右键退回死牛 - # ============================================================ - # 【挂牛】空钩 → 牛_0 - { - "source": "rtdd:meathook", - "item": "rtdd:dead_cow", - "target": "rtdd:cow_0", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【切肉-第一刀】牛_0 → 牛_1 - { - "source": "rtdd:cow_0", - "item": "minecraft:iron_sword", - "target": "rtdd:cow_1", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:beef", - "tool": "sword", - }, - # 【切肉-第二刀】牛_1 → 牛_2 - { - "source": "rtdd:cow_1", - "item": "minecraft:iron_sword", - "target": "rtdd:cow_2", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:beef", - "tool": "sword", - }, - # 【切肉-第三刀】牛_2 → 牛_3 - { - "source": "rtdd:cow_2", - "item": "minecraft:iron_sword", - "target": "rtdd:cow_3", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:beef", - "tool": "sword", - }, - # 【切肉-最后一刀】牛_3 → 空钩 - { - "source": "rtdd:cow_3", - "item": "minecraft:iron_sword", - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:beef", - "tool": "sword", - }, - # ---- 逆向退回 ---- - # 【退回】牛_3 → 牛_2 - { - "source": "rtdd:cow_3", - "item": None, - "target": "rtdd:cow_2", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_cow", - }, - # 【退回】牛_2 → 牛_1 - { - "source": "rtdd:cow_2", - "item": None, - "target": "rtdd:cow_1", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_cow", - }, - # 【退回】牛_1 → 牛_0 - { - "source": "rtdd:cow_1", - "item": None, - "target": "rtdd:cow_0", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_cow", - }, - # 【退回】牛_0 → 空钩 - { - "source": "rtdd:cow_0", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_cow", - }, - - - # 七、晾干架 - # ============================================================ - { - "source": "rtdd:dryingrack", - "item": None, - "target": "rtdd:dryingrack_1", - "consume": 0, - "type": "switch", - "giveItem": None, - }, - { - "source": "rtdd:dryingrack_1", - "item": None, - "target": "rtdd:dryingrack_2", - "consume": 0, - "type": "switch", - "giveItem": None, - }, - { - "source": "rtdd:dryingrack_2", - "item": None, - "target": "rtdd:dryingrack", - "consume": 0, - "type": "switch", - "giveItem": None, - }, - - - # 八、挂肉钩 - 鱼(生鱼晾干) - # ============================================================ - # 正向:挂生鱼 → 计时晾干 → 熟鱼 - # 逆向:空手退回生鱼 - # ============================================================ - # 【挂鱼】空钩 → 鱼_1 - { - "source": "rtdd:meathook", - "item": "minecraft:fish", - "target": "rtdd:fish_1", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【挂第二条】鱼_1 → 鱼_2 - { - "source": "rtdd:fish_1", - "item": "minecraft:fish", - "target": "rtdd:fish_2", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【晾干】鱼_2 → 空钩(计时自动,右键获得熟鱼) - { - "source": "rtdd:fish_2", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "timer", - "time": 300, - "giveItem": "minecraft:cooked_fish", - }, - # ---- 逆向退回 ---- - # 【退鱼】鱼_2 → 鱼_1 - { - "source": "rtdd:fish_2", - "item": None, - "target": "rtdd:fish_1", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:fish", - }, - # 【退鱼】鱼_1 → 空钩 - { - "source": "rtdd:fish_1", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:fish", - }, - - - # 九、挂肉钩 - 鳕鱼 - # ============================================================ - # 正向:挂鳕鱼 → 计时晾干 → 熟鳕鱼 - # 逆向:空手退回鳕鱼 - # ============================================================ - # 【挂鳕鱼】空钩 → 鳕鱼_1 - { - "source": "rtdd:meathook", - "item": "minecraft:cod", - "target": "rtdd:meathookcod_1", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【挂第二条】鳕鱼_1 → 鳕鱼_2 - { - "source": "rtdd:meathookcod_1", - "item": "minecraft:cod", - "target": "rtdd:meathookcod_2", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【晾干】鳕鱼_2 → 干鳕鱼钩(计时自动) - { - "source": "rtdd:meathookcod_2", - "item": None, - "target": "rtdd:meathookcoddry", - "consume": 0, - "type": "timer", - "time": 300, - "giveItem": None, - }, - # 【取熟鳕鱼】干鳕鱼钩 → 空钩 - { - "source": "rtdd:meathookcoddry", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:cooked_cod", - }, - # ---- 逆向退回 ---- - # 【退鳕鱼】鳕鱼_2 → 鳕鱼_1 - { - "source": "rtdd:meathookcod_2", - "item": None, - "target": "rtdd:meathookcod_1", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:cod", - }, - # 【退鳕鱼】鳕鱼_1 → 空钩 - { - "source": "rtdd:meathookcod_1", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:cod", - }, - - - # 十、挂肉钩 - 猪 - # ============================================================ - # 正向:挂死猪 → 拿剑切肉 → 切完回空钩(掉落生猪排) - # 逆向:空手退回死猪 - # ============================================================ - # 【挂猪】空钩 → 猪_0 - { - "source": "rtdd:meathook", - "item": "rtdd:dead_pig", - "target": "rtdd:pig_0", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【切肉-第一刀】猪_0 → 猪_1 - { - "source": "rtdd:pig_0", - "item": "minecraft:iron_sword", - "target": "rtdd:pig_1", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:porkchop", - "tool": "sword", - }, - # 【切肉-第二刀】猪_1 → 猪_2 - { - "source": "rtdd:pig_1", - "item": "minecraft:iron_sword", - "target": "rtdd:pig_2", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:porkchop", - "tool": "sword", - }, - # 【切肉-第三刀】猪_2 → 猪_3 - { - "source": "rtdd:pig_2", - "item": "minecraft:iron_sword", - "target": "rtdd:pig_3", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:porkchop", - "tool": "sword", - }, - # 【切肉-最后一刀】猪_3 → 空钩 - { - "source": "rtdd:pig_3", - "item": "minecraft:iron_sword", - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:porkchop", - "tool": "sword", - }, - # ---- 逆向退回 ---- - # 【退回】猪_3 → 猪_2 - { - "source": "rtdd:pig_3", - "item": None, - "target": "rtdd:pig_2", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_pig", - }, - # 【退回】猪_2 → 猪_1 - { - "source": "rtdd:pig_2", - "item": None, - "target": "rtdd:pig_1", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_pig", - }, - # 【退回】猪_1 → 猪_0 - { - "source": "rtdd:pig_1", - "item": None, - "target": "rtdd:pig_0", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_pig", - }, - # 【退回】猪_0 → 空钩 - { - "source": "rtdd:pig_0", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_pig", - }, - - - # 十一、挂肉钩 - 羊 - # ============================================================ - # 正向:挂死羊 → 拿剑切肉 → 切完回空钩(掉落生羊肉) - # 逆向:空手退回死羊 - # ============================================================ - # 【挂羊】空钩 → 羊_0 - { - "source": "rtdd:meathook", - "item": "rtdd:dead_sheep", - "target": "rtdd:sheep", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【切肉-第一刀】羊_0 → 羊_1 - { - "source": "rtdd:sheep", - "item": "minecraft:iron_sword", - "target": "rtdd:sheep_1", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:mutton", - "tool": "sword", - }, - # 【切肉-第二刀】羊_1 → 羊_2 - { - "source": "rtdd:sheep_1", - "item": "minecraft:iron_sword", - "target": "rtdd:sheep_2", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:mutton", - "tool": "sword", - }, - # 【切肉-第三刀】羊_2 → 羊_3 - { - "source": "rtdd:sheep_2", - "item": "minecraft:iron_sword", - "target": "rtdd:sheep_3", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:mutton", - "tool": "sword", - }, - # 【切肉-最后一刀】羊_3 → 空钩 - { - "source": "rtdd:sheep_3", - "item": "minecraft:iron_sword", - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "minecraft:mutton", - "tool": "sword", - }, - # ---- 逆向退回 ---- - # 【退回】羊_3 → 羊_2 - { - "source": "rtdd:sheep_3", - "item": None, - "target": "rtdd:sheep_2", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_sheep", - }, - # 【退回】羊_2 → 羊_1 - { - "source": "rtdd:sheep_2", - "item": None, - "target": "rtdd:sheep_1", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_sheep", - }, - # 【退回】羊_1 → 羊_0 - { - "source": "rtdd:sheep_1", - "item": None, - "target": "rtdd:sheep", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_sheep", - }, - # 【退回】羊_0 → 空钩 - { - "source": "rtdd:sheep", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dead_sheep", - }, - - - # 十二、挂肉钩 - 鲑鱼晾晒系统 - # ============================================================ - # 路线A(只挂1条): 空钩 → 鲜鲑鱼_1 → 干鲑鱼_1 → 空钩 - # 路线B(挂2条): 空钩 → 鲜鲑鱼_1 → 鲜鲑鱼_2 → 干鲑鱼_2 → 干鲑鱼_1 → 空钩 - # ============================================================ - # 【挂鱼】空钩 → 鲜鲑鱼_1(手持死鲑鱼) - { - "source": "rtdd:meathook", - "item": "rtdd:killfish_0", - "target": "rtdd:hang_meat_hooks_1", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【挂第二条】鲜鲑鱼_1 → 鲜鲑鱼_2 - { - "source": "rtdd:hang_meat_hooks_1", - "item": "rtdd:killfish_0", - "target": "rtdd:hang_meat_hooks_2", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【单条晾干】鲜鲑鱼_1 → 干鲑鱼_1(计时自动) - { - "source": "rtdd:hang_meat_hooks_1", - "item": None, - "target": "rtdd:hang_meat_hooks_3", - "consume": 0, - "type": "timer", - "time": 300, - "giveItem": None, - }, - # 【两条晾干】鲜鲑鱼_2 → 干鲑鱼_2(计时自动) - { - "source": "rtdd:hang_meat_hooks_2", - "item": None, - "target": "rtdd:hang_meat_hooks_4", - "consume": 0, - "type": "timer", - "time": 300, - "giveItem": None, - }, - # 【取走单条干】干鲑鱼_1 → 空钩 - { - "source": "rtdd:hang_meat_hooks_3", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dried_salmon", - }, - # 【取走第一条干】干鲑鱼_2 → 干鲑鱼_1 - { - "source": "rtdd:hang_meat_hooks_4", - "item": None, - "target": "rtdd:hang_meat_hooks_3", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:dried_salmon", - }, - # ---- 逆向退回 ---- - # 【退单条鲜】鲜鲑鱼_1 → 空钩 - { - "source": "rtdd:hang_meat_hooks_1", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:killfish_0", - }, - # 【退一条鲜】鲜鲑鱼_2 → 鲜鲑鱼_1 - { - "source": "rtdd:hang_meat_hooks_2", - "item": None, - "target": "rtdd:hang_meat_hooks_1", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:killfish_0", - }, - # 【退单条干】干鲑鱼_1 → 空钩 - { - "source": "rtdd:hang_meat_hooks_3", - "item": None, - "target": "rtdd:meathook", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:killfish_0", - }, - # 【退一条干】干鲑鱼_2 → 干鲑鱼_1 - { - "source": "rtdd:hang_meat_hooks_4", - "item": None, - "target": "rtdd:hang_meat_hooks_3", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:killfish_0", - }, - - - # 十三、水槽系统 - # ============================================================ - # ---- 加水 / 取水 ---- - # 【加水】水槽_0 → 水槽_1 - { - "source": "rtdd:flume_0", - "item": None, - "target": "rtdd:flume_1", - "consume": 0, - "type": "switch", - "giveItem": None, - }, - # 【取水】水槽_1 → 水槽_0(手持空桶,消耗空桶获得装满水的水桶) - { - "source": "rtdd:flume_1", - "item": "minecraft:bucket", - "target": "rtdd:flume_0", - "consume": 1, - "type": "switch", - "giveItem": "minecraft:water_bucket", - }, - # 【放第一个脏盘子 有水放盘子】水槽_1 → 水槽_2 - { - "source": "rtdd:flume_1", - "item": "rtdd:plate_0a", - "target": "rtdd:flume_2", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【放第二个脏盘子】水槽_2 → 水槽_3 - { - "source": "rtdd:flume_2", - "item": "rtdd:plate_0a", - "target": "rtdd:flume_3", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【放第三个脏盘子】水槽_3 → 水槽_4 - { - "source": "rtdd:flume_3", - "item": "rtdd:plate_0a", - "target": "rtdd:flume_4", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【放第四个脏盘子】水槽_4 → 水槽_5 - { - "source": "rtdd:flume_4", - "item": "rtdd:plate_0a", - "target": "rtdd:flume_5", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # ---- 取回脏盘子 ---- - # 【取走一个脏盘子】水槽_5 → 水槽_4 - { - "source": "rtdd:flume_5", - "item": None, - "target": "rtdd:flume_4", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0a", - }, - # 【取走一个脏盘子】水槽_4 → 水槽_3 - { - "source": "rtdd:flume_4", - "item": None, - "target": "rtdd:flume_3", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0a", - }, - # 【取走一个脏盘子】水槽_3 → 水槽_2 - { - "source": "rtdd:flume_3", - "item": None, - "target": "rtdd:flume_2", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0a", - }, - # 【取走最后一个脏盘子】水槽_2 → 水槽_1 - { - "source": "rtdd:flume_2", - "item": None, - "target": "rtdd:flume_1", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0a", - }, - - - # 十四、盘子架系统 - # ============================================================ - # ---- 放盘子 ---- - # 【放第一个盘子】盘子架_1 → 盘子架_2 - { - "source": "rtdd:trayracks_1", - "item": "rtdd:plate_0", - "target": "rtdd:trayracks_2", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【放第二个盘子】盘子架_2 → 盘子架_3 - { - "source": "rtdd:trayracks_2", - "item": "rtdd:plate_0", - "target": "rtdd:trayracks_3", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【放第三个盘子】盘子架_3 → 盘子架_4 - { - "source": "rtdd:trayracks_3", - "item": "rtdd:plate_0", - "target": "rtdd:trayracks_4", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【放第四个盘子】盘子架_4 → 盘子架_5 - { - "source": "rtdd:trayracks_4", - "item": "rtdd:plate_0", - "target": "rtdd:trayracks_5", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # 【放第五个盘子】盘子架_5 → 盘子架_6 - { - "source": "rtdd:trayracks_5", - "item": "rtdd:plate_0", - "target": "rtdd:trayracks_6", - "consume": 1, - "type": "switch", - "giveItem": None, - }, - # ---- 取回盘子 ---- - # 【取走一个盘子】盘子架_6 → 盘子架_5 - { - "source": "rtdd:trayracks_6", - "item": None, - "target": "rtdd:trayracks_5", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0", - }, - # 【取走一个盘子】盘子架_5 → 盘子架_4 - { - "source": "rtdd:trayracks_5", - "item": None, - "target": "rtdd:trayracks_4", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0", - }, - # 【取走一个盘子】盘子架_4 → 盘子架_3 - { - "source": "rtdd:trayracks_4", - "item": None, - "target": "rtdd:trayracks_3", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0", - }, - # 【取走一个盘子】盘子架_3 → 盘子架_2 - { - "source": "rtdd:trayracks_3", - "item": None, - "target": "rtdd:trayracks_2", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0", - }, - # 【取走最后一个盘子】盘子架_2 → 盘子架_1 - { - "source": "rtdd:trayracks_2", - "item": None, - "target": "rtdd:trayracks_1", - "consume": 0, - "type": "switch", - "giveItem": "rtdd:plate_0", - }, - - - # 十五、药水架系统(后放先取) - # ============================================================ - # ---- 放药水 ---- - # 【放第一瓶】药水架_0 → 药水架_1 - { - "source": "rtdd:lotion_0", - "item": "minecraft:potion", - "target": "rtdd:lotion_1", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 3, - "giveItem": None, - }, - # 【放第二瓶】药水架_1 → 药水架_2 - { - "source": "rtdd:lotion_1", - "item": "minecraft:potion", - "target": "rtdd:lotion_2", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 3, - "giveItem": None, - }, - # 【放第三瓶】药水架_2 → 药水架_3 - { - "source": "rtdd:lotion_2", - "item": "minecraft:potion", - "target": "rtdd:lotion_3", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 3, - "giveItem": None, - }, - # ---- 取回(后放先取) ---- - # 【取回第三瓶】药水架_3 → 药水架_2 - { - "source": "rtdd:lotion_3", - "item": None, - "target": "rtdd:lotion_2", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第二瓶】药水架_2 → 药水架_1 - { - "source": "rtdd:lotion_2", - "item": None, - "target": "rtdd:lotion_1", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第一瓶】药水架_1 → 药水架_0 - { - "source": "rtdd:lotion_1", - "item": None, - "target": "rtdd:lotion_0", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - - - # 十六、书柜系统(后放先取,13级) - # ============================================================ - # ---- 放书 ---- - # 【放第1本】空书柜 → 书柜_12 - { - "source": "rtdd:bookcase", - "item": "minecraft:book", - "target": "rtdd:bookcase_12", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_12", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第2本】书柜_12 → 书柜_11 - { - "source": "rtdd:bookcase_12", - "item": "minecraft:book", - "target": "rtdd:bookcase_11", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_12", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_11", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第3本】书柜_11 → 书柜_10 - { - "source": "rtdd:bookcase_11", - "item": "minecraft:book", - "target": "rtdd:bookcase_10", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_11", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_10", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第4本】书柜_10 → 书柜_9 - { - "source": "rtdd:bookcase_10", - "item": "minecraft:book", - "target": "rtdd:bookcase_9", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_10", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_9", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第5本】书柜_9 → 书柜_8 - { - "source": "rtdd:bookcase_9", - "item": "minecraft:book", - "target": "rtdd:bookcase_8", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_9", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_8", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第6本】书柜_8 → 书柜_7 - { - "source": "rtdd:bookcase_8", - "item": "minecraft:book", - "target": "rtdd:bookcase_7", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_8", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_7", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第7本】书柜_7 → 书柜_6 - { - "source": "rtdd:bookcase_7", - "item": "minecraft:book", - "target": "rtdd:bookcase_6", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_7", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_6", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第8本】书柜_6 → 书柜_5 - { - "source": "rtdd:bookcase_6", - "item": "minecraft:book", - "target": "rtdd:bookcase_5", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_6", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_5", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第9本】书柜_5 → 书柜_4 - { - "source": "rtdd:bookcase_5", - "item": "minecraft:book", - "target": "rtdd:bookcase_4", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_5", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_4", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第10本】书柜_4 → 书柜_3(B_196) - { - "source": "rtdd:bookcase_4", - "item": "minecraft:book", - "target": "rtdd:b_196", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_4", - "item": "minecraft:enchanted_book", - "target": "rtdd:b_196", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第11本】书柜_3(B_196) → 书柜_3 - { - "source": "rtdd:b_196", - "item": "minecraft:book", - "target": "rtdd:bookcase_3", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:b_196", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_3", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第12本】书柜_3 → 书柜_2 - { - "source": "rtdd:bookcase_3", - "item": "minecraft:book", - "target": "rtdd:bookcase_2", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_3", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_2", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # 【放第13本】书柜_2 → 书柜_1 - { - "source": "rtdd:bookcase_2", - "item": "minecraft:book", - "target": "rtdd:bookcase_1", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - { - "source": "rtdd:bookcase_2", - "item": "minecraft:enchanted_book", - "target": "rtdd:bookcase_1", - "consume": 1, - "type": "switch", - "record": True, - "recordType": "stack", - "maxCount": 13, - "giveItem": None, - }, - # ---- 取回(后放先取) ---- - # 【取回第13本】书柜_1 → 书柜_2 - { - "source": "rtdd:bookcase_1", - "item": None, - "target": "rtdd:bookcase_2", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第12本】书柜_2 → 书柜_3 - { - "source": "rtdd:bookcase_2", - "item": None, - "target": "rtdd:bookcase_3", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第11本】书柜_3 → 书柜_3(B_196) - { - "source": "rtdd:bookcase_3", - "item": None, - "target": "rtdd:b_196", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第10本】书柜_3(B_196) → 书柜_4 - { - "source": "rtdd:b_196", - "item": None, - "target": "rtdd:bookcase_4", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第9本】书柜_4 → 书柜_5 - { - "source": "rtdd:bookcase_4", - "item": None, - "target": "rtdd:bookcase_5", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第8本】书柜_5 → 书柜_6 - { - "source": "rtdd:bookcase_5", - "item": None, - "target": "rtdd:bookcase_6", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第7本】书柜_6 → 书柜_7 - { - "source": "rtdd:bookcase_6", - "item": None, - "target": "rtdd:bookcase_7", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第6本】书柜_7 → 书柜_8 - { - "source": "rtdd:bookcase_7", - "item": None, - "target": "rtdd:bookcase_8", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第5本】书柜_8 → 书柜_9 - { - "source": "rtdd:bookcase_8", - "item": None, - "target": "rtdd:bookcase_9", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第4本】书柜_9 → 书柜_10 - { - "source": "rtdd:bookcase_9", - "item": None, - "target": "rtdd:bookcase_10", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第3本】书柜_10 → 书柜_11 - { - "source": "rtdd:bookcase_10", - "item": None, - "target": "rtdd:bookcase_11", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第2本】书柜_11 → 书柜_12 - { - "source": "rtdd:bookcase_11", - "item": None, - "target": "rtdd:bookcase_12", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, - # 【取回第1本】书柜_12 → 空书柜 - { - "source": "rtdd:bookcase_12", - "item": None, - "target": "rtdd:bookcase", - "consume": 0, - "type": "switch", - "record": True, - "recordType": "stack", - "giveItem": None, - }, -] \ No newline at end of file diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/RecipeData.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/RecipeData.py deleted file mode 100644 index f232e88..0000000 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/RecipeData.py +++ /dev/null @@ -1,4323 +0,0 @@ -# -*- coding: utf-8 -*- -""" -配方数据文件 - 所有"右键方块→消耗物品→替换方块"的配方都在这里 -每加一道新菜,只需要在这里加一条配方,不用写任何Python代码。 - -配方字段说明: - source: 被右键的方块ID(必填) - item: 玩家手里必须拿的物品,None=空手也行 - target: 替换成什么方块,None=不替换 - consume: 消耗物品数量,0=不消耗(默认1) - giveItem: 额外给玩家什么物品 - stirCount: 需要翻炒几次才变身 - stirCd: 翻炒冷却时间(秒) - onDone: "finish"=标记熟了不替换 - needFinished: True=只熟了才触发,False=熟了就不触发 - doneMsg: 完成后的提示消息 - dropIfDone: 熟了后拆掉掉落什么 - dropIfNot: 没熟拆掉掉落什么 - below: 下面必须放什么方块(列表),不写=自动推断,[]=不需要底座 -""" - -# ===== 底座常量 ===== -# 灶台(灶台基础款 + 炉灶点燃态) -BELOW_STOVE = ["rtdd:cookstoves", "rtdd:stove_2"] -# 营火(架锅专用) -BELOW_CAMPFIRE = ["minecraft:campfire"] - -# ===== 方块前缀 → 底座 推断规则 ===== -# 如果配方里没写 below 字段,CookingService 会根据方块名自动推断需要什么底座 -# 匹配优先级:从上到下,先匹配到的生效 -# 默认:大多数烹饪方块都需要灶台底座 -_BASE_PREFIX_MAP = [ - # 架锅系列 → 营火 - (("rtdd:potsimmering",), BELOW_CAMPFIRE), - # 手工工具/不需要底座 - (("rtdd:juicer", "rtdd:meatballmaker", "rtdd:wine_barrel", - "rtdd:farineblock", "rtdd:beater", "rtdd:barbecuegrill", - "rtdd:dough_", "rtdd:smalldough_", "rtdd:dought_", - "rtdd:scallion_pancake_", "rtdd:dumplings_", "rtdd:roubao_", - "rtdd:souffle_", "rtdd:cream_caramel", - ), []), -] - - -def inferBaseBlock(sourceName): - """根据方块名自动推断需要什么底座,返回底座列表,[]=不需要底座""" - for prefixes, base in _BASE_PREFIX_MAP: - for p in prefixes: - if sourceName.startswith(p): - return base - # 默认:所有其他烹饪方块都需要灶台底座 - return BELOW_STOVE - - -RECIPES = [ - - # ===================================================================== - # 一、炒锅类菜谱 (rtdd:wok=炒锅) - # 上油步骤(共用): 炒锅 + 带油锅铲 → 炒锅(添油)(rtdd:oilpan) - # 注意:炒锅(添油)(rtdd:oilpan) 与 加大蒜(rtdd:cookinggarlic) 功能等价 - # ===================================================================== - - # ---- 公用上油:炒锅 + 带油锅铲 → 炒锅(添油) ---- - { - "source": "rtdd:wok", - "item": "rtdd:spatula_oil", - "target": "rtdd:oilpan", - "consume": 0, - }, - # 油锅工具识别(无实际变化) - { - "source": "rtdd:oilpan", - "item": "rtdd:spatula_oil", - "target": "rtdd:oilpan", - "consume": 0, - }, - # 加大蒜工具识别(无实际变化) - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:spatula_oil", - "target": "rtdd:cookinggarlic", - "consume": 0, - }, - - # ============================================================ - # 【共用】胡萝卜预处理:生→半熟→熟 - # ============================================================ - # 步骤A: 炒锅(添油) 或 加大蒜 + 胡萝卜 → 炒胡萝卜_生 - { - "source": "rtdd:oilpan", - "item": "minecraft:carrot", - "target": "rtdd:cookingcarrot", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "minecraft:carrot", - "target": "rtdd:cookingcarrot", - "consume": 1, - }, - # 步骤B: 炒胡萝卜_生 + 翻炒3次 → 炒胡萝卜_半熟 - { - "source": "rtdd:cookingcarrot", - "item": "rtdd:spatula", - "target": "rtdd:wokcarrot_1", - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤C: 炒胡萝卜_半熟 + 翻炒3次 → 炒胡萝卜_熟 - { - "source": "rtdd:wokcarrot_1", - "item": "rtdd:spatula", - "target": "rtdd:cooking_pepper", - "stirCount": 3, - "stirCd": 1.5, - }, - - # ============================================================ - # 【菜谱1】胡萝卜牛肉 - # ============================================================ - # 步骤1: 炒胡萝卜_熟 + 生牛肉 → 胡萝卜牛肉_生 - { - "source": "rtdd:cooking_pepper", - "item": "minecraft:beef", - "target": "rtdd:carrotandbeef", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 胡萝卜牛肉_熟 - { - "source": "rtdd:carrotandbeef", - "item": "rtdd:spatula", - "target": "rtdd:carrotandbeef_1", - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤3: 出锅 → 胡萝卜炒肉 - { - "source": "rtdd:carrotandbeef_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_53", - "consume": 1, - }, - { - "source": "rtdd:carrotandbeef_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_53", - "consume": 1, - }, - - # ============================================================ - # 【菜谱2】胡萝卜牛排骨 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:beefribs", - "target": "rtdd:carrotandbeefribs", - "consume": 1, - }, - { - "source": "rtdd:carrotandbeefribs", - "item": "rtdd:spatula", - "target": "rtdd:carrotandbeefribs_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:carrotandbeefribs_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_54", - "consume": 1, - }, - { - "source": "rtdd:carrotandbeefribs_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_54", - "consume": 1, - }, - - # ============================================================ - # 【菜谱3】胡萝卜牛腿 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:legcow", - "target": "rtdd:carrotandlegcow", - "consume": 1, - }, - { - "source": "rtdd:carrotandlegcow", - "item": "rtdd:spatula", - "target": "rtdd:carrotandlegcow_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:carrotandlegcow_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_55", - "consume": 1, - }, - { - "source": "rtdd:carrotandlegcow_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_55", - "consume": 1, - }, - - # ============================================================ - # 【菜谱4】葱花锅底煎羊肉(原香菜锅底,食材用葱) - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:scallions", - "target": "rtdd:vegetablespotbase", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:scallions", - "target": "rtdd:vegetablespotbase", - "consume": 1, - }, - { - "source": "rtdd:vegetablespotbase", - "item": "minecraft:mutton", - "target": "rtdd:carrotandmutton", - "consume": 1, - }, - { - "source": "rtdd:carrotandmutton", - "item": "rtdd:spatula", - "target": "rtdd:carrotandmutton_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:carrotandmutton_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_56", - "consume": 1, - }, - { - "source": "rtdd:carrotandmutton_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_56", - "consume": 1, - }, - - # ============================================================ - # 【菜谱5】胡萝卜猪排 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "minecraft:porkchop", - "target": "rtdd:carrotandporkchop", - "consume": 1, - }, - { - "source": "rtdd:carrotandporkchop", - "item": "rtdd:spatula", - "target": "rtdd:carrotandporkchop_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:carrotandporkchop_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_57", - "consume": 1, - }, - { - "source": "rtdd:carrotandporkchop_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_57", - "consume": 1, - }, - - # ============================================================ - # 【菜谱6】胡萝卜鲑鱼 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "minecraft:salmon", - "target": "rtdd:carrotandsalmon", - "consume": 1, - }, - { - "source": "rtdd:carrotandsalmon", - "item": "rtdd:spatula", - "target": "rtdd:carrotandsalmon_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:carrotandsalmon_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_58", - "consume": 1, - }, - { - "source": "rtdd:carrotandsalmon_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_58", - "consume": 1, - }, - - # ============================================================ - # 【菜谱7】胡萝卜羊腿 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:legoflamb", - "target": "rtdd:carrotlegoflamb", - "consume": 1, - }, - { - "source": "rtdd:carrotlegoflamb", - "item": "rtdd:spatula", - "target": "rtdd:carrotlegoflamb_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:carrotlegoflamb_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_59", - "consume": 1, - }, - { - "source": "rtdd:carrotlegoflamb_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_59", - "consume": 1, - }, - - # ============================================================ - # 【菜谱8】辣椒胡萝卜炒鸡 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:pepper", - "target": "rtdd:carrotpotbase", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:pepper", - "target": "rtdd:carrotpotbase", - "consume": 1, - }, - { - "source": "rtdd:carrotpotbase", - "item": "minecraft:chicken", - "target": "rtdd:cookingchilipepperandchicken", - "consume": 1, - }, - { - "source": "rtdd:cookingchilipepperandchicken", - "item": "rtdd:spatula", - "target": "rtdd:cookingchilipepperandchicken_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingchilipepperandchicken_2", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_60", - "consume": 1, - }, - { - "source": "rtdd:cookingchilipepperandchicken_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_60", - "consume": 1, - }, - - # ============================================================ - # 【菜谱9】麻婆豆腐 - # ============================================================ - { - "source": "rtdd:carrotpotbase", - "item": "minecraft:beef", - "target": "rtdd:oilpanchilipepperbeef_1", - "consume": 1, - }, - { - "source": "rtdd:oilpanchilipepperbeef_1", - "item": "rtdd:spatula", - "target": "rtdd:oilpanchilipepperbeef_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:oilpanchilipepperbeef_2", - "item": "rtdd:beancurd", - "target": "rtdd:oilpanchilipepperbeefbeancurd", - "consume": 1, - }, - { - "source": "rtdd:oilpanchilipepperbeefbeancurd", - "item": "rtdd:spatula", - "target": "rtdd:oilpanchilipepperbeefbeancurd_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:oilpanchilipepperbeefbeancurd_2", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_61", - "consume": 1, - }, - { - "source": "rtdd:oilpanchilipepperbeefbeancurd_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_61", - "consume": 1, - }, - - # ============================================================ - # 【菜谱10】蒜香时蔬 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:vegetable", - "target": "rtdd:cookingvegetables", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:vegetable", - "target": "rtdd:cookingvegetables", - "consume": 1, - }, - { - "source": "rtdd:cookingvegetables", - "item": "rtdd:spatula", - "target": "rtdd:cookingvegetables_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingvegetables_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_62", - "consume": 1, - }, - { - "source": "rtdd:cookingvegetables_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_62", - "consume": 1, - }, - - # ============================================================ - # 【菜谱11】炒土豆 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "minecraft:potato", - "target": "rtdd:cookingpotato", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "minecraft:potato", - "target": "rtdd:cookingpotato", - "consume": 1, - }, - { - "source": "rtdd:cookingpotato", - "item": "rtdd:spatula", - "target": "rtdd:cookingpotato_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingpotato_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_63", - "consume": 1, - }, - { - "source": "rtdd:cookingpotato_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_63", - "consume": 1, - }, - - # ============================================================ - # 【菜谱12】炒鱿鱼须 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:squidwhiskers", - "target": "rtdd:squidwhiskersincooking_0", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:squidwhiskers", - "target": "rtdd:squidwhiskersincooking_0", - "consume": 1, - }, - { - "source": "rtdd:squidwhiskersincooking_0", - "item": "rtdd:spatula", - "target": "rtdd:squidwhiskersincooking_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:squidwhiskersincooking_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_64", - "consume": 1, - }, - { - "source": "rtdd:squidwhiskersincooking_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_64", - "consume": 1, - }, - - # ============================================================ - # 【菜谱13】炒碎肉 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:mincedmeat", - "target": "rtdd:cookingmeat", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:mincedmeat", - "target": "rtdd:cookingmeat", - "consume": 1, - }, - { - "source": "rtdd:cookingmeat", - "item": "rtdd:spatula", - "target": "rtdd:cookingmeat_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingmeat_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_65", - "consume": 1, - }, - { - "source": "rtdd:cookingmeat_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_65", - "consume": 1, - }, - - # ============================================================ - # 【菜谱14】土豆炒猪肉 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:porkbelly", - "target": "rtdd:fried_pork", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:porkbelly", - "target": "rtdd:fried_pork", - "consume": 1, - }, - { - "source": "rtdd:fried_pork", - "item": "minecraft:potato", - "target": "rtdd:fried_porkwith_potatoes", - "consume": 1, - }, - { - "source": "rtdd:fried_porkwith_potatoes", - "item": "rtdd:spatula", - "target": "rtdd:fried_porkwith_potatoes_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:fried_porkwith_potatoes_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_66", - "consume": 1, - }, - { - "source": "rtdd:fried_porkwith_potatoes_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_66", - "consume": 1, - }, - - # ============================================================ - # 【菜谱15】胡萝卜炒猪肉 - # ============================================================ - { - "source": "rtdd:fried_pork", - "item": "minecraft:carrot", - "target": "rtdd:fried_porkwith_carrots", - "consume": 1, - }, - { - "source": "rtdd:fried_porkwith_carrots", - "item": "rtdd:spatula", - "target": "rtdd:friedporkwithcarrots_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:friedporkwithcarrots_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_67", - "consume": 1, - }, - { - "source": "rtdd:friedporkwithcarrots_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_67", - "consume": 1, - }, - - # ============================================================ - # 【菜谱16】炒鸡蛋 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "minecraft:egg", - "target": "rtdd:cookedegg", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "minecraft:egg", - "target": "rtdd:cookedegg", - "consume": 1, - }, - { - "source": "rtdd:cookedegg", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_68", - "consume": 1, - }, - { - "source": "rtdd:cookedegg", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_68", - "consume": 1, - }, - - # ============================================================ - # 【菜谱17】炒蟹 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:crab", - "target": "rtdd:cookingcrab_1", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:crab", - "target": "rtdd:cookingcrab_1", - "consume": 1, - }, - { - "source": "rtdd:cookingcrab_1", - "item": "rtdd:spatula", - "target": "rtdd:cookingcrab_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingcrab_2", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_69", - "consume": 1, - }, - { - "source": "rtdd:cookingcrab_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_69", - "consume": 1, - }, - - # ============================================================ - # 【菜谱18】辣炒兔肉 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "minecraft:rabbit", - "target": "rtdd:cookingrabbit", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "minecraft:rabbit", - "target": "rtdd:cookingrabbit", - "consume": 1, - }, - { - "source": "rtdd:cookingrabbit", - "item": "rtdd:spatula", - "target": "rtdd:cookingrabbit_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingrabbit_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_70", - "consume": 1, - }, - { - "source": "rtdd:cookingrabbit_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_70", - "consume": 1, - }, - - # ============================================================ - # 【菜谱19】胡萝卜牛里脊 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:beef_tenderloin", - "target": "rtdd:cookingbeeftenderloin", - "consume": 1, - }, - { - "source": "rtdd:cookingbeeftenderloin", - "item": "rtdd:spatula", - "target": "rtdd:cookingbeeftenderloin1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingbeeftenderloin1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_71", - "consume": 1, - }, - { - "source": "rtdd:cookingbeeftenderloin1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_71", - "consume": 1, - }, - - # ============================================================ - # 【菜谱20】胡萝卜炒羊里脊 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:sheeploins", - "target": "rtdd:cookingsheeploin", - "consume": 1, - }, - { - "source": "rtdd:cookingsheeploin", - "item": "rtdd:spatula", - "target": "rtdd:cookingsheeploin_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingsheeploin_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_72", - "consume": 1, - }, - { - "source": "rtdd:cookingsheeploin_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_72", - "consume": 1, - }, - - # ============================================================ - # 【菜谱21】胡萝卜炒羊排 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:sheepracks", - "target": "rtdd:cookingsheeprack", - "consume": 1, - }, - { - "source": "rtdd:cookingsheeprack", - "item": "rtdd:spatula", - "target": "rtdd:cookingsheeprack_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingsheeprack_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_73", - "consume": 1, - }, - { - "source": "rtdd:cookingsheeprack_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_73", - "consume": 1, - }, - - # ============================================================ - # 【菜谱22】炒鱿鱼(三阶段:生→半熟→熟) - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "minecraft:ink_sac", - "target": "rtdd:cookingsquid", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "minecraft:ink_sac", - "target": "rtdd:cookingsquid", - "consume": 1, - }, - { - "source": "rtdd:cookingsquid", - "item": "rtdd:spatula", - "target": "rtdd:cookingsquid_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingsquid_1", - "item": "rtdd:spatula", - "target": "rtdd:cookingsquid_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingsquid_2", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_74", - "consume": 1, - }, - { - "source": "rtdd:cookingsquid_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_74", - "consume": 1, - }, - - # ============================================================ - # 【菜谱23】辣炒鲑鱼 - # ============================================================ - { - "source": "rtdd:carrotpotbase", - "item": "minecraft:salmon", - "target": "rtdd:spicy_fish_0", - "consume": 1, - }, - { - "source": "rtdd:spicy_fish_0", - "item": "rtdd:spatula", - "target": "rtdd:spicy_fish_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:spicy_fish_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_75", - "consume": 1, - }, - { - "source": "rtdd:spicy_fish_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_75", - "consume": 1, - }, - - # ============================================================ - # 【菜谱24】炒时蔬_加胡萝卜 - # ============================================================ - { - "source": "rtdd:cookingcarrot", - "item": "rtdd:vegetable", - "target": "rtdd:seasonalvegetables", - "consume": 1, - }, - { - "source": "rtdd:seasonalvegetables", - "item": "rtdd:spatula", - "target": "rtdd:seasonalvegetables_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:seasonalvegetables_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_76", - "consume": 1, - }, - { - "source": "rtdd:seasonalvegetables_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_76", - "consume": 1, - }, - - # ============================================================ - # 【菜谱25】胡萝卜炒猪里脊 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:cookedporkloin", - "target": "rtdd:cookingcookedporkloin", - "consume": 1, - }, - { - "source": "rtdd:cookingcookedporkloin", - "item": "rtdd:spatula", - "target": "rtdd:cookingcookedporkloin_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingcookedporkloin_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_77", - "consume": 1, - }, - { - "source": "rtdd:cookingcookedporkloin_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_77", - "consume": 1, - }, - - # ============================================================ - # 【菜谱26】胡萝卜炒猪排骨 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "rtdd:cookedporkribs", - "target": "rtdd:cookingcookedporkribs", - "consume": 1, - }, - { - "source": "rtdd:cookingcookedporkribs", - "item": "rtdd:spatula", - "target": "rtdd:cookingcookedporkribs_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingcookedporkribs_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_78", - "consume": 1, - }, - { - "source": "rtdd:cookingcookedporkribs_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_78", - "consume": 1, - }, - - # ============================================================ - # 【菜谱27】胡萝卜炒鳕鱼 - # ============================================================ - { - "source": "rtdd:cooking_pepper", - "item": "minecraft:cod", - "target": "rtdd:cookingcod", - "consume": 1, - }, - { - "source": "rtdd:cookingcod", - "item": "rtdd:spatula", - "target": "rtdd:cookingcod_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingcod_1", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_79", - "consume": 1, - }, - { - "source": "rtdd:cookingcod_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_79", - "consume": 1, - }, - - # ============================================================ - # 【菜谱28】炒鸡 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "minecraft:chicken", - "target": "rtdd:friedchicken", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "minecraft:chicken", - "target": "rtdd:friedchicken", - "consume": 1, - }, - { - "source": "rtdd:friedchicken", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_80", - "consume": 1, - }, - { - "source": "rtdd:friedchicken", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_80", - "consume": 1, - }, - - # ============================================================ - # 【菜谱29】香菇滑鸡 - # ============================================================ - { - "source": "rtdd:friedchicken", - "item": "minecraft:brown_mushroom", - "target": "rtdd:mushroom_fried_chicken_1", - "consume": 1, - }, - { - "source": "rtdd:mushroom_fried_chicken_1", - "item": "rtdd:spatula", - "target": "rtdd:mushroomfriedchicken_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:mushroomfriedchicken_2", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_81", - "consume": 1, - }, - { - "source": "rtdd:mushroomfriedchicken_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_81", - "consume": 1, - }, - - # ============================================================ - # 【菜谱30】蛋炒饭(四阶段) - # ============================================================ - { - "source": "rtdd:cookedegg", - "item": "minecraft:carrot", - "target": "rtdd:riceegg_1", - "consume": 1, - }, - { - "source": "rtdd:riceegg_1", - "item": "rtdd:spatula", - "target": "rtdd:riceegg_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:riceegg_2", - "item": "rtdd:rice", - "target": "rtdd:riceegg_3", - "consume": 1, - }, - { - "source": "rtdd:riceegg_3", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_82", - "consume": 1, - }, - { - "source": "rtdd:riceegg_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_82", - "consume": 1, - }, - - # ============================================================ - # 【菜谱31】煎鲑鱼(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "minecraft:salmon", - "target": "rtdd:cookingfish", - "consume": 1, - }, - { - "source": "rtdd:cookingfish", - "item": "rtdd:spatula", - "target": "rtdd:cookingfish_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingfish_1", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_83", - "consume": 1, - }, - { - "source": "rtdd:cookingfish_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_83", - "consume": 1, - }, - - # ============================================================ - # 【菜谱32】炒葱 - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:scallion", - "target": "rtdd:cookingscallions", - "consume": 1, - }, - { - "source": "rtdd:cookinggarlic", - "item": "rtdd:scallion", - "target": "rtdd:cookingscallions", - "consume": 1, - }, - { - "source": "rtdd:cookingscallions", - "item": "rtdd:plate_0", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_84", - "consume": 1, - }, - { - "source": "rtdd:cookingscallions", - "item": "rtdd:bowlasoup", - "target": "rtdd:wok", - "giveItem": "rtdd:plate_84", - "consume": 1, - }, - - # ============================================================ - # 【菜谱33】煎葱油饼(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:scallionpancake", - "target": "rtdd:cooking_scallion_pancake_0", - "consume": 1, - }, - { - "source": "rtdd:cooking_scallion_pancake_0", - "item": "rtdd:spatula", - "target": "rtdd:cooking_scallion_pancake_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cooking_scallion_pancake_1", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_85", - "consume": 1, - }, - { - "source": "rtdd:cooking_scallion_pancake_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_85", - "consume": 1, - }, - - # ============================================================ - # 【菜谱34】煎酱香饼(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:saucepancake", - "target": "rtdd:cooking_pancake_1", - "consume": 1, - }, - { - "source": "rtdd:cooking_pancake_1", - "item": "rtdd:spatula", - "target": "rtdd:cookingpancake_2", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingpancake_2", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_86", - "consume": 1, - }, - { - "source": "rtdd:cookingpancake_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_86", - "consume": 1, - }, - - # ============================================================ - # 【菜谱35】煎面团(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:cookeddough", - "target": "rtdd:cookingdough_0", - "consume": 1, - }, - { - "source": "rtdd:cookingdough_0", - "item": "rtdd:spatula", - "target": "rtdd:cookingdough_1", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:cookingdough_1", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_87", - "consume": 1, - }, - { - "source": "rtdd:cookingdough_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_87", - "consume": 1, - }, - - # ============================================================ - # 【菜谱36】煎意面(基础)(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:oilpan", - "item": "rtdd:noodle", - "target": "rtdd:pastapot_0", - "consume": 1, - }, - { - "source": "rtdd:pastapot_0", - "item": "rtdd:spatula", - "target": "rtdd:pastapot_1", - "stirCount": 3, - "stirCd": 1.5, - }, - - # ============================================================ - # 【菜谱37】牛肉意面(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:pastapot_1", - "item": "minecraft:beef", - "target": "rtdd:pastapot_2", - "consume": 1, - }, - { - "source": "rtdd:pastapot_2", - "item": "rtdd:spatula", - "target": "rtdd:pastapot_3", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:pastapot_3", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_88", - "consume": 1, - }, - { - "source": "rtdd:pastapot_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_88", - "consume": 1, - }, - - # ============================================================ - # 【菜谱38】香菇意面(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:pastapot_1", - "item": "minecraft:brown_mushroom", - "target": "rtdd:pastapot_4", - "consume": 1, - }, - { - "source": "rtdd:pastapot_4", - "item": "rtdd:spatula", - "target": "rtdd:pastapot_5", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:pastapot_5", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_89", - "consume": 1, - }, - { - "source": "rtdd:pastapot_5", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_89", - "consume": 1, - }, - - # ============================================================ - # 【菜谱39】胡萝卜意面(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:pastapot_1", - "item": "minecraft:carrot", - "target": "rtdd:pastapot_6", - "consume": 1, - }, - { - "source": "rtdd:pastapot_6", - "item": "rtdd:spatula", - "target": "rtdd:pastapot_7", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:pastapot_7", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_90", - "consume": 1, - }, - { - "source": "rtdd:pastapot_7", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_90", - "consume": 1, - }, - - # ============================================================ - # 【菜谱40】鸡肉番茄意面(oilpan起手,出锅回oilpan) - # ============================================================ - { - "source": "rtdd:pastapot_1", - "item": "minecraft:chicken", - "target": "rtdd:pastapot_8", - "consume": 1, - }, - { - "source": "rtdd:pastapot_8", - "item": "rtdd:spatula", - "target": "rtdd:pastapot_9", - "stirCount": 3, - "stirCd": 1.5, - }, - { - "source": "rtdd:pastapot_9", - "item": "rtdd:plate_0", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_91", - "consume": 1, - }, - { - "source": "rtdd:pastapot_9", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpan", - "giveItem": "rtdd:plate_91", - "consume": 1, - }, - - # ===================================================================== - # 三、油锅类菜谱 (rtdd:oilpot_0=油锅_9(油锅_0)) - # 上油步骤: 油锅_9(油锅_0) + 油罐 → 油锅_10(油锅_1) - # ===================================================================== - - # ---- 公用上油:油锅_9(油锅_0) + 油罐 → 油锅_10(油锅_1) ---- - # 上油: 油锅_9(油锅_0) + 油罐 → 油锅_10(油锅_1) - { - "source": "rtdd:oilpot_0", - "item": "rtdd:oilcan", - "target": "rtdd:oilpot_1", - "consume": 0, - }, - - # ============================================================ - # 【炸薯条】 - # ============================================================ - # 步骤1: 油锅_10(油锅_1) + 土豆块 → 薯条入油锅 - { - "source": "rtdd:oilpot_1", - "item": "rtdd:potatowedges", - "target": "rtdd:oilfrenchfries_0", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 半熟薯条 - { - "source": "rtdd:oilfrenchfries_0", - "item": "rtdd:spatula", - "target": "rtdd:oilfrenchfries_1", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤3: 翻炒3次 → 成品薯条 - { - "source": "rtdd:oilfrenchfries_1", - "item": "rtdd:spatula", - "target": "rtdd:oilfrenchfries_2", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤4: 空手右键 → 获得盘装薯条 - { - "source": "rtdd:oilfrenchfries_2", - "item": "rtdd:plate_0", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:plate_37", - "consume": 1, - }, - { - "source": "rtdd:oilfrenchfries_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:plate_37", - "consume": 1, - }, - - # ============================================================ - # 【炸猪排】 - # ============================================================ - # 步骤1: 油锅_10(油锅_1) + 裹粉猪肉 → 生猪排 - { - "source": "rtdd:oilpot_1", - "item": "rtdd:oilpork", - "target": "rtdd:oilpotporkchop_0", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 半熟 - { - "source": "rtdd:oilpotporkchop_0", - "item": "rtdd:spatula", - "target": "rtdd:oilpotporkchop_1", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤3: 翻炒3次 → 成品 - { - "source": "rtdd:oilpotporkchop_1", - "item": "rtdd:spatula", - "target": "rtdd:oilpotporkchop_2", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤4: 空手右键 → 获得炸猪排 - { - "source": "rtdd:oilpotporkchop_2", - "item": "rtdd:plate_0", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:tonkatsu", - "consume": 1, - }, - { - "source": "rtdd:oilpotporkchop_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:tonkatsu", - "consume": 1, - }, - - # ============================================================ - # 【炸鱼】 - # ============================================================ - # 步骤1: 油锅_10(油锅_1) + 裹粉鱼 → 鱼入油锅 - { - "source": "rtdd:oilpot_1", - "item": "rtdd:oilfish_0", - "target": "rtdd:oilpotfish_0", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 半熟 - { - "source": "rtdd:oilpotfish_0", - "item": "rtdd:spatula", - "target": "rtdd:oilpotfish_1", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤3: 翻炒3次 → 成品 - { - "source": "rtdd:oilpotfish_1", - "item": "rtdd:spatula", - "target": "rtdd:oilpotfish_2", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤4: 空手右键 → 获得炸鱼 - { - "source": "rtdd:oilpotfish_2", - "item": "rtdd:plate_0", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:oilfish", - "consume": 1, - }, - { - "source": "rtdd:oilpotfish_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:oilfish", - "consume": 1, - }, - - # ============================================================ - # 【炸鸡块】 - # ============================================================ - # 步骤1: 油锅_10(油锅_1) + 裹粉鸡块 → 鸡块入油锅 - { - "source": "rtdd:oilpot_1", - "item": "rtdd:oil_chickennuggets", - "target": "rtdd:oilchickennuggets_0", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 半熟 - { - "source": "rtdd:oilchickennuggets_0", - "item": "rtdd:spatula", - "target": "rtdd:oilchickennuggets_1", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤3: 翻炒3次 → 成品 - { - "source": "rtdd:oilchickennuggets_1", - "item": "rtdd:spatula", - "target": "rtdd:oilchickennuggets_2", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤4: 空手右键 → 获得炸鸡块 - { - "source": "rtdd:oilchickennuggets_2", - "item": "rtdd:plate_0", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:fried_chicken_nuggets", - "consume": 1, - }, - { - "source": "rtdd:oilchickennuggets_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:fried_chicken_nuggets", - "consume": 1, - }, - - # ============================================================ - # 【炸饺子】 - # ============================================================ - # 步骤1: 油锅_10(油锅_1) + 饺子 → 饺子入油锅 - { - "source": "rtdd:oilpot_1", - "item": "rtdd:dumplings_4", - "target": "rtdd:oil_frieddumplings_1", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 出锅获得炸饺子 - { - "source": "rtdd:oil_frieddumplings_1", - "item": "rtdd:spatula", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:fried_dumplings", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - - # ============================================================ - # 【炸天妇罗】 - # ============================================================ - # 步骤1: 油锅_10(油锅_1) + 裹粉天妇罗 → 天妇罗入油锅 - { - "source": "rtdd:oilpot_1", - "item": "rtdd:oiltempura", - "target": "rtdd:oiltempura_1", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 成品 - { - "source": "rtdd:oiltempura_1", - "item": "rtdd:spatula", - "target": "rtdd:oiltempura_2", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤3: 空手右键 → 获得天妇罗炸虾盘 - { - "source": "rtdd:oiltempura_2", - "item": "rtdd:plate_0", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:plate_49", - "consume": 1, - }, - { - "source": "rtdd:oiltempura_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:plate_49", - "consume": 1, - }, - - # ====== 以下架锅/汤锅类菜谱已全部注释掉(2024-08-03) ====== - - # ===================================================================== - # 五、蒸笼类菜谱 (rtdd:steamer) - # 盖盖步骤(共用): 蒸笼 + 蒸笼盖 → 盖好蒸笼 - # ===================================================================== - - # ---- 公用盖盖:蒸笼 + 蒸笼盖 → 盖好蒸笼 ---- - { - "source": "rtdd:steamer", - "item": "rtdd:steamercover", - "target": "rtdd:steamer", - "consume": 0, - }, - - # ============================================================ - # 【蒸蛋奶】 - # 步骤1: 盖好蒸笼 + 蛋奶液 → 蛋奶入蒸笼 - # 步骤2: 翻炒3次 → 蒸蛋奶 - # 步骤3: 空手右键 → 获得蒸蛋奶 - # ============================================================ - { - "source": "rtdd:steamer", - "item": "rtdd:bowlofcustard", - "target": "rtdd:steamermilkandegg", - "consume": 1, - }, - { - "source": "rtdd:steamermilkandegg", - "item": "rtdd:spatula", - "target": "rtdd:steamermilkandegg_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - { - "source": "rtdd:steamermilkandegg_1", - "item": None, - "target": "rtdd:steamer", - "giveItem": "rtdd:steamermilkandegg_1", - "consume": 0, - }, - - # ============================================================ - # 【蒸饺子】 - # ============================================================ - # 步骤1: 盖好蒸笼 + 饺子 → 饺子入蒸笼 - { - "source": "rtdd:steamer", - "item": "rtdd:dumplings_4", - "target": "rtdd:steamerdumplings_0", - "consume": 1, - }, - # 步骤2: 蒸制 → 完成 - { - "source": "rtdd:steamerdumplings_0", - "item": "rtdd:spatula", - "target": "rtdd:steamerdumplings_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得蒸饺盘 - { - "source": "rtdd:steamerdumplings_1", - "item": None, - "target": "rtdd:steamer", - "giveItem": "rtdd:plate_30", - "consume": 0, - }, - - # ============================================================ - # 【蒸包子】 - # ============================================================ - # 步骤1: 盖好蒸笼 + 包子 → 包子入蒸笼 - { - "source": "rtdd:steamer", - "item": "rtdd:roubao_2", - "target": "rtdd:baozilong_1", - "consume": 1, - }, - # 步骤2: 蒸制 → 完成 - { - "source": "rtdd:baozilong_1", - "item": "rtdd:spatula", - "target": "rtdd:baozilong_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得熟包子 - { - "source": "rtdd:baozilong_2", - "item": None, - "target": "rtdd:steamer", - "giveItem": "rtdd:shouroubao", - "consume": 0, - }, - - # ============================================================ - # 【竹筒饭】 - # 步骤1: 竹筒 + 稻米 → 竹筒装米 - # 步骤2: 竹筒装米 + 水桶 → 竹筒泡米 - # 步骤3: 竹筒泡米 + 放蒸笼上 → 蒸制各阶段 → 熟竹筒饭 - # ============================================================ - # 步骤1: 竹筒 + 稻米 → 竹筒装米 - { - "source": "rtdd:bamboo_0", - "item": "rtdd:brownrice", - "target": "rtdd:bamboo_1", - "consume": 1, - }, - # 步骤2: 竹筒装米 + 水桶 → 竹筒泡米 - { - "source": "rtdd:bamboo_1", - "item": "minecraft:water_bucket", - "target": "rtdd:bamboo_2", - "consume": 0, - }, - # 步骤3: 盖好蒸笼 + 竹筒泡米 → 竹筒入蒸笼 - { - "source": "rtdd:steamer", - "item": "rtdd:bamboo_2", - "target": "rtdd:bamboo_3", - "consume": 1, - }, - # 步骤4: 蒸制第1阶段 → 半熟 - { - "source": "rtdd:bamboo_3", - "item": "rtdd:spatula", - "target": "rtdd:bamboo_4", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 蒸制第2阶段 → 完成 - { - "source": "rtdd:bamboo_4", - "item": "rtdd:spatula", - "target": "rtdd:bamboo_5", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得熟竹筒饭 - { - "source": "rtdd:bamboo_5", - "item": None, - "target": "rtdd:steamer", - "giveItem": "rtdd:bamboo_5", - "consume": 0, - }, - - # ===================================================================== - # 六、烤制类菜谱 (rtdd:barbecuegrill_0) - # ===================================================================== - - # ============================================================ - # 【烤乳猪】 - # 步骤1: 烧烤架 + 生猪肉 → 生乳猪上架 - # 步骤2: 翻炒3次 → 烤乳猪 - # 步骤3: 空手右键 → 获得烤乳猪盘 - # ============================================================ - # 步骤1: 烧烤架 + 生猪肉 → 生乳猪上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "minecraft:porkchop", - "target": "rtdd:roastpig_0", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 烤乳猪 - { - "source": "rtdd:roastpig_0", - "item": "rtdd:spatula", - "target": "rtdd:roastpig_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得烤乳猪盘 - { - "source": "rtdd:roastpig_1", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:roastpignew_1", - "consume": 0, - }, - - # ============================================================ - # 【烤鸡】 - # ============================================================ - # 步骤1: 烧烤架 + 生鸡肉 → 生鸡上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "minecraft:chicken", - "target": "rtdd:roastchicken_0", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 烤鸡 - { - "source": "rtdd:roastchicken_0", - "item": "rtdd:spatula", - "target": "rtdd:roastchicken_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得烤鸡 - { - "source": "rtdd:roastchicken_1", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:roastchicken_1", - "consume": 0, - }, - - # ============================================================ - # 【烤鳕鱼】 - # ============================================================ - # 步骤1: 烧烤架 + 生鳕鱼 → 鳕鱼上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "minecraft:cod", - "target": "rtdd:grilledcod_0", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 烤鳕鱼 - { - "source": "rtdd:grilledcod_0", - "item": "rtdd:spatula", - "target": "rtdd:grilledcod_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得烤鳕鱼 - { - "source": "rtdd:grilledcod_1", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:grilledcod_1", - "consume": 0, - }, - - # ============================================================ - # 【烤鲑鱼】 - # ============================================================ - # 步骤1: 烧烤架 + 生鲑鱼 → 鲑鱼上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "minecraft:salmon", - "target": "rtdd:grilled_fish", - "consume": 1, - }, - # 步骤2: 翻炒3次 → 烤鲑鱼 - { - "source": "rtdd:grilled_fish", - "item": "rtdd:spatula", - "target": "rtdd:grilled_salmon", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得烤鲑鱼 - { - "source": "rtdd:grilled_salmon", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:grilled_salmon", - "consume": 0, - }, - - # ============================================================ - # 【烤蔬菜串】 - # ============================================================ - # 步骤1: 烧烤架 + 生蔬菜串 → 蔬菜串上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "rtdd:roasted_vegetables_0", - "target": "rtdd:roasted_vegetables_0", - "consume": 1, - }, - # 步骤2: 烤制第1阶段 → 半熟 - { - "source": "rtdd:roasted_vegetables_0", - "item": "rtdd:spatula", - "target": "rtdd:roasted_vegetables_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 烤制第2阶段 → 完成 - { - "source": "rtdd:roasted_vegetables_1", - "item": "rtdd:spatula", - "target": "rtdd:roasted_vegetables_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 空手右键 → 获得烤蔬菜串 - { - "source": "rtdd:roasted_vegetables_3", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:roasted_vegetables_3", - "consume": 0, - }, - - # ============================================================ - # 【烤香菇串】 - # ============================================================ - # 步骤1: 烧烤架 + 生香菇串 → 香菇串上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "rtdd:roastedmushrooms_0", - "target": "rtdd:roastedmushrooms_0", - "consume": 1, - }, - # 步骤2: 烤制第1阶段 → 半熟 - { - "source": "rtdd:roastedmushrooms_0", - "item": "rtdd:spatula", - "target": "rtdd:roastedmushrooms_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 烤制第2阶段 → 完成 - { - "source": "rtdd:roastedmushrooms_1", - "item": "rtdd:spatula", - "target": "rtdd:roastedmushrooms_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 空手右键 → 获得烤香菇串 - { - "source": "rtdd:roastedmushrooms_3", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:roastedmushrooms_3", - "consume": 0, - }, - - # ============================================================ - # 【烤肉菜串】 - # ============================================================ - # 步骤1: 烧烤架 + 生肉菜串 → 肉菜串上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "rtdd:beefkebabs_0", - "target": "rtdd:beefkebabs_0", - "consume": 1, - }, - # 步骤2: 烤制第1阶段 → 半熟 - { - "source": "rtdd:beefkebabs_0", - "item": "rtdd:spatula", - "target": "rtdd:beefkebabs_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 烤制第2阶段 → 完成 - { - "source": "rtdd:beefkebabs_1", - "item": "rtdd:spatula", - "target": "rtdd:beefkebabs_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 空手右键 → 获得烤肉菜串 - { - "source": "rtdd:beefkebabs_3", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:beefkebabs_3", - "consume": 0, - }, - - # ============================================================ - # 【烤羊肉串】 - # ============================================================ - # 步骤1: 烧烤架 + 生羊肉串 → 羊肉串上架 - { - "source": "rtdd:barbecuegrill_0", - "item": "rtdd:lambkebabs_0", - "target": "rtdd:lambkebabs_0", - "consume": 1, - }, - # 步骤2: 烤制第1阶段 → 半熟 - { - "source": "rtdd:lambkebabs_0", - "item": "rtdd:spatula", - "target": "rtdd:lambkebabs_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 烤制第2阶段 → 完成 - { - "source": "rtdd:lambkebabs_1", - "item": "rtdd:spatula", - "target": "rtdd:lambkebabs_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 空手右键 → 获得烤羊肉串 - { - "source": "rtdd:lambkebabs_3", - "item": None, - "target": "rtdd:barbecuegrill_0", - "giveItem": "rtdd:lambkebabs_3", - "consume": 0, - }, - - # ===================================================================== - # 七、面食/面团类菜谱 - # ===================================================================== - - # ============================================================ - # 【做面团】 - # 步骤1: 面粉方块 + 水桶 → 生面团 - # 步骤2: 生面团 + 擀面杖擀3次 → 面团 - # ============================================================ - # 步骤1: 面粉方块 + 水桶 → 生面团 - { - "source": "rtdd:farineblock", - "item": "minecraft:water_bucket", - "target": "rtdd:dough_0", - "consume": 0, - }, - # 步骤2: 生面团 + 擀面杖擀3次 → 面团 - { - "source": "rtdd:dough_0", - "item": "rtdd:rollingpin", - "target": "rtdd:dough_1", - "consume": 0, - "stirCount": 3, - "stirCd": 1.0, - }, - - # ============================================================ - # 【做小面团(饺子皮/包子皮)】 - # 步骤1: 面团 + 擀面杖 → 小面团_0 - # 步骤2: 小面团_0 → 擀 → 小面团_1 → 擀 → 小面团_2 → 擀 → 小面团_3 - # ============================================================ - # 步骤1: 面团 + 擀面杖 → 小面团_0 - { - "source": "rtdd:dough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:smalldough_0", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 小面团_0 + 擀面杖 → 小面团_1 - { - "source": "rtdd:smalldough_0", - "item": "rtdd:rollingpin", - "target": "rtdd:smalldough_1", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤3: 小面团_1 + 擀面杖 → 小面团_2 - { - "source": "rtdd:smalldough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:smalldough_2", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤4: 小面团_2 + 擀面杖 → 小面团_3 - { - "source": "rtdd:smalldough_2", - "item": "rtdd:rollingpin", - "target": "rtdd:smalldough_3", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - - # ============================================================ - # 【做饺子】 - # 步骤1: 小面团_3 + 擀面杖 → 面皮 - # 步骤2: 面皮 + 碎肉 → 饺子皮包肉 - # 步骤3: 捏合各阶段 → 饺子 - # ============================================================ - # 步骤1: 小面团_3 + 擀面杖 → 面皮 - { - "source": "rtdd:smalldough_3", - "item": "rtdd:rollingpin", - "target": "rtdd:dumplings_0", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 面皮 + 碎肉 → 饺子皮包肉 - { - "source": "rtdd:dumplings_0", - "item": "rtdd:crushedmeat", - "target": "rtdd:dumplings_1", - "consume": 1, - }, - # 步骤3: 捏合第1阶段 - { - "source": "rtdd:dumplings_1", - "item": "rtdd:spatula", - "target": "rtdd:dumplings_2", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤4: 捏合第2阶段 - { - "source": "rtdd:dumplings_2", - "item": "rtdd:spatula", - "target": "rtdd:dumplings_3", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤5: 捏合第3阶段 → 完成饺子 - { - "source": "rtdd:dumplings_3", - "item": "rtdd:spatula", - "target": "rtdd:dumplings_4", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - - # ============================================================ - # 【做包子】 - # 步骤1: 小面团_3 + 擀面杖 → 包子皮 - # 步骤2: 包子皮 + 碎肉 → 包子皮包肉 - # 步骤3: 捏合 → 包子 - # ============================================================ - # 步骤1: 小面团_3 + 擀面杖 → 包子皮 - { - "source": "rtdd:smalldough_3", - "item": "rtdd:rollingpin", - "target": "rtdd:baozipi", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 包子皮 + 碎肉 → 包子皮包肉 - { - "source": "rtdd:baozipi", - "item": "rtdd:crushedmeat", - "target": "rtdd:roubao_1", - "consume": 1, - }, - # 步骤3: 捏合 → 完成包子 - { - "source": "rtdd:roubao_1", - "item": "rtdd:spatula", - "target": "rtdd:roubao_2", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - - # ============================================================ - # 【做法棍面包】 - # 步骤1: 面团 + 揉面板 → 法棍面胚 - # 步骤2: 法棍面胚 + 放入烤炉 → 烤制 → 法棍面包 - # ============================================================ - # 步骤1: 面团 + 擀面杖 → 法棍面胚 - { - "source": "rtdd:dough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:breaddough_1", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 法棍面胚 + 擀面杖 → 整形 - { - "source": "rtdd:breaddough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:breaddough_1a", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤3: 整形面胚 + 烤炉烤制 → 完成 - { - "source": "rtdd:breaddough_1a", - "item": "rtdd:spatula", - "target": "rtdd:bread_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 空手右键 → 获得法棍面包 - { - "source": "rtdd:bread_1", - "item": None, - "target": "rtdd:oven", - "giveItem": "rtdd:bread_1a", - "consume": 0, - }, - - # ============================================================ - # 【做吐司】 - # ============================================================ - # 步骤1: 面团 + 擀面杖 → 吐司面胚 - { - "source": "rtdd:dough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:breaddough_4", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 吐司面胚 + 烤炉烤制 → 完成 - { - "source": "rtdd:breaddough_4", - "item": "rtdd:spatula", - "target": "rtdd:bread_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得吐司 - { - "source": "rtdd:bread_2", - "item": None, - "target": "rtdd:oven", - "giveItem": "rtdd:bread_2a", - "consume": 0, - }, - - # ============================================================ - # 【做可颂】 - # ============================================================ - # 步骤1: 面团 + 擀面杖 → 可颂面胚 - { - "source": "rtdd:dough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:dought_9", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 可颂面胚 + 烤炉烤制 → 完成 - { - "source": "rtdd:dought_9", - "item": "rtdd:spatula", - "target": "rtdd:bread_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得可颂 - { - "source": "rtdd:bread_3", - "item": None, - "target": "rtdd:oven", - "giveItem": "rtdd:bread_3a", - "consume": 0, - }, - - # ============================================================ - # 【做甜甜圈】 - # ============================================================ - # 步骤1: 面团 + 擀面杖 → 甜甜圈面胚 - { - "source": "rtdd:dough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:breaddough_4d", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 甜甜圈面胚 + 油炸 → 完成 - { - "source": "rtdd:breaddough_4d", - "item": "rtdd:spatula", - "target": "rtdd:bread_4", - "consume": 0, - "stirCount": 3, - "stirCd": 1.5, - }, - # 步骤3: 空手右键 → 获得甜甜圈 - { - "source": "rtdd:bread_4", - "item": "rtdd:plate_0", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:bread_4a", - "consume": 1, - }, - { - "source": "rtdd:bread_4", - "item": "rtdd:bowlasoup", - "target": "rtdd:oilpot_0", - "giveItem": "rtdd:bread_4a", - "consume": 1, - }, - - # ============================================================ - # 【做葱油饼】 - # 步骤1: 面团 + 擀面杖 → 面饼 - # 步骤2: 面饼 + 葱花 → 葱油面饼 - # ============================================================ - # 步骤1: 面团 + 擀面杖 → 面饼 - { - "source": "rtdd:dough_1", - "item": "rtdd:rollingpin", - "target": "rtdd:scallion_pancake_0", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤2: 面饼 + 葱花 → 葱油面饼 - { - "source": "rtdd:scallion_pancake_0", - "item": "rtdd:crushedscallions", - "target": "rtdd:scallion_pancake_0", - "consume": 1, - }, - - # ============================================================ - # 【做蛋糕】 - # 步骤1: 搅拌器 + 鸡蛋 → 蛋液搅拌器 - # 步骤2: 蛋液搅拌器 + 奶油 → 蛋奶搅拌器 - # 步骤3: 蛋奶搅拌器 + 面粉 → 面糊搅拌器 - # 步骤4: 空手右键 → 碗装蛋糕半成品 - # ============================================================ - # 步骤1: 搅拌器 + 鸡蛋 → 蛋液搅拌器 - { - "source": "rtdd:beater", - "item": "minecraft:egg", - "target": "rtdd:beater_eggsandmilk_0", - "consume": 1, - }, - # 步骤2: 蛋液搅拌器 + 奶油 → 蛋奶搅拌器 - { - "source": "rtdd:beater_eggsandmilk_0", - "item": "rtdd:cream_0", - "target": "rtdd:beater_eggsandmilk_1", - "consume": 1, - }, - # 步骤3: 蛋奶搅拌器 + 面粉 → 面糊搅拌器 - { - "source": "rtdd:beater_eggsandmilk_1", - "item": "rtdd:farine", - "target": "rtdd:beater_eggsandmilk_2", - "consume": 1, - }, - # 步骤4: 空手右键 → 获得蛋糕半成品碗 - { - "source": "rtdd:beater_eggsandmilk_2", - "item": None, - "target": "rtdd:beater", - "giveItem": "rtdd:cakebatterblock", - "consume": 0, - }, - # 步骤5: 蛋糕半成品 + 烤炉烤制 → 蛋糕底 - { - "source": "rtdd:cakebatterblock", - "item": "rtdd:spatula", - "target": "rtdd:cakebase", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6a: 蛋糕底 + 奶油 → 奶油蛋糕 - { - "source": "rtdd:cakebase", - "item": "rtdd:cream_0", - "target": "rtdd:cake_0", - "consume": 1, - }, - # 步骤6b: 蛋糕底 + 蜂蜜 → 蜂蜜蛋糕 - { - "source": "rtdd:cakebase", - "item": "rtdd:honey", - "target": "rtdd:cake_1", - "consume": 1, - }, - # 步骤6c: 蛋糕底 + 浆果 → 浆果蛋糕 - { - "source": "rtdd:cakebase", - "item": "rtdd:berry", - "target": "rtdd:cake_2", - "consume": 1, - }, - # 步骤6d: 蛋糕底 + 可可 → 巧克力蛋糕 - { - "source": "rtdd:cakebase", - "item": "rtdd:cocoa", - "target": "rtdd:cake_3", - "consume": 1, - }, - - # ============================================================ - # 【做布丁】 - # 步骤1: 搅拌器 + 鸡蛋 → 蛋液搅拌器 - # 步骤2: 蛋液搅拌器 + 奶油 → 布丁液搅拌器 - # 步骤3: 空手右键 → 布丁半成品盘 - # 步骤4: 布丁半成品盘 + 放入蒸笼 → 布丁 - # ============================================================ - # 步骤1: 搅拌器 + 鸡蛋 → 蛋液搅拌器 - { - "source": "rtdd:beater", - "item": "minecraft:egg", - "target": "rtdd:beater_custard_1", - "consume": 1, - }, - # 步骤2: 蛋液搅拌器 + 奶油 → 布丁液搅拌器 - { - "source": "rtdd:beater_custard_1", - "item": "rtdd:cream_0", - "target": "rtdd:beater_custard_2", - "consume": 1, - }, - # 步骤3: 空手右键 → 获得布丁半成品盘 - { - "source": "rtdd:beater_custard_2", - "item": None, - "target": "rtdd:beater", - "giveItem": "rtdd:plate_35", - "consume": 0, - }, - # 步骤4: 盖好蒸笼 + 布丁半成品盘 → 布丁入蒸笼 - { - "source": "rtdd:steamer", - "item": "rtdd:plate_35", - "target": "rtdd:cream_caramel", - "consume": 1, - }, - # 步骤5: 蒸制 → 完成 - { - "source": "rtdd:cream_caramel", - "item": "rtdd:spatula", - "target": "rtdd:cream_caramel", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得布丁 - { - "source": "rtdd:cream_caramel", - "item": None, - "target": "rtdd:steamer", - "giveItem": "rtdd:cream_caramel", - "consume": 0, - }, - - # ============================================================ - # 【做舒芙蕾】 - # ============================================================ - # 步骤1: 搅拌器 + 鸡蛋 → 蛋液搅拌器 - { - "source": "rtdd:beater", - "item": "minecraft:egg", - "target": "rtdd:beater", - "consume": 1, - }, - # 步骤2: 蛋液搅拌器 + 奶油 → 舒芙蕾面糊 - { - "source": "rtdd:beater", - "item": "rtdd:cream_0", - "target": "rtdd:souffle_0", - "consume": 1, - }, - # 步骤3: 舒芙蕾面糊 + 烤炉烤制 → 完成 - { - "source": "rtdd:souffle_0", - "item": "rtdd:spatula", - "target": "rtdd:souffle_0", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 空手右键 → 获得舒芙蕾 - { - "source": "rtdd:souffle_0", - "item": None, - "target": "rtdd:oven", - "giveItem": "rtdd:souffle_0", - "consume": 0, - }, - - # ============================================================ - # 【做肉丸】 - # 步骤1: 丸子机 + 碎肉 → 丸子机装肉 - # 步骤2: 摇制各阶段 → 成品丸子机 - # 步骤3: 空手右键 → 肉丸 - # ============================================================ - # 步骤1: 丸子机 + 碎肉 → 丸子机装肉 - { - "source": "rtdd:meatballmaker_0", - "item": "rtdd:crushedmeat", - "target": "rtdd:meatballmaker_1", - "consume": 1, - }, - # 步骤2: 摇制第1阶段 - { - "source": "rtdd:meatballmaker_1", - "item": "rtdd:spatula", - "target": "rtdd:meatballmaker_2", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤3: 摇制第2阶段 - { - "source": "rtdd:meatballmaker_2", - "item": "rtdd:spatula", - "target": "rtdd:meatballmaker_3", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤4: 摇制第3阶段 - { - "source": "rtdd:meatballmaker_3", - "item": "rtdd:spatula", - "target": "rtdd:meatballmaker_4", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤5: 摇制第4阶段 - { - "source": "rtdd:meatballmaker_4", - "item": "rtdd:spatula", - "target": "rtdd:meatballmaker_5", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤6: 空手右键 → 获得肉丸 - { - "source": "rtdd:meatballmaker_5", - "item": None, - "target": "rtdd:meatballmaker_0", - "giveItem": "rtdd:rawmeatball", - "consume": 0, - }, - - # ===================================================================== - # 八、甜品/冷饮类菜谱 - # ===================================================================== - - # ============================================================ - # 【榨果汁】 - # 步骤1: 榨汁机 + 水果 → 榨汁中 - # 步骤2: 榨汁各阶段 → 成品 - # 步骤3: 空手右键 + 玻璃杯 → 果汁 - # ============================================================ - # 步骤1: 榨汁机 + 苹果 → 榨汁中 - { - "source": "rtdd:juicer_0", - "item": "minecraft:apple", - "target": "rtdd:juicer_1", - "consume": 1, - }, - # 步骤2: 榨汁第1阶段 - { - "source": "rtdd:juicer_1", - "item": "rtdd:spatula", - "target": "rtdd:juicer_2", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤3: 榨汁第2阶段 - { - "source": "rtdd:juicer_2", - "item": "rtdd:spatula", - "target": "rtdd:juicer_3", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤4: 榨汁第3阶段 → 完成 - { - "source": "rtdd:juicer_3", - "item": "rtdd:spatula", - "target": "rtdd:juicer_4", - "consume": 0, - "stirCount": 1, - "stirCd": 0.5, - }, - # 步骤5: 完成榨汁机 + 玻璃杯 → 苹果汁 - { - "source": "rtdd:juicer_4", - "item": "rtdd:cup", - "target": "rtdd:juicer_0", - "giveItem": "rtdd:apple_juice", - "consume": 1, - }, - - # ============================================================ - # 【炒冰/冰棍(苹果)】 - # ============================================================ - # 步骤1: 炒冰机 + 苹果汁 → 装入炒冰机 - { - "source": "rtdd:appleicebox", - "item": "rtdd:apple_juice", - "target": "rtdd:appleicebox", - "consume": 1, - }, - # 步骤2: 炒制 → 完成 - { - "source": "rtdd:appleicebox", - "item": "rtdd:spatula", - "target": "rtdd:apple_popsicleplace", - "consume": 0, - "stirCount": 3, - "stirCd": 1.0, - }, - # 步骤3: 空手右键 → 获得苹果冰棍 - { - "source": "rtdd:apple_popsicleplace", - "item": None, - "target": "rtdd:appleicebox", - "giveItem": "rtdd:apple_popsicle", - "consume": 0, - }, - - # ============================================================ - # 【雪糕(苹果味)】 - # ============================================================ - # 步骤1: 搅拌器 + 奶油 → 奶油搅拌器 - { - "source": "rtdd:beater", - "item": "rtdd:cream_0", - "target": "rtdd:beater", - "consume": 1, - }, - # 步骤2: 奶油搅拌器 + 苹果汁 → 雪糕糊 - { - "source": "rtdd:beater", - "item": "rtdd:apple_juice", - "target": "rtdd:frytheicebox", - "consume": 1, - }, - # 步骤3: 雪糕糊 + 炒冰机炒制 → 完成 - { - "source": "rtdd:frytheicebox", - "item": "rtdd:spatula", - "target": "rtdd:frytheicebox", - "consume": 0, - "stirCount": 3, - "stirCd": 1.0, - }, - # 步骤4: 完成雪糕糊 + 脆皮筒 → 苹果雪糕 - { - "source": "rtdd:frytheicebox", - "item": "rtdd:crispycone", - "target": "rtdd:frytheicebox", - "giveItem": "rtdd:apple_icecream", - "consume": 1, - }, - - # ===================================================================== - # 九、酒类酿造菜谱 - # ===================================================================== - - # ============================================================ - # 【酿造果酒(通用)】 - # 步骤1: 酒桶 + 水果 → 发酵酒桶 - # 步骤2: 等待发酵 → 满酒桶 - # 步骤3: 满酒桶 + 玻璃杯 → 果酒 - # ============================================================ - # 步骤1: 酒桶 + 苹果 → 发酵酒桶 - { - "source": "rtdd:wine_barrel", - "item": "minecraft:apple", - "target": "rtdd:b_81", - "consume": 1, - }, - # 步骤2: 发酵 → 满酒桶 - { - "source": "rtdd:b_81", - "item": "rtdd:spatula", - "target": "rtdd:b_238", - "consume": 0, - "stirCount": 3, - "stirCd": 3.0, - }, - # 步骤3: 满酒桶 + 玻璃杯 → 果酒 - { - "source": "rtdd:b_238", - "item": "rtdd:cup", - "target": "rtdd:wine_barrel", - "giveItem": "rtdd:fruit_wine", - "consume": 1, - }, - - # ============================================================ - # 【啤酒】 - # ============================================================ - # 步骤1: 酒桶 + 小麦 → 发酵酒桶 - { - "source": "rtdd:wine_barrel", - "item": "minecraft:wheat", - "target": "rtdd:b_81", - "consume": 1, - }, - # 步骤2: 发酵 → 满酒桶 - { - "source": "rtdd:b_81", - "item": "rtdd:spatula", - "target": "rtdd:b_238", - "consume": 0, - "stirCount": 3, - "stirCd": 3.0, - }, - # 步骤3: 满酒桶 + 玻璃杯 → 啤酒 - { - "source": "rtdd:b_238", - "item": "rtdd:cup", - "target": "rtdd:wine_barrel", - "giveItem": "rtdd:thebeer", - "consume": 1, - }, - - # ============================================================ - # 【朗姆酒】 - # ============================================================ - # 步骤1: 酒桶 + 甘蔗 → 发酵酒桶 - { - "source": "rtdd:wine_barrel", - "item": "minecraft:sugar_cane", - "target": "rtdd:b_81", - "consume": 1, - }, - # 步骤2: 发酵 → 满酒桶 - { - "source": "rtdd:b_81", - "item": "rtdd:spatula", - "target": "rtdd:b_238", - "consume": 0, - "stirCount": 3, - "stirCd": 3.0, - }, - # 步骤3: 满酒桶 + 玻璃杯 → 朗姆酒 - { - "source": "rtdd:b_238", - "item": "rtdd:cup", - "target": "rtdd:wine_barrel", - "giveItem": "rtdd:rum_wine", - "consume": 1, - }, - - # ============================================================ - # 【伏特加】 - # ============================================================ - # 步骤1: 酒桶 + 土豆 → 发酵酒桶 - { - "source": "rtdd:wine_barrel", - "item": "minecraft:potato", - "target": "rtdd:b_81", - "consume": 1, - }, - # 步骤2: 发酵 → 满酒桶 - { - "source": "rtdd:b_81", - "item": "rtdd:spatula", - "target": "rtdd:b_238", - "consume": 0, - "stirCount": 3, - "stirCd": 3.0, - }, - # 步骤3: 满酒桶 + 玻璃杯 → 伏特加 - { - "source": "rtdd:b_238", - "item": "rtdd:cup", - "target": "rtdd:wine_barrel", - "giveItem": "rtdd:vodka", - "consume": 1, - }, - - # ============================================================ - # 【海盐酒】 - # ============================================================ - # 步骤1: 酒桶 + 海盐 → 发酵酒桶 - { - "source": "rtdd:wine_barrel", - "item": "rtdd:sea_salt", - "target": "rtdd:b_81", - "consume": 1, - }, - # 步骤2: 发酵 → 满酒桶 - { - "source": "rtdd:b_81", - "item": "rtdd:spatula", - "target": "rtdd:b_238", - "consume": 0, - "stirCount": 3, - "stirCd": 3.0, - }, - # 步骤3: 满酒桶 + 玻璃杯 → 海盐酒 - { - "source": "rtdd:b_238", - "item": "rtdd:cup", - "target": "rtdd:wine_barrel", - "giveItem": "rtdd:sea_salt_wine", - "consume": 1, - }, - - # ===================================================================== - # 四、汤锅类菜谱 (rtdd:stewedsoup=汤锅) - # 加水步骤(共用): 汤锅 + 水桶 → 带水汤锅 (rtdd:stewedsoupwater) - # ===================================================================== - - # ---- 公用加水:汤锅 + 水桶 → 带水汤锅 ---- - { - "source": "rtdd:stewedsoup", - "item": "minecraft:water_bucket", - "target": "rtdd:stewedsoupwater", - "consume": 0, - }, - - # ---- 公用加青菜:带水汤锅 + 青菜 → 青菜汤锅 ---- - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:vegetable", - "target": "rtdd:vegetablesoup", - "consume": 1, - }, - - # ============================================================ - # 【蔬菜肉汤】 - # ============================================================ - # 步骤2: 青菜汤锅 + 生牛肉 → 蔬菜牛肉汤锅 - { - "source": "rtdd:vegetablesoup", - "item": "minecraft:beef", - "target": "rtdd:vegetablebeefsoup", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:vegetablebeefsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablebeefsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:vegetablebeefsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablebeefsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:vegetablebeefsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablebeefsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得蔬菜肉汤碗 - { - "source": "rtdd:vegetablebeefsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlavegetablebeefsoup", - "consume": 1, - }, - - # ============================================================ - # 【清汤羊肉】 - # ============================================================ - # 步骤2: 青菜汤锅 + 生羊肉 → 蔬菜羊肉汤锅 - { - "source": "rtdd:vegetablesoup", - "item": "minecraft:mutton", - "target": "rtdd:vegetablelambsoup", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:vegetablelambsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablelambsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:vegetablelambsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablelambsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:vegetablelambsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablelambsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得清汤羊肉碗 - { - "source": "rtdd:vegetablelambsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlavegetablelambsoup", - "consume": 1, - }, - - # ============================================================ - # 【青菜瘦肉汤】 - # ============================================================ - # 步骤2: 青菜汤锅 + 生猪排 → 青菜瘦肉汤锅 - { - "source": "rtdd:vegetablesoup", - "item": "minecraft:porkchop", - "target": "rtdd:vegetableleanbroth", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:vegetableleanbroth", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetableleanbroth_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:vegetableleanbroth_1", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetableleanbroth_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:vegetableleanbroth_2", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetableleanbroth_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得青菜瘦肉汤碗 - { - "source": "rtdd:vegetableleanbroth_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlavegetableleanbroth", - "consume": 1, - }, - - # ============================================================ - # 【蔬菜汤(纯素)】 - # ============================================================ - # 步骤2: 青菜汤锅 + 锅勺 → 炖煮第1阶段(生) - { - "source": "rtdd:vegetablesoup", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablesstew", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 四分熟 - { - "source": "rtdd:vegetablesstew", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablesstew_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第3阶段 → 八分熟 - { - "source": "rtdd:vegetablesstew_1", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablesstew_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第4阶段 → 熟 - { - "source": "rtdd:vegetablesstew_2", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablesstew_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得蔬菜汤碗 - { - "source": "rtdd:vegetablesstew_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlavegetablesstew", - "consume": 1, - }, - - # ---- 公用加胡萝卜:带水汤锅 + 胡萝卜 → 胡萝卜汤锅 ---- - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:carrot", - "target": "rtdd:carrotsoup", - "consume": 1, - }, - - # ============================================================ - # 【胡萝卜排骨汤】 - # ============================================================ - # 步骤2: 胡萝卜汤锅 + 猪肋排 → 胡萝卜排骨汤锅 - { - "source": "rtdd:carrotsoup", - "item": "rtdd:porkrib", - "target": "rtdd:carrotribs", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:carrotribs", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotribs_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:carrotribs_1", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotribs_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:carrotribs_2", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotribs_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得胡萝卜排骨汤碗 - { - "source": "rtdd:carrotribs_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlacarrotribs", - "consume": 1, - }, - - # ============================================================ - # 【胡萝卜鳕鱼汤】 - # ============================================================ - # 步骤2: 胡萝卜汤锅 + 生鳕鱼 → 胡萝卜鳕鱼汤锅 - { - "source": "rtdd:carrotsoup", - "item": "minecraft:cod", - "target": "rtdd:carrotcodsoup", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 三分熟 - { - "source": "rtdd:carrotcodsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotcodsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 七分熟 - { - "source": "rtdd:carrotcodsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotcodsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:carrotcodsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotcodsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得胡萝卜鳕鱼汤碗 - { - "source": "rtdd:carrotcodsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlacarrotcodsoup", - "consume": 1, - }, - - # ============================================================ - # 【胡萝卜鲑鱼汤】 - # ============================================================ - # 步骤2: 胡萝卜汤锅 + 生鲑鱼 → 胡萝卜鲑鱼汤锅 - { - "source": "rtdd:carrotsoup", - "item": "minecraft:salmon", - "target": "rtdd:carrotfishsoup", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 三分熟 - { - "source": "rtdd:carrotfishsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotfishsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 七分熟 - { - "source": "rtdd:carrotfishsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotfishsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:carrotfishsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotfishsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得胡萝卜鲑鱼汤碗 - { - "source": "rtdd:carrotfishsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:browncarrotfishsoupsoup", - "consume": 1, - }, - - # ============================================================ - # 【牛里脊肉汤】 - # ============================================================ - # 步骤2: 胡萝卜汤锅 + 牛里脊 → 牛里脊汤锅 - { - "source": "rtdd:carrotsoup", - "item": "rtdd:beef_tenderloin", - "target": "rtdd:carrotbeefsoup", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:carrotbeefsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotbeefsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:carrotbeefsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotbeefsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:carrotbeefsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:carrotbeefsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得牛里脊肉汤碗 - { - "source": "rtdd:carrotbeefsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlacarrotbeefsoup", - "consume": 1, - }, - - # ============================================================ - # 【牛骨汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 骨头 → 牛骨汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:bone", - "target": "rtdd:beefbonebroth", - "consume": 1, - }, - # 步骤2: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:beefbonebroth", - "item": "rtdd:potandspoon", - "target": "rtdd:beefbonebroth_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:beefbonebroth_1", - "item": "rtdd:potandspoon", - "target": "rtdd:beefbonebroth_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第3阶段 → 熟 - { - "source": "rtdd:beefbonebroth_2", - "item": "rtdd:potandspoon", - "target": "rtdd:beefbonebroth_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 空手右键 → 获得牛骨汤碗 - { - "source": "rtdd:beefbonebroth_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlabeefbonebroth", - "consume": 1, - }, - - # ============================================================ - # 【胡萝卜土豆小排汤】 - # ============================================================ - # 步骤2: 胡萝卜汤锅 + 土豆 → 胡萝卜土豆汤锅 - { - "source": "rtdd:carrotsoup", - "item": "minecraft:potato", - "target": "rtdd:carrotandpotatosoup", - "consume": 1, - }, - # 步骤3: 胡萝卜土豆汤锅 + 羊小排 → 小排汤锅 - { - "source": "rtdd:carrotandpotatosoup", - "item": "rtdd:sheepracks", - "target": "rtdd:lambchopsoup_1", - "consume": 1, - }, - # 步骤4: 炖煮第1阶段 → 五分熟 - { - "source": "rtdd:lambchopsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:lambchopsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第2阶段 → 熟 - { - "source": "rtdd:lambchopsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:lambchopsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得胡萝卜土豆小排汤碗 - { - "source": "rtdd:lambchopsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowla_lambchopsoup", - "consume": 1, - }, - - # ============================================================ - # 【胡萝卜里脊肉汤】 - # ============================================================ - # 步骤2: 胡萝卜汤锅 + 羊里脊 → 胡萝卜里脊汤锅 - { - "source": "rtdd:carrotsoup", - "item": "rtdd:sheeploins", - "target": "rtdd:lambsoupwithturnips", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:lambsoupwithturnips", - "item": "rtdd:potandspoon", - "target": "rtdd:lambsoupwithturnips_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:lambsoupwithturnips_1", - "item": "rtdd:potandspoon", - "target": "rtdd:lambsoupwithturnips_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:lambsoupwithturnips_2", - "item": "rtdd:potandspoon", - "target": "rtdd:lambsoupwithturnips_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得胡萝卜里脊肉汤碗 - { - "source": "rtdd:lambsoupwithturnips_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:brownlambsoupwithturnipssoup", - "consume": 1, - }, - - # ============================================================ - # 【乱炖羊肉汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 生羊肉 → 羊肉汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:mutton", - "target": "rtdd:lambstew", - "consume": 1, - }, - # 步骤2: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:lambstew", - "item": "rtdd:potandspoon", - "target": "rtdd:lambstew_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:lambstew_1", - "item": "rtdd:potandspoon", - "target": "rtdd:lambstew_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第3阶段 → 熟 - { - "source": "rtdd:lambstew_2", - "item": "rtdd:potandspoon", - "target": "rtdd:lambstew_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 空手右键 → 获得乱炖羊肉汤碗 - { - "source": "rtdd:lambstew_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlalambstew", - "consume": 1, - }, - - # ---- 公用加土豆:带水汤锅 + 土豆 → 土豆汤锅 ---- - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:potato", - "target": "rtdd:potatosoup", - "consume": 1, - }, - - # ============================================================ - # 【土豆蛋花汤】 - # ============================================================ - # 步骤2: 土豆汤锅 + 鸡蛋 → 土豆蛋花汤锅 - { - "source": "rtdd:potatosoup", - "item": "minecraft:egg", - "target": "rtdd:potatoeggsoup", - "consume": 1, - }, - # 步骤3: 炖煮 → 标记熟了 - { - "source": "rtdd:potatoeggsoup", - "item": "rtdd:potandspoon", - "target": None, - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - "onDone": "finish", - "needFinished": False, - "doneMsg": "汤炖好啦!空手右键盛出来", - "dropIfDone": ["rtdd:bowlapotatoeggsoup", "rtdd:stewedsoup"], - }, - # 步骤4: 空手右键 → 获得土豆蛋花汤碗 - { - "source": "rtdd:potatoeggsoup", - "item": "rtdd:bowlasoup", - "needFinished": True, - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlapotatoeggsoup", - "consume": 1, - }, - - # ---- 公用加鸡蛋:带水汤锅 + 鸡蛋 → 蛋花汤锅 ---- - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:egg", - "target": "rtdd:eggsoup", - "consume": 1, - }, - - # ============================================================ - # 【蛋花鳕鱼汤】 - # ============================================================ - # 步骤2: 蛋花汤锅 + 生鳕鱼 → 蛋花鳕鱼汤锅 - { - "source": "rtdd:eggsoup", - "item": "minecraft:cod", - "target": "rtdd:eggcodsoup", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:eggcodsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:eggcodsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:eggcodsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:eggcodsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:eggcodsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:eggcodsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得蛋花鳕鱼汤碗 - { - "source": "rtdd:eggcodsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlaeggcodsoup", - "consume": 1, - }, - - # ============================================================ - # 【瘦肉蛋花汤】 - # ============================================================ - # 步骤2: 蛋花汤锅 + 生猪排 → 瘦肉蛋花汤锅 - { - "source": "rtdd:eggsoup", - "item": "minecraft:porkchop", - "target": "rtdd:norieggsoup", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 三分熟 - { - "source": "rtdd:norieggsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:norieggsoup_0", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 七分熟 - { - "source": "rtdd:norieggsoup_0", - "item": "rtdd:potandspoon", - "target": "rtdd:norieggsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 全熟 - { - "source": "rtdd:norieggsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:norieggsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 炖煮第4阶段 → 熟 - { - "source": "rtdd:norieggsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:norieggsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤7: 空手右键 → 获得瘦肉蛋花汤碗 - { - "source": "rtdd:norieggsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:brown_norieggsoup", - "consume": 1, - }, - - # ---- 公用加豆腐:带水汤锅 + 豆腐 → 豆腐汤锅(鲑鱼版) ---- - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:beancurd", - "target": "rtdd:tufusoup", - "consume": 1, - }, - - # ============================================================ - # 【豆腐鲑鱼汤】 - # ============================================================ - # 步骤2: 豆腐汤锅 + 生鲑鱼 → 豆腐鲑鱼汤锅 - { - "source": "rtdd:tufusoup", - "item": "minecraft:salmon", - "target": "rtdd:tufusoupb", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 生_加葱花 - { - "source": "rtdd:tufusoupb", - "item": "rtdd:potandspoon", - "target": "rtdd:tufusoupc", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 四分熟 - { - "source": "rtdd:tufusoupc", - "item": "rtdd:potandspoon", - "target": "rtdd:tufufishsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 八分熟 - { - "source": "rtdd:tufufishsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:tufufishsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 炖煮第4阶段 → 熟 - { - "source": "rtdd:tufufishsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:tufufishsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤7: 空手右键 → 获得豆腐鲑鱼汤碗 - { - "source": "rtdd:tufufishsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlatufufish", - "consume": 1, - }, - - # ============================================================ - # 【豆腐汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 豆腐 → 豆腐汤锅(纯豆腐版) - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:beancurd", - "target": "rtdd:beancurdsoup_0", - "consume": 1, - }, - # 步骤2: 炖煮 → 熟 - { - "source": "rtdd:beancurdsoup_0", - "item": "rtdd:potandspoon", - "target": "rtdd:beancurdsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得豆腐汤碗 - { - "source": "rtdd:beancurdsoup_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlabeancurdsoup", - "consume": 1, - }, - - # ============================================================ - # 【蘑菇汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 蘑菇 → 蘑菇汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:brown_mushroom", - "target": "rtdd:mushroomsoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 标记熟了 - { - "source": "rtdd:mushroomsoup", - "item": "rtdd:potandspoon", - "target": None, - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - "onDone": "finish", - "needFinished": False, - "doneMsg": "汤炖好啦!空手右键盛出来", - "dropIfDone": ["rtdd:bowlamushroomsoup", "rtdd:stewedsoup"], - }, - # 步骤3: 空手右键 → 获得蘑菇汤碗 - { - "source": "rtdd:mushroomsoup", - "item": "rtdd:bowlasoup", - "needFinished": True, - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlamushroomsoup", - "consume": 1, - }, - - # ============================================================ - # 【红蘑菇汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 红蘑菇 → 红蘑菇汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:red_mushroom", - "target": "rtdd:red_mushroomsoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 标记熟了 - { - "source": "rtdd:red_mushroomsoup", - "item": "rtdd:potandspoon", - "target": None, - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - "onDone": "finish", - "needFinished": False, - "doneMsg": "汤炖好啦!空手右键盛出来", - "dropIfDone": ["rtdd:bowlaredmushroomsoup", "rtdd:stewedsoup"], - }, - # 步骤3: 空手右键 → 获得红蘑菇汤碗 - { - "source": "rtdd:red_mushroomsoup", - "item": "rtdd:bowlasoup", - "needFinished": True, - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlaredmushroomsoup", - "consume": 1, - }, - - # ============================================================ - # 【小鸡炖蘑菇】 - # ============================================================ - # 步骤1: 蘑菇汤锅 + 生鸡肉 → 蘑菇炖鸡_生 - { - "source": "rtdd:mushroomsoup", - "item": "minecraft:chicken", - "target": "rtdd:chickenstewwithmushrooms", - "consume": 1, - }, - # 步骤2: 炖煮第1阶段 → 蘑菇炖鸡_四分熟 - { - "source": "rtdd:chickenstewwithmushrooms", - "item": "rtdd:potandspoon", - "target": "rtdd:chickenstewwithmushrooms_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 蘑菇炖鸡_八分熟 - { - "source": "rtdd:chickenstewwithmushrooms_1", - "item": "rtdd:potandspoon", - "target": "rtdd:chickenstewwithmushrooms_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第3阶段 → 蘑菇炖鸡_熟 - { - "source": "rtdd:chickenstewwithmushrooms_2", - "item": "rtdd:potandspoon", - "target": "rtdd:chickenstewwithmushrooms_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 空手右键 → 获得小鸡炖蘑菇碗 - { - "source": "rtdd:chickenstewwithmushrooms_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlofmushroomsoup", - "consume": 1, - }, - - # ============================================================ - # 【蹄花汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 火腿 → 蹄花汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:ham", - "target": "rtdd:brownpigfootsoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 标记熟了 - { - "source": "rtdd:brownpigfootsoup", - "item": "rtdd:potandspoon", - "target": None, - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - "onDone": "finish", - "needFinished": False, - "doneMsg": "汤炖好啦!空手右键盛出来", - "dropIfDone": ["rtdd:bowlapigfootsoup", "rtdd:stewedsoup"], - }, - # 步骤3: 空手右键 → 获得蹄花汤碗 - { - "source": "rtdd:brownpigfootsoup", - "item": "rtdd:bowlasoup", - "needFinished": True, - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlapigfootsoup", - "consume": 1, - }, - - # ============================================================ - # 【蔬菜土豆羊肉汤】 - # ============================================================ - # 步骤2: 青菜汤锅 + 土豆 → 蔬菜土豆汤锅 - { - "source": "rtdd:vegetablesoup", - "item": "minecraft:potato", - "target": "rtdd:vegetablepotatoesandlambsteaksoup", - "consume": 1, - }, - # 步骤3: 蔬菜土豆汤锅 + 生羊肉 → 蔬菜土豆羊肉汤锅 - { - "source": "rtdd:vegetablepotatoesandlambsteaksoup", - "item": "minecraft:mutton", - "target": "rtdd:vegetablepotatoesandlambsteaksoup_1", - "consume": 1, - }, - # 步骤4: 炖煮 → 标记熟了 - { - "source": "rtdd:vegetablepotatoesandlambsteaksoup_1", - "item": "rtdd:potandspoon", - "target": None, - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - "onDone": "finish", - "needFinished": False, - "doneMsg": "汤炖好啦!空手右键盛出来", - "dropIfDone": ["rtdd:bowlavegetablepotatoandlambsoup", "rtdd:stewedsoup"], - }, - # 步骤5: 空手右键 → 获得蔬菜土豆羊肉汤碗 - { - "source": "rtdd:vegetablepotatoesandlambsteaksoup_1", - "item": "rtdd:bowlasoup", - "needFinished": True, - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlavegetablepotatoandlambsoup", - "consume": 1, - }, - - # ============================================================ - # 【鱿鱼汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 生鱿鱼须 → 鱿鱼汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:rawsquidwhiskersr", - "target": "rtdd:squidsoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 熟 - { - "source": "rtdd:squidsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:squidsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得鱿鱼汤碗 - { - "source": "rtdd:squidsoup_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlasquidsoup", - "consume": 1, - }, - - # ============================================================ - # 【鲑鱼汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 生鲑鱼 → 鲑鱼汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:salmon", - "target": "rtdd:salmonsoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 标记熟了 - { - "source": "rtdd:salmonsoup", - "item": "rtdd:potandspoon", - "target": None, - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - "onDone": "finish", - "needFinished": False, - "doneMsg": "汤炖好啦!空手右键盛出来", - "dropIfDone": ["rtdd:bowlasalmonsoup", "rtdd:stewedsoup"], - }, - # 步骤3: 空手右键 → 获得鲑鱼汤碗 - { - "source": "rtdd:salmonsoup", - "item": "rtdd:bowlasoup", - "needFinished": True, - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlasalmonsoup", - "consume": 1, - }, - - # ============================================================ - # 【鳕鱼汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 生鳕鱼 → 鳕鱼汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:cod", - "target": "rtdd:codsoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 标记熟了 - { - "source": "rtdd:codsoup", - "item": "rtdd:potandspoon", - "target": None, - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - "onDone": "finish", - "needFinished": False, - "doneMsg": "汤炖好啦!空手右键盛出来", - "dropIfDone": ["rtdd:bowlacodsoup", "rtdd:stewedsoup"], - }, - # 步骤3: 空手右键 → 获得鳕鱼汤碗 - { - "source": "rtdd:codsoup", - "item": "rtdd:bowlasoup", - "needFinished": True, - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlacodsoup", - "consume": 1, - }, - - # ============================================================ - # 【蔬菜鲑鱼汤】 - # ============================================================ - # 步骤2: 青菜汤锅 + 生鱼片 → 蔬菜鲑鱼汤锅 - { - "source": "rtdd:vegetablesoup", - "item": "rtdd:sashimi", - "target": "rtdd:vegetablefishsoup_0", - "consume": 1, - }, - # 步骤3: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:vegetablefishsoup_0", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablefishsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:vegetablefishsoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablefishsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第3阶段 → 熟 - { - "source": "rtdd:vegetablefishsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:vegetablefishsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得蔬菜鲑鱼汤碗 - { - "source": "rtdd:vegetablefishsoup_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:brownvegetablefishsoup", - "consume": 1, - }, - - # ============================================================ - # 【肉丸汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 生肉丸 → 肉丸汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:rawmeatball", - "target": "rtdd:rawmeatballsoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 熟 - { - "source": "rtdd:rawmeatballsoup", - "item": "rtdd:potandspoon", - "target": "rtdd:rawmeatballsoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得肉丸汤碗 - { - "source": "rtdd:rawmeatballsoup_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlarawmeatballsoup", - "consume": 1, - }, - - # ============================================================ - # 【猪杂汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 生猪排 → 猪杂汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "minecraft:porkchop", - "target": "rtdd:rawpigfoodsoup_0", - "consume": 1, - }, - # 步骤2: 炖煮第1阶段 → 三分熟 - { - "source": "rtdd:rawpigfoodsoup_0", - "item": "rtdd:potandspoon", - "target": "rtdd:rawpigfoodsoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 七分熟 - { - "source": "rtdd:rawpigfoodsoup_2", - "item": "rtdd:potandspoon", - "target": "rtdd:rawpigfoodsoup_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第3阶段 → 全熟 - { - "source": "rtdd:rawpigfoodsoup_3", - "item": "rtdd:potandspoon", - "target": "rtdd:rawpigfoodsoup_4", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 炖煮第4阶段 → 熟 - { - "source": "rtdd:rawpigfoodsoup_4", - "item": "rtdd:potandspoon", - "target": "rtdd:rawpigfoodsoup_5", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤6: 空手右键 → 获得猪杂汤碗 - { - "source": "rtdd:rawpigfoodsoup_5", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlarawpigfoodsoup", - "consume": 1, - }, - - # ============================================================ - # 【煮米饭】 - # ============================================================ - # 步骤1: 带水汤锅 + 生米 → 米饭锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:brownrice", - "target": "rtdd:rawricepot", - "consume": 1, - }, - # 步骤2: 炖煮第1阶段 → 四分熟 - { - "source": "rtdd:rawricepot", - "item": "rtdd:potandspoon", - "target": "rtdd:ricepot_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 八分熟 - { - "source": "rtdd:ricepot_1", - "item": "rtdd:potandspoon", - "target": "rtdd:ricepot_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第3阶段 → 熟 - { - "source": "rtdd:ricepot_2", - "item": "rtdd:potandspoon", - "target": "rtdd:ricepot_3", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 空手右键 → 获得碗装米饭 - { - "source": "rtdd:ricepot_3", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlofrice", - "consume": 1, - }, - - # ============================================================ - # 【煮粽子】 - # ============================================================ - # 步骤1: 带水汤锅 + 生粽子 → 粽子入锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:rawzongzi", - "target": "rtdd:rawzongzi", - "consume": 1, - }, - # 步骤2: 炖煮 → 熟 - { - "source": "rtdd:rawzongzi", - "item": "rtdd:potandspoon", - "target": "rtdd:cooked_zongzi", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得熟粽子 - { - "source": "rtdd:cooked_zongzi", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:cooked_zongzi", - "consume": 1, - }, - - # ============================================================ - # 【饺子汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 饺子 → 饺子汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:dumplings_4", - "target": "rtdd:dumplingssoup", - "consume": 1, - }, - # 步骤2: 炖煮第1阶段 → 生 - { - "source": "rtdd:dumplingssoup", - "item": "rtdd:potandspoon", - "target": "rtdd:dumplingssoup_0", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 五分熟 - { - "source": "rtdd:dumplingssoup_0", - "item": "rtdd:potandspoon", - "target": "rtdd:dumplingssoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 炖煮第3阶段 → 熟 - { - "source": "rtdd:dumplingssoup_1", - "item": "rtdd:potandspoon", - "target": "rtdd:dumplingssoup_2", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤5: 空手右键 → 获得饺子汤碗 - { - "source": "rtdd:dumplingssoup_2", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowladumplingssoup", - "consume": 1, - }, - - # ============================================================ - # 【肉夹馍汤(羊肉泡馍)】 - # ============================================================ - # 步骤1: 带水汤锅 + 碎肉夹馍 → 羊肉泡馍锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:crushed_roujiamo", - "target": "rtdd:roujiamosoup", - "consume": 1, - }, - # 步骤2: 炖煮第1阶段 → 生 - { - "source": "rtdd:roujiamosoup", - "item": "rtdd:potandspoon", - "target": "rtdd:roujiamosoup_0", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 炖煮第2阶段 → 熟 - { - "source": "rtdd:roujiamosoup_0", - "item": "rtdd:potandspoon", - "target": "rtdd:roujiamosoup_1", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤4: 空手右键 → 获得羊肉泡馍碗 - { - "source": "rtdd:roujiamosoup_1", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowla_roujiamo", - "consume": 1, - }, - - # ============================================================ - # 【煮面汤】 - # ============================================================ - # 步骤1: 带水汤锅 + 面条 → 面汤锅 - { - "source": "rtdd:stewedsoupwater", - "item": "rtdd:noodles", - "target": "rtdd:rawnoodlesoup", - "consume": 1, - }, - # 步骤2: 炖煮 → 熟 - { - "source": "rtdd:rawnoodlesoup", - "item": "rtdd:potandspoon", - "target": "rtdd:cookednoodlessoup", - "consume": 0, - "stirCount": 3, - "stirCd": 2.0, - }, - # 步骤3: 空手右键 → 获得面汤碗 - { - "source": "rtdd:cookednoodlessoup", - "item": "rtdd:bowlasoup", - "target": "rtdd:stewedsoup", - "giveItem": "rtdd:bowlanoodlesoup", - "consume": 1, - }, - -] \ No newline at end of file diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/client/CookingClient.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/client/CookingClient.py deleted file mode 100644 index 85f0020..0000000 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/client/CookingClient.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -""" -烹饪客户端(预留) -================= -目前客户端不需要做额外的UI工作。 -如果以后需要进度条、翻炒提示等UI,可以在这里扩展。 -""" -import mod.client.extraClientApi as clientApi - -ClientSystem = clientApi.GetClientSystemCls() - - -class CookingClient(ClientSystem): - def __init__(self, namespace, systemName): - ClientSystem.__init__(self, namespace, systemName) - print "===== CookingClient init =====" - - def Destroy(self): - print "===== CookingClient Destroy =====" \ No newline at end of file diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/client/__init__.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/client/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/FurnitureData.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/FurnitureData.py new file mode 100644 index 0000000..359faf5 --- /dev/null +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/FurnitureData.py @@ -0,0 +1,266 @@ +# -*- coding: utf-8 -*- +""" +================================================================================ +家具家私分类转换规则数据 +================================================================================ +统一管理"家具家私"(xy_furniture) 分类下的全部【右键切换型】转换规则: + 箭桶、水槽、盘子架、书柜、厨具架、古式唱片机、垃圾桶。 +全部为即时右键转换, 无计时, 不需要 TimerService。 +由 xiangyemod/jiaju/service/FurnitureService 处理, 注册到 FeatureDispatcher。 + +【规则字段说明】 + source: 被右键的源方块 + item: 手持物品名; None=空手; "*music_disc"=任意原版唱片; + "*arrow"=任意箭; "*any"=任意非空物品 + target: 转换成的目标方块 + consume: 消耗数量(默认0, 即不消耗) + clearHand: True=清空主手全部物品(垃圾桶扔垃圾) + giveItem: 取回/取水时给玩家背包的物品名(直接进背包) + dropItem: 以掉落物形式给的物品 [{"name": "xx", "count": N}] + record: "count"=记录一种物品+数量(箭桶) / "stack"=后放先取堆栈(书柜), + 记录写入方块实体数据(rtdd_swt/rtdd_swc/rtdd_swi/rtdd_swa/rtdd_sws), + 退出重进不丢 + maxCount: record 类型最大容量(箭桶32 / 书柜13) + arrowMode:"store"=箭桶存箭(批量) / "retrieve"=箭桶取箭(一次性全取) + discPut: True=唱片机放入时把唱片写入方块实体(取回时原样返还) + discGet: True=唱片机取回时从方块实体读出唱片并掉落 + tip: 转换成功提示 +================================================================================ +""" + +# ============================================================ +# 一、箭桶 (arrowbarrel_0 无箭 / arrowbarrel_1 有箭) +# 存箭: 手持箭(普通箭/药水箭)右键, 批量存入手中所有箭, 至多32只, +# 只存一种箭(类型+药水效果aux不符不能混存), count记录 +# 取箭: 空手右键, 一次性取回方块记录的全部箭 +# ============================================================ +ARROWBARREL_RULES = [ + {"source": "rtdd:arrowbarrel_0", "item": "*arrow", + "target": "rtdd:arrowbarrel_1", "arrowMode": "store", + "record": "count", "maxCount": 32, + "tip": "§a已存入箭"}, + {"source": "rtdd:arrowbarrel_1", "item": None, + "target": "rtdd:arrowbarrel_0", "arrowMode": "retrieve", + "record": "count", + "tip": "§a取回了箭"}, +] + +# ============================================================ +# 二、水槽 (flume_0~5) +# 加水: 空手右键空槽 -> 满水 +# 取水: 手持空水桶右键满水 -> 空槽 + 给装满水的水桶 +# 放脏盘子(脏盘子 rtdd:plate_0a): 满水起, 逐个放入最多4个 +# 取脏盘子: 空手右键逐个取回 +# ============================================================ +FLUME_RULES = [ + # 加水/取水 + {"source": "rtdd:flume_0", "item": None, + "target": "rtdd:flume_1", "tip": "§a水槽加满了水"}, + {"source": "rtdd:flume_1", "item": "minecraft:bucket", + "target": "rtdd:flume_0", "consume": 1, + "giveItem": "minecraft:water_bucket", "tip": "§a取走了水, 水桶装满水"}, + # 放脏盘子(需满水) + {"source": "rtdd:flume_1", "item": "rtdd:plate_0a", + "target": "rtdd:flume_2", "consume": 1, "tip": "§a放入1个脏盘子"}, + {"source": "rtdd:flume_2", "item": "rtdd:plate_0a", + "target": "rtdd:flume_3", "consume": 1, "tip": "§a放入1个脏盘子"}, + {"source": "rtdd:flume_3", "item": "rtdd:plate_0a", + "target": "rtdd:flume_4", "consume": 1, "tip": "§a放入1个脏盘子"}, + {"source": "rtdd:flume_4", "item": "rtdd:plate_0a", + "target": "rtdd:flume_5", "consume": 1, "tip": "§a放入1个脏盘子"}, + # 取脏盘子 + {"source": "rtdd:flume_5", "item": None, + "target": "rtdd:flume_4", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"}, + {"source": "rtdd:flume_4", "item": None, + "target": "rtdd:flume_3", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"}, + {"source": "rtdd:flume_3", "item": None, + "target": "rtdd:flume_2", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"}, + {"source": "rtdd:flume_2", "item": None, + "target": "rtdd:flume_1", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"}, +] + +# ============================================================ +# 三、盘子架 (trayracks_1 空 ~ trayracks_6 五个) +# 放盘子(盘子 rtdd:plate_0): 逐个放入最多5个 +# 取盘子: 空手右键逐个取回 +# ============================================================ +TRAYRACKS_RULES = [ + {"source": "rtdd:trayracks_1", "item": "rtdd:plate_0", + "target": "rtdd:trayracks_2", "consume": 1, "tip": "§a放上1个盘子"}, + {"source": "rtdd:trayracks_2", "item": "rtdd:plate_0", + "target": "rtdd:trayracks_3", "consume": 1, "tip": "§a放上1个盘子"}, + {"source": "rtdd:trayracks_3", "item": "rtdd:plate_0", + "target": "rtdd:trayracks_4", "consume": 1, "tip": "§a放上1个盘子"}, + {"source": "rtdd:trayracks_4", "item": "rtdd:plate_0", + "target": "rtdd:trayracks_5", "consume": 1, "tip": "§a放上1个盘子"}, + {"source": "rtdd:trayracks_5", "item": "rtdd:plate_0", + "target": "rtdd:trayracks_6", "consume": 1, "tip": "§a放上1个盘子"}, + {"source": "rtdd:trayracks_6", "item": None, + "target": "rtdd:trayracks_5", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"}, + {"source": "rtdd:trayracks_5", "item": None, + "target": "rtdd:trayracks_4", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"}, + {"source": "rtdd:trayracks_4", "item": None, + "target": "rtdd:trayracks_3", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"}, + {"source": "rtdd:trayracks_3", "item": None, + "target": "rtdd:trayracks_2", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"}, + {"source": "rtdd:trayracks_2", "item": None, + "target": "rtdd:trayracks_1", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"}, +] + +# ============================================================ +# 四、书柜 (bookcase 系列, 后放先取, 至多13本) +# 放书(书 minecraft:book / 附魔书 minecraft:enchanted_book): 逐个放入, +# stack记录完整物品信息(附魔书附魔不丢) +# 取书: 空手右键, 后放先取(LIFO) +# 方块链: 书柜_1(空)=bookcase, 书柜_2(1本)=bookcase_12, 书柜_3(2本)=bookcase_11, +# 书柜_4(3本)=bookcase_10, 书柜_5(4本)=bookcase_9, 书柜_6(5本)=bookcase_8, +# 书柜_7(6本)=bookcase_7, 书柜_8(7本)=bookcase_6, 书柜_9(8本)=bookcase_5, +# 书柜_10(9本)=bookcase_4, 书柜_11(10本)=b_196, 书柜_12(11本)=bookcase_3, +# 书柜_13(12本)=bookcase_2, 书柜_14(13本)=bookcase_1 +# ============================================================ +_BOOKCASE_CHAIN = [ + "rtdd:bookcase", # 书柜_1(空) + "rtdd:bookcase_12", # 书柜_2(1本) + "rtdd:bookcase_11", # 书柜_3(2本) + "rtdd:bookcase_10", # 书柜_4(3本) + "rtdd:bookcase_9", # 书柜_5(4本) + "rtdd:bookcase_8", # 书柜_6(5本) + "rtdd:bookcase_7", # 书柜_7(6本) + "rtdd:bookcase_6", # 书柜_8(7本) + "rtdd:bookcase_5", # 书柜_9(8本) + "rtdd:bookcase_4", # 书柜_10(9本) + "rtdd:b_196", # 书柜_11(10本) + "rtdd:bookcase_3", # 书柜_12(11本) + "rtdd:bookcase_2", # 书柜_13(12本) + "rtdd:bookcase_1", # 书柜_14(13本) +] + +BOOKCASE_RULES = [] +# 放入: 第 i 级 -> 第 i+1 级, 书/附魔书, 消耗1, stack记录 +for _i in range(len(_BOOKCASE_CHAIN) - 1): + _src, _dst = _BOOKCASE_CHAIN[_i], _BOOKCASE_CHAIN[_i + 1] + BOOKCASE_RULES.append({ + "source": _src, "item": "minecraft:book", "target": _dst, + "consume": 1, "record": "stack", "maxCount": 13, + "tip": "§a放入1本书", + }) + BOOKCASE_RULES.append({ + "source": _src, "item": "minecraft:enchanted_book", "target": _dst, + "consume": 1, "record": "stack", "maxCount": 13, + "tip": "§a放入1本附魔书", + }) +# 取回: 第 i 级 -> 第 i-1 级, 空手, 后放先取 +for _i in range(len(_BOOKCASE_CHAIN) - 1, 0, -1): + _src, _dst = _BOOKCASE_CHAIN[_i], _BOOKCASE_CHAIN[_i - 1] + BOOKCASE_RULES.append({ + "source": _src, "item": None, "target": _dst, + "record": "stack", "tip": "§a取回了书", + }) + +# ============================================================ +# 五、厨具架 (kitchenwarerack, 至多挂2件, 方块状态即组合, 纯切换) +# 可放: 锅铲(spatula) / 锅勺(potandspoon) / 菜刀(cleaver) / 炒锅(wok) +# ============================================================ +KITCHENRACK_RULES = [ + # ---- 放入 (空架 -> 单件) ---- + {"source": "rtdd:kitchenwarerack", "item": "rtdd:spatula", + "target": "rtdd:kitchenwareracka_1", "consume": 1, "tip": "§a放上了锅铲"}, + {"source": "rtdd:kitchenwarerack", "item": "rtdd:potandspoon", + "target": "rtdd:kitchenwarerackb_1", "consume": 1, "tip": "§a放上了锅勺"}, + {"source": "rtdd:kitchenwarerack", "item": "rtdd:cleaver", + "target": "rtdd:kitchenwarerackd_1", "consume": 1, "tip": "§a放上了菜刀"}, + {"source": "rtdd:kitchenwarerack", "item": "rtdd:wok", + "target": "rtdd:kitchenwarerackc_1", "consume": 1, "tip": "§a放上了炒锅"}, + # ---- 放入 (单件 -> 双件/组合) ---- + {"source": "rtdd:kitchenwareracka_1", "item": "rtdd:spatula", + "target": "rtdd:kitchenwareracka_2", "consume": 1, "tip": "§a再放上一把锅铲"}, + {"source": "rtdd:kitchenwareracka_1", "item": "rtdd:potandspoon", + "target": "rtdd:kitchenwareracka_3", "consume": 1, "tip": "§a放上了锅勺"}, + {"source": "rtdd:kitchenwarerackb_1", "item": "rtdd:potandspoon", + "target": "rtdd:kitchenwarerackb_2", "consume": 1, "tip": "§a再放上一把锅勺"}, + {"source": "rtdd:kitchenwarerackc_1", "item": "rtdd:cleaver", + "target": "rtdd:kitchenwarerackc_2", "consume": 1, "tip": "§a放上了菜刀"}, + {"source": "rtdd:kitchenwarerackd_1", "item": "rtdd:cleaver", + "target": "rtdd:kitchenwarerackd_3", "consume": 1, "tip": "§a再放上一把菜刀"}, + {"source": "rtdd:kitchenwarerackd_1", "item": "rtdd:spatula", + "target": "rtdd:kitchenwarerackd_2", "consume": 1, "tip": "§a放上了锅铲"}, + {"source": "rtdd:kitchenwarerackd_1", "item": "rtdd:potandspoon", + "target": "rtdd:kitchenwarerackd_4", "consume": 1, "tip": "§a放上了锅勺"}, + # ---- 取回 (空手右键, 掉落对应厨具) ---- + {"source": "rtdd:kitchenwareracka_1", "item": None, + "target": "rtdd:kitchenwarerack", + "dropItem": [{"name": "rtdd:spatula", "count": 1}], "tip": "§a取回了锅铲"}, + {"source": "rtdd:kitchenwareracka_2", "item": None, + "target": "rtdd:kitchenwareracka_1", + "dropItem": [{"name": "rtdd:spatula", "count": 1}], "tip": "§a取回了一把锅铲"}, + {"source": "rtdd:kitchenwareracka_3", "item": None, + "target": "rtdd:kitchenwareracka_1", + "dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了锅勺"}, + {"source": "rtdd:kitchenwarerackb_1", "item": None, + "target": "rtdd:kitchenwarerack", + "dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了锅勺"}, + {"source": "rtdd:kitchenwarerackb_2", "item": None, + "target": "rtdd:kitchenwarerackb_1", + "dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了一把锅勺"}, + {"source": "rtdd:kitchenwarerackc_1", "item": None, + "target": "rtdd:kitchenwarerack", + "dropItem": [{"name": "rtdd:wok", "count": 1}], "tip": "§a取回了炒锅"}, + {"source": "rtdd:kitchenwarerackc_2", "item": None, + "target": "rtdd:kitchenwarerackc_1", + "dropItem": [{"name": "rtdd:cleaver", "count": 1}], "tip": "§a取回了菜刀"}, + {"source": "rtdd:kitchenwarerackd_1", "item": None, + "target": "rtdd:kitchenwarerack", + "dropItem": [{"name": "rtdd:cleaver", "count": 1}], "tip": "§a取回了菜刀"}, + {"source": "rtdd:kitchenwarerackd_2", "item": None, + "target": "rtdd:kitchenwarerackd_1", + "dropItem": [{"name": "rtdd:spatula", "count": 1}], "tip": "§a取回了锅铲"}, + {"source": "rtdd:kitchenwarerackd_3", "item": None, + "target": "rtdd:kitchenwarerackd_1", + "dropItem": [{"name": "rtdd:cleaver", "count": 1}], "tip": "§a取回了一把菜刀"}, + {"source": "rtdd:kitchenwarerackd_4", "item": None, + "target": "rtdd:kitchenwarerackd_1", + "dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了锅勺"}, +] + +# ============================================================ +# 六、古式唱片机 (b_108 无碟 / b_109 有碟) +# 放入: 手持任意原版唱片 -> 有碟, 消耗1, 记录唱片(rtdd_disc) +# 取回: 空手右键 -> 无碟 + 原样返还唱片 +# 注: 放入后播放曲目为 todo, 后续实现 +# ============================================================ +RECORDPLAYER_RULES = [ + {"source": "rtdd:b_108", "item": "*music_disc", + "target": "rtdd:b_109", "consume": 1, "discPut": True, + "tip": "§a放入了唱片"}, + {"source": "rtdd:b_109", "item": None, + "target": "rtdd:b_108", "discGet": True, + "tip": "§a取回了唱片"}, +] + +# ============================================================ +# 七、垃圾桶 (storage_buckets 关闭 / rubbish_bin_2 打开 / b_160 有垃圾) +# 打开: 右键垃圾桶(空手/手持均可) -> 打开桶盖(不消耗) +# 扔垃圾: 打开时手持任意物品右键 -> 有垃圾 + 清空主手 +# 关闭: 右键(空手/手持均可) 打开/有垃圾 -> 关闭 +# ============================================================ +TRASHBIN_RULES = [ + {"source": "rtdd:storage_buckets", "item": None, + "target": "rtdd:rubbish_bin_2", "tip": "§a垃圾桶已打开"}, + {"source": "rtdd:storage_buckets", "item": "*any", + "target": "rtdd:rubbish_bin_2", "tip": "§a垃圾桶已打开"}, + {"source": "rtdd:rubbish_bin_2", "item": None, + "target": "rtdd:storage_buckets", "tip": "§a垃圾桶已关闭"}, + {"source": "rtdd:rubbish_bin_2", "item": "*any", + "target": "rtdd:b_160", "clearHand": True, "tip": "§a已丢入垃圾桶"}, + {"source": "rtdd:b_160", "item": None, + "target": "rtdd:storage_buckets", "tip": "§a垃圾桶已关闭"}, + {"source": "rtdd:b_160", "item": "*any", + "target": "rtdd:storage_buckets", "tip": "§a垃圾桶已关闭"}, +] + +# ============================================================ +# 汇总: 家具家私全部右键转换规则 +# ============================================================ +FURNITURE_SWITCHES = (ARROWBARREL_RULES + FLUME_RULES + TRAYRACKS_RULES + + BOOKCASE_RULES + KITCHENRACK_RULES + + RECORDPLAYER_RULES + TRASHBIN_RULES) diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/__init__.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/__init__.py new file mode 100644 index 0000000..40a96af --- /dev/null +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py new file mode 100644 index 0000000..7886181 --- /dev/null +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py @@ -0,0 +1,603 @@ +# -*- coding: utf-8 -*- +""" +================================================================================ +家具家私·右键转换引擎(服务端) +================================================================================ +处理"家具家私"(xy_furniture) 分类下的全部【右键切换型】转换: + 箭桶(存/取箭)、水槽(加水/取水/放洗脏盘)、盘子架(放/取盘)、 + 书柜(放/取书,后放先取)、厨具架(放/取厨具)、古式唱片机(放/取唱片)、 + 垃圾桶(开/关/扔垃圾)。 +全部为即时右键转换, 无计时, 因此只有一个服务类, 不需要拆分 TimerService。 + +【事件监听在哪?】 + 本类【不】监听任何事件! + 所有事件由 FeatureDispatcher(xiangyemod/service/FeatureDispatcher.py)统一监听: + - ServerBlockUseEvent → OnBlockUse → 按 blockOwner 路由到本类 handleBlockUse + 本类只实现被分发器调用的接口方法, 不关心事件来源。 + +【规则匹配】 + findRecipe 支持五种: + 1. 精确匹配 (方块名, 物品名) —— 水槽/盘子架/厨具架/书柜等 + 2. 唱片机 (方块名, "*music_disc") —— 手持任意原版唱片 + 3. 箭桶 (方块名, "*arrow") —— 手持任意箭(普通箭/药水箭) + 4. 任意物品(方块名, "*any") —— 垃圾桶: 手持任意非空物品右键 + 5. 空手 (方块名, None) —— 取回/开关类, 只有真正空手才 fallback + +【方块记录(存储物品)】 + 记录写入方块实体数据, 退出重进不丢(rtdd_swt 类型标记): + - count记录(箭桶): 记录一种箭的类型+数量, 字段 rtdd_swt=count / + rtdd_swc=数量 / rtdd_swi=物品名 / rtdd_swa=aux + - stack记录(书柜): 后放先取堆栈, 记录完整物品信息(含userData, 附魔不丢), + 字段 rtdd_swt=stack / rtdd_sws=堆栈列表 + 唱片机单独用 rtdd_disc 记录唱片。SetBlockNew 后 block entity 可能未初始化, + 写入带 0.1s 延迟兜底。 + +【本类怎么做(自上而下的方法系列)】 + handleBlockUse ← 入口:分发器转发右键方块事件 + ├─ findRecipe ← 匹配规则 + ├─ checkCooldown← 连点冷却 + ├─ _handleArrowMode ← 箭桶批量存/取箭 + └─ handleSwitch ← 其他切换: 读记录→消耗/清手→替换→记记录→给/掉物品→提示 +================================================================================ +""" +import time +import mod.server.extraServerApi as serverApi + +# ---- 网易API基础对象 ---- +ServerSystem = serverApi.GetServerSystemCls() # 服务端系统基类 +comp = serverApi.GetEngineCompFactory() # 组件工厂 + +# ---- 继承 BlueFox 框架的系统基类(提供 CreateEngineItemEntity 等方法) ---- +from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem +from ....BlueFoxTools.ToolsConfig import LevelId + +# ---- 方块实体数据组件(记录箭桶数量/书柜堆栈/唱片) ---- +blockEntityDataComp = comp.CreateBlockEntityData(LevelId) +# ---- 游戏组件(AddTimer 延迟写入 block entity 兜底) ---- +gameComp = comp.CreateGame(LevelId) + +# ---- 只导入家具家私自己的数据库 ---- +from ..FurnitureData import FURNITURE_SWITCHES + +# ---- 统一分发器 ---- +from ...service.FeatureDispatcher import FeatureDispatcher + + +class FurnitureService(BlueFoxServerSystem): + """ + 家具家私·右键转换引擎 + + 【核心数据结构】 + furnitureRecipes = {(方块名, 物品名): 规则dict} # O(1) 查找 + furnitureBlockSet = {方块名, ...} # O(1) 注册用 + cooldown = {key: 时间戳} # 连点冷却表 + """ + + def __init__(self, namespace, systemName): + """ + 初始化:构建规则字典,并注册到统一分发器。 + """ + super(FurnitureService, self).__init__(namespace, systemName) + print "===== FurnitureService init =====" + + # ---- 构建规则字典(O(1) 查找) ---- + self.furnitureRecipes = {} + self.furnitureBlockSet = set() + for sw in FURNITURE_SWITCHES: + key = (sw["source"], sw.get("item")) + self.furnitureRecipes[key] = sw + self.furnitureBlockSet.add(sw["source"]) + + # ---- 右键冷却表 ---- + self.cooldown = {} + + # ---- 注册到统一分发器 ---- + FeatureDispatcher.register(self) + + # ============================================================================ + # 一、给 FeatureDispatcher 的接口 + # ============================================================================ + + def getFeatureBlocks(self): + """返回本功能管辖的所有方块名集合(右键路由用)""" + return self.furnitureBlockSet + + def getItemUseOnRules(self): + """返回"手持物品右键方块表面"的规则(家具家私没有, 返回空)""" + return {} + + def handleBlockUse(self, args): + """ + 由 FeatureDispatcher 转发的右键方块入口。 + 只有 blockName 在本功能的方块集合里才会被调用。 + + 返回 True = 本功能处理了这个右键(分发器取消默认行为) + 返回 False = 当前组合没有匹配规则(分发器不拦截) + """ + blockName = args.get("blockName") + playerId = args.get("playerId") + x, y, z = args.get("x"), args.get("y"), args.get("z") + pos = (x, y, z) + dim = comp.CreateDimension(playerId).GetEntityDimensionId() + key = (dim, x, y, z) + + itemDict = self.getCarriedItem(playerId) + + recipe = self.findRecipe(blockName, itemDict) + if not recipe: + return False + + # 连点冷却 + if not self.checkCooldown(key, recipe.get("switchCd", 0.5)): + return True + + # 箭桶模式:批量存/取箭, 单独处理 + if recipe.get("arrowMode"): + self._handleArrowMode(recipe, playerId, pos, dim, itemDict, key) + return True + + # 其余切换型规则:就地执行 + self.handleSwitch(recipe, playerId, pos, dim, itemDict, key) + return True + + # ============================================================================ + # 二、规则匹配(O(1) 字典查找) + # ============================================================================ + + def findRecipe(self, blockName, itemDict): + """ + 匹配规则, 优先级从高到低: + 1. 精确匹配 (方块名, 物品名) + 2. 唱片机 (方块名, "*music_disc") + 3. 箭桶 (方块名, "*arrow") + 4. 任意物品 (方块名, "*any") + 5. 空手 (方块名, None) —— 只有真正空手才 fallback + """ + itemName = itemDict.get("newItemName") if itemDict else None + + # 1. 精确匹配 + recipe = self.furnitureRecipes.get((blockName, itemName)) + if recipe: + return recipe + + # 2. 唱片机:手持任意原版唱片 + if itemName and itemName.startswith("minecraft:music_disc"): + recipe = self.furnitureRecipes.get((blockName, "*music_disc")) + if recipe: + return recipe + + # 3. 箭桶:手持任意箭(普通箭/药水箭) + if itemName in ("minecraft:arrow", "minecraft:tipped_arrow"): + recipe = self.furnitureRecipes.get((blockName, "*arrow")) + if recipe: + return recipe + + # 4. 任意物品匹配(垃圾桶) + if itemName and itemName != "minecraft:air": + recipe = self.furnitureRecipes.get((blockName, "*any")) + if recipe: + return recipe + + # 5. 空手匹配 + if not itemName or itemName == "minecraft:air": + return self.furnitureRecipes.get((blockName, None)) + + return None + + # ============================================================================ + # 三、箭桶模式(批量存箭/一次性取箭, count记录) + # ============================================================================ + + def _handleArrowMode(self, recipe, playerId, pos, dim, itemDict, key): + """ + 箭桶存/取箭: + 存箭: 批量存入手中所有箭, 至多 maxCount(32), 只存一种箭 + (方块内已有箭且与手中类型/药水效果不同则不能混存) + 取箭: 一次性取回方块记录的全部箭(数量+类型+药水效果aux) + """ + mode = recipe.get("arrowMode") + + if mode == "store": + # ---- 存箭 ---- + if not itemDict: + return + handCount = itemDict.get("count", 0) + if handCount <= 0: + return + handItemName = itemDict.get("newItemName", "") + handAux = itemDict.get("newAuxValue", 0) + + record = self._loadRecord(pos, dim) + # 类型检查: 已有箭且类型不符 -> 不能混存 + if record and record.get("count", 0) > 0: + if (record.get("itemName") != handItemName + or record.get("aux", 0) != handAux): + comp.CreateMsg(playerId).NotifyOneMessage( + playerId, "§c箭桶里已有其他种类的箭, 不能混存!") + return + else: + record = {"count": 0, "itemName": handItemName, "aux": handAux} + + # 计算实际可存数量 + maxCount = recipe.get("maxCount", 32) + if record["count"] >= maxCount: + comp.CreateMsg(playerId).NotifyOneMessage( + playerId, "§c箭桶已满!") + return + storeCount = min(handCount, maxCount - record["count"]) + + # 从手中扣减 storeCount 只箭 + self._consumeCount(playerId, itemDict, storeCount) + + # 更新记录 + record["count"] += storeCount + + # 替换方块 + if recipe.get("target"): + self.replaceBlock(pos, dim, recipe["target"], playerId) + + # 保存记录到新方块(延迟兜底) + self._saveRecordDelayed(pos, dim, record) + + if recipe.get("tip"): + comp.CreateMsg(playerId).NotifyOneMessage( + playerId, "§a存入了 %d 只箭 (共%d/32)" % (storeCount, record["count"])) + + elif mode == "retrieve": + # ---- 取箭 ---- + record = self._loadRecord(pos, dim) + if not record or record.get("count", 0) <= 0: + return + + retCount = record["count"] + retItemName = record["itemName"] + retAux = record.get("aux", 0) + + # 给玩家箭 + self.giveItem(playerId, retItemName, retCount, retAux) + + # 替换方块 + if recipe.get("target"): + self.replaceBlock(pos, dim, recipe["target"], playerId) + + # 清空记录 + self._clearRecord(pos, dim) + + if recipe.get("tip"): + comp.CreateMsg(playerId).NotifyOneMessage( + playerId, "§a取回了 %d 只箭" % retCount) + + # ============================================================================ + # 四、切换型规则处理(水槽/盘子架/书柜/厨具架/唱片机/垃圾桶) + # ============================================================================ + + def handleSwitch(self, recipe, playerId, pos, dim, itemDict, key): + """ + 执行"右键直接转换"类规则: + 书柜取回/唱片机取回 → 先读记录 + 消耗物品/清空主手 → 替换方块 → 记录放入 → 给/掉物品 → 提示 + """ + # ---- 取回类: 先读记录(此时方块还是满的/有碟的) ---- + discToDrop = None + if recipe.get("discGet"): + discToDrop = self._readDiscData(pos, dim) + self._clearDiscData(pos, dim) + if recipe.get("record") == "stack" and recipe.get("item") is None: + self._popStackAndGive(playerId, pos, dim) + + # ---- 消耗物品 ---- + if recipe.get("clearHand"): + self.clearHand(playerId) + elif recipe.get("item") is not None and recipe.get("consume", 0) > 0: + self.consumeItem(playerId, itemDict, recipe.get("consume", 1)) + + # ---- 替换方块 ---- + if recipe.get("target"): + self.replaceBlock(pos, dim, recipe["target"], playerId) + + # ---- 放入类: 记录到新方块(延迟兜底) ---- + if recipe.get("record") == "stack" and recipe.get("item") is not None and itemDict: + self._pushStack(pos, dim, itemDict) + if recipe.get("discPut") and itemDict: + self._writeDiscData(dim, pos, itemDict) + + # ---- 掉落物(厨具架取回/唱片取回) ---- + if discToDrop: + self._dropItemDict(dim, pos, discToDrop) + if recipe.get("dropItem"): + self.dropItems(dim, pos, recipe["dropItem"]) + + # ---- 给玩家背包物品(水槽取水/取脏盘子/盘子架取回) ---- + if recipe.get("giveItem"): + self.giveItem(playerId, recipe["giveItem"]) + + # ---- 转换成功提示 ---- + if recipe.get("tip"): + comp.CreateMsg(playerId).NotifyOneMessage(playerId, recipe["tip"]) + + # ============================================================================ + # 五、方块记录:count/stack 读写(箭桶/书柜, 字段 rtdd_sw*) + # ============================================================================ + + def _loadRecord(self, pos, dim): + """从方块实体数据读出记录: count型 -> {"count","itemName","aux"}, + stack型 -> {"stack":[...]}; 无记录返回 None""" + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is None: + return None + swt = blockData["rtdd_swt"] + if swt == "count": + return {"count": blockData["rtdd_swc"], + "itemName": blockData["rtdd_swi"], + "aux": blockData["rtdd_swa"]} + if swt == "stack": + return {"stack": blockData["rtdd_sws"]} + return None + except Exception: + return None + + def _saveRecord(self, pos, dim, record): + """把记录写入方块实体数据""" + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is None: + return + if "count" in record: + blockData["rtdd_swt"] = "count" + blockData["rtdd_swc"] = record["count"] + blockData["rtdd_swi"] = record.get("itemName", "") + blockData["rtdd_swa"] = record.get("aux", 0) + elif "stack" in record: + blockData["rtdd_swt"] = "stack" + blockData["rtdd_sws"] = record["stack"] + except Exception: + pass + + def _saveRecordDelayed(self, pos, dim, record): + """写入记录, block entity 未初始化则 0.1s 延迟兜底""" + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is None: + gameComp.AddTimer(0.1, self._saveRecord, pos, dim, record) + return + self._saveRecord(pos, dim, record) + except Exception: + gameComp.AddTimer(0.1, self._saveRecord, pos, dim, record) + + def _clearRecord(self, pos, dim): + """清除方块实体数据里的记录""" + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is not None: + blockData["rtdd_swt"] = "" + blockData["rtdd_swc"] = 0 + blockData["rtdd_swi"] = "" + blockData["rtdd_swa"] = 0 + blockData["rtdd_sws"] = [] + except Exception: + pass + + # ---- 书柜 stack 记录: 压栈/弹栈 ---- + + def _pushStack(self, pos, dim, itemDict): + """书柜放入: 把书的完整信息压入堆栈(含userData, 附魔不丢)""" + record = self._loadRecord(pos, dim) + if not record: + record = {"stack": []} + record["stack"].append(self._toItemObj(itemDict)) + self._saveRecordDelayed(pos, dim, record) + + def _popStackAndGive(self, playerId, pos, dim): + """书柜取回: 弹栈(后放先取)并把书给玩家""" + record = self._loadRecord(pos, dim) + if not record or not record.get("stack"): + return + topItem = record["stack"].pop() + self.giveItemObj(playerId, topItem) + if record["stack"]: + self._saveRecordDelayed(pos, dim, record) + else: + self._clearRecord(pos, dim) + + def _toItemObj(self, itemDict): + """从手持物品 dict 提取可持久化的物品对象""" + return { + "itemName": itemDict.get("newItemName", ""), + "count": itemDict.get("count", 1), + "aux": itemDict.get("newAuxValue", 0), + "userData": itemDict.get("userData", {}), + } + + # ============================================================================ + # 六、唱片机唱片记录(rtdd_disc) + # ============================================================================ + + def _writeDiscData(self, dim, pos, itemDict): + """把放入的唱片(物品名+aux)写入方块实体数据 rtdd_disc, 延迟兜底""" + discInfo = { + "itemName": itemDict.get("newItemName", "minecraft:music_disc_13"), + "aux": itemDict.get("newAuxValue", 0), + } + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is None: + gameComp.AddTimer(0.1, self._writeDiscDataDelayed, + dim, pos, discInfo) + return + blockData["rtdd_disc"] = discInfo + except Exception: + gameComp.AddTimer(0.1, self._writeDiscDataDelayed, + dim, pos, discInfo) + + def _writeDiscDataDelayed(self, dim, pos, discInfo): + """延迟写入兜底""" + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is not None: + blockData["rtdd_disc"] = discInfo + except Exception: + pass + + def _readDiscData(self, pos, dim): + """从方块实体数据读出唱片信息, 没有返回 None""" + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is None: + return None + # 注意: BlockEntityData 需用 [] 访问, 键不存在会抛异常, 捕获后按无记录处理 + return blockData["rtdd_disc"] + except Exception: + return None + + def _clearDiscData(self, pos, dim): + """清除方块实体数据里的唱片记录""" + try: + blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) + if blockData is not None: + blockData["rtdd_disc"] = None + except Exception: + pass + + def _dropItemDict(self, dim, pos, itemDict): + """以掉落物形式生成一个物品(唱片取回)""" + try: + self.CreateEngineItemEntity( + {"itemName": itemDict["itemName"], + "count": 1, + "auxValue": itemDict.get("aux", 0)}, + dim, (pos[0], pos[1] + 0.5, pos[2])) + except Exception: + pass + + # ============================================================================ + # 七、工具方法:获取玩家主手物品 + # ============================================================================ + + def getCarriedItem(self, playerId): + itemComp = comp.CreateItem(playerId) + return itemComp.GetPlayerItem( + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0) + + # ============================================================================ + # 八、工具方法:给玩家物品 + # ============================================================================ + + def giveItem(self, playerId, itemName, count=1, aux=0, userData=None): + """往玩家背包塞一个物品, 背包满则掉地上""" + try: + itemDict = {"itemName": itemName, "count": count, "auxValue": aux} + if userData: + itemDict["userData"] = userData + comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) + except Exception: + pass + + def giveItemObj(self, playerId, itemObj): + """按持久化物品对象给玩家(书柜弹栈取回, 保留附魔)""" + try: + itemDict = {"itemName": itemObj["itemName"], + "count": itemObj.get("count", 1), + "auxValue": itemObj.get("aux", 0)} + if itemObj.get("userData"): + itemDict["userData"] = itemObj["userData"] + comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) + except Exception: + pass + + # ============================================================================ + # 九、工具方法:消耗物品 + # ============================================================================ + + def consumeItem(self, playerId, itemDict, amount=1): + if itemDict is None: + return + count = itemDict.get("count", 0) + if count <= amount: + comp.CreateItem(playerId).SetEntityItem( + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, + {"itemName": "minecraft:air", "count": 0, "auxValue": 0}) + else: + itemDict["count"] = count - amount + comp.CreateItem(playerId).SetEntityItem( + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, + {"itemName": itemDict["newItemName"], + "count": itemDict["count"], + "auxValue": itemDict.get("newAuxValue", 0)}) + + def _consumeCount(self, playerId, itemDict, amount): + """批量扣减指定数量(箭桶存箭)""" + if not itemDict or amount <= 0: + return + count = itemDict.get("count", 0) + if count <= amount: + comp.CreateItem(playerId).SetEntityItem( + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, + {"itemName": "minecraft:air", "count": 0, "auxValue": 0}) + else: + itemDict["count"] = count - amount + comp.CreateItem(playerId).SetEntityItem( + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, + {"itemName": itemDict["newItemName"], + "count": itemDict["count"], + "auxValue": itemDict.get("newAuxValue", 0)}) + + def clearHand(self, playerId): + """清空主手全部物品(垃圾桶扔垃圾)""" + comp.CreateItem(playerId).SetEntityItem( + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, + {"itemName": "minecraft:air", "count": 0, "auxValue": 0}) + + # ============================================================================ + # 十、工具方法:替换方块 + # ============================================================================ + + def replaceBlock(self, pos, dim, newBlockName, playerId=None): + """ + 替换指定位置的方块。 + playerId 可为 None, 用 LevelId 创建组件。 + """ + creator = playerId if playerId is not None else LevelId + aux = 0 + try: + oldBlock = comp.CreateBlockInfo(creator).GetBlockNew(pos, dim) + aux = oldBlock.get("aux", 0) + except Exception: + aux = 0 + comp.CreateBlockInfo(creator).SetBlockNew( + pos, + blockDict={"name": newBlockName, "aux": aux}, + oldBlockHandling=0, + dimensionId=dim) + + # ============================================================================ + # 十一、工具方法:以掉落物形式生成物品(厨具架取回) + # ============================================================================ + + def dropItems(self, dim, pos, dropList): + """ + dropList 格式:[{"name": "xxx", "count": N}, ...] + 在方块上方生成掉落物实体, 让它自然掉到地上。 + """ + for d in dropList: + itemDict = { + "itemName": d["name"], + "count": d.get("count", 1), + "auxValue": d.get("aux", 0), + } + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + + # ============================================================================ + # 十二、工具方法:冷却检查 + # ============================================================================ + + def checkCooldown(self, key, cd=0.5): + """ + 右键冷却:同一方块 cd 秒内只响应一次, 防止连点刷物品/刷提示。 + """ + now = time.time() + last = self.cooldown.get(key, 0) + if now - last < cd: + return False + self.cooldown[key] = now + return True diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/__init__.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/__init__.py new file mode 100644 index 0000000..40a96af --- /dev/null +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/BlockSwitchService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/BlockSwitchService.py deleted file mode 100644 index 1c3d6c2..0000000 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/BlockSwitchService.py +++ /dev/null @@ -1,764 +0,0 @@ -# -*- coding: utf-8 -*- -""" -================================================================================ -工具方块切换引擎(服务端) -================================================================================ - -这个文件负责所有"普通工具方块"的右键转换逻辑,和做菜(CookingService)彻底分开。 - -【一句话概括】 - 玩家右键工具方块(箭桶、挂肉钩、水槽、盘子架、药水架、书柜……) → - 查 BlockSwitchData 有没有匹配的规则 → 消耗物品 → 替换方块 → 保存记录 - -【为什么单独拆一个类】 - 原来做菜和工具切换都在 CookingService 里,右键时每次都要同时碰到两套数据, - 内存和逻辑都搅在一起。现在拆成两个系统: - - CookingService → 只处理做菜配方(RECIPES) - - BlockSwitchService → 只处理工具方块切换(BLOCK_SWITCHES) - 两个系统都监听同一个 ServerBlockUseEvent, - 但各自在事件第一行用 switchBlockSet/cookBlockSet(O(1) 的 set)按方块名拦截: - 不是自己的方块直接 return,互不干扰,各自只查自己那一份数据。 - -【事件监听】 - - ServerBlockUseEvent → 玩家右键方块(工具切换主入口) - - ServerItemTryUseEvent → 玩家尝试使用物品(拦截喝药水等默认行为) - -【保存/持久化】 - 箭桶、药水架、书柜这类有 record 记录的方块,把放进来的物品记录在 - 方块实体数据里(字段 rtdd_swt/rtdd_swc/rtdd_swi/rtdd_sws), - 这样玩家退出游戏再重进,loadSwitchRecord 还能从方块里把物品读回来。 -================================================================================ -""" -import time -import mod.server.extraServerApi as serverApi - -# ---- 网易API基础对象 ---- -ServerSystem = serverApi.GetServerSystemCls() # 服务端系统基类 -comp = serverApi.GetEngineCompFactory() # 组件工厂,用来创建各种功能组件 - -# ---- 继承 BlueFox 框架的系统基类 ---- -# BlueFoxServerSystem 会自动处理 LoadMod / UnloadMod 等生命周期, -# 不需要手动写,继承后框架自动发现并注册(ModLoader 的 GetLastSubclass) -from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem -from ...BlueFoxTools.ToolsConfig import LevelId - -# ---- 方块实体数据组件 ---- -# GetBlockEntityData 返回的 BlockEntityData 对象支持 [] 操作,直接赋值即可持久化。 -blockEntityDataComp = comp.CreateBlockEntityData(LevelId) - -# ---- 游戏组件(用于 AddTimer 延迟写入 block entity) ----# -gameComp = comp.CreateGame(LevelId) - - -# ---- 导入工具方块切换规则 ---- -# BLOCK_SWITCHES 是一个列表,每条规则是一个 dict,格式见 BlockSwitchData.py 顶部注释 -from ..BlockSwitchData import BLOCK_SWITCHES - -# ---- 已由 DeadmobService/DeadmobTimerService 接管的死亡生物方块 ---- -# 这些方块属于"死亡生物"(xy_deadmob) 分类,由新系统处理(挂肉钩切肉/鱼晾干/死鱼切块), -# 工具切换系统必须跳过,否则右键会触发旧规则(含逆向退回),和新系统双重响应产生冲突。 -_DEADMOB_OWNED = set([ - "rtdd:meathook", - "rtdd:cow_0", "rtdd:cow_1", "rtdd:cow_2", "rtdd:cow_3", - "rtdd:pig_0", "rtdd:pig_1", "rtdd:pig_2", "rtdd:pig_3", - "rtdd:sheep", "rtdd:sheep_1", "rtdd:sheep_2", "rtdd:sheep_3", - "rtdd:hang_meat_hooks_1", "rtdd:hang_meat_hooks_2", - "rtdd:hang_meat_hooks_3", "rtdd:hang_meat_hooks_4", - "rtdd:meathookcod_1", "rtdd:meathookcod_2", "rtdd:meathookcoddry", - "rtdd:killfish_0", "rtdd:killfish_1", "rtdd:killfish_2", "rtdd:killfish_3", - "rtdd:killcod_0", "rtdd:killcod_1", "rtdd:killcod_2", - "rtdd:deadsquida", "rtdd:dead_squid_1", - # 旧版挂鱼方块(minecraft:fish 挂肉钩),已被新挂鱼(鲑鱼/鳕鱼)取代 - "rtdd:fish_1", "rtdd:fish_2", -]) - - -# ================================================================================ -# 工具函数:读取物品 userData 里的嵌套字段 -# ================================================================================ - -def getUserDataField(itemDict, *keys): - """ - 从物品 dict 的 userData 里一层层往下读。 - 中间某一层不存在会自动创建空 dict,不会报错。 - """ - itemDict['userData'] = itemDict.get('userData', {}) - if itemDict.get('userData') is None: - itemDict['userData'] = {} - node = itemDict['userData'] - for key in keys: - node[key] = node.get(key, {}) - node = node[key] - return node - - -# ================================================================================ -# 工具方块切换引擎主类 -# ================================================================================ - -class BlockSwitchService(BlueFoxServerSystem): - """ - 通用工具方块切换引擎 - - 【核心数据结构】 - switchRecord = { - (维度ID, x, y, z): { # 用方块坐标当 key,每个方块独立 - "count": 整数, # recordType="count" 时记录数量(如箭桶里有多少箭) - "itemName": 字符串, # recordType="count" 时记录物品名(如"minecraft:arrow") - "stack": [物品信息列表], # recordType="stack" 时记录后进先出的物品堆 - } - } - - 这个数据同时存在两处: - 1. 内存(self.switchRecord)—— 快,关服就没了 - 2. 方块实体数据(blockEntityData)—— 慢一点,但关服重启后还在 - 每次操作都会同步更新两处,保证重启不丢记录 - """ - - def __init__(self, namespace, systemName): - """ - 初始化:清空记录数据、注册事件监听、构建工具切换规则字典 - """ - super(BlockSwitchService, self).__init__(namespace, systemName) - print "===== BlockSwitchService init =====" - self.switchRecord = {} # 工具方块的记录数据(箭桶数量、药水架顺序等) - self.switchCooldown = {} # 工具方块切换冷却时间(防止连点) - self._cancelItemUse = {} # 将要取消下一次物品使用的玩家ID集合(防止喝药水等) - self.ListenEvent() # 注册游戏事件监听 - - # ---- 构建工具切换规则字典(O(1) 查找) ---- - # key = (方块名, 物品名),value = 规则dict - self.switchRecipes = {} - for switch in BLOCK_SWITCHES: - key = (switch["source"], switch.get("item")) - self.switchRecipes[key] = switch - - # ---- 构建工具方块名集合(O(1) 快速拦截,第一道过滤) ---- - # 事件进来先判断方块名在不在这个集合里,不在直接 return, - # 这样做菜方块的右键事件根本不会进到本系统的字典查找 - self.switchBlockSet = set() - for switch in BLOCK_SWITCHES: - self.switchBlockSet.add(switch["source"]) - - def Destroy(self): - """ - 系统销毁时取消所有事件监听,防止内存泄漏 - """ - print "===== BlockSwitchService Destroy =====" - self.UnListenEvent() - - # ============================================================================ - # 事件注册与注销 - # ============================================================================ - - def ListenEvent(self): - """ - 注册两个游戏事件: - 1. ServerBlockUseEvent —— 玩家右键方块(工具切换入口) - 2. ServerItemTryUseEvent —— 玩家尝试使用物品(拦截喝药水等默认行为) - """ - # 事件1:玩家右键方块 - self.ListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerBlockUseEvent", self, self.OnBlockUse) - # 事件2:玩家尝试使用物品(拦截喝药水) - self.ListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerItemTryUseEvent", self, self.OnItemTryUse) - - def UnListenEvent(self): - """ - 注销事件监听,和 ListenEvent 一一对应 - """ - self.UnListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerBlockUseEvent", self, self.OnBlockUse) - self.UnListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerItemTryUseEvent", self, self.OnItemTryUse) - - # ============================================================================ - # 主入口:玩家右键方块 - # ============================================================================ - - def OnBlockUse(self, args): - """ - 玩家右键方块时触发,是工具方块切换的入口。 - - 流程: - 1. 先按方块名判断是不是本系统管辖的工具方块(O(1) set 拦截) - - 不是 → 直接 return(这是做菜方块的右键,交给 CookingService 处理) - 2. 拿到被右键的方块名、玩家ID、方块坐标 - 3. 看玩家手里拿了什么物品 - 4. 拿着"方块名+手里物品名"去工具切换字典里 O(1) 查找 - 5. 命中规则 → 执行工具切换逻辑 - """ - # ---- 第一步:提取事件参数 ---- - blockName = args.get("blockName") # 被右键的方块名 - playerId = args.get("playerId") # 谁右键的 - x, y, z = args.get("x"), args.get("y"), args.get("z") # 方块坐标 - pos = (x, y, z) # 坐标打包成元组 - dim = comp.CreateDimension(playerId).GetEntityDimensionId() # 玩家在哪个维度 - key = (dim, x, y, z) # 完整的唯一标识:维度+坐标 - - # ---- 第二步:O(1) 方块名拦截 ---- - # 只有工具方块的右键才归本系统处理;做菜方块直接放过,交给 CookingService - if blockName in _DEADMOB_OWNED: - # 死亡生物方块由新系统(DeadmobService)处理,本系统跳过 - return - if blockName not in self.switchBlockSet: - return - - # ---- 第三步:拿到玩家手里拿的物品 ---- - itemDict = self.getCarriedItem(playerId) - - # ---- 第四步:查工具切换规则(O(1) 字典查找) ---- - recipe = self.findRecipe(blockName, itemDict) - if not recipe: - # 方块是工具方块,但当前组合没有匹配的规则(比如手里物品不对)→ 不拦截 - return - - # 找到规则后,取消默认行为(如喝药水、吃食物等),由本 Mod 全权接管 - args['cancel'] = True - # 同时标记该玩家下一次物品使用事件也要取消,防止喝药水等默认行为 - self._cancelItemUse[playerId] = True - - # ---- 第五步:加载方块历史记录到内存 ---- - # 这样 handleSwitch 里直接从 self.switchRecord 取就行 - self._loadBlockDataToMemory(key, playerId, pos, dim) - - # ---- 第六步:执行工具切换 ---- - self.handleSwitch(recipe, playerId, pos, dim, itemDict, key, blockName) - - # ============================================================================ - # 拦截物品使用事件(防止喝药水等默认行为) - # ============================================================================ - - def OnItemTryUse(self, args): - playerId = args.get("playerId") - if self._cancelItemUse.pop(playerId, False): - args['cancel'] = True - - # ============================================================================ - # 规则匹配(O(1) 字典查找) - # ============================================================================ - - def findRecipe(self, blockName, itemDict): - """ - 在工具切换字典中 O(1) 查找匹配的规则。 - - 匹配条件: - 1. 先精确匹配 (方块名, 物品名) - 2. 如果没找到,尝试匹配 (方块名, None) —— 空手也能触发的规则 - 3. 如果匹配到的是 arrowMode 规则,额外检查手中物品是否为箭 - - 返回:匹配到的规则 dict,找不到返回 None - """ - itemName = itemDict.get("newItemName") if itemDict else None - - # 精确匹配:(方块名, 物品名) - recipe = self.switchRecipes.get((blockName, itemName)) - if recipe: - return recipe - - # 空手匹配:(方块名, None) - recipe = self.switchRecipes.get((blockName, None)) - if recipe: - # 如果规则是 arrowMode 存箭模式,检查手中物品是否为箭 - if recipe.get("arrowMode") == "store": - if itemDict and self._isArrow(itemDict): - return recipe - return None - return recipe - - return None - - def _isArrow(self, itemDict): - """ - 判断手中物品是否为箭(普通箭或药水箭)。 - 返回 True/False。 - """ - if not itemDict: - return False - itemName = itemDict.get("newItemName", "") - return itemName == "minecraft:arrow" or itemName == "minecraft:tipped_arrow" - - # ============================================================================ - # 工具方块切换处理 - # ============================================================================ - - def handleSwitch(self, recipe, playerId, pos, dim, itemDict, key, blockName): - """ - 处理工具方块的切换逻辑(箭桶、挂肉钩、水槽、盘子架、药水架、书柜等)。 - - 支持三种模式: - 1. recordType="count" → 记录一种物品+数量(如箭桶存箭) - 2. recordType="stack" → 后进先出堆栈(如药水架、书柜) - 3. 无 record → 纯切换,不记录(如挂肉钩直接换状态) - - 流程: - 1. 如果是计时型(type="timer"),直接替换方块,不消耗物品 - 2. 如果是切换型(type="switch"),根据 recordType 决定记录方式 - 3. 消耗物品、替换方块、更新记录(记录写入方块实体数据,退出重进不丢) - """ - # ---- 如果规则指定了 tool,检查玩家手里是不是拿着指定工具 ---- - if recipe.get("tool"): - if not itemDict: - return - carriedItem = itemDict.get("newItemName", "") - # 简单判断:物品名是否包含工具名 - if recipe["tool"] not in carriedItem: - return - - # ---- 冷却检查:防止连点右键瞬间切换多次 ---- - now = time.time() - lastOp = self.switchCooldown.get(key, 0) - cd = recipe.get("switchCd", 0.5) - if now - lastOp < cd: - return - self.switchCooldown[key] = now - - # ---- 箭桶模式(arrowMode):存箭 / 取箭 ---- - # 独立于普通 count/stack 逻辑,因为箭桶需要批量操作 - arrowMode = recipe.get("arrowMode") - if arrowMode: - self._handleArrowMode(arrowMode, recipe, playerId, pos, dim, itemDict, key, blockName) - return - - # ---- 计时型:直接替换方块,不消耗物品,不记录 ---- - if recipe.get("type") == "timer": - if recipe.get("target"): - self.replaceBlock(pos, dim, recipe["target"], playerId) - return - - # ---- 切换型 ---- - # 内存中已有数据(_loaBlockDataToMemory 已加载),直接用 - record = self.switchRecord.get(key) - - # ---- 正向操作:往方块里放东西(source == 被右键的方块) ---- - if recipe["source"] == blockName and recipe.get("item") is not None: - # 玩家手里有物品,往方块里放 - needSave = False # 标记是否需要保存记录到方块 - if recipe.get("record"): - if recipe.get("recordType") == "count": - # 数量记录型:只记录一种物品的总数 - if not record: - record = { - "count": 0, - "itemName": itemDict["newItemName"], - "auxValue": itemDict.get("newAuxValue", 0), - } - # 检查是否满了 - maxCount = recipe.get("maxCount", 999) - if record["count"] >= maxCount: - return - # 记录物品+1 - record["count"] += 1 - needSave = True - - elif recipe.get("recordType") == "stack": - # 堆栈记录型:后进先出,记录每种物品的完整信息 - if not record: - record = {"stack": []} - maxCount = recipe.get("maxCount", 999) - if len(record["stack"]) >= maxCount: - return - # 把物品信息压入堆栈 - record["stack"].append({ - "itemName": itemDict["newItemName"], - "count": itemDict.get("count", 1), - "auxValue": itemDict.get("newAuxValue", 0), - "userData": itemDict.get("userData", {}), - }) - needSave = True - - # 消耗物品 - if recipe.get("consume", 1) > 0: - self.consumeItem(playerId, itemDict, recipe.get("consume", 1)) - - # 替换方块(旧方块销毁,新方块出现) - if recipe.get("target"): - self.replaceBlock(pos, dim, recipe["target"], playerId) - - # ★ 关键:替换完方块后再保存记录到新方块上,否则数据随旧方块一起销毁 - if needSave: - self._saveRecord(key, playerId, pos, dim, record) - - # 如果规则指定了给物品(如烧烤架浇水给桶) - if recipe.get("giveItem"): - self.giveItem(playerId, recipe["giveItem"]) - - return - - # ---- 逆向操作:从方块里取东西(空手右键或取回物品) ---- - if recipe["source"] == blockName and recipe.get("item") is None: - needSaveRecord = False # 是否需要保存记录 - needClearRecord = False # 是否需要清除记录 - - if recipe.get("record") and record: - if recipe.get("recordType") == "count": - # 数量记录型取回:给玩家对应的物品,数量-1 - if record["count"] > 0: - self.giveItem(playerId, record["itemName"]) - record["count"] -= 1 - if record["count"] <= 0: - needClearRecord = True - else: - needSaveRecord = True - - elif recipe.get("recordType") == "stack": - # 堆栈记录型取回:后进先出,取最后一个放的物品 - if record["stack"]: - topItem = record["stack"].pop() - comp.CreateItem(playerId).SpawnItemToPlayerInv( - {"itemName": topItem["itemName"], - "count": topItem["count"], - "auxValue": topItem["auxValue"], - "userData": topItem.get("userData", {})}, - playerId) - if not record["stack"]: - needClearRecord = True - else: - needSaveRecord = True - - # 如果规则直接指定了给什么物品(水槽、盘子架取回、挂肉钩退回等) - if recipe.get("giveItem"): - self.giveItem(playerId, recipe["giveItem"]) - - # 替换方块(旧方块销毁,新方块出现) - if recipe.get("target"): - self.replaceBlock(pos, dim, recipe["target"], playerId) - - # ★ 关键:替换完方块后再保存/清除记录,否则数据随旧方块一起销毁 - if needClearRecord: - self.clearSwitchRecord(key, playerId, pos, dim) - elif needSaveRecord: - self._saveRecord(key, playerId, pos, dim, record) - - return - - # ============================================================================ - # 通用持久化帮手(避免重复的 try/except/Get/Set 写法) - # ============================================================================ - - def _writeBlockData(self, dim, pos, **kwargs): - """ - 通用方块实体数据写入。 - - GetBlockEntityData 返回的 BlockEntityData 对象支持 [] 操作, - 直接赋值即可持久化。官方没有 SetBlockEntityData 方法。 - """ - try: - blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) - if blockData is None: - return - for key, value in kwargs.items(): - blockData[key] = value - except Exception as e: - pass - - def _saveRecord(self, key, playerId, pos, dim, record): - """ - 同时更新内存和方块实体数据中的工具方块记录。 - - 替代原本重复出现的: - self.switchRecord[key] = record - self.saveSwitchRecord(playerId, pos, dim, record) - """ - self.switchRecord[key] = record - self.saveSwitchRecord(playerId, pos, dim, record) - - # ============================================================================ - # 统一数据加载入口(玩家右键工具方块时先把方块数据恢复到内存) - # ============================================================================ - - def _loadBlockDataToMemory(self, key, playerId, pos, dim): - """ - 在确定玩家右键命中了一个工具切换规则后,立刻把方块里存的记录加载到内存。 - - 这样 handleSwitch 里就不用自己加载了,直接从 self.switchRecord 取就行。 - """ - if key not in self.switchRecord: - switchInfo = self.loadSwitchRecord(playerId, pos, dim) - if switchInfo: - self.switchRecord[key] = switchInfo - - # ============================================================================ - # 工具方块记录持久化(药水架、书柜、箭桶等) - # ============================================================================ - - def saveSwitchRecord(self, playerId, pos, dim, record): - """ - 把工具方块的记录数据写入方块实体数据。 - 记录类型:count型(箭桶)→ rtdd_swt/swc/swi,stack型(书柜/药水架)→ rtdd_swt/sws - - 记录存在方块实体数据里,所以玩家退出游戏再重进, - loadSwitchRecord 还能从方块里把物品读回来。 - """ - if "count" in record: - self._writeBlockData(dim, pos, - rtdd_swt="count", - rtdd_swc=record["count"], - rtdd_swi=record.get("itemName", ""), - rtdd_swa=record.get("auxValue", 0)) - elif "stack" in record: - self._writeBlockData(dim, pos, - rtdd_swt="stack", - rtdd_sws=record["stack"]) - - def loadSwitchRecord(self, playerId, pos, dim): - """ - 从方块实体数据里读取工具方块的记录数据。 - - 返回: - 有数据 → {"count": N, "itemName": "xxx"} 或 {"stack": [...]} - 没有 → None - """ - try: - blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) - if blockData is None: - return None - swt = blockData["rtdd_swt"] - if swt == "count": - count = blockData["rtdd_swc"] - itemName = blockData["rtdd_swi"] - try: - auxValue = blockData["rtdd_swa"] - except (KeyError, Exception): - auxValue = 0 - return { - "count": count, - "itemName": itemName, - "auxValue": auxValue, - } - elif swt == "stack": - stack = blockData["rtdd_sws"] - return { - "stack": stack, - } - else: - return None - except Exception as e: - return None - - def clearSwitchRecord(self, key, playerId, pos, dim): - """ - 清除工具方块的记录数据(内存+方块实体数据)。 - """ - self.switchRecord.pop(key, None) - self._writeBlockData(dim, pos, rtdd_swt="", rtdd_swc=0, rtdd_swi="", rtdd_swa=0, rtdd_sws=[]) - - # ============================================================================ - # 箭桶模式(arrowMode):存箭 / 取箭 - # ============================================================================ - - def _handleArrowMode(self, arrowMode, recipe, playerId, pos, dim, itemDict, key, blockName): - """ - 处理箭桶的存箭/取箭逻辑。 - - 【存箭流程】 - 1. 检查手中是否为箭(_isArrow 已在 findRecipe 验证过) - 2. 检查方块是否有记录且类型匹配: - a. 已有记录 → 检查手中箭类型(itemName+auxValue)是否匹配 → 不匹配则 return - b. 无记录 → 新建记录 - 3. 计算实际可存数量 = min(手中数量, maxCount - 已有数量) - 4. 如果可存数量 <= 0 → return - 5. 从手中扣减,更新记录,替换方块 - - 【取箭流程】 - 1. 检查方块是否有记录且 count > 0 - 2. 给玩家手中/背包添加 count 只箭(itemName + auxValue 按记录) - 3. 清空记录,替换方块 - """ - record = self.switchRecord.get(key) - - if arrowMode == "store": - # ---- 存箭 ---- - handCount = itemDict.get("count", 0) - if handCount <= 0: - return - - handItemName = itemDict.get("newItemName", "") - handAuxValue = itemDict.get("newAuxValue", 0) - - # 检查方块是否有记录且类型匹配 - if record and record["count"] > 0: - # 已有记录 → 检查箭类型是否一致 - if record.get("itemName") != handItemName or record.get("auxValue", 0) != handAuxValue: - return # 类型不匹配,不能混存 - else: - # 无记录 → 新建 - record = { - "count": 0, - "itemName": handItemName, - "auxValue": handAuxValue, - } - - # 计算实际可存数量 - maxCount = recipe.get("maxCount", 32) - if record["count"] >= maxCount: - return # 已满 - storeCount = min(handCount, maxCount - record["count"]) - - # 从玩家手中扣减 - self._consumeItemCount(playerId, itemDict, storeCount) - - # 更新记录 - record["count"] += storeCount - - # 替换方块 - if recipe.get("target"): - self.replaceBlock(pos, dim, recipe["target"], playerId) - - # ★ 保存记录到新方块 - # 注意:这里不用延迟写入。虽然 SetBlockNew 替换方块后 block entity - # 可能尚未完全初始化,但 GetBlockEntityData 仍然能获取到对象并写入。 - # 延迟写入反而可能导致退出游戏后数据不持久化。 - self._saveRecord(key, playerId, pos, dim, record) - - elif arrowMode == "retrieve": - # ---- 取箭 ---- - if not record or record["count"] <= 0: - return - - retCount = record["count"] - retItemName = record["itemName"] - retAuxValue = record.get("auxValue", 0) - - # 给玩家箭 - self.giveItem(playerId, retItemName, retCount, retAuxValue) - - # 替换方块 - if recipe.get("target"): - self.replaceBlock(pos, dim, recipe["target"], playerId) - - # ★ 清空记录 - self.clearSwitchRecord(key, playerId, pos, dim) - - def _consumeItemCount(self, playerId, itemDict, amount): - """ - 从玩家主手批量扣减指定数量的物品。 - 如果手中数量刚好等于 amount → 清空主手。 - 如果手中数量大于 amount → 减少 amount。 - """ - if not itemDict or amount <= 0: - return - count = itemDict.get("count", 0) - if count <= amount: - # 数量不够或刚好用完 → 清空主手 - comp.CreateItem(playerId).SetEntityItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - {"itemName": "minecraft:air", "count": 0, "auxValue": 0}) - else: - # 数量够 → 减少 amount 个 - itemDict["count"] = count - amount - comp.CreateItem(playerId).SetEntityItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - {"itemName": itemDict["newItemName"], - "count": itemDict["count"], - "auxValue": itemDict.get("newAuxValue", 0)}) - - # ============================================================================ - # 延迟写入帮手(解决 SetBlockNew 替换方块后 block entity 未初始化的问题) - # ============================================================================ - - def _saveRecordDelayed(self, key, playerId, pos, dim, record): - """ - 延迟一帧保存记录到方块实体数据。 - - SetBlockNew 替换方块后,新方块的 block entity 需要引擎内部初始化时间, - 立即 GetBlockEntityData 可能返回 None 导致写入静默失败。 - - 先更新内存,再延迟写入方块实体。 - """ - self.switchRecord[key] = record - gameComp.AddTimer(0.1, self.saveSwitchRecord, playerId, pos, dim, record) - - def _clearRecordDelayed(self, key, playerId, pos, dim): - """ - 延迟一帧清除方块实体数据。 - """ - self.switchRecord.pop(key, None) - gameComp.AddTimer(0.1, self._clearRecordWrite, playerId, pos, dim) - - def _clearRecordWrite(self, playerId, pos, dim): - """ - 实际执行清除写入(被 AddTimer 调用)。 - """ - self._writeBlockData(dim, pos, rtdd_swt="", rtdd_swc=0, rtdd_swi="", rtdd_swa=0, rtdd_sws=[]) - - # ============================================================================ - # 工具方法:获取玩家手中物品 - # ============================================================================ - - def getCarriedItem(self, playerId): - """ - 获取玩家主手(右手)拿的物品。 - 空手返回 None。 - """ - itemComp = comp.CreateItem(playerId) - return itemComp.GetPlayerItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0) - - # ============================================================================ - # 工具方法:消耗物品 - # ============================================================================ - - def consumeItem(self, playerId, itemDict, amount=1): - """ - 消耗玩家主手物品的指定数量。 - 如果数量不够 → 清空主手;如果数量够 → 减少对应数量。 - """ - if itemDict is None: - return - count = itemDict.get("count", 0) - if count <= amount: - # 数量不够或刚好用完 → 清空主手 - comp.CreateItem(playerId).SetEntityItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - {"itemName": "minecraft:air", "count": 0, "auxValue": 0}) - else: - # 数量够 → 减少 amount 个 - itemDict["count"] = count - amount - comp.CreateItem(playerId).SetEntityItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - {"itemName": itemDict["newItemName"], - "count": itemDict["count"], - "auxValue": itemDict.get("newAuxValue", 0)}) - - # ============================================================================ - # 工具方法:替换方块 - # ============================================================================ - - def replaceBlock(self, pos, dim, newBlockName, playerId, aux=None): - """ - 把指定位置的方块替换成新方块。 - - 对照 BlockBlock.py 的标准写法: - - 使用命名参数 - - oldBlockHandling=0 表示直接替换(不保留旧方块数据) - - aux 默认继承旧方块朝向,这样替换后不会转方向 - """ - if aux is None: - try: - oldBlock = comp.CreateBlockInfo(playerId).GetBlockNew(pos, dim) - aux = oldBlock.get("aux", 0) - except: - aux = 0 - comp.CreateBlockInfo(playerId).SetBlockNew( - pos, - blockDict={"name": newBlockName, "aux": aux}, - oldBlockHandling=0, - dimensionId=dim) - - # ============================================================================ - # 工具方法:给玩家物品 - # ============================================================================ - - def giveItem(self, playerId, itemName, count=1, auxValue=0): - """ - 往玩家背包里塞一个物品。 - 如果背包满了,物品会掉在地上。 - """ - comp.CreateItem(playerId).SpawnItemToPlayerInv( - {"itemName": itemName, "count": count, "auxValue": auxValue}, playerId) \ No newline at end of file diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/CookingService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/CookingService.py deleted file mode 100644 index 6206780..0000000 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/CookingService.py +++ /dev/null @@ -1,791 +0,0 @@ -# -*- coding: utf-8 -*- -""" -================================================================================ -通用烹饪引擎(服务端) -================================================================================ - -这个文件是整个模组最核心的"大脑",所有做菜相关的逻辑都在这里。 -它不关心具体做什么菜——具体菜谱全在 RecipeData.py 里。 -它只负责"当玩家对某个方块右键时,查菜谱、耗材料、换方块、记进度"这套通用流程。 - -【一句话概括】 - 玩家右键烹饪方块 → 引擎查 RecipeData 有没有匹配的配方 → - 有就消耗手上物品 → 替换方块/记录翻炒进度 → 完成做菜 - -【为什么和工具切换分开】 - 原本做菜和普通工具方块切换(箭桶、水槽、书架、药水架等)都在这个类里。 - 现在已拆成两个独立系统: - - CookingService → 只处理做菜配方(RECIPES),本文件 - - BlockSwitchService → 只处理工具方块切换(BLOCK_SWITCHES) - 两个系统都监听同一个 ServerBlockUseEvent, - 各自在事件第一行用 cookBlockSet/switchBlockSet(O(1) 的 set)按方块名拦截, - 不是自己的方块直接 return,互不干扰,各自只查自己那一份数据。 - -【设计原则】 - - 加新菜不改代码:在 RecipeData.py 加一条配方就行,这里一行不用动 - - 所有做菜逻辑一处维护:炒锅、煎锅、油锅、架锅、蒸笼……全走同一个引擎 - - 翻炒进度存方块里:服务器重启后数据不丢,玩家能继续翻 - -【用法】 - 在 modMain.py 里注册这个系统即可: - serverApi.RegisterSystem("rtdd", "CookingService", - "Script_NeteaseModousIY5aSF.xiangyemod.service.CookingService.CookingService") - -【事件监听】 - - ServerBlockUseEvent → 玩家右键方块(做菜主入口) - - ServerPlayerTryDestroyBlockEvent → 玩家拆方块(掉落食材) -================================================================================ -""" -import time -import mod.server.extraServerApi as serverApi - -# ---- 网易API基础对象 ---- -ServerSystem = serverApi.GetServerSystemCls() # 服务端系统基类 -comp = serverApi.GetEngineCompFactory() # 组件工厂,用来创建各种功能组件 - -# ---- 继承 BlueFox 框架的系统基类 ---- -# BlueFoxServerSystem 会自动处理 LoadMod / UnloadMod 等生命周期, -# 不需要手动写,继承后框架自动发现并注册 -from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem -from ...BlueFoxTools.ToolsConfig import LevelId - -# ---- 方块实体数据组件 ---- -# GetBlockEntityData 返回的 BlockEntityData 对象支持 [] 操作,直接赋值即可持久化。 -# 参考官方文档:方块实体数据组件只有 GetBlockEntityData,没有 SetBlockEntityData。 -blockEntityDataComp = comp.CreateBlockEntityData(LevelId) - -# ---- 导入所有配方 ---- -# RECIPES 是一个列表,每条配方是一个 dict,格式见 RecipeData.py 顶部注释 -from ..RecipeData import RECIPES, inferBaseBlock, BELOW_CAMPFIRE - -# ---- 已由 FeatureDispatcher/BarbecueService 接管的烧烤方块 ---- -# 这些方块属于"烧烤"(xy_barbecue) 分类,由新系统处理(支杆+营火机制), -# 做菜系统必须跳过,否则右键烤乳猪(熟)等会被当成菜谱去查灶台底座,弹出错误提示。 -_BARBECUE_OWNED = set([ - "rtdd:barbecuegrill_0", "rtdd:barbecuegrill_1", - "rtdd:roastpig_0", "rtdd:roastpig_1", - "rtdd:roastchicken_0", "rtdd:roastchicken_1", - "rtdd:roastchickenplace_0", - "rtdd:grilledcod_0", "rtdd:grilledcod_1", - "rtdd:grilled_fish", "rtdd:grilled_salmon", - "rtdd:roasted_vegetables_0", "rtdd:roasted_vegetables_1", "rtdd:roasted_vegetables_3", - "rtdd:roastedmushrooms_0", "rtdd:roastedmushrooms_1", "rtdd:roastedmushrooms_3", - "rtdd:beefkebabs_0", "rtdd:beefkebabs_1", "rtdd:beefkebabs_3", - "rtdd:lambkebabs_0", "rtdd:lambkebabs_1", "rtdd:lambkebabs_3", -]) - -# ================================================================================ -# 工具函数:读取物品 userData 里的嵌套字段 -# ================================================================================ - -def getUserDataField(itemDict, *keys): - """ - 从物品 dict 的 userData 里一层层往下读。 - - 我的世界物品可以携带隐藏数据(userData),比如一个锅铲可以标记"有油"。 - 这个函数就是方便地读取这些嵌套数据,不用每次都写一堆 .get()。 - - 例子: - itemDict = { - "newItemName": "rtdd:spatula", - "userData": {"rtdd": {"oil": True}} - } - getUserDataField(itemDict, 'rtdd', 'oil') → 返回 True - - 如果中间某一层不存在,会自动创建空 dict,不会报错。 - """ - # 确保 userData 字段存在 - itemDict['userData'] = itemDict.get('userData', {}) - if itemDict.get('userData') is None: - itemDict['userData'] = {} - - # 一层层往下钻,路径上不存在的 key 自动创建空 dict - node = itemDict['userData'] - for key in keys: - node[key] = node.get(key, {}) - node = node[key] - return node - - -# ================================================================================ -# 烹饪引擎主类 -# ================================================================================ - -class CookingService(BlueFoxServerSystem): - """ - 通用烹饪引擎 - - 【核心数据结构】 - stirData = { - (维度ID, x, y, z): { # 用方块坐标当 key,每个方块独立 - "count": 整数, # 已经翻炒了多少次(比如翻了3次) - "lastTime": 浮点数, # 上次翻炒的时间戳(用于冷却判断) - "finished": 布尔值, # 是否已经熟了(熟了才能出锅) - "dropIfDone": [物品名列表], # 熟了拆掉方块时掉什么 - "dropIfNot": [物品名列表], # 没熟拆掉方块时掉什么 - } - } - - 这个数据同时存在两处: - 1. 内存(self.stirData)—— 快,关服就没了 - 2. 方块实体数据(blockEntityData)—— 慢一点,但关服重启后还在 - 每次操作都会同步更新两处,保证重启不丢进度 - - 工具方块(箭桶、书架、药水架等)的记录数据已拆分到 BlockSwitchService, - 本类只负责做菜配方(RECIPES)。 - """ - - def __init__(self, namespace, systemName): - """ - 初始化:清空翻炒数据、注册事件监听、构建统一配方字典 - """ - super(CookingService, self).__init__(namespace, systemName) - print "===== CookingService init =====" - self.stirData = {} # 内存中的翻炒数据字典 - self._cancelItemUse = {} # 将要取消下一次物品使用的玩家ID集合(防止喝药水等) - self.ListenEvent() # 注册游戏事件监听 - - # ---- 构建做菜配方字典(O(1) 查找) ---- - # 只含 RECIPES(做菜配方),工具方块切换已拆到 BlockSwitchService - # key = (方块名, 物品名),value = 配方dict - # 这样查找时不用遍历整个列表,直接 dict[key] 就能拿到,速度飞快 - self.allRecipes = {} - for recipe in RECIPES: - key = (recipe["source"], recipe.get("item")) - self.allRecipes[key] = recipe - - # ---- 构建做菜方块名集合(O(1) 快速拦截,第一道过滤) ---- - # 事件进来先判断方块名在不在这个集合里,不在直接 return, - # 这样工具方块的右键事件根本不会进到本系统的字典查找 - # 注意:跳过已由 BarbecueService 接管的烧烤方块,避免做菜系统抢事件 - self.cookBlockSet = set() - for recipe in RECIPES: - if recipe["source"] in _BARBECUE_OWNED: - continue - self.cookBlockSet.add(recipe["source"]) - - def Destroy(self): - """ - 系统销毁时取消所有事件监听,防止内存泄漏 - """ - print "===== CookingService Destroy =====" - self.UnListenEvent() - - # ============================================================================ - # 事件注册与注销 - # ============================================================================ - - def ListenEvent(self): - """ - 注册三个游戏事件: - 1. ServerBlockUseEvent —— 玩家右键方块(做菜、翻炒、加油等) - 2. ServerPlayerTryDestroyBlockEvent —— 玩家拆方块(掉落食材) - 3. ServerItemTryUseEvent —— 玩家尝试使用物品(拦截喝药水等默认行为) - """ - # 事件1:玩家右键方块 - self.ListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerBlockUseEvent", self, self.OnBlockUse) - # 事件2:玩家尝试拆方块 - self.ListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerPlayerTryDestroyBlockEvent", self, self.OnDestroy) - # 事件3:玩家尝试使用物品(拦截喝药水) - self.ListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerItemTryUseEvent", self, self.OnItemTryUse) - - def UnListenEvent(self): - """ - 注销事件监听,和 ListenEvent 一一对应 - """ - self.UnListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerBlockUseEvent", self, self.OnBlockUse) - self.UnListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerPlayerTryDestroyBlockEvent", self, self.OnDestroy) - self.UnListenForEvent(serverApi.GetEngineNamespace(), - serverApi.GetEngineSystemName(), - "ServerItemTryUseEvent", self, self.OnItemTryUse) - - # ============================================================================ - # 主入口:玩家右键方块 - # ============================================================================ - - def OnBlockUse(self, args): - """ - 玩家右键方块时触发,是整个做菜流程的入口。 - - 流程: - 1. 拿到被右键的方块名、玩家ID、方块坐标 - 2. 先按方块名判断是不是本系统管辖的做菜方块(O(1) set 拦截) - - 不是 → 直接 return(这是工具方块的右键,交给 BlockSwitchService 处理) - 3. 看玩家手里拿了什么物品 - 4. 拿着"方块名+手里物品名"去做菜字典里 O(1) 查找 - 5. 命中配方 → 查底座 → 执行做菜逻辑(翻炒/替换) - - args 是网易API传过来的事件参数,包含: - - blockName: 被右键的方块名字(如 "rtdd:wok") - - playerId: 右键的玩家ID - - x, y, z: 方块坐标 - """ - # ---- 第一步:提取事件参数 ---- - blockName = args.get("blockName") # 被右键的方块名 - playerId = args.get("playerId") # 谁右键的 - x, y, z = args.get("x"), args.get("y"), args.get("z") # 方块坐标 - pos = (x, y, z) # 坐标打包成元组 - dim = comp.CreateDimension(playerId).GetEntityDimensionId() # 玩家在哪个维度(主世界/下界/末地) - key = (dim, x, y, z) # 完整的唯一标识:维度+坐标 - - # ---- 第二步:O(1) 方块名拦截 ---- - # 只有做菜方块的右键才归本系统处理;工具方块直接放过,交给 BlockSwitchService - if blockName not in self.cookBlockSet: - return - - # ---- 第三步:拿到玩家手里拿的物品 ---- - itemDict = self.getCarriedItem(playerId) - # itemDict 可能是 None(空手),也可能是 dict(手里有东西) - # dict 格式:{"newItemName": "rtdd:spatula", "count": 1, "userData": {...}} - - # ---- 第四步:查做菜配方(O(1) 字典查找) ---- - recipe = self.findRecipe(blockName, itemDict) - if not recipe: - # 方块是烹饪方块,但当前组合没有匹配的配方(比如手里物品不对)→ 不拦截 - return - - # 找到配方后,取消默认行为(如喝药水、吃食物等),由本 Mod 全权接管 - args['cancel'] = True - # 同时标记该玩家下一次物品使用事件也要取消,防止喝药水等默认行为 - self._cancelItemUse[playerId] = True - - # ---- 第五步:加载翻炒历史数据到内存 ---- - # 这样 handleStir 里直接从 self.stirData 取就行 - self._loadBlockDataToMemory(key, playerId, pos, dim, recipe) - - # ---- 底座检查:锅下面必须有灶台/营火 ---- - if not self.checkBaseBlock(recipe, playerId, pos, dim): - return - - # ---- 第六步:以下为做菜配方逻辑 ---- - - # 内存中已有数据(_loadBlockDataToMemory 已加载),直接用 - stirInfo = self.stirData.get(key, {}) - - # ---- 根据配方类型判断 ---- - # needFinished=True 的配方 → 需要先翻炒熟了才能操作(比如出锅) - # needFinished=False 的配方 → 只能对没熟的进行操作(比如继续加油) - if recipe.get("needFinished") is True and not stirInfo.get("finished"): - # 配方要求"已熟",但当前状态是"没熟" → 不执行 - return - if recipe.get("needFinished") is False and stirInfo.get("finished"): - # 配方要求"没熟",但当前状态是"已熟" → 不执行 - return - - # ---- 分发到不同的处理逻辑 ---- - if recipe.get("stirCount"): - # 这个配方有 stirCount 字段 → 需要翻炒,走翻炒流程 - self.handleStir(key, recipe, playerId, pos, dim, itemDict) - return - - # 没有 stirCount → 普通替换流程(比如加油、加水、盖盖) - self.executeRecipe(recipe, playerId, pos, dim, itemDict, key) - - # ============================================================================ - # 拦截物品使用事件(防止喝药水等默认行为) - # ============================================================================ - - def OnItemTryUse(self, args): - playerId = args.get("playerId") - if self._cancelItemUse.pop(playerId, False): - args['cancel'] = True - - # ============================================================================ - # 配方匹配(O(1) 字典查找) - # ============================================================================ - - def findRecipe(self, blockName, itemDict): - """ - 在统一字典中 O(1) 查找匹配的配方。 - - 匹配条件: - 1. 先精确匹配 (方块名, 物品名) - 2. 如果没找到,尝试匹配 (方块名, None) —— 空手也能触发的规则 - - 返回:匹配到的配方 dict,找不到返回 None - """ - # 提取玩家手里物品的名字(空手时 itemName 为 None) - itemName = itemDict.get("newItemName") if itemDict else None - - # 精确匹配:(方块名, 物品名) - recipe = self.allRecipes.get((blockName, itemName)) - if recipe: - return recipe - - # 空手匹配:(方块名, None) - recipe = self.allRecipes.get((blockName, None)) - if recipe: - return recipe - - return None - - # ============================================================================ - # 配方执行(普通替换类型) - # ============================================================================ - - def executeRecipe(self, recipe, playerId, pos, dim, itemDict, key): - """ - 执行一个"普通替换"类型的配方。 - 这种配方不需要翻炒,直接消耗物品、替换方块、给奖励。 - - 典型场景: - - 空炒锅 + 锅铲 → 倒了油的炒锅(加油) - - 倒了油的炒锅 + 食材 → 正在炒的炒锅(下菜) - - 空架锅 + 水桶 → 加了水的架锅(加水) - - 流程: - 1. 检查前置条件(下面有没有底座、物品有没有油标签等) - 2. 消耗玩家手里的物品 - 3. 如果需要去油,去掉物品上的油标签 - 4. 替换方块(比如从"空炒锅"变成"倒了油的炒锅") - 5. 如果需要给玩家物品,塞进背包 - """ - # ---- 第一步:检查前置条件 ---- - if not self.checkConditions(recipe, playerId, pos, dim, itemDict): - # 条件不满足(比如下面没有灶台),什么都不做 - return - - # ---- 第二步:消耗物品 ---- - if recipe.get("consume", 1) > 0: - # consume 默认是 1,表示消耗 1 个物品 - # 如果 consume=0 表示不消耗(比如锅盖只是点一下,不消耗锅盖本身) - self.consumeItem(playerId, itemDict, recipe.get("consume", 1)) - - # ---- 第三步:如果有 needOil 标记,去掉物品上的油标签 ---- - if recipe.get("needOil"): - self.removeOil(itemDict, playerId) - - # ---- 第四步:替换方块 ---- - if recipe.get("target"): - # target 是目标方块名,比如 "rtdd:oilpan"(倒了油的煎锅) - self.replaceBlock(pos, dim, recipe["target"], playerId) - # 方块变了,旧方块的翻炒数据也要清除 - self.clearStirData(key, playerId, pos, dim) - - # ---- 第五步:给玩家奖励物品 ---- - if recipe.get("giveItem"): - self.giveItem(playerId, recipe["giveItem"]) - - # ============================================================================ - # 翻炒处理 - # ============================================================================ - - def handleStir(self, key, recipe, playerId, pos, dim, itemDict): - """ - 处理需要"翻炒"的配方。 - - 翻炒类配方的特点: - - 玩家右键一次 = 翻一次 - - 有冷却时间(stirCd),防止连点器秒熟 - - 翻够次数(stirCount)后才算"熟" - - 熟了之后可以继续右键"出锅"(变成成品菜) - - 流程: - 1. 从内存取翻炒进度(_loadBlockDataToMemory 已提前加载) - 2. 检查冷却时间,没冷却好就忽略 - 3. 翻炒次数+1,更新进度 - 4. 给玩家发进度提示("翻炒中... 3/10") - 5. 翻够了 → 标记 finished=True,或者直接替换方块 - """ - now = time.time() - - # ---- 第一步:从内存取翻炒数据(入口已通过 _loadBlockDataToMemory 加载) ---- - data = self.stirData.get(key) - if not data: - # 全新的翻炒,初始化数据 - data = { - "count": 0, - "lastTime": 0.0, - "finished": False, - "dropIfDone": recipe.get("dropIfDone", []), - "dropIfNot": recipe.get("dropIfNot", []), - } - else: - # 兜底防止 None 值(方块数据可能不完整) - for field, default in [("lastTime", 0.0), ("count", 0), ("finished", False)]: - if data.get(field) is None: - data[field] = default - self.stirData[key] = data - - # ---- 第二步:冷却检查 ---- - # 防止玩家狂点右键,一秒翻100次直接熟了 - # stirCd 默认 1.0 秒,即两次翻炒之间至少间隔 1 秒 - if now - data["lastTime"] < recipe.get("stirCd", 1.0): - # 还在冷却中,这次点击被忽略 - return - - # ---- 第三步:翻炒次数+1 ---- - data["count"] += 1 - data["lastTime"] = now - self.stirData[key] = data - # 同步保存到方块实体数据,防止服务器重启丢失 - self.saveStirData(playerId, pos, dim, data) - - # ---- 第四步:给玩家发进度提示 ---- - comp.CreateMsg(playerId).NotifyOneMessage( - playerId, "翻炒中... %s/%s" % (data["count"], recipe["stirCount"])) - # 玩家会看到 "翻炒中... 3/10" 这样的提示 - - # ---- 第五步:判断是否翻够了 ---- - if data["count"] >= recipe["stirCount"]: - # 翻够了!根据 onDone 字段决定后续行为 - if recipe.get("onDone") == "finish": - # 标记为"熟了",方块不变,玩家可以继续右键出锅 - data["finished"] = True - self.stirData[key] = data - self.saveStirData(playerId, pos, dim, data) - if recipe.get("doneMsg"): - # 发完成提示,比如 "菜炒好了!" - comp.CreateMsg(playerId).NotifyOneMessage(playerId, recipe["doneMsg"]) - elif recipe.get("target"): - # 有 target 字段 → 直接替换方块(比如翻炒到一定程度自动变成下一个状态) - self.replaceBlock(pos, dim, recipe["target"], playerId) - self.clearStirData(key, playerId, pos, dim) - - # ============================================================================ - # 底座检查(入口统一拦截) - # ============================================================================ - - def checkBaseBlock(self, recipe, playerId, pos, dim): - """ - 检查锅下面有没有合法的底座(灶台或营火)。 - - 优先级: - 1. 配方里明确写了 "below" 字段 → 用配方的值 - - below=[] 表示不需要底座,直接通过 - - below=["xxx"] 表示必须是这些方块之一 - 2. 配方没写 "below" → 调用 inferBaseBlock 自动推断 - - 大多数烹饪方块默认需要灶台(BELOW_STOVE) - - 架锅系列需要营火(BELOW_CAMPFIRE) - - 手工工具(榨汁机、搅拌器等)不需要底座 - - 返回 True=底座合法/不需要底座,False=底座不合法 - """ - # 配方显式指定了 below - if "below" in recipe: - required = recipe["below"] - if not required: # 空列表 = 不需要底座 - return True - else: - # 自动推断 - required = inferBaseBlock(recipe["source"]) - if not required: # 推断结果为空 = 不需要底座 - return True - - # 检查下面一格方块 - belowPos = (pos[0], pos[1] - 1, pos[2]) - try: - belowBlock = comp.CreateBlockInfo(playerId).GetBlockNew(belowPos, dim) - if belowBlock.get("name") in required: - return True - except: - pass - - # ---- 底座不通过,给玩家提示 ---- - if required == BELOW_CAMPFIRE: - tip = "§c架锅下面需要放一个营火,才能做饭!" - else: - tip = "§c锅下面需要放一个灶台(点燃的炉灶),才能做饭!" - comp.CreateMsg(playerId).NotifyOneMessage(playerId, tip) - return False - - # ============================================================================ - # 条件检查 - # ============================================================================ - - def checkConditions(self, recipe, playerId, pos, dim, itemDict): - """ - 检查配方的前置条件是否满足。 - - 目前只检查 needOil:玩家手里的物品必须带有油标签。 - 底座检查已移到入口 checkBaseBlock 统一处理。 - """ - # ---- 检查物品是否有油标签 ---- - if recipe.get("needOil") and itemDict: - if not self.getItemOil(itemDict): - return False - - # 所有条件都通过了 - return True - - # ============================================================================ - # 工具方法:获取玩家手中物品 - # ============================================================================ - - def getCarriedItem(self, playerId): - """ - 获取玩家主手(右手)拿的物品。 - - 返回格式: - {"newItemName": "rtdd:spatula", "count": 1, "newAuxValue": 0, "userData": {...}} - 空手返回 None。 - - 注意区分: - - CARRIED = 主手(右手) - - OFFHAND = 副手(左手) - - 这里只取主手 - """ - itemComp = comp.CreateItem(playerId) - return itemComp.GetPlayerItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0) - - # ============================================================================ - # 工具方法:消耗物品 - # ============================================================================ - - def consumeItem(self, playerId, itemDict, amount=1): - """ - 消耗玩家主手物品的指定数量。 - - 如果数量不够 → 清空主手 - 如果数量够 → 减少对应数量 - - 重要:SetInvItemNum 的参数是背包槽位索引(int),不是 ItemPosType 枚举。 - """ - if itemDict is None: - return - count = itemDict.get("count", 0) - if count <= amount: - # 数量不够或刚好用完 → 清空主手 - comp.CreateItem(playerId).SetEntityItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - {"itemName": "minecraft:air", "count": 0, "auxValue": 0}) - else: - # 数量够 → 减少 amount 个 - itemDict["count"] = count - amount - comp.CreateItem(playerId).SetEntityItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - {"itemName": itemDict["newItemName"], - "count": itemDict["count"], - "auxValue": itemDict.get("newAuxValue", 0)}) - - # ============================================================================ - # 工具方法:替换方块 - # ============================================================================ - - def replaceBlock(self, pos, dim, newBlockName, playerId, aux=None): - """ - 把指定位置的方块替换成新方块。 - - 参数: - pos: (x, y, z) 元组 - dim: 维度ID - newBlockName: 新方块的完整ID,如 "rtdd:oilpan" - playerId: 玩家ID(用于创建组件) - aux: 方块附加值(朝向)。None=自动继承旧方块的朝向,数字=强制指定 - - 对照 BlockBlock.py 的标准写法: - - 使用命名参数 - - oldBlockHandling=0 表示直接替换(不保留旧方块数据) - - aux 默认继承旧方块朝向,这样替换后不会转方向 - """ - # 如果没指定 aux,自动读取旧方块的朝向并继承 - if aux is None: - try: - oldBlock = comp.CreateBlockInfo(playerId).GetBlockNew(pos, dim) - aux = oldBlock.get("aux", 0) - except: - aux = 0 - comp.CreateBlockInfo(playerId).SetBlockNew( - pos, - blockDict={"name": newBlockName, "aux": aux}, - oldBlockHandling=0, - dimensionId=dim) - - # ============================================================================ - # 工具方法:给玩家物品 - # ============================================================================ - - def giveItem(self, playerId, itemName, count=1): - """ - 往玩家背包里塞一个物品。 - 如果背包满了,物品会掉在地上。 - """ - comp.CreateItem(playerId).SpawnItemToPlayerInv( - {"itemName": itemName, "count": count, "auxValue": 0}, playerId) - - # ============================================================================ - # 油标签操作 - # ============================================================================ - - def getItemOil(self, itemDict): - """ - 读取物品上的油标签。 - - 物品的 userData 里有一个 rtdd.oil 字段, - 为 True 表示"这个锅铲上有油",可以在锅里倒油。 - - 这是纯本地 dict 操作,不调网易API,非常快。 - """ - try: - return getUserDataField(itemDict, 'rtdd').get('oil', False) - except: - return False - - def removeOil(self, itemDict, playerId): - """ - 去掉物品上的油标签,并同步回玩家手里的物品。 - - 流程: - 1. 把本地 dict 里的 oil 标记改为 False - 2. 调用 SetEntityItem 把修改后的 userData 写回玩家手里的物品 - - 注意:SetEntityItem 会覆盖整个物品数据, - 所以必须把 itemName、count、auxValue 都原样传回去。 - """ - try: - # 本地修改 oil 标记 - getUserDataField(itemDict, 'rtdd')['oil'] = False - # 同步回玩家手里的物品 - itemComp = comp.CreateItem(playerId) - itemComp.SetEntityItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - {"itemName": itemDict["newItemName"], - "count": itemDict.get("count", 1), - "auxValue": itemDict.get("newAuxValue", 0), - "userData": itemDict.get("userData", {})}) - except: - pass - - # ============================================================================ - # 通用持久化帮手(避免重复的 try/except/Get/Set 写法) - # ============================================================================ - - def _writeBlockData(self, dim, pos, **kwargs): - """ - 通用方块实体数据写入。 - - GetBlockEntityData 返回的 BlockEntityData 对象支持 [] 操作, - 直接赋值即可持久化。官方没有 SetBlockEntityData 方法。 - """ - try: - blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) - if blockData is None: - return - for key, value in kwargs.items(): - blockData[key] = value - except Exception as e: - pass - - # ============================================================================ - # 统一数据加载入口(玩家右键方块时先把方块数据恢复到内存) - # ============================================================================ - - def _loadBlockDataToMemory(self, key, playerId, pos, dim, recipe): - """ - 在确定玩家右键命中了一个做菜配方后,立刻把方块里存的翻炒进度加载到内存。 - - 这样 handleStir 里就不用自己加载了,直接从 self.stirData 取就行。 - """ - if key not in self.stirData: - stirInfo = self.loadStirData(playerId, pos, dim, recipe) - if stirInfo: - self.stirData[key] = stirInfo - - # ============================================================================ - # 翻炒数据持久化(存方块里,不存JSON文件) - # ============================================================================ - - def loadStirData(self, playerId, pos, dim, recipe): - """ - 从方块的实体数据里读取翻炒进度。 - - 为什么要把翻炒进度存在方块里? - → 因为服务器重启后内存就没了,存在方块实体数据里可以持久化。 - → 玩家重启服务器后,之前炒了一半的菜还能继续炒。 - - 存储的三个字段(存在方块实体数据中): - rtdd_sc = stir count → 翻炒次数 - rtdd_slt = stir last time → 上次翻炒时间戳 - rtdd_sf = stir finished → 是否已熟 - - 重要:GetBlockEntityData 返回的是 BlockEntityData 对象,不是普通 dict! - 必须用方括号 [] 取值,不能用 .get(),否则会抛异常。 - """ - try: - blockData = blockEntityDataComp.GetBlockEntityData(dim, pos) - stirCount = blockData["rtdd_sc"] # 翻炒次数 - return { - "count": stirCount, - "lastTime": blockData["rtdd_slt"], # 上次翻炒时间 - "finished": blockData["rtdd_sf"], # 是否熟了 - # dropIfDone 和 dropIfNot 从配方里取,不存方块数据中 - "dropIfDone": recipe.get("dropIfDone", []), - "dropIfNot": recipe.get("dropIfNot", []), - } - except: - # 方块可能没有实体数据(从没被翻炒过),返回空 dict - return {} - - def saveStirData(self, playerId, pos, dim, data): - """ - 把翻炒进度写入方块实体数据。 - """ - self._writeBlockData(dim, pos, - rtdd_sc=data["count"], - rtdd_slt=data["lastTime"], - rtdd_sf=data["finished"]) - - def clearStirData(self, key, playerId, pos, dim): - """ - 清除方块上的翻炒数据(内存+方块实体数据)。 - """ - self.stirData.pop(key, None) - self._writeBlockData(dim, pos, rtdd_sc=0, rtdd_slt=0.0, rtdd_sf=False) - - # ============================================================================ - # 拆方块处理 - # ============================================================================ - - def OnDestroy(self, args): - """ - 玩家拆方块时触发。 - - 如果这个方块有翻炒数据(说明之前有人在炒菜): - - 熟了(finished=True)→ 掉落"熟的东西"(dropIfDone) - - 没熟(finished=False)→ 掉落"生的东西"(dropIfNot) - - 这样玩家拆锅时不会血本无归——炒了一半的菜至少能拿回食材。 - - args 参数: - - playerId: 拆方块的玩家 - - x, y, z: 被拆的方块坐标 - """ - playerId = args.get("playerId") - x, y, z = args.get("x"), args.get("y"), args.get("z") - dim = comp.CreateDimension(playerId).GetEntityDimensionId() - key = (dim, x, y, z) - - # ---- 先尝试从内存取翻炒数据 ---- - data = self.stirData.get(key) - if not data: - # 内存没有 → 尝试从方块实体数据加载(服务器重启过的情况) - data = self.loadStirData(playerId, (x, y, z), dim, {}) - if not data: - # 完全没有翻炒数据 → 不是烹饪方块,正常拆 - return - - # ---- 根据是否熟了决定掉落什么 ---- - if data.get("finished"): - dropItems = data.get("dropIfDone", []) # 熟了 → 掉熟的东西 - else: - dropItems = data.get("dropIfNot", []) # 没熟 → 掉生的东西 - - # ---- 逐个生成掉落物 ---- - for itemName in dropItems: - itemDict = {"itemName": itemName, "count": 1, "auxValue": 0} - # 掉落物生成在方块上方 0.5 格的位置,让它自然掉到地上 - self.CreateEngineItemEntity(itemDict, dim, (x, y + 0.5, z)) - - # ---- 清除数据 ---- - self.clearStirData(key, playerId, (x, y, z), dim) \ No newline at end of file diff --git a/resource_pack_Are13Lvd/texts/zh_CN.lang b/resource_pack_Are13Lvd/texts/zh_CN.lang index 04dac8f..c80d32a 100644 --- a/resource_pack_Are13Lvd/texts/zh_CN.lang +++ b/resource_pack_Are13Lvd/texts/zh_CN.lang @@ -1029,7 +1029,7 @@ tile.rtdd:sales_box_watermelon.name=售卖盒(西瓜) tile.rtdd:rawnoodlesoup.name=汤锅_65(生面汤) tile.rtdd:stove.name=炉灶(炉灶_空) tile.rtdd:b_16.name=土豆盒_1_禁用 -tile.rtdd:b_15.name=木条_1 +tile.rtdd:b_15.name=木条 tile.rtdd:b_14.name=木桶_1_禁用 tile.rtdd:b_12.name=西瓜盒_1_禁用 tile.rtdd:fried_porkwith_potatoes.name=炒锅_64(土豆炒猪肉_生) diff --git a/tuilun/乡野食物转化关系.txt b/tuilun/乡野食物转化关系.txt index 05e1339..dd7b5e4 100644 --- a/tuilun/乡野食物转化关系.txt +++ b/tuilun/乡野食物转化关系.txt @@ -10,8 +10,8 @@ 一、章鱼小丸子 ======================================== 1. 章鱼小丸子(完整) -> 章鱼小丸子(半份) -转换条件:[手持 筷子/刀叉 右键 进行分割] -机制: 手持筷子右键,分成半份 +转换条件:[右键 吃 进行转换] +机制: 点击右键,转换为半份的章鱼小丸子 (属于吃的东西,后续实现) ======================================== 二、原版食物(静态成品盘) @@ -19,33 +19,5 @@ plate_16(南瓜派盘)、plate_17(生鱼片)、plate_18(西瓜盘)、plate_20(面包盘)、plate_21(曲奇盘)、plate_4(熟鸡肉盘) 以上均为静态成品,无转化关系 -======================================== -三、烤制·串烧(与烧烤分类一致,详见《烧烤转化关系.txt》) -======================================== -2. 牛肉串(生) -> 牛肉串(半熟) -> 牛肉串(熟) -转换条件:[放到烧烤架,计时自动转换] -机制: 手持牛肉串_生右键烧烤架,计时约60秒升一级,共两级烤熟 - -3. 羊肉串(生) -> 羊肉串(半熟) -> 羊肉串(熟) -转换条件:[放到烧烤架,计时自动转换] -机制: 手持羊肉串_生右键烧烤架,计时约60秒升一级,共两级烤熟 - -4. 烤蔬菜串(生) -> 烤蔬菜串(半熟) -> 烤蔬菜串(熟) -转换条件:[放到烧烤架,计时自动转换] -机制: 手持烤蔬菜串_生右键烧烤架,计时约60秒升一级,共两级烤熟 - -5. 烤香菇串(生) -> 烤香菇串(半熟) -> 烤香菇串(熟) -转换条件:[放到烧烤架,计时自动转换] -机制: 手持烤香菇串_生右键烧烤架,计时约60秒升一级,共两级烤熟 - -6. 烤鸡/烤乳猪/烤鱼系列 -转换条件:[与烧烤分类一致,详见《烧烤转化关系.txt》] - -======================================== -四、其他分组说明 -======================================== -- 汤面分组(food_02_rice_noodle): 胡萝卜蔬菜面、胡萝卜蔬菜牛肉面、鸡蛋面、香菇面、熟面条、 - 蛋花面、蛋花面(加葱花)、猪排蔬菜面、羊排蔬菜面、牛骨面、小鸡炖蘑菇面、猪排拉面、蔬菜面、蔬菜鱼片面 - 该分组与汤锅页共用,面条类成品静态方块,无后续转换 -- 盖饭分组(food_11_rice_meal): 辣子鸡丁盖饭、鳕鱼盖饭、香菇滑鸡盖饭、麻婆豆腐盖饭 - 该分组与炒锅页共用,成品静态方块,无后续转换 +todo 转换: 拿原版对应食物 右键盘子 进行转换 + 生鱼片 拿 鳕鱼鲑鱼热带鱼右键都可以 diff --git a/tuilun/全部功能做了什么.txt b/tuilun/全部功能做了什么.txt index 89ad916..caed8b6 100644 --- a/tuilun/全部功能做了什么.txt +++ b/tuilun/全部功能做了什么.txt @@ -185,3 +185,48 @@ 五、布料已按标注禁用 [已处理] - 售卖盒(黄绿布料 clothbox_1)、售卖盒(棕色布料 clothbox_2): 名字带"禁用", 已调去 禁用(xy_jinyong) 标签, 移出市场分组, 旧切换规则已移除 + +######################################## +【家具家私】(xy_furniture) 2026-09-03 +######################################## +(旧 BlockSwitchService 已废弃, 全部 7 个功能统一由 xiangyemod/jiaju 的 +FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher) + +一、箭桶 (arrowbarrel_0 无箭 / arrowbarrel_1 有箭) +- 存箭: 手持箭(普通箭/药水箭)右键, 批量存入手中所有箭, 至多32只, count记录 + (类型/药水效果aux不符不能混存, 记录写方块实体数据 rtdd_swt=count, 退出重进不丢) [已实现] +- 取箭: 空手右键, 一次性取回方块记录的全部箭(数量+类型+药水效果aux) [已实现] + +二、水槽 (flume_0~5) +- 加水: 空手右键空槽 → 满水 [已实现] +- 取水: 手持空水桶右键满水 → 空槽 + 返还装满水的水桶 [已实现] +- 放脏盘子: 满水起手持脏盘子逐个放入(最多4个), 消耗1个 [已实现] +- 取脏盘子: 空手右键逐个取回 [已实现] + +三、盘子架 (trayracks_1 空 ~ trayracks_6 五个) +- 放盘子: 手持盘子逐个放入(最多5个), 消耗1个 [已实现] +- 取盘子: 空手右键逐个取回 [已实现] + +四、书柜 (bookcase 系列, 后放先取, 至多13本) +- 放书: 手持书/附魔书右键逐个放入, 消耗1本, stack记录完整物品信息(附魔不丢, + 字段 rtdd_swt=stack, 退出重进不丢) [已实现] +- 取书: 空手右键后放先取(LIFO) [已实现] + +五、厨具架 (kitchenwarerack 系列, 纯切换, 方块状态即组合) +- 放入: 手持 锅铲/锅勺/菜刀/炒锅 右键空架/未满架 → 消耗1个 → 形态变为对应组合 [已实现] + (空+锅铲→单锅铲, 空+锅勺→单锅勺, 空+菜刀→单菜刀, 空+炒锅→单炒锅; + 单锅铲+锅铲→双锅铲, 单锅铲+锅勺→锅铲+锅勺, 单锅勺+锅勺→双锅勺, + 单炒锅+菜刀→炒锅+菜刀, 单菜刀+菜刀→双菜刀, 单菜刀+锅铲→菜刀+锅铲, + 单菜刀+锅勺→菜刀+锅勺) +- 取回: 空手右键 → 掉落对应厨具 → 形态退回上一组合/空 [已实现] + +六、古式唱片机 (b_108 无碟 / b_109 有碟) +- 放入: 手持任意原版唱片(minecraft:music_disc_*)右键无碟 → 有碟, 消耗1个, 记录唱片 [已实现] +- 取回: 空手右键 → 无碟 + 掉落该唱片(原样返还, 记录在方块实体数据, 退出重进不丢) [已实现] +- 注: 放入后播放对应唱片曲目 待后续实现 【未做】 + +七、垃圾桶 (storage_buckets 关闭 / rubbish_bin_2 打开 / b_160 有垃圾) +- 打开: 右键垃圾桶(空手/手持均可) → 打开桶盖(不消耗物品) [已实现] +- 扔垃圾: 打开时手持任意物品右键 → 变为 有垃圾 状态 + 清空主手物品 [已实现] +- 关闭: 右键(空手/手持均可) 打开/有垃圾 → 关闭桶盖 [已实现] + diff --git a/tuilun/全部功能没做什么.txt b/tuilun/全部功能没做什么.txt index 2dafe65..a0399b8 100644 --- a/tuilun/全部功能没做什么.txt +++ b/tuilun/全部功能没做什么.txt @@ -49,6 +49,11 @@ 不会出现"取下"成功提示。这是设计如此, 不是遗漏。 烤熟时已有完成提示 "§e烤鲑鱼烤熟了!" +五、烤串(熟) 直接右键食用 +- 方块: 熟牛肉串(beefkebabs_3)、熟羊肉串(lambkebabs_3)、熟蔬菜串(roasted_vegetables_3)、 + 熟香菇串(roastedmushrooms_3) +- 未做原因: 食用部分由统一的"总食用功能"汇总实现, 本次不实现 + (烧烤转化关系.txt 已用 todo 标注 "熟的烤串也都可以直接右键食用") ######################################## 【死亡生物】(xy_deadmob) @@ -68,3 +73,23 @@ - 方块: fishingnet(网(渔网)) - 设想: 放在水中 → 一段时间后自动捕鱼 → 鱼以掉落物形式出现在渔网上方 - 未做原因: 转化文档 todo 已标注"后续实现" (方块工具转化关系.txt 唯一一条 todo) + + +######################################## +【家具家私】(xy_furniture) +######################################## + +一、古式唱片机-播放曲目 +- 方块: b_109(古式唱片机有碟) +- 设想: 放入唱片后播放对应唱片曲目 +- 未做原因: 放/取碟已实现, 播放曲目标注"后续实现" + (家具家私转化关系.txt 六、古式唱片机 todo 已标注) + +二、木条获得 +- 设想: 切石机 放入任何原版木板 → 获得4个木条 +- 未做原因: 未实现 (家具家私转化关系.txt 静态段 todo 已标注) + +三、双人床-双人睡眠 +- 方块: b_35(双人床) +- 设想: 床, 但是可以两个人一起睡 +- 未做原因: 未实现 (家具家私转化关系.txt 静态段 todo 已标注) diff --git a/tuilun/家具家私转化关系.txt b/tuilun/家具家私转化关系.txt index 79e6335..fd2bb73 100644 --- a/tuilun/家具家私转化关系.txt +++ b/tuilun/家具家私转化关系.txt @@ -2,176 +2,197 @@ 【家具家私】(xy_furniture) 转化关系 ======================================== 说明: -- 家具家私分类无分组,按标识自动排序 -- 部分家具有交互转换(箭桶/水槽/盘子架/书柜/壁炉/唱片机/垃圾桶/碗柜) -- 其余为静态装饰家具,无转换 +- 家具家私分类方块: 箭桶、水槽、盘子架、书柜、厨具架、唱片机、垃圾桶 系列 +- 有交互转换的: 箭桶(存/取箭)、水槽(加水/取水/放洗脏盘/取脏盘)、 + 盘子架(放/取盘)、书柜(放/取书)、厨具架(放/取厨具) +- 【方块存储物品实现】(FurnitureService 两种记录, 写入方块实体数据, 退出重进不丢): + ① count记录(箭桶): 记录一种物品+数量, 字段 rtdd_swt=count / rtdd_swc=数量 / + rtdd_swi=物品名 / rtdd_swa=aux值 + ② stack记录(书柜): 后放先取堆栈, 记录完整物品信息(含userData, 附魔不丢), + 字段 rtdd_swt=stack / rtdd_sws=堆栈列表 +- 【实现状态】: 箭桶/水槽/盘子架/书柜/厨具架/古式唱片机/垃圾桶 全部已实现 + (统一由 xiangyemod/jiaju/FurnitureService 处理, 注册到 FeatureDispatcher; + 旧 BlockSwitchService 已废弃); 唱片播放曲目 待后续实现 +- 其余为静态装饰家具, 无转换 ======================================== 一、箭桶(存箭/取箭) + 存储实现: count记录(rtdd_swt=count), 记录一种箭的类型+数量 ======================================== -1. 箭桶_0(无箭) -> 箭桶_1(有箭) -转换条件:[手持 箭(普通箭/药水箭) 右键 进行转换,批量存入手中所有箭,至多32只,方块记录箭类型与数量] -机制: 手持箭右键,批量存入手中所有箭,最多32只,记录类型与数量 +1. 箭桶_0(箭桶无箭) -> 箭桶_1(箭桶有箭) +转换条件:[手持 箭(普通箭/药水箭) 右键 进行转换, 批量存入手中所有箭, 至多32只, + 方块记录是什么箭多少数量] +机制: +- 手持箭右键, 批量存入手中所有箭, 最多32只(maxCount=32) + (如手持64只毒箭右键→存32只手上剩32只; 手持31只→存31只手上清空) +- 只能存一种箭: 方块内已有箭且与手中箭类型不同(物品名 minecraft:arrow / + minecraft:tipped_arrow 及药水效果aux) 时不能混存, 右键无反应 +- 记录: 方块实体数据 rtdd_swt=count / rtdd_swc=数量 / rtdd_swi=箭类型 / + rtdd_swa=药水效果aux, 退出重进不丢 -2. 箭桶_1(有箭) -> 箭桶_0(无箭) -转换条件:[右键 进行转换,一次性取回方块记录的全部箭(类型+数量)] -机制: 空手右键,取回全部箭 +2. 箭桶_1(箭桶有箭) -> 箭桶_0(箭桶无箭) +转换条件:[右键 进行转换, 一次性取回方块记录的全部箭(类型+数量)] +机制: 空手右键, 按记录一次性取回全部箭(数量+类型+药水效果aux), 并清空记录 ======================================== -二、水槽(加水/放脏盘子/取脏盘子) +二、水槽(加水/取水/放洗脏盘/取脏盘) ======================================== -3. 水槽_1(空) -> 水槽_2(满水) +3. 水槽_1(水槽_空) -> 水槽_2(水槽_满水) 转换条件:[右键 进行转换(加水)] -机制: 空手右键,加水 +机制: 空手右键, 加水 -4. 水槽_2(满水) -> 水槽_1(空) -转换条件:[手持 水桶 右键 进行转换,消耗水桶获得装满水的水桶] -机制: 手持水桶右键,水桶变装满水的水桶,取水 +4. 水槽_2(水槽_满水) -> 水槽_1(水槽_空) +转换条件:[手持 水桶 右键 进行转换, 消耗空水桶, 获得装满水的水桶] +机制: 手持空水桶右键, 取水, 消耗空水桶返还装满水的水桶(minecraft:water_bucket) 5. 水槽_2(满水) + 脏盘子 -> 水槽_3(一个脏盘子) -转换条件:[手持 脏盘子 右键 进行转换,脏盘子数量减少] -机制: 手持脏盘子右键,消耗1个,放入脏盘子 +转换条件:[手持 脏盘子 右键 进行转换, 脏盘子数量减少] +机制: 手持脏盘子右键, 消耗1个, 放入脏盘子(需水槽有水才能放) 6. 水槽_3(一个) -> 水槽_4(两个) -转换条件:[手持 脏盘子 右键 进行转换,脏盘子数量减少] -机制: 手持脏盘子右键,消耗1个,放入第二个 +转换条件:[手持 脏盘子 右键 进行转换, 脏盘子数量减少] +机制: 手持脏盘子右键, 消耗1个, 放入第二个 7. 水槽_4(两个) -> 水槽_5(三个) -转换条件:[手持 脏盘子 右键 进行转换,脏盘子数量减少] -机制: 手持脏盘子右键,消耗1个,放入第三个 +转换条件:[手持 脏盘子 右键 进行转换, 脏盘子数量减少] +机制: 手持脏盘子右键, 消耗1个, 放入第三个 8. 水槽_5(三个) -> 水槽_6(四个) -转换条件:[手持 脏盘子 右键 进行转换,脏盘子数量减少] -机制: 手持脏盘子右键,消耗1个,放入第四个 +转换条件:[手持 脏盘子 右键 进行转换, 脏盘子数量减少] +机制: 手持脏盘子右键, 消耗1个, 放入第四个 9. 水槽_6(四个) -> 水槽_5(三个) -转换条件:[右键 进行转换,获得脏盘子] -机制: 空手右键,取回1个脏盘子 +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回1个盘子 10. 水槽_5(三个) -> 水槽_4(两个) -转换条件:[右键 进行转换,获得脏盘子] -机制: 空手右键,取回1个脏盘子 +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回1个盘子 11. 水槽_4(两个) -> 水槽_3(一个) -转换条件:[右键 进行转换,获得脏盘子] -机制: 空手右键,取回1个脏盘子 +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回1个盘子 -12. 水槽_3(一个) -> 水槽_2(满水) -转换条件:[右键 进行转换,获得脏盘子] -机制: 空手右键,取回最后1个脏盘子 +12. 水槽_3(一个) -> 水槽_1(水槽_空) +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回最后1个盘子 ======================================== 三、盘子架(放盘子/取盘子) ======================================== 13. 盘子架_1(空) -> 盘子架_2(一个) -转换条件:[手持 盘子 右键 进行转换,盘子数量减少] -机制: 手持盘子右键,消耗1个,放上盘子 +转换条件:[手持 盘子 右键 进行转换, 盘子数量减少] +机制: 手持盘子右键, 消耗1个, 放上盘子 -14. 盘子架_2(一个) -> 盘子架_3(两个) -转换条件:[手持 盘子 右键 进行转换,盘子数量减少] -机制: 手持盘子右键,消耗1个,放第二个 +14. 盘子架_2(一个) -> 盘子架_3(俩个) +转换条件:[手持 盘子 右键 进行转换, 盘子数量减少] +机制: 手持盘子右键, 消耗1个, 放第二个 -15. 盘子架_3(两个) -> 盘子架_4(三个) -转换条件:[手持 盘子 右键 进行转换,盘子数量减少] -机制: 手持盘子右键,消耗1个,放第三个 +15. 盘子架_3(俩个) -> 盘子架_4(三个) +转换条件:[手持 盘子 右键 进行转换, 盘子数量减少] +机制: 手持盘子右键, 消耗1个, 放第三个 16. 盘子架_4(三个) -> 盘子架_5(四个) -转换条件:[手持 盘子 右键 进行转换,盘子数量减少] -机制: 手持盘子右键,消耗1个,放第四个 +转换条件:[手持 盘子 右键 进行转换, 盘子数量减少] +机制: 手持盘子右键, 消耗1个, 放第四个 17. 盘子架_5(四个) -> 盘子架_6(五个) -转换条件:[手持 盘子 右键 进行转换,盘子数量减少] -机制: 手持盘子右键,消耗1个,放第五个 +转换条件:[手持 盘子 右键 进行转换, 盘子数量减少] +机制: 手持盘子右键, 消耗1个, 放第五个 18. 盘子架_6(五个) -> 盘子架_5(四个) -转换条件:[右键 进行转换,获得盘子] -机制: 空手右键,取回1个盘子 +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回1个盘子 19. 盘子架_5(四个) -> 盘子架_4(三个) -转换条件:[右键 进行转换,获得盘子] -机制: 空手右键,取回1个盘子 +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回1个盘子 -20. 盘子架_4(三个) -> 盘子架_3(两个) -转换条件:[右键 进行转换,获得盘子] -机制: 空手右键,取回1个盘子 +20. 盘子架_4(三个) -> 盘子架_3(俩个) +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回1个盘子 -21. 盘子架_3(两个) -> 盘子架_2(一个) -转换条件:[右键 进行转换,获得盘子] -机制: 空手右键,取回1个盘子 +21. 盘子架_3(俩个) -> 盘子架_2(一个) +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回1个盘子 22. 盘子架_2(一个) -> 盘子架_1(空) -转换条件:[右键 进行转换,获得盘子] -机制: 空手右键,取回最后1个盘子 +转换条件:[右键 进行转换, 获得盘子] +机制: 空手右键, 取回最后1个盘子 ======================================== -四、书柜(放书/取书,后放先取,至多13本) +四、书柜(放书/取书, 后放先取, 至多13本) + 存储实现: stack记录(rtdd_swt=stack), 后放先取堆栈, 保留完整物品信息(含附魔userData) ======================================== 23. 书柜_1(空) -> 书柜_2(1本) -转换条件:[手持 书/附魔书 右键 进行转换,消耗1本] -机制: 手持书右键,消耗1本,放入1本 +转换条件:[手持 书/附魔书 右键 进行转换, 消耗1本] +机制: 手持书(普通书/附魔书)右键, 消耗1本, 放入1本 24. 书柜_2(1本) -> 书柜_3(2本) -> 书柜_4(3本) -> 书柜_5(4本) -> 书柜_6(5本) -> 书柜_7(6本) - -> 书柜_8(7本) -> 书柜_9(8本) -> 书柜_10(9本) -> 书柜_11(10本) -> 书柜_12(11本) -> 书柜_13(12本) -> 书柜_14(13本) -转换条件:[手持 书/附魔书 右键 依次放入,每本消耗1] -机制: 手持书右键逐本放入,共13本(注:书柜_11(10本)为b_196,书柜_12(11本)为bookcase_3) + -> 书柜_8(7本) -> 书柜_9(8本) -> 书柜_10(9本) -> 书柜_11(10本) -> 书柜_12(11本) + -> 书柜_13(12本) -> 书柜_14(13本) +转换条件:[手持 书/附魔书 右键 依次放入, 每本消耗1, 至多13本] +机制: 手持书右键逐本放入, 共13级; 方块记录完整物品信息(附魔书附魔不丢) +方块标识对应: 书柜_1(空)=bookcase, 书柜_2(1本)=bookcase_12, 书柜_3(2本)=bookcase_11, +书柜_4(3本)=bookcase_10, 书柜_5(4本)=bookcase_9, 书柜_6(5本)=bookcase_8, +书柜_7(6本)=bookcase_7, 书柜_8(7本)=bookcase_6, 书柜_9(8本)=bookcase_5, +书柜_10(9本)=bookcase_4, 书柜_11(10本)=b_196, 书柜_12(11本)=bookcase_3, +书柜_13(12本)=bookcase_2, 书柜_14(13本)=bookcase_1 -25. 书柜_14(13本) -> 书柜_13(12本) -> 书柜_12(11本) -> ... -> 书柜_2(1本) -> 书柜_1(空) -转换条件:[右键 进行转换,后放先取,取回书] -机制: 空手右键逐本取回,后放先取 +25. 书柜_14(13本) -> 书柜_13(12本) -> 书柜_12(11本) -> 书柜_11(10本) -> 书柜_10(9本) + -> 书柜_9(8本) -> 书柜_8(7本) -> 书柜_7(6本) -> 书柜_6(5本) -> 书柜_5(4本) + -> 书柜_4(3本) -> 书柜_3(2本) -> 书柜_2(1本) -> 书柜_1(空) +转换条件:[右键 进行转换, 后放先取, 取回书] +机制: 空手右键逐本取回, 后放先取(LIFO), 取回的书保留原物品信息(附魔等) ======================================== -五、壁炉 +五、厨具架(放厨具/取厨具, 至多2件)【已实现】 ======================================== -26. 壁炉(空) -> 壁炉(加柴火) -转换条件:[手持 木条/木块 右键 进行转换,消耗1个] -机制: 手持木条右键,消耗1个,加柴火 - -27. 壁炉(加柴火) -> 壁炉(点燃) -转换条件:[手持 打火石/烈焰弹 右键 进行转换] -机制: 手持打火石右键不消耗/烈焰弹右键消耗1个,点燃 +- 可放厨具: 锅铲(rtdd:spatula)、锅勺(rtdd:potandspoon)、菜刀(rtdd:cleaver)、炒锅(rtdd:wok) +- 放入: 手持厨具右键 厨具架(空/未满) → 放入该厨具, 消耗1个, 厨具架形态变为对应组合 +- 取回: 空手右键 → 取回厨具(后放先取), 厨具架形态退回上一组合/空 +- 厨具架方块状态(方块名称即组合, 一块最多挂2件): + kitchenwarerack = 厨具架(空) + kitchenwareracka_1 = 厨具架(单锅铲) ← 放1把锅铲 + kitchenwareracka_2 = 厨具架(双锅铲) ← 单锅铲 + 锅铲 + kitchenwareracka_3 = 厨具架(锅铲+锅勺) ← 单锅铲 + 锅勺 + kitchenwarerackb_1 = 厨具架(单锅勺) ← 放1把锅勺 + kitchenwarerackb_2 = 厨具架(双锅勺) ← 单锅勺 + 锅勺 + kitchenwarerackc_1 = 厨具架(单炒锅) ← 放1口炒锅 + kitchenwarerackc_2 = 厨具架(炒锅+菜刀) ← 单炒锅 + 菜刀 + kitchenwarerackd_1 = 厨具架(单菜刀) ← 放1把菜刀 + kitchenwarerackd_2 = 厨具架(菜刀+锅铲) ← 单菜刀 + 锅铲 + kitchenwarerackd_3 = 厨具架(双菜刀) ← 单菜刀 + 菜刀 + kitchenwarerackd_4 = 厨具架(菜刀+锅勺) ← 单菜刀 + 锅勺 ======================================== -六、古式唱片机 +六、古式唱片机(放碟/取碟)【已实现】 ======================================== -28. 古式唱片机(无碟) -> 古式唱片机(有碟) -转换条件:[手持 唱片 右键 进行转换,消耗1个] -机制: 手持唱片右键,消耗1个,放入唱片 +- 古式唱片机(无碟) b_108 / 古式唱片机(有碟) b_109 +- 放入: 手持任意原版唱片(minecraft:music_disc_*)右键无碟 → 有碟, 消耗1个, + 唱片(物品名+aux)写入方块实体数据(rtdd_disc), 退出重进不丢 +- 取回: 空手右键 → 无碟 + 掉落该唱片(原样返还) -29. 古式唱片机(有碟) -> 古式唱片机(无碟) -转换条件:[右键 进行转换,取回唱片] -机制: 空手右键,取回唱片 +todo 放入唱片后 播放对应唱片曲目(后续实现) ======================================== -七、垃圾桶 +七、垃圾桶(开关盖/扔垃圾)【已实现】 ======================================== -30. 垃圾桶(关闭) -> 垃圾桶(打开) -转换条件:[右键 进行转换,打开桶盖] -机制: 空手右键,打开桶盖 - -31. 垃圾桶(打开) -> 垃圾桶(有垃圾) -转换条件:[手持 垃圾物品 右键 进行转换,消耗1个] -机制: 手持垃圾物品右键,消耗1个,投入垃圾 - -32. 垃圾桶(打开/有垃圾) -> 垃圾桶(关闭) -转换条件:[右键 进行转换,关闭桶盖] -机制: 空手右键,关闭桶盖 +- 垃圾桶(关闭) storage_buckets / 垃圾桶(打开) rubbish_bin_2 / 垃圾桶(有垃圾) b_160 +- 打开: 右键垃圾桶(空手/手持均可) → 打开桶盖(不消耗物品) +- 扔垃圾: 打开时手持任意物品右键 → 变为 垃圾桶(有垃圾) 状态 + 清空主手物品 +- 关闭: 右键(空手/手持均可) 打开/有垃圾 → 关闭桶盖 +todo 转换: 垃圾桶(关闭) -> 垃圾桶(打开) -> 垃圾桶(有垃圾) -> 垃圾桶(关闭) + 右键转换 + 功能: 打开时 主手拿任何东西右键 都会变成 垃圾桶(有垃圾) 状态 同时清空主手物品 以达到垃圾桶效果 ======================================== -八、碗柜 +八、静态家具方块(无转换) ======================================== -33. 碗柜(空) -> 碗柜(一个碗) -> 碗柜(两个碗) -> 碗柜(三个碗) -转换条件:[手持 碗/盘子 右键 依次放入] -机制: 手持碗右键逐格放入,共三个 +b_102(烟囱)、b_103(烟道)、b_111(吧台)、b_112(台柜)、b_124(格子架)、b_125(格子窗)、 +b_127(地图台)、b_15(木条)、b_35(双人床)、b_88(壁炉)、b_196~b_201(书本系列)、 +bamboomeshfence(竹栏)、cabinet(橱柜(盘子+调料瓶))、cabinet_1(橱柜(仅调料瓶))、 +seasoningrack(调料架)、shelving(置物架)、statueofadeity(神像)、stool(桌凳) -34. 碗柜(三个碗) -> 碗柜(两个碗) -> 碗柜(一个碗) -> 碗柜(空) -转换条件:[右键 依次取出] -机制: 空手右键逐格取出 - -======================================== -九、静态家具方块(无转换) -======================================== -b_102(烟囱)、b_103(烟道)、b_111(吧台)、b_112(台柜)、b_124(格子架)、b_125(格子窗)、b_127(地图台)、 -b_15(木条_1)、b_35(双人床)、b_88(壁炉)、b_196~b_201(书本系列)、bamboomeshfence(竹栏)、 -cabinet(橱柜(盘子+调料瓶))、cabinet_1(橱柜(仅调料瓶))、kitchenwarerack(厨具架)、kitchenwareracka_1~3、 -kitchenwarerackb_1/2、kitchenwarerackc_1/2、kitchenwarerackd_1~4、seasoningrack(调料架)、 -shelving(置物架)、statueofadeity(神像)、stool(桌凳) +todo 木条的获得: 切石机 放入任何原版木板 即可获得4个木条 + 双人床 功能:床 但是可以两个人一起睡(后续实现) diff --git a/代办设计.txt b/代办设计.txt index e1ca206..177c6e4 100644 --- a/代办设计.txt +++ b/代办设计.txt @@ -1,7 +1,6 @@ ====================================================================== 功能需求: -做饭工具 物品化 (铲子汤勺盘子) 厨具 按流程替换方块(比如烧烤架点火) 切菜 绷带右键回血 diff --git a/已有自定义配方列表.txt b/已有自定义配方列表.txt deleted file mode 100644 index 4f3351a..0000000 --- a/已有自定义配方列表.txt +++ /dev/null @@ -1,1353 +0,0 @@ -================================================================================ - 基岩版自定义配方列表(netease_recipes 目录) - 共 96 个配方(83 个有序合成 + 13 个无序合成/分解) -================================================================================ - - -================================================================================ -配方 1:苹果堆 (rtdd:apple_pile) - 标识符: rtdd:xy_apple_pile - 九宫格配方: - ┌─────┬─────┬─────┐ - │ 苹果 │ 苹果 │ 苹果 │ - ├─────┼─────┼─────┤ - │ 苹果 │ │ 苹果 │ - ├─────┼─────┼─────┤ - │ 苹果 │ 苹果 │ 苹果 │ - └─────┴─────┴─────┘ - 材料: 8个苹果 - 产出: 1个苹果堆 -================================================================================ - - -================================================================================ -配方 2:箭桶_0 (rtdd:arrowbarrel_0) - 标识符: rtdd:xy_arrowbarrel_0 - 九宫格配方: - ┌───────────┐ - │ 云杉活板门 │ - └───────────┘ - 材料: 1个云杉活板门 - 产出: 1个箭桶_0 -================================================================================ - - -================================================================================ -配方 3:竹栏 (rtdd:bamboomeshfence) - 标识符: rtdd:xy_bamboomeshfence - 九宫格配方: - ┌─────┬─────┬─────┐ - │ 竹子 │ 竹子 │ 竹子 │ - ├─────┼─────┼─────┤ - │ 竹子 │ 竹子 │ 竹子 │ - └─────┴─────┴─────┘ - 材料: 6个竹子 - 产出: 1个竹栏 -================================================================================ - - -================================================================================ -配方 4:烧烤架_无火 (rtdd:barbecuegrill_0) 方案A - 标识符: rtdd:xy_barbecuegrill_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 铁锭 │ 铁粒 │ 铁锭 │ - ├──────┼──────┼──────┤ - │ 铁粒 │ 煤炭 │ 铁粒 │ - └──────┴──────┴──────┘ - 材料: 铁锭x2, 铁粒x3, 煤炭x1 - 产出: 1个烧烤架 -================================================================================ - - -================================================================================ -配方 5:烧烤架_无火 (rtdd:barbecuegrill_0) 方案B - 标识符: rtdd:xy_barbecuegrill_0_1 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 铁粒 │铁栏杆│ 铁粒 │ - ├──────┼──────┼──────┤ - │ 铁粒 │ 煤炭 │ 铁粒 │ - └──────┴──────┴──────┘ - 材料: 铁粒x4, 铁栏杆x1, 煤炭x1 - 产出: 1个烧烤架 -================================================================================ - - -================================================================================ -配方 6:搅拌器 (rtdd:beater) - 标识符: rtdd:xy_beater - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ 木棍 │ 木条 │ - ├──────┼──────┼──────┤ - │ │ 木条 │ │ - └──────┴──────┴──────┘ - 材料: 木条x3, 木棍x1 - 产出: 1个搅拌器 -================================================================================ - - -================================================================================ -配方 7:书柜 (rtdd:bookcase) - 标识符: rtdd:xy_bookcase - 九宫格配方: - ┌──────┬──────┐ - │ 箱子 │ 木板 │ - └──────┴──────┘ - 材料: 箱子x1, 任意木板x1 - 产出: 1个书柜 -================================================================================ - - -================================================================================ -配方 8:面包堆 (rtdd:bread_pile) - 标识符: rtdd:xy_bread_pile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 面包 │ 面包 │ 面包 │ - ├──────┼──────┼──────┤ - │ 面包 │ │ 面包 │ - ├──────┼──────┼──────┤ - │ 面包 │ 面包 │ 面包 │ - └──────┴──────┴──────┘ - 材料: 8个面包 - 产出: 1个面包堆 -================================================================================ - - -================================================================================ -配方 9:橱柜 (rtdd:cabinet) - 标识符: rtdd:xy_cabinet - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │木台阶│ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ │ 木条 │ - ├──────┼──────┼──────┤ - │木台阶│ 木条 │木台阶│ - └──────┴──────┴──────┘ - 材料: 木条x5, 任意木台阶x3 - 产出: 1个橱柜 -================================================================================ - - -================================================================================ -配方 10:橱柜_1 (rtdd:cabinet_1) - 标识符: rtdd:xy_cabinet_1 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ 木条 │ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ │ 木条 │ - ├──────┼──────┼──────┤ - │木台阶│ 木条 │木台阶│ - └──────┴──────┴──────┘ - 材料: 木条x6, 任意木台阶x2 - 产出: 1个橱柜_1 -================================================================================ - - -================================================================================ -配方 11:胡萝卜堆 (rtdd:carrot_pile) - 标识符: rtdd:xy_carrot_pile - 九宫格配方: - ┌──────┬──────┬──────┐ - │胡萝卜│胡萝卜│胡萝卜│ - ├──────┼──────┼──────┤ - │胡萝卜│ │胡萝卜│ - ├──────┼──────┼──────┤ - │胡萝卜│胡萝卜│胡萝卜│ - └──────┴──────┴──────┘ - 材料: 8个胡萝卜 - 产出: 1个胡萝卜堆 -================================================================================ - - -================================================================================ -配方 12:车 (rtdd:cart) - 标识符: rtdd:xy_cart - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ │ │ - ├──────┼──────┼──────┤ - │ 木条 │ 木条 │ 木条 │ - ├──────┼──────┼──────┤ - │ 车轮 │ │ 车轮 │ - └──────┴──────┴──────┘ - 材料: 木条x4, 车轮x2 - 产出: 1个车 -================================================================================ - - -================================================================================ -配方 13:铸造台 (rtdd:casting_table) - 标识符: rtdd:xy_casting_table - 九宫格配方: - ┌──────┬──────┐ - │ 铁粒 │ 铁粒 │ - ├──────┼──────┤ - │ 高炉 │ 砖 │ - └──────┴──────┘ - 材料: 铁粒x2, 高炉x1, 砖x1 - 产出: 1个铸造台 -================================================================================ - - -================================================================================ -配方 14:鸡窝_0 (rtdd:chickencoop_0) - 标识符: rtdd:xy_chickencoop_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 小麦 │ │ 小麦 │ - ├──────┼──────┼──────┤ - │ │ 小麦 │ │ - └──────┴──────┴──────┘ - 材料: 3个小麦 - 产出: 3个鸡窝 -================================================================================ - - -================================================================================ -配方 15:鸡饲料盆_0 (rtdd:chickenmanger_0) - 标识符: rtdd:xy_chickenmanger_0 - 九宫格配方: - ┌──────┐ - │ 木条 │ - └──────┘ - 材料: 1个木条 - 产出: 1个鸡饲料盆 -================================================================================ - - -================================================================================ -配方 16:蓝色布料 (rtdd:cloth_blue) - 标识符: rtdd:xy_cloth_blue - 九宫格配方: - ┌──────┬──────┬──────┐ - │淡蓝 │白色 │淡蓝 │ - │羊毛 │羊毛 │羊毛 │ - └──────┴──────┴──────┘ - 材料: 淡蓝色羊毛x2, 白色羊毛x1 - 产出: 1个蓝色布料 -================================================================================ - - -================================================================================ -配方 17:黄绿色布料 (rtdd:cloth_lime) - 标识符: rtdd:xy_cloth_lime - 九宫格配方: - ┌──────┬──────┬──────┐ - │绿色 │黄绿色│绿色 │ - │羊毛 │羊毛 │羊毛 │ - └──────┴──────┴──────┘ - 材料: 绿色羊毛x2, 黄绿色羊毛x1 - 产出: 1个黄绿色布料 -================================================================================ - - -================================================================================ -配方 18:紫色布料 (rtdd:cloth_purple) - 标识符: rtdd:xy_cloth_purple - 九宫格配方: - ┌──────┬──────┬──────┐ - │紫色 │白色 │紫色 │ - │羊毛 │羊毛 │羊毛 │ - └──────┴──────┴──────┘ - 材料: 紫色羊毛x2, 白色羊毛x1 - 产出: 1个紫色布料 -================================================================================ - - -================================================================================ -配方 19:红色布料 (rtdd:cloth_red) - 标识符: rtdd:xy_cloth_red - 九宫格配方: - ┌──────┬──────┬──────┐ - │红色 │白色 │红色 │ - │羊毛 │羊毛 │羊毛 │ - └──────┴──────┴──────┘ - 材料: 红色羊毛x2, 白色羊毛x1 - 产出: 1个红色布料 -================================================================================ - - -================================================================================ -配方 20:黄色布料 (rtdd:cloth_yellow) - 标识符: rtdd:xy_cloth_yellow - 九宫格配方: - ┌──────┬──────┬──────┐ - │黄色 │白色 │黄色 │ - │羊毛 │羊毛 │羊毛 │ - └──────┴──────┴──────┘ - 材料: 黄色羊毛x2, 白色羊毛x1 - 产出: 1个黄色布料 -================================================================================ - - -================================================================================ -配方 21:鳕鱼堆 (rtdd:cod_pile) - 标识符: rtdd:xy_cod_pile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 鳕鱼 │ 鳕鱼 │ 鳕鱼 │ - ├──────┼──────┼──────┤ - │ 鳕鱼 │ │ 鳕鱼 │ - ├──────┼──────┼──────┤ - │ 鳕鱼 │ 鳕鱼 │ 鳕鱼 │ - └──────┴──────┴──────┘ - 材料: 8个鳕鱼 - 产出: 1个鳕鱼堆 -================================================================================ - - -================================================================================ -配方 22:铜锭堆 (rtdd:copperingotpile) - 标识符: rtdd:xy_copperingotpile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ │ 铜锭 │ - ├──────┼──────┼──────┤ - │ │ 铜锭 │ 铜锭 │ - ├──────┼──────┼──────┤ - │ 铜锭 │ 铜锭 │ 铜锭 │ - └──────┴──────┴──────┘ - 材料: 6个铜锭 - 产出: 1个铜锭堆 -================================================================================ - - -================================================================================ -配方 23:碗柜_0 (rtdd:cupboard_0) - 标识符: rtdd:xy_cupboard_0 - 九宫格配方: - ┌──────┬──────┐ - │ 木条 │ 木条 │ - ├──────┼──────┤ - │ 木条 │ 木条 │ - ├──────┼──────┤ - │ 木板 │ 木板 │ - └──────┴──────┘ - 材料: 木条x4, 任意木板x2 - 产出: 1个碗柜 -================================================================================ - - -================================================================================ -配方 24:晾干架 (rtdd:dryingrack) - 标识符: rtdd:xy_dryingrack - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 支杆 │ 木棍 │ 支杆 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 木棍 │ 支杆 │ - └──────┴──────┴──────┘ - 材料: 支杆x4, 木棍x2 - 产出: 2个晾干架 -================================================================================ - - -================================================================================ -配方 25:鸡蛋堆 (rtdd:egg_pile) - 标识符: rtdd:xy_egg_pile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 鸡蛋 │ 鸡蛋 │ 鸡蛋 │ - ├──────┼──────┼──────┤ - │ 鸡蛋 │ 鸡蛋 │ 鸡蛋 │ - ├──────┼──────┼──────┤ - │ 鸡蛋 │ 鸡蛋 │ 鸡蛋 │ - └──────┴──────┴──────┘ - 材料: 9个鸡蛋 - 产出: 1个鸡蛋堆 -================================================================================ - - -================================================================================ -配方 26:风车叶 (rtdd:fanblades) - 标识符: rtdd:xy_fanblades - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │白羊毛│ 木条 │ - ├──────┼──────┼──────┤ - │白羊毛│ 支杆 │白羊毛│ - ├──────┼──────┼──────┤ - │ 木条 │白羊毛│ 木条 │ - └──────┴──────┴──────┘ - 材料: 木条x4, 白色羊毛x4, 支杆x1 - 产出: 1个风车叶 -================================================================================ - - -================================================================================ -配方 27:柴火 (rtdd:firewood) - 标识符: rtdd:xy_firewood - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 原木 │ 原木 │ 原木 │ - ├──────┼──────┼──────┤ - │ 原木 │ 原木 │ 原木 │ - ├──────┼──────┼──────┤ - │ 原木 │ 原木 │ 原木 │ - └──────┴──────┴──────┘ - 材料: 9个任意原木 - 产出: 9个柴火 -================================================================================ - - -================================================================================ -配方 28:柴火_2 (rtdd:firewood_2) - 标识符: rtdd:xy_firewood_2 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ │ 原木 │ - ├──────┼──────┼──────┤ - │ │ 原木 │ 原木 │ - ├──────┼──────┼──────┤ - │ 原木 │ 原木 │ 原木 │ - └──────┴──────┴──────┘ - 材料: 6个任意原木 - 产出: 9个柴火_2 -================================================================================ - - -================================================================================ -配方 29:鱼桶_0 (rtdd:fishbucket_0) - 标识符: rtdd:xy_fishbucket_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ │ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ │ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ 木条 │ 木条 │ - └──────┴──────┴──────┘ - 材料: 7个木条 - 产出: 1个鱼桶 -================================================================================ - - -================================================================================ -配方 30:渔网 (rtdd:fishingnet) - 标识符: rtdd:xy_fishingnet - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ 线 │ │ - ├──────┼──────┼──────┤ - │ 线 │ 线 │ 线 │ - ├──────┼──────┼──────┤ - │ │ 线 │ │ - └──────┴──────┴──────┘ - 材料: 5个线 - 产出: 1个渔网 -================================================================================ - - -================================================================================ -配方 31:鱼缸 (rtdd:fishtank) - 标识符: rtdd:xy_fishtank - 九宫格配方: - ┌──────┬──────┐ - │ 玻璃 │ 石头 │ - └──────┴──────┘ - 材料: 玻璃x1, 石头x1 - 产出: 1个鱼缸 -================================================================================ - - -================================================================================ -配方 32:旗子 (rtdd:flag) - 标识符: rtdd:xy_flag - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 支杆 │ 支杆 │ 支杆 │ - ├──────┼──────┼──────┤ - │黄绿色│ │黄色 │ - │布料 │ │布料 │ - └──────┴──────┴──────┘ - 材料: 支杆x3, 黄绿色布料x1, 黄色布料x1 - 产出: 4面旗子 -================================================================================ - - -================================================================================ -配方 33:蓝石灰斜纹旗 (rtdd:flag_blue_lime_oblique) - 标识符: rtdd:xy_flag_blue_lime_oblique - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 支杆 │ │ │ - ├──────┼──────┼──────┤ - │蓝色 │ 支杆 │ │ - │布料 │ │ │ - ├──────┼──────┼──────┤ - │ │黄绿色│ 支杆 │ - │ │布料 │ │ - └──────┴──────┴──────┘ - 材料: 支杆x3, 蓝色布料x1, 黄绿色布料x1 - 产出: 4面蓝石灰斜纹旗 -================================================================================ - - -================================================================================ -配方 34:水槽_空 (rtdd:flume_0) - 标识符: rtdd:xy_flume_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ 铁粒 │ │ - ├──────┼──────┼──────┤ - │ 铁锭 │ 铁锭 │ 铁锭 │ - ├──────┼──────┼──────┤ - │ 砖 │ 砖 │ 砖 │ - └──────┴──────┴──────┘ - 材料: 铁锭x3, 铁粒x1, 砖x3 - 产出: 1个水槽 -================================================================================ - - -================================================================================ -配方 35:炒冰盒 (rtdd:frytheicebox) - 标识符: rtdd:xy_frytheicebox - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │木台阶│ 木条 │ - ├──────┼──────┼──────┤ - │木台阶│ 木条 │木台阶│ - └──────┴──────┴──────┘ - 材料: 木条x2, 任意木台阶x3 - 产出: 1个炒冰盒 -================================================================================ - - -================================================================================ -配方 36:金锭堆 (rtdd:goldingotpile) - 标识符: rtdd:xy_goldingotpile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ │ 金锭 │ - ├──────┼──────┼──────┤ - │ │ 金锭 │ 金锭 │ - ├──────┼──────┼──────┤ - │ 金锭 │ 金锭 │ 金锭 │ - └──────┴──────┴──────┘ - 材料: 6个金锭 - 产出: 1个金锭堆 -================================================================================ - - -================================================================================ -配方 37:冰棍盒_1 (rtdd:icelollybox_1) - 标识符: rtdd:xy_icelollybox_1 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ 木棍 │ 木条 │ - ├──────┼──────┼──────┤ - │木台阶│ 木条 │木台阶│ - └──────┴──────┴──────┘ - 材料: 木条x3, 木棍x1, 任意木台阶x2 - 产出: 1个冰棍盒 -================================================================================ - - -================================================================================ -配方 38:铁锭堆 (rtdd:ingotpile) - 标识符: rtdd:xy_ingotpile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ │ 铁锭 │ - ├──────┼──────┼──────┤ - │ │ 铁锭 │ 铁锭 │ - ├──────┼──────┼──────┤ - │ 铁锭 │ 铁锭 │ 铁锭 │ - └──────┴──────┴──────┘ - 材料: 6个铁锭 - 产出: 1个铁锭堆 -================================================================================ - - -================================================================================ -配方 39:榨汁机 (rtdd:juicer) - 标识符: rtdd:xy_juicer - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ 铁粒 │ │ - ├──────┼──────┼──────┤ - │ 木条 │ 铁锭 │ 木条 │ - ├──────┼──────┼──────┤ - │ 木板 │ 石头 │ 木板 │ - └──────┴──────┴──────┘ - 材料: 铁粒x1, 铁锭x1, 木条x2, 任意木板x2, 石头x1 - 产出: 1个榨汁机 -================================================================================ - - -================================================================================ -配方 40:厨具架 (rtdd:kitchenwarerack) 方案A - 标识符: rtdd:xy_kitchenwarerack - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ 木条 │ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ │ 木条 │ - └──────┴──────┴──────┘ - 材料: 5个木条 - 产出: 1个厨具架 -================================================================================ - - -================================================================================ -配方 41:厨具架 (rtdd:kitchenwarerack) 方案B - 标识符: rtdd:xy_kitchenwarerack_1 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ 支杆 │ 木条 │ - └──────┴──────┴──────┘ - 材料: 木条x2, 支杆x1 - 产出: 1个厨具架 -================================================================================ - - -================================================================================ -配方 42:梯子 (rtdd:ladder) - 标识符: rtdd:xy_ladder - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 支杆 │ 木棍 │ 支杆 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 木棍 │ 支杆 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 木棍 │ 支杆 │ - └──────┴──────┴──────┘ - 材料: 支杆x6, 木棍x3 - 产出: 1个梯子 -================================================================================ - - -================================================================================ -配方 43:药水架 (rtdd:lotion_0) - 标识符: rtdd:xy_lotion_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ │ 原木 │ - ├──────┼──────┼──────┤ - │ │ 木条 │ 原木 │ - ├──────┼──────┼──────┤ - │ 原木 │ 原木 │ 原木 │ - └──────┴──────┴──────┘ - 材料: 任意原木x5, 木条x1 - 产出: 4个药水架 -================================================================================ - - -================================================================================ -配方 44:饲料槽_0 (rtdd:manger_0) - 标识符: rtdd:xy_manger_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ │ 木条 │ - ├──────┼──────┼──────┤ - │木台阶│ 木条 │木台阶│ - └──────┴──────┴──────┘ - 材料: 木条x3, 任意木台阶x2 - 产出: 1个饲料槽 -================================================================================ - - -================================================================================ -配方 45:丸子机 (rtdd:meatballmaker_0) - 标识符: rtdd:xy_meatballmaker_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 支杆 │ 铁锭 │ 铁锭 │ - └──────┴──────┴──────┘ - 材料: 支杆x1, 铁锭x2 - 产出: 1个丸子机 -================================================================================ - - -================================================================================ -配方 46:药罐 (rtdd:medicinetank) - 标识符: rtdd:xy_medicinetank - 九宫格配方: - ┌──────┐ - │ 木板 │ - ├──────┤ - │ 玻璃 │ - └──────┘ - 材料: 任意木板x1, 玻璃x1 - 产出: 1个药罐 -================================================================================ - - -================================================================================ -配方 47:菜单 (rtdd:menus) - 标识符: rtdd:xy_menus - 九宫格配方: - ┌──────┐ - │ 木条 │ - ├──────┤ - │ 木条 │ - └──────┘ - 材料: 2个木条 - 产出: 4个菜单 -================================================================================ - - -================================================================================ -配方 48:石臼 (rtdd:mortar) 方案A(骨头版) - 标识符: rtdd:xy_mortar - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 骨头 │ │ 骨头 │ - ├──────┼──────┼──────┤ - │ │ 骨头 │ │ - └──────┴──────┴──────┘ - 材料: 3个骨头 - 产出: 1个石臼 -================================================================================ - - -================================================================================ -配方 49:石臼 (rtdd:mortar) 方案B(圆石版) - 标识符: rtdd:xy_mortar_1 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 圆石 │ │ 圆石 │ - ├──────┼──────┼──────┤ - │ │ 圆石 │ │ - └──────┴──────┴──────┘ - 材料: 3个圆石 - 产出: 1个石臼 -================================================================================ - - -================================================================================ -配方 50:酒杯 (rtdd:mug) - 标识符: rtdd:xy_mug - 九宫格配方: - ┌──────┬──────┐ - │ 木板 │ 铁粒 │ - ├──────┼──────┤ - │ 木板 │ │ - └──────┴──────┘ - 材料: 任意木板x2, 铁粒x1 - 产出: 1个酒杯 -================================================================================ - - -================================================================================ -配方 51:油锅_0 (rtdd:oilpot_0) - 标识符: rtdd:xy_oilpot_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 铁粒 │铁栏杆│ 铁粒 │ - ├──────┼──────┼──────┤ - │ 铁锭 │黑色 │ 铁锭 │ - │ │染料 │ │ - └──────┴──────┴──────┘ - 材料: 铁粒x2, 铁栏杆x1, 铁锭x2, 黑色染料x1 - 产出: 1个油锅 -================================================================================ - - -================================================================================ -配方 52:钳子 (rtdd:pinchers) - 标识符: rtdd:xy_pinchers - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ 铁锭 │ │ - ├──────┼──────┼──────┤ - │ │ 铁锭 │ 铁锭 │ - ├──────┼──────┼──────┤ - │ 皮革 │ │ │ - └──────┴──────┴──────┘ - 材料: 铁锭x3, 皮革x1 - 产出: 1个钳子 -================================================================================ - - -================================================================================ -配方 53:盘子 (rtdd:plate_0) - 标识符: rtdd:xy_plate_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木板 │木台阶│ 木板 │ - └──────┴──────┴──────┘ - 材料: 任意木板x2, 任意木台阶x1 - 产出: 6个盘子 -================================================================================ - - -================================================================================ -配方 54:盘子堆 (rtdd:platepile) - 标识符: rtdd:xy_platepile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 盘子 │ 盘子 │ 盘子 │ - ├──────┼──────┼──────┤ - │ 盘子 │ 盘子 │ 盘子 │ - ├──────┼──────┼──────┤ - │ 盘子 │ 盘子 │ 盘子 │ - └──────┴──────┴──────┘ - 材料: 9个盘子 - 产出: 1个盘子堆 -================================================================================ - - -================================================================================ -配方 55:土豆堆 (rtdd:potato_pile) - 标识符: rtdd:xy_potato_pile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 土豆 │ 土豆 │ 土豆 │ - ├──────┼──────┼──────┤ - │ 土豆 │ │ 土豆 │ - ├──────┼──────┼──────┤ - │ 土豆 │ 土豆 │ 土豆 │ - └──────┴──────┴──────┘ - 材料: 8个土豆 - 产出: 1个土豆堆 -================================================================================ - - -================================================================================ -配方 56:支撑 (rtdd:prop_up) - 标识符: rtdd:xy_prop_up - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 支杆 │ │ 支杆 │ - ├──────┼──────┼──────┤ - │ │ 支杆 │ │ - ├──────┼──────┼──────┤ - │ 支杆 │ │ 支杆 │ - └──────┴──────┴──────┘ - 材料: 5个支杆 - 产出: 2个支撑 -================================================================================ - - -================================================================================ -配方 57:擀面杖 (rtdd:rollingpin) - 标识符: rtdd:xy_rollingpin - 九宫格配方: - ┌──────┬──────┐ - │ 支杆 │ 木板 │ - └──────┴──────┘ - 材料: 支杆x1, 任意木板x1 - 产出: 4个擀面杖 -================================================================================ - - -================================================================================ -配方 58:鲑鱼堆 (rtdd:salmon_pile) - 标识符: rtdd:xy_salmon_pile - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 鲑鱼 │ 鲑鱼 │ 鲑鱼 │ - ├──────┼──────┼──────┤ - │ 鲑鱼 │ │ 鲑鱼 │ - ├──────┼──────┼──────┤ - │ 鲑鱼 │ 鲑鱼 │ 鲑鱼 │ - └──────┴──────┴──────┘ - 材料: 8个鲑鱼 - 产出: 1个鲑鱼堆 -================================================================================ - - -================================================================================ -配方 59:调料架 (rtdd:seasoningrack) - 标识符: rtdd:xy_seasoningrack - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 支杆 │ 木条 │ 支杆 │ - └──────┴──────┴──────┘ - 材料: 支杆x2, 木条x1 - 产出: 1个调料架 -================================================================================ - - -================================================================================ -配方 60:售卖盒 (rtdd:sellingboxes) - 标识符: rtdd:xy_sellingboxes - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ 木条 │ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ │ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ │ 木条 │ - └──────┴──────┴──────┘ - 材料: 7个木条 - 产出: 1个售卖盒 -================================================================================ - - -================================================================================ -配方 61:置物架 (rtdd:shelving) - 标识符: rtdd:xy_shelving - 九宫格配方: - ┌──────┬──────┐ - │云杉 │ │ - │活板门│ │ - ├──────┼──────┤ - │ │云杉 │ - │ │活板门│ - └──────┴──────┘ - 材料: 2个云杉活板门 - 产出: 1个置物架 -================================================================================ - - -================================================================================ -配方 62:锅铲 (rtdd:spatula) - 标识符: rtdd:xy_spatula - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ │ 铁锭 │ - ├──────┼──────┼──────┤ - │ │ 支杆 │ │ - ├──────┼──────┼──────┤ - │ 支杆 │ │ │ - └──────┴──────┴──────┘ - 材料: 铁锭x1, 支杆x2 - 产出: 1个锅铲 -================================================================================ - - -================================================================================ -配方 63:纺纱机 (rtdd:spinner) - 标识符: rtdd:xy_spinner - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ │ 车轮 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 线 │ 线 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 支杆 │ 支杆 │ - └──────┴──────┴──────┘ - 材料: 支杆x4, 车轮x1, 线x2 - 产出: 1个纺纱机 -================================================================================ - - -================================================================================ -配方 64:蒸笼 (rtdd:steamer) - 标识符: rtdd:xy_steamer - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 竹子 │ 竹子 │ 竹子 │ - ├──────┼──────┼──────┤ - │ 木板 │ 木板 │ 木板 │ - └──────┴──────┴──────┘ - 材料: 竹子x3, 任意木板x3 - 产出: 1个蒸笼 -================================================================================ - - -================================================================================ -配方 65:炖汤 (rtdd:stewedsoup) - 标识符: rtdd:xy_stewedsoup - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 砖 │ │ 砖 │ - ├──────┼──────┼──────┤ - │ 铁锭 │ │ 铁锭 │ - ├──────┼──────┼──────┤ - │黑色 │ 铁锭 │黑色 │ - │染料 │ │染料 │ - └──────┴──────┴──────┘ - 材料: 砖x2, 铁锭x3, 黑色染料x2 - 产出: 1个炖汤 -================================================================================ - - -================================================================================ -配方 66:石磨 (rtdd:stonemill) - 标识符: rtdd:xy_stonemill - 九宫格配方: - ┌──────┬──────┐ - │ 石头 │ │ - ├──────┼──────┤ - │ 石头 │ 支杆 │ - ├──────┼──────┤ - │ 石头 │ │ - └──────┴──────┘ - 材料: 石头x3, 支杆x1 - 产出: 1个石磨 -================================================================================ - - -================================================================================ -配方 67:桌凳 (rtdd:stool) - 标识符: rtdd:xy_stool - 九宫格配方: - ┌──────┬──────┐ - │ 木条 │ 木条 │ - ├──────┼──────┤ - │ 木棍 │ 木棍 │ - └──────┴──────┘ - 材料: 木条x2, 木棍x2 - 产出: 1个桌凳 -================================================================================ - - -================================================================================ -配方 68:存储桶 (rtdd:storage_buckets) - 标识符: rtdd:xy_storage_buckets - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木板 │木台阶│ 木板 │ - ├──────┼──────┼──────┤ - │ 木板 │ │ 木板 │ - ├──────┼──────┼──────┤ - │ 木板 │ 木板 │ 木板 │ - └──────┴──────┴──────┘ - 材料: 任意木板x7, 任意木台阶x1 - 产出: 1个存储桶 -================================================================================ - - -================================================================================ -配方 69:蓝色遮阳布 (rtdd:sunshade_cloth_blue) 方案A - 标识符: rtdd:xy_sunshade_cloth_blue - 九宫格配方: - ┌──────┐ - │ 支杆 │ - ├──────┤ - │蓝色 │ - │布料 │ - └──────┘ - 材料: 支杆x1, 蓝色布料x1 - 产出: 1个蓝色遮阳布 -================================================================================ - - -================================================================================ -配方 70:蓝色遮阳布 (rtdd:sunshade_cloth_blue) 方案B - 标识符: rtdd:xy_sunshade_cloth_blue_1 - 九宫格配方: - ┌──────┐ - │ 支杆 │ - ├──────┤ - │蓝色 │ - │布料 │ - └──────┘ - 材料: 支杆x1, 蓝色布料x1 - 产出: 1个蓝色遮阳布 -================================================================================ - - -================================================================================ -配方 71:紫色遮阳布 (rtdd:sunshade_cloth_purple) - 标识符: rtdd:xy_sunshade_cloth_purple - 九宫格配方: - ┌──────┐ - │ 支杆 │ - ├──────┤ - │紫色 │ - │布料 │ - └──────┘ - 材料: 支杆x1, 紫色布料x1 - 产出: 1个紫色遮阳布 -================================================================================ - - -================================================================================ -配方 72:红色遮阳布 (rtdd:sunshade_cloth_red) - 标识符: rtdd:xy_sunshade_cloth_red - 九宫格配方: - ┌──────┐ - │ 支杆 │ - ├──────┤ - │红色 │ - │布料 │ - └──────┘ - 材料: 支杆x1, 红色布料x1 - 产出: 1个红色遮阳布 -================================================================================ - - -================================================================================ -配方 73:黄色遮阳布 (rtdd:sunshade_cloth_yellow) - 标识符: rtdd:xy_sunshade_cloth_yellow - 九宫格配方: - ┌──────┐ - │ 支杆 │ - ├──────┤ - │黄色 │ - │布料 │ - └──────┘ - 材料: 支杆x1, 黄色布料x1 - 产出: 1个黄色遮阳布 -================================================================================ - - -================================================================================ -配方 74:黄绿色遮阳布 (rtdd:sunshaden_cloth_lime) - 标识符: rtdd:xy_sunshaden_cloth_lime - 九宫格配方: - ┌──────┐ - │ 支杆 │ - ├──────┤ - │黄绿色│ - │布料 │ - └──────┘ - 材料: 支杆x1, 黄绿色布料x1 - 产出: 1个黄绿色遮阳布 -================================================================================ - - -================================================================================ -配方 75:支杆 (rtdd:support_rod) 方案A(木棍版) - 标识符: rtdd:xy_support_rod - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木棍 │ 木棍 │ 木棍 │ - └──────┴──────┴──────┘ - 材料: 3个木棍 - 产出: 1个支杆 -================================================================================ - - -================================================================================ -配方 76:支杆 (rtdd:support_rod) 方案B(木条版) - 标识符: rtdd:xy_support_rod_1 - 九宫格配方: - ┌──────┬──────┐ - │ 木条 │ 木条 │ - ├──────┼──────┤ - │ 木条 │ 木条 │ - ├──────┼──────┤ - │ 木条 │ 木条 │ - └──────┴──────┘ - 材料: 6个木条 - 产出: 1个支杆 -================================================================================ - - -================================================================================ -配方 77:支杆 (rtdd:support_rod) 方案C(木条简化版) - 标识符: rtdd:xy_support_rod_2 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ 木条 │ 木条 │ - └──────┴──────┴──────┘ - 材料: 3个木条 - 产出: 2个支杆 -================================================================================ - - -================================================================================ -配方 78:帐篷 (rtdd:tent) - 标识符: rtdd:xy_tent - 九宫格配方: - ┌──────┬──────┐ - │白羊毛│ │ - ├──────┼──────┤ - │白羊毛│ 木条 │ - ├──────┼──────┤ - │白羊毛│ │ - └──────┴──────┘ - 材料: 白色羊毛x3, 木条x1 - 产出: 8个帐篷 -================================================================================ - - -================================================================================ -配方 79:盘子架_1 (rtdd:trayracks_1) - 标识符: rtdd:xy_trayracks_1 - 九宫格配方: - ┌──────┬──────┐ - │ 木条 │ 木条 │ - ├──────┼──────┤ - │ 木板 │ 木板 │ - └──────┴──────┘ - 材料: 木条x2, 任意木板x2 - 产出: 1个盘子架 -================================================================================ - - -================================================================================ -配方 80:车轮 (rtdd:wheel) - 标识符: rtdd:xy_wheel - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ 木棍 │ │ - ├──────┼──────┼──────┤ - │ 木棍 │ 木棍 │ 木棍 │ - ├──────┼──────┼──────┤ - │ │ 木棍 │ │ - └──────┴──────┴──────┘ - 材料: 5个木棍 - 产出: 1个车轮 -================================================================================ - - -================================================================================ -配方 81:酒桶 (rtdd:wine_barrel) - 标识符: rtdd:xy_wine_barrel - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木板 │ 木条 │ 木板 │ - ├──────┼──────┼──────┤ - │ 木板 │ │ 木板 │ - ├──────┼──────┼──────┤ - │ 木板 │ 木条 │ 木板 │ - └──────┴──────┴──────┘ - 材料: 任意木板x6, 木条x2 - 产出: 1个酒桶 -================================================================================ - - -================================================================================ -配方 82:炒锅 (rtdd:wok) - 标识符: rtdd:xy_wok - 九宫格配方: - ┌──────┬──────┬──────┐ - │ │ 铁锭 │ │ - ├──────┼──────┼──────┤ - │ 铁锭 │ 煤炭 │ 铁锭 │ - ├──────┼──────┼──────┤ - │ │ 铁锭 │ │ - └──────┴──────┴──────┘ - 材料: 铁锭x4, 煤炭x1 - 产出: 1个炒锅 -================================================================================ - - -================================================================================ -配方 83:货桶 (rtdd:woodenbox_0) - 标识符: rtdd:xy_woodenbox_0 - 九宫格配方: - ┌──────┬──────┬──────┐ - │ 木条 │ │ 木条 │ - ├──────┼──────┼──────┤ - │ 木条 │ 木条 │ 木条 │ - └──────┴──────┴──────┘ - 材料: 5个木条 - 产出: 1个货桶 -================================================================================ - - -================================================================================ -==================== 以下为无序合成配方 ==================== -================================================================================ - - -================================================================================ -配方 84:悬赏纸 (rtdd:bountypaper) [无序合成] - 标识符: rtdd:xy_bountypaper - 材料: 纸x1 - 产出: 2个悬赏纸 -================================================================================ - - -================================================================================ -配方 85:苹果堆 → 苹果 (minecraft:apple) [无序合成] - 标识符: rtdd:xy_mc_apple - 材料: 苹果堆x1 - 产出: 8个苹果 -================================================================================ - - -================================================================================ -配方 86:面包堆 → 面包 (minecraft:bread) [无序合成] - 标识符: rtdd:xy_mc_bread - 材料: 面包堆x1 - 产出: 8个面包 -================================================================================ - - -================================================================================ -配方 87:胡萝卜堆 → 胡萝卜 (minecraft:carrot) [无序合成] - 标识符: rtdd:xy_mc_carrot - 材料: 胡萝卜堆x1 - 产出: 8个胡萝卜 -================================================================================ - - -================================================================================ -配方 88:鳕鱼堆 → 鳕鱼 (minecraft:cod) [无序合成] - 标识符: rtdd:xy_mc_cod - 材料: 鳕鱼堆x1 - 产出: 8个鳕鱼 -================================================================================ - - -================================================================================ -配方 89:土豆堆 → 土豆 (minecraft:potato) [无序合成] - 标识符: rtdd:xy_mc_potato - 材料: 土豆堆x1 - 产出: 8个土豆 -================================================================================ - - -================================================================================ -配方 90:鲑鱼堆 → 鲑鱼 (minecraft:salmon) [无序合成] - 标识符: rtdd:xy_mc_salmon - 材料: 鲑鱼堆x1 - 产出: 8个鲑鱼 -================================================================================ - - -================================================================================ -配方 91:牛头骨 → 骨头 (minecraft:bone) - 标识符: rtdd:xy_mc_bone - 九宫格配方: - ┌──────┐ - │牛头骨│ - └──────┘ - 材料: 牛头骨x1 - 产出: 1个骨头 -================================================================================ - - -================================================================================ -配方 92:铜锭堆 → 铜锭 (minecraft:copper_ingot) - 标识符: rtdd:xy_mc_copper_ingot - 九宫格配方: - ┌──────┐ - │铜锭堆│ - └──────┘ - 材料: 铜锭堆x1 - 产出: 6个铜锭 -================================================================================ - - -================================================================================ -配方 93:金锭堆 → 金锭 (minecraft:gold_ingot) - 标识符: rtdd:xy_mc_gold_ingot - 九宫格配方: - ┌──────┐ - │金锭堆│ - └──────┘ - 材料: 金锭堆x1 - 产出: 6个金锭 -================================================================================ - - -================================================================================ -配方 94:铁锭堆 → 铁锭 (minecraft:iron_ingot) - 标识符: rtdd:xy_mc_iron_ingot - 九宫格配方: - ┌──────┐ - │铁锭堆│ - └──────┘ - 材料: 铁锭堆x1 - 产出: 6个铁锭 -================================================================================ - - -================================================================================ -配方 95:盘子堆 → 盘子 (rtdd:plate_0) [无序合成] - 标识符: rtdd:xy_plate_0_1 - 材料: 盘子堆x1 - 产出: 1个盘子 -================================================================================ - - -================================================================================ -配方 96:烤香菇串 (rtdd:roastedmushrooms_0) [无序合成] - 标识符: rtdd:xy_roastedmushrooms_0 - 材料: 棕色蘑菇x5, 木棍x1 - 产出: 1个烤香菇串 -================================================================================ \ No newline at end of file diff --git a/未使用方块列表.txt b/未使用方块列表.txt deleted file mode 100644 index 08dce5a..0000000 --- a/未使用方块列表.txt +++ /dev/null @@ -1,694 +0,0 @@ -================================================================================ - 未在菜谱(RecipeData.py)和方块切换(BlockSwitchData.py)中使用的方块列表 - 全部竖排,逐条列出 -================================================================================ -说明: -- "菜谱中用过" = 在 RecipeData.py 中作为 source 或 target 出现 -- "方块切换中用过" = 在 BlockSwitchData.py 中作为 source 或 target 出现 -- 以下列出的方块在两者中均未出现 - - -一、纯装饰/建筑类方块 -================================================================================ -animalcarcasses (动物骸骨) -apple_leaves (苹果树树叶) -balance (天平) -bamboomeshfence (竹栏) -b_2 (土豆堆_1) -b_3 (鲑鱼架) -b_4 (摊位台) -b_6 (售卖盒_1) -b_12 (西瓜盒_1) -b_14 (木桶_1) -b_16 (土豆盒_1) -b_19 (苹果盒_1) -b_22 (鳕鱼盒_1) -b_23 (鳕鱼堆_1) -b_24 (南瓜盒_1) -b_25 (酒桶_1) -b_26 (鲑鱼钩-禁用) -b_27 (鲑鱼堆_1) -b_28 (黄色布料_2) -b_29 (黄色遮阳布_2) -b_31 (稻草人_1) -b_34 (支杆_1) -b_35 (双人床_1) -b_36 (木堆) -b_37 (木桩) -b_38 (面包堆_1) -b_39 (面包盒_1) -b_40 (胡萝卜堆_1) -b_41 (胡萝卜盒_1) -b_42 (支杆1) -b_43 (支杆_2) -b_44 (支杆_3) -b_45 (支杆_4) -b_51 (蓝色布料) -b_52 (红色布料_1) -b_53 (蓝色遮阳布) -b_54 (红色遮阳布_1) -b_55 (烤羊) -b_56 (烤熟羊) -b_57 (梯子_1) -b_58 (铁叉_1) -b_59 (旗子_1) -b_60 (斜旗子_1) -b_61 (斜旗子_2) -b_62 (旗子_2) -b_63 (旗子_3) -b_65 (烧锅_4) -b_67 (烧锅_5) -b_68 (烧锅_6) -b_69 (烧锅_7) -b_70 (烧锅_8) -b_71 (烧锅_9) -b_72 (烧锅_10) -b_82 (满酒桶_6) -b_83 (满酒桶_7) -b_84 (满酒桶_8) -b_85 (空酒桶) -b_86 (金币堆_1) -b_87 (铜币堆_1) -b_88 (壁炉_1) -b_89 (壁炉_2) -b_90 (壁炉_3) -b_91 (满酒桶_9) -b_92 (满酒桶_10) -b_93 (满酒桶_11) -b_94 (满酒桶_12) -b_95 (满酒桶_13) -b_96 (满酒桶_14) -b_97 (满酒桶_15) -b_98 (满酒桶_16) -b_102 (烟囱) -b_103 (烟道) -b_108 (古式唱片机_1) -b_109 (古式唱片机_2) -b_111 (吧台) -b_112 (台柜) -b_114 (酒杯_1) -b_115 (酒杯_2) -b_116 (酒杯_3) -b_117 (酒杯_4) -b_118 (酒杯_5) -b_121 (靶) -b_124 (格子架) -b_125 (格子窗) -b_126 (酒杯_6) -b_127 (地图台) -b_160 (木桶_2) -b_168 (烧锅_1) -b_169 (烧锅_2) -b_170 (烧锅_3) -b_173 (桃子_1) -b_176 (桃子_2) -b_197 (书本_1) -b_198 (书本_2) -b_199 (书本_3) -b_200 (书本_4) -b_201 (书本_5) -b_215 (木尖桩) -b_234 (酒杯_7) -b_235 (酒杯_8) -b_236 (酒杯_9) -b_238_t_1 (满酒桶_2) -b_238_t_2 (满酒桶_3) -b_238_t_3 (满酒桶_4) -b_239 (满酒桶_5) -b_241 (黄色布料_1) -b_241a (黄色遮阳布_1) -b_256casting_table_11 (铸造台_1) -b_258casting_table_12 (铸造台_2) -b_285 (碎铜矿) -cart (车) -chiliskewer (辣椒串) -cow_skull (牛头骨) -copper_coin_pile (铜币堆_2) -copperingotpile (铜锭堆) -dead_villager (村民尸体) -dead_villagera (烤村民) -double_bed (双人床_2) -fanblades (风车叶) -firewood (柴火_1) -firewood_2 (柴火_2) -fishtank (鱼缸) -flag (旗子_4) -flag_blue_lime_oblique (旗子_5) -flag_brown_blue (旗子_6) -flag_red_orange (旗子_7) -flag_red_orange_oblique (旗子_8) -garlicskewers (大蒜串) -gold_pile (金币堆_2) -goldingotpile (金锭堆) -grapebushes_1 (葡萄藤_1) -grapebushes_2 (葡萄藤_2) -hammer (锤子) -ingotpile (铁锭堆) -ironcoinpile (铁币堆) -ironplace (铁矿) -ladder (梯子_2) -lron_fork (铁叉_2) -magnifyingglass (放大镜) -menus (餐牌) -mortar (石臼) -mug (酒杯_10) -oilcan (油罐) -orange_leaves (橘树树叶) -peach_leaves (桃树树叶) -pinchers (钳子) -platepile (盘子堆) -potandspoon (锅勺) -prop_up (支撑) -scarecrow (稻草人_2) -seasoningrack (调料架) -shelving (置物架) -statueofadeity (神像) -stonemill (石磨) -stool (桌凳) -support_rod (支杆_5) -tent (帐篷_1) -tent_0 (帐篷_2) -vending_desk (售货台) -wheel (车轮) -applebox (货桶(苹果盒)) - - -二、最终菜品展示方块(不参与source/target转换,直接放置使用) -================================================================================ -plate_0 (盘子) -plate_0a (脏盘子) -plate_1 (轻炒猪肉_1) -plate_1a (轻炒猪肉_2) -plate_2 (黑椒牛排_1) -plate_2a (黑椒牛排_2) -plate_3 (轻炒羊肉) -plate_4 (大盘鸡_1) -plate_4a (大盘鸡_2) -plate_5 (煎鲑鱼_1) -plate_5a (煎鲑鱼_2) -plate_6 (酱香牛仔骨) -plate_7 (黑椒牛腿) -plate_8 (黄酱牛肉_1) -plate_8a (黄酱牛肉_2) -plate_9 (风味羊腿_1) -plate_9a (风味羊腿_2) -plate_10 (铁板里脊_1) -plate_10a (铁板里脊_2) -plate_11 (碳烤羊排_1) -plate_11a (碳烤羊排_2) -plate_12 (小炒五花肉_1) -plate_12a (小炒五花肉_2) -plate_13 (红烧排骨_1) -plate_13a (红烧排骨_2) -plate_14 (土豆片儿) -plate_15 (酱汁鱼儿) -plate_16 (南瓜派盘) -plate_17 (生鱼片) -plate_18 (西瓜盘) -plate_19 (麻辣兔肉_1) -plate_19a (麻辣兔肉_2) -plate_20 (面包盘) -plate_21 (曲奇盘) -plate_22 (元气鸡蛋) -plate_23 (炒时蔬) -plate_24 (小炒肉) -plate_25 (烧鱼肉) -plate_26 (盘装鱿鱼_1) -plate_26a (盘装鱿鱼_2) -plate_26b (盘装鱿鱼_3) -plate_26c (盘装鱿鱼_4) -plate_26d (盘装鱿鱼_5) -plate_27 (盘装寿司_1) -plate_28 (盘装寿司_2) -plate_29 (盘装寿司_3) -plate_30 (美味饺子_1) -plate_30a (美味饺子_2) -plate_31 (小鲜肉_1) -plate_31a (小鲜肉_2) -plate_32 (麻婆豆腐_1) -plate_32a (麻婆豆腐_2) -plate_33 (炒花蟹_1) -plate_33a (炒花蟹_2) -plate_34 (蛋液半成品) -plate_35 (布丁半成品) -plate_36 (盘装猪排) -plate_37 (盘装薯条) -plate_38 (盘装鸡块) -plate_39 (盘装炸鱼_1) -plate_40 (盘装炸鱼_2) -plate_40a (章鱼小丸子) -plate_41 (红烧鱼) -plate_42 (盘装寿司_4) -plate_43 (黑椒牛柳意面_1) -plate_43a (黑椒牛柳意面_2) -plate_44 (奶油培根意面_1) -plate_44a (奶油培根意面_2) -plate_45 (咖喱鸡肉意面_1) -plate_45a (咖喱鸡肉意面_2) -plate_46 (番茄肉酱意面_1) -plate_46a (番茄肉酱意面_2) -plate_47 (辣子鸡丁_1) -plate_47a (辣子鸡丁_2) -plate_48 (辣子鸡丁盖饭_1) -plate_48a (辣子鸡丁盖饭_2) -plate_49 (天妇罗炸虾) -plate_49a (辣子鸡丁盖饭_3) -plate_50 (鱼块盖饭) -plate_51 (炸饺子) -plate_52 (土肉炒肉) -plate_53 (萝卜炒肉) -plate_54 (香菇滑鸡) -plate_55 (辣子鸡丁盖饭_4) -plate_55a (香菇滑鸡盖饭) -plate_56 (麻婆豆腐盖饭) -roastchickenplace_0 (烤鸡_4) -roastchickenplace_2 (烤鸡_5) -roastchickenplace_3 (烤鸡_6) -roastchickenplace_4 (烤鸡_7) -roastpignew_1 (烤乳猪盘_1) -roastpignew_2 (烤乳猪盘_2) -roastpignew_3 (烤乳猪盘_3) -roastpignew_4 (烤乳猪盘_4) -roastpignew_5 (烤乳猪盘_5) -roastpignew_6 (烤乳猪盘_6) -bread_1a (法棍_2) -bread_1b (法棍_3) -bread_2a (吐司_2) -bread_2b (吐司_3) -bread_3a (可颂_2) -bread_3b (可颂_3) -bread_4a (甜甜圈_2) -bread_4b (甜甜圈_3) -bread_4c (甜甜圈_4) -bread_pile (面包堆_2) -cake_0 (奶油蛋糕) -cake_1 (蜂蜜蛋糕_1) -cake_1a (蜂蜜蛋糕_2) -cake_1b (蜂蜜蛋糕_3) -cake_1c (蜂蜜蛋糕_4) -cake_1d (蜂蜜蛋糕_5) -cake_2 (浆果蛋糕_1) -cake_2a (浆果蛋糕_2) -cake_2b (浆果蛋糕_3) -cake_2c (浆果蛋糕_4) -cake_2d (浆果蛋糕_5) -cake_3 (巧克力蛋糕_1) -cake_3a (巧克力蛋糕_2) -cake_3b (巧克力蛋糕_3) -cake_3c (巧克力蛋糕_4) -cake_3d (巧克力蛋糕_5) -cookedpancake (酱香饼) -cooked_dought (面饼_1) -creampastry_0 (奶油糕点) -shouroubao (肉包子_5) -shoubaozi_2 (肉包子_1) -shoubaozi_3 (肉包子_2) -shoubaozidui_2 (肉包子_3) -shoubaozidui_3 (肉包子_4) -roubaozi_3 (包子_2) -breaddough_1a (法棍面胚_2) -breaddough_4d (甜甜圈_5) - - -三、店铺方块 -================================================================================ - - -四、货桶/售卖箱/盒子变体 -================================================================================ -carrotbarrel (货桶(胡萝卜)) -fishbucket_0 (货桶_1) -fishbucket_1 (货桶(鳕鱼)) -fishbucket_2 (货桶(鲑鱼)) -orangebarrel (货桶(橘子)) -peachbarrel (货桶(桃子)) -potatobarrel (货桶(马铃薯)) -orangebox (橘子盒) -peachbox (桃子盒) -sales_box_apple (苹果盒_2) -sales_box_bread (面包盒_2) -sales_box_carrot (胡萝卜盒_2) -sales_box_cod (鳕鱼盒_2) -sales_box_potato (土豆盒_2) -sales_box_pumpkin (南瓜盒_2) -sales_box_watermelon (西瓜盒_2) -sellingboxes (售卖盒_2) - - -五、布料/遮阳布变体 -================================================================================ -cloth (衣物(布料)) -cloth_blue (淡蓝色布料) -cloth_lime (黄绿色布料) -cloth_purple (紫色布料) -cloth_red (红色布料_2) -cloth_yellow (黄色布料_3) -sunshade_cloth_blue (淡蓝色遮阳布) -sunshade_cloth_lime (石灰遮阳布) -sunshade_cloth_purple (紫色遮阳布) -sunshade_cloth_red (红色遮阳布_2) -sunshade_cloth_yellow (黄色遮阳布_3) -sunshaden_cloth_lime (黄绿色遮阳布) -sunshaden_cloth_orange (橙色遮阳布) - - -六、手办/雕像类 -================================================================================ -cat_0 (萝卜纸巾猫手办_1) -cat_1 (萝卜纸巾猫手办_2) -cat_2 (萝卜纸巾猫手办_3) -cat_3 (萝卜纸巾猫手办_4) -figurines (赞助者手办_1) -figurines_1 (赞助者手办_2) -figurines_2 (赞助者手办_3) -figurines_3 (赞助者手办_4) -figurines_4 (赞助者手办_5) -figurines_5 (赞助者手办_6) -fox_0 (狐狸手办) -fox_1 (手办_1) -fox_2 (手办_2) -fox_3 (手办_3) - - -七、其他杂项方块 -================================================================================ -bountypaper (农贸清单) -bountypaper_1 (悬赏纸_1) -bountypaper_2 (悬赏纸_2) -cookstoves (炊灶) -crushed_copper_ore_1 (铜矿) -crushed_gold_ore (碎金矿) -crushed_gold_ore_1 (金矿) -crushedironplace (碎铁矿) -dead_cow (死牛) -dead_pig (死猪) -dead_sheep (死羊) -dead_squid_1 (死去的鱿鱼_1) -deadsquida (死去的鱿鱼_2) -feces_1 (粪便_1) -feces_2 (粪便_2) -feces_3 (粪便_3) -icelollybox_1 (冰棍盒_1) -icelollybox_2 (冰棍盒_2) -icelollyboxa (冰棍盒_3) -icelollyboxb (冰棍盒_4) -icelollyboxc (冰棍盒_5) -icelollyboxd (冰棍盒_6) -icelollyboxe (冰棍盒_7) -icelollyboxf (冰棍盒_8) -jewelrybox_0 (盲盒) -jewelrybox_1 (开过的箱子) -kitchenwarerack (厨具架_1) -kitchenwareracka_1 (厨具架_2) -kitchenwareracka_2 (厨具架_3) -kitchenwareracka_3 (厨具架_4) -kitchenwarerackb_1 (厨具架_5) -kitchenwarerackb_2 (厨具架_6) -kitchenwarerackc_1 (厨具架_7) -kitchenwarerackc_2 (厨具架_8) -kitchenwarerackd_1 (厨具架_9) -kitchenwarerackd_2 (厨具架_10) -kitchenwarerackd_3 (厨具架_11) -kitchenwarerackd_4 (厨具架_12) -medicinetank (玻璃罐(药罐)) -medicinetank_1 (药罐_1) -medicinetank_2 (药罐_2) -medicinetank_3 (药罐_3) -medicinetank_4 (药罐_4) -melonicebox (炒冰盒_4) -orangeicebox (炒冰盒_5) -grapeicebox (炒冰盒_3) -frytheicebox_1 (炒冰盒_2) -rubbish_bin_2 (垃圾桶_1) -storage_buckets (垃圾桶_2) -woodenbox_0 (货桶_2(条箱_0)) -woodenbox_1 (条箱_1) -woodenbox_2 (条箱_2) -woodenbox_3 (条箱_3) -woodenbox_4 (条箱_4) -woodenbox_5 (条箱_5) -woodenbox_6 (条箱_6) -woodenbox_7 (条箱_7) -violet_beer_kegs_0 (满酒桶_17) -cabinet (橱柜_1) -cabinet_1 (橱柜_2) -farineblock_1 (面粉_2) -farineblock_2 (面粉_3) -farineblock_3 (面粉_4) -casting_table_1 (铸造台_4) -casting_table_2 (铸造台_10) -casting_table_3 (铸造台_11) -casting_table_4 (铸造台_12) -casting_table_5 (铸造台_13) -casting_table_6 (铸造台_14) -casting_table_7 (铸造台_15) -casting_table_8 (铸造台_16) -casting_table_9 (铸造台_17) -casting_table_10 (铸造台_5) -casting_table_13 (铸造台_6) -casting_table_14 (铸造台_7) -casting_table_15 (铸造台_8) -casting_table_16 (铸造台_9) - - -八、冰棍/雪糕展示方块 -================================================================================ -appleicecreamplace (冰棍_2) -apple_popsicleplace (冰棍_1) -grapeicecreamplace (葡萄冰棍_2) -grape_popsicleplace (葡萄冰棍_1) -melonicecreamplace (西瓜冰棍_2) -melon_popsicleplace (西瓜冰棍_1) -orangeicecreamplace (冰棍_3) -orange_popsicle_place (橙子冰棍) -peachicecreamplace (桃子冰棍_2) -peach_popsicleplace (桃子冰棍_1) -popsiclepile_2 (冰棍_4) -popsiclepile_3 (冰棍_5) - - -九、作物/果实方块 -================================================================================ -apple_fruit_1 (苹果1) -apple_fruit_2 (苹果2) -apple_fruit_3 (苹果3) -apple_pile (苹果堆) -carrot_pile (胡萝卜堆_2) -cod_pile (鳕鱼堆_2) -egg_pile (鸡蛋堆) -orangepile_0 (橙子堆) -peachpile (桃子堆) -peachpile_0 (桃子堆) -potato_pile (土豆堆_4) -salmon_pile (鲑鱼堆_2) -riceseedlingsa (稻苗_1) -riceseedlingsb (稻苗_2) -riceseedlingsc (稻苗_3) -riceseedlingsd (稻苗_4) -tangerine_0 (橘子_1) -tangerine_1 (橘子_2) -tangerine_2 (橘子_3) - - -十、寿司/鱼肉展示方块 -================================================================================ -cutsushi (寿司_9) -codsushi_1 (寿司_1) -codsushi_2 (寿司_2) -codsushi_3 (寿司_3) -codsushi_4 (寿司_4) -codsushi_5 (寿司_5) -codsushi_6 (寿司_6) -codsushicubes_1 (寿司_7) -codsushicubes_2 (寿司_8) -fishmonsushi_6 (寿司_10) -fishsushi_1 (寿司_11) -fishsushi_2 (寿司_12) -fishsushi_3 (寿司_13) -fishsushi_4 (寿司_14) -fishsushi_5 (寿司_15) -fishsushicubes_1 (寿司_16) -fishsushicubes_2 (寿司_17) -nigirisushi (寿司_18) -nigirisushicod_2 (寿司_19) -nigirisushicod_3 (寿司_20) -nigirisushifish_1 (手握鱼寿司_1) -nigirisushifish_2 (寿司_21) -nigirisushifish_3 (寿司_22) -nigirisushifishcod (手握鳕鱼寿司) -nigirisushifishsalmon_1 (手握鲑鱼寿司) -nigirisushisalnom_2 (寿司_23) -nigirisushisalnom_3 (寿司_24) -salmonsushi_1 (寿司_25) -salmonsushi_2 (寿司_26) -salmonsushi_3 (寿司_27) -salmonsushi_4 (寿司_28) -salmonsushi_5 (寿司_29) -salmonsushi_6 (寿司_30) -salmonsushicubes_1 (寿司_31) -salmonsushicubes_2 (寿司_32) -squid_sushi (手握鱼寿司_2) -squidsushi_2 (手握鱿鱼寿司_1) -squidsushi_3 (手握鱿鱼寿司_2) -sushi_0 (寿司_33) -sushi_1 (寿司_34) -sushipile_0 (寿司_35) -sushipile_1 (寿司_36) -sushipile_2 (寿司_37) -sushipile_3 (寿司_38) -sushipile_4 (寿司_39) -sushipile_5 (寿司_40) - - -十一、面食/汤面展示方块 -================================================================================ -assortedramen (什锦拉面) -braisednoodles (红烧面) -egg_noodles (鸡蛋面) -mushroomnoodles (菌菇面) -noodle_soup (斋面_1) -noodles_1 (蛋花面_1) -noodles_2 (蛋花面_2) -noodlesoup_1 (猪杂面) -noodlesoup_2 (羊杂面) -noodlesoup_3 (牛杂面) -noodlesoup_4 (菌菇鸡面) -tonkotsu_ramen (豚骨拉面) -vegetable_noodles (斋面_2) -yushengramen (鱼生拉面) - - -十二、汤碗展示方块 -================================================================================ -bowlaeggcodsoup (蛋花鳕鱼汤) -bowlalambstew (乱炖羊肉汤) -bowlavegetablelambsoup (清汤羊肉_2) -bowlavegetableleanbroth (青菜瘦肉汤) -bowlasoup (木碗) -bowlacarrotbeefsoup (牛里脊肉汤) -bowlacarrotcodsoup (萝卜鳕鱼汤) -bowlacarrotribs (萝卜排骨汤) -bowlabeefbonebroth (牛骨汤) -bowla_lambchopsoup (萝卜土豆小排汤) -bowlavegetablebeefsoup (蔬菜肉汤) -bowlofmushroomsoup (小鸡炖蘑菇) -bowlofrice (米饭_1) -bowlofrice_2 (米饭_2) -bowlofrice_3 (米饭_3) -bowlofriceegg (蛋炒饭) -bowlatufufish (豆腐鱼汤) -bowla_roujiamo (清汤羊肉_1) -brown_norieggsoup (瘦肉蛋花汤) -browncarrotfishsoupsoup (萝卜鱼骨汤) -brownlambsoupwithturnipssoup (萝卜里脊肉汤) -brownmushroomsoup (棕蘑菇汤) -brownvegetablefishsoup (鱼片汤) -bowlavegetablesstew (蔬菜汤) - - -十三、其他未在菜谱中使用但存在于zh_CN.lang的方块 -================================================================================ -barwood (木条_2) -b_15 (木条_1) -b_30 (鲑鱼箱) -brownpigfootsoup (蹄花汤) -cookingdough_0 (煎面团_0) -cookingdough_1 (煎面团_1) -cookingdought_0 (煎面团_0) -cookingdought_1 (煎面团_1) -cookingfish_1 (煎鱼_1) -cookinggarlic (煎大蒜) -cookingmeat_1 (煎肉_1) -cookingpotato (煎土豆) -cookingpotato_1 (煎土豆_1) -cookingrabbit_1 (煎兔肉_1) -cookingscallions (煎葱) -cookingsquid_1 (煎鱿鱼_1) -cookingsquid_2 (煎鱿鱼_2) -cookingvegetables_1 (煎蔬菜_1) -cookedcoddought_2 (面团_1) -cookedcoddought_3 (面团_2) -cookedcoddought_4 (面团_3) -cookedcoddought_5 (面团_4) -cookedcoddought_6 (面团_5) -cookeddought_1 (面团_6) -cookeddought_2 (面团_7) -cookeddought_3 (面团_8) -cookeddought_4 (面团_9) -cookeddought_5 (面团_10) -cookeddought_6 (面团_11) -cookingpancake_2 (煎饼_2) -cutcarrot_0 (胡萝卜_1) -cutcarrot_1 (胡萝卜_2) -cutcarrot_2 (胡萝卜_3) -cutcarrot_3 (胡萝卜_4) -cutcarrot_4 (胡萝卜_5) -cutgarlic (大蒜) -cutpotato_0 (土豆_1) -cutpotato_1 (土豆_2) -cutpotato_2 (土豆_3) -cutpotato_3 (土豆_4) -cutpotato_4 (土豆_5) -cutscallions_1 (葱花_1) -cutscallions_2 (葱花_2) -cutscallions_3 (葱花_3) -cutscallions_4 (葱花_4) -cutvegetable_0 (青菜_1) -cutvegetable_1 (青菜_2) -cutvegetable_2 (青菜_3) -cutvegetable_3 (青菜_4) -dought_2 (面团_13) -dought_3 (面团_14) -dought_4 (面团_15) -dought_5 (面团_16) -dought_6 (面团_17) -dought_7 (面团_18) -dought_8 (加工面饼) -dumplings_5 (饺子皮_4) -dumplings_6 (饺子皮_5) -farineblcok (面粉_1) -fishingnet (网) -fishingnet_1 (渔网) -fruitjuice_0 (玻璃杯) -fruitjuice_1 (西瓜汁) -fruitjuice_2 (橙汁) -fruitjuice_3 (苹果汁) -fruitjuice_4 (桃子汁) -fruitjuice_5 (饮料) -fruitjuice_6 (葡萄汁) -fruitjuice_7 (豆浆) -killcod_0 (死去的鲑鱼_1) -killcod_1 (死去的鳕鱼_1) -killcod_2 (死去的鳕鱼_2) -killfish_0 (死去的鲑鱼_2) -killfish_1 (死去的鲑鱼_3) -killfish_2 (死去的鲑鱼_4) -killfish_3 (死去的鲑鱼_5) -manger_0 (饲料槽_1) -manger_1 (饲料槽_2) -manger_2 (饲料槽_3) -manger_3 (饲料槽_4) -mangers (饲料槽_5) -mangerwater (饲料槽_6) -chickenmanger_0 (鸡饲料盆_1) -chickenmanger_1 (鸡饲料盆_2) -pigmanger_1 (饲料槽_7) -pigmanger_2 (饲料槽_8) -pigmanger_3 (饲料槽_9) -rawdough_0 (生面团_2) -rawdough_1 (生面团_3) -rawdough_2 (生面团_4) -rawdough_3 (生面团_5) -rawdough_4 (生面团_6) -rollingpin_1 (擀面杖_2) -rollingpin_2 (擀面杖_3) -rollingpin_3 (擀面杖_4) -cookstoves (炊灶) - - -================================================================================ -总结:以上方块在 zh_CN.lang 中存在,但均未在 RecipeData.py 和 BlockSwitchData.py -的 source/target 字段中出现。其中大部分是纯装饰方块、食物展示品、作物方块、 -寿司展示品、汤碗展示品等,它们可能是通过其他方式(如直接放置物品、 -工作台合成等)来使用的,不参与方块交互逻辑。 -================================================================================