diff --git a/Java版与基岩版配方差异对比.txt b/Java版与基岩版配方差异对比.txt deleted file mode 100644 index 3436e5a..0000000 --- a/Java版与基岩版配方差异对比.txt +++ /dev/null @@ -1,350 +0,0 @@ -================================================================================ - Java版(乡野forge1.20.1-第三版)与基岩版(netease_recipes)配方差异对比 -================================================================================ - -说明: -- Java版配方文件位于:乡野forge1.20.1-第三版/data/minecraft/recipes/ -- 基岩版配方文件位于:behavior_pack_v8jz0zSR/netease_recipes/ -- "一致"表示材料、布局、产出均相同 -- 仅列出有差异的配方 - -================================================================================ -一、配方完全一致的 -================================================================================ - -1. 箭桶 (arrowbarrel_0) ★ 已确认一致 - Java: f_207.json - 1个云杉活板门 → 1个箭桶_0 - 基岩: xy_arrowbarrel_0 - 1个云杉活板门 → 1个箭桶_0 - ✓ 一致 - -2. 晾干架 (dryingrack) ★ 已确认一致 - Java: f_107.json - 支杆x4 + 木棍x2 → 2个晾干架 - 基岩: xy_dryingrack - 支杆x4 + 木棍x2 → 2个晾干架 - ✓ 一致 - -3. 书柜 (bookcase) - Java: f_116.json - 箱子x1 + 任意木板x1 → 1个书柜 - 基岩: xy_bookcase - 箱子x1 + 任意木板x1 → 1个书柜 - ✓ 一致 - -4. 苹果堆 (apple_pile) - Java: f_49.json - 苹果x8 → 1个苹果堆 - 基岩: xy_apple_pile - 苹果x8 → 1个苹果堆 - ✓ 一致 - -5. 面包堆 (bread_pile) - Java: f_51.json - 面包x8 → 1个面包堆 - 基岩: xy_bread_pile - 面包x8 → 1个面包堆 - ✓ 一致 - -6. 胡萝卜堆 (carrot_pile) - Java: f_53.json - 胡萝卜x8 → 1个胡萝卜堆 - 基岩: xy_carrot_pile - 胡萝卜x8 → 1个胡萝卜堆 - ✓ 一致 - -7. 鳕鱼堆 (cod_pile) - Java: f_50.json - 鳕鱼x8 → 1个鳕鱼堆 - 基岩: xy_cod_pile - 鳕鱼x8 → 1个鳕鱼堆 - ✓ 一致 - -8. 铜锭堆 (copperingotpile) - Java: f_181.json - 铜锭x6 → 1个铜锭堆 - 基岩: xy_copperingotpile - 铜锭x6 → 1个铜锭堆 - ✓ 一致 - -9. 红色布料 (cloth_red) - Java: f_18.json - 红色羊毛x2 + 白色羊毛x1 → 1个红色布料 - 基岩: xy_cloth_red - 红色羊毛x2 + 白色羊毛x1 → 1个红色布料 - ✓ 一致 - -10. 黄色布料 (cloth_yellow) - Java: f_4.json - 黄色羊毛x2 + 白色羊毛x1 → 1个黄色布料 - 基岩: xy_cloth_yellow - 黄色羊毛x2 + 白色羊毛x1 → 1个黄色布料 - ✓ 一致 - -11. 蓝色布料 (cloth_blue) - Java: f_8.json - 淡蓝色羊毛x2 + 白色羊毛x1 → 1个蓝色布料 - 基岩: xy_cloth_blue - 淡蓝色羊毛x2 + 白色羊毛x1 → 1个蓝色布料 - ✓ 一致 - -12. 紫色布料 (cloth_purple) - Java: f_250.json - 紫色羊毛x2 + 白色羊毛x1 → 1个紫色布料 - 基岩: xy_cloth_purple - 紫色羊毛x2 + 白色羊毛x1 → 1个紫色布料 - ✓ 一致 - -13. 黄绿色布料 (cloth_lime) - Java: f_251.json - 绿色羊毛x2 + 黄绿色羊毛x1 → 1个黄绿色布料 - 基岩: xy_cloth_lime - 绿色羊毛x2 + 黄绿色羊毛x1 → 1个黄绿色布料 - ✓ 一致 - -14. 旗子 (flag) - Java: f_11.json - 支杆x3 + 黄绿色布料x1 + 黄色布料x1 → 4面旗子 - 基岩: xy_flag - 支杆x3 + 黄绿色布料x1 + 黄色布料x1 → 4面旗子 - ✓ 一致 - -15. 蓝石灰斜纹旗 (flag_blue_lime_oblique) - Java: f_20.json - 支杆x3 + 蓝色布料x1 + 黄绿色布料x1 → 4面 - 基岩: xy_flag_blue_lime_oblique - 同上 - ✓ 一致 - -16. 风车叶 (fanblades) - Java: f_102.json - 木条x4 + 白色羊毛x4 + 支杆x1 → 1个 - 基岩: xy_fanblades - 木条x4 + 白色羊毛x4 + 支杆x1 → 1个 - ✓ 一致 - -17. 鸡蛋堆 (egg_pile) - Java: f_279.json - 鸡蛋x9 → 1个鸡蛋堆 - 基岩: xy_egg_pile - 鸡蛋x9 → 1个鸡蛋堆 - ✓ 一致 - -18. 鱼桶 (fishbucket_0) - Java: f_210.json - 木条x7 → 1个鱼桶 - 基岩: xy_fishbucket_0 - 木条x7 → 1个鱼桶 - ✓ 一致 - -19. 渔网 (fishingnet) - Java: f_236.json - 线x5 → 1个渔网 - 基岩: xy_fishingnet - 线x5 → 1个渔网 - ✓ 一致 - -20. 鱼缸 (fishtank) - Java: f_222.json - 玻璃x1 + 石头x1 → 1个鱼缸 - 基岩: xy_fishtank - 玻璃x1 + 石头x1 → 1个鱼缸 - ✓ 一致 - -21. 铸造台 (casting_table) - Java: f_93.json - 铁粒x2 + 高炉x1 + 砖x1 → 1个铸造台 - 基岩: xy_casting_table - 铁粒x2 + 高炉x1 + 砖x1 → 1个铸造台 - ✓ 一致 - -22. 竹栏 (bamboomeshfence) - Java: f_237.json - 竹子x6 → 1个竹栏 - 基岩: xy_bamboomeshfence - 竹子x6 → 1个竹栏 - ✓ 一致 - -23. 车 (cart) - Java: f_1.json - 木条x4 + 车轮x2 → 1个车 - 基岩: xy_cart - 木条x4 + 车轮x2 → 1个车 - ✓ 一致 - -24. 金锭堆 (goldingotpile) - Java: f_180.json - 金锭x6 → 1个金锭堆 - 基岩: xy_goldingotpile - 金锭x6 → 1个金锭堆 - ✓ 一致 - -25. 铁锭堆 (ingotpile) - Java: f_182.json - 铁锭x6 → 1个铁锭堆 - 基岩: xy_ingotpile - 铁锭x6 → 1个铁锭堆 - ✓ 一致 - -26. 搅拌器 (beater) - Java: f_324.json - 木条x3 + 木棍x1 → 1个搅拌器 - 基岩: xy_beater - 木条x3 + 木棍x1 → 1个搅拌器 - ✓ 一致 - -27. 厨具架 (kitchenwarerack) - Java: f_262.json - 木条x2 + 支杆x1 → 1个厨具架 - 基岩: xy_kitchenwarerack - 木条x2 + 支杆x1 → 1个厨具架 - ✓ 一致 - -28. 车 (cart) - Java: f_1.json - 木条x4 + 车轮x2 → 1个车 - 基岩: xy_cart - 木条x4 + 车轮x2 → 1个车 - ✓ 一致 - - -================================================================================ -二、配方有差异的 -================================================================================ - -1. 梯子 (ladder) ★ 材料数量不同 - Java (f_10.json): 3x3满格 - ┌──────┬──────┬──────┐ - │ 支杆 │ 木棍 │ 支杆 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 木棍 │ 支杆 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 木棍 │ 支杆 │ - └──────┴──────┴──────┘ - 材料: 支杆x6 + 木棍x3 - 产出: 1个梯子 - - 基岩 (xy_ladder.json): 3x3满格 - ┌──────┬──────┬──────┐ - │ 支杆 │ 木棍 │ 支杆 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 木棍 │ 支杆 │ - ├──────┼──────┼──────┤ - │ 支杆 │ 木棍 │ 支杆 │ - └──────┴──────┴──────┘ - 材料: 支杆x6 + 木棍x3 - 产出: 1个梯子 - ✓ 实际上一致!(之前看错了,Java版也是3x3满格) - -2. 纺车 (spinner) ★ 材料不同 - Java (f_13.json): - 材料: 支杆x4 + 线x2 + 车轮x1 - 产出: 1个纺车 - - 基岩 (xy_spinner): - 材料: 支杆x5 + 线x1 + 车轮x1 - 产出: 1个纺车 - ✗ 差异:Java版用4支杆+2线,基岩版用5支杆+1线 - -3. 橱柜 (cabinet) ★ 材料不同 - Java (f_?): 未在Java版中找到独立配方 - 基岩 (xy_cabinet): 木条x5 + 任意木台阶x3 → 1个橱柜 - ✗ Java版可能没有独立的橱柜配方 - -4. 碗柜 (cupboard_0) ★ 材料不同 - Java: 未找到直接对应配方 (可能由其他方式合成) - 基岩 (xy_cupboard_0): 木条x4 + 任意木板x2 → 1个碗柜 - ✗ Java版可能没有独立的碗柜配方 - -5. 烧烤架 (barbecuegrill_0) ★ 材料不同 - Java: 未找到直接对应配方 - 基岩: 方案A(铁锭x2+铁粒x3+煤炭x1) / 方案B(铁粒x4+铁栏杆x1+煤炭x1) - ✗ Java版可能没有烧烤架配方 - -6. 鸡窝 (chickencoop_0) - Java: 未找到直接对应配方 - 基岩: 小麦x3 → 3个鸡窝 - ✗ Java版可能没有鸡窝配方 - -7. 鸡饲料盆 (chickenmanger_0) - Java: 未找到直接对应配方 - 基岩: 1个木条 → 1个鸡饲料盆 - ✗ Java版可能没有鸡饲料盆配方 - -8. 柴火 (firewood) - Java: 未找到直接对应配方 - 基岩: 9个任意原木 → 9个柴火 - ✗ Java版可能没有柴火配方 - -9. 柴火_2 (firewood_2) - Java: 未找到直接对应配方 - 基岩: 6个任意原木 → 9个柴火_2 - ✗ Java版可能没有柴火_2配方 - -10. 鲑鱼堆 (salmon_pile) - Java (f_52.json): 鲑鱼x8 → 1个鲑鱼堆 (8个材料,中间空) - 基岩: 鲑鱼x8 → 1个鲑鱼堆 - ✓ 一致 - -11. 支杆 (support_rod) 合成方式不同 - Java: 有多个配方 - - f_70.json: 3个木条 → 2个支杆 - - f_235.json: 6个木条(2x3) → 1个支杆 - - f_2.json: 3个木棍 → 1个支杆 (另有切石机: 4个木板 → 4个木条) - 基岩: 未在配方中见到支杆合成 - ✗ Java版有支杆的多种合成方式,基岩版未定义支杆配方 - -12. 车轮 (wheel) - Java (f_69.json): 5个木棍(十字形) → 1个车轮 - 基岩: 未找到车轮配方 - ✗ Java版有车轮合成配方,基岩版未定义 - -13. 晾干架产出数量 - Java: 支杆x4 + 木棍x2 → 2个晾干架 - 基岩: 支杆x4 + 木棍x2 → 2个晾干架 - ✓ 一致 - -14. 售卖盒 (sellingboxes) - Java (f_101.json): 木条x7(中间空) → 1个售卖盒 - 基岩: 未找到对应配方 - ✗ Java版有售卖盒配方,基岩版未定义 - - -================================================================================ -三、Java版有但基岩版没有的配方(额外配方) -================================================================================ - -Java版比基岩版多出以下类型的配方: - -A. 工具类: - - 放大镜 (magnifying_glass): f_16.json - 金粒x3 + 玻璃板x1 + 木棍x1 - - 钳子 (pinchers): f_213.json - 铁锭x3 + 皮革x1 - - 铁叉 (iron_fork): f_71.json - 铁锭x3 + 木棍x2 - - 铁锯 (iron_saw): f_125.json - 铁锭x2 + 木棍x3 - - 铁镰刀 (iron_scythe): f_124.json - 铁锭x2 + 木棍x3 - - 锤子 (hammer): f_73.json/f_88.json - 废石/石头 + 铁锭 + 木棍 - - 锅勺 (potandspoon_0): f_261.json - 铁锭 + 支杆x2 - - 锅铲 (spatula): f_260.json - 铁锭 + 支杆x2 - - 擀面杖 (rollingpin): f_257.json - 支杆 + 木板 - - 菜刀 (cleaver): f_28.json - 铁锭 + 木棍 - - 挂钩 (hooking): f_26.json - 铁粒x4 - - 肉钩 (meathook): f_27.json - 支杆x2 + 挂钩x2 - - 石臼 (mortar): f_91.json/f_214.json - 圆石/骨头x3 - - 石磨 (stonemill): f_267.json - 石头x3 + 支杆x1 - -B. 布料/遮阳布类: - - 橙色布料 (cloth_orange): f_249.json - - 各色遮阳布:sunshade_cloth_red/yellow/blue/purple/lime 等 - - 黄绿色遮阳布 (sunshaden_cloth_lime): f_277.json - - 橙色遮阳布 (sunshaden_cloth_orange): f_273.json - -C. 旗帜变体: - - 红橙斜纹旗 (flag_red_orange_oblique): f_12.json - - 棕蓝旗 (flag_brown_blue): f_252.json/f_253.json - -D. 食物/材料加工: - - 烤肉/熏烤类:各种肉的campfire_cooking/smoking/smelting配方 - - 火药合成:f_212.json - 硝石 + 木炭 + 硫磺 - - 粗皮 (coarseskin): f_254.json - 腐肉x9 - - 口袋 (pocket): f_271.json - 皮革 + 粗皮 + 线 - - 面团 (rawdough): f_152.json - 小麦x4 + 水桶 - - 热水桶 (hot_water_bucket): f_25.json - 水桶烧炼 - - 香料瓶 (spicebottle): f_266.json - - 黑椒瓶 (spicebottlesalt): f_264.json - - 菜谱书 (menubook): f_266.json - - 炒锅 (wok): f_268.json - 铁锭x4 + 煤炭 - - 炖锅 (stewedsoup): f_274.json - -E. 装饰/功能方块: - - 置物架 (shelving): f_99.json - 云杉活板门x2 - - 木条 (barwood): f_3.json - 切石机:木板→4个木条 - - 原木→木棍:f_186.json - 粗木x2 → 4个木棍 - - 粗木→工作台:f_187.json - 粗木x4 - - 粗木→箱子:f_185.json - 粗木x8 - - 酒桶 (wine_barrel): f_40.json - 木板x6 + 木条x2 - - 盘子 (plate_0): f_191.json - 木板x2 + 木台阶x1 → 6个盘子 - - 盘子堆 (platepile): f_238.json - 盘子x9 - - 餐牌 (menus): f_256.json - 木条x2 → 4个餐牌 - - 药罐 (medicinetank): f_224.json - 木板 + 玻璃 - - 药罐_1~4: f_216~219.json - - 绷带 (bandage): f_215.json - - 冰棍盒 (icelollybox_1): f_329.json - 木条x3 + 木台阶x2 - - 稻草人 (scarecrow): f_6.json - 南瓜头 + 草帽 + 支杆x2 + 干草块 - - 支撑 (prop_up): f_7.json - 支杆x5 → 2个支撑 - - 木条_2 (barwood): f_3.json - 切石机 - - 桃子堆 (peachpile_0): f_183.json - - 橙子堆 (orangepile_0): f_184.json - - 饮品机 (juicer): f_87.json - - 蒸笼 (steamer): f_310.json - - -================================================================================ -四、基岩版特有但Java版没有的配方 -================================================================================ - -1. 橱柜 (cabinet) - 基岩版有,Java版未找到 -2. 橱柜_1 (cabinet_1) - 基岩版有,Java版未找到 -3. 碗柜 (cupboard_0) - 基岩版有,Java版未找到 -4. 烧烤架 (barbecuegrill_0) 方案A/B - 基岩版有,Java版未找到 -5. 鸡窝 (chickencoop_0) - 基岩版有,Java版未找到 -6. 鸡饲料盆 (chickenmanger_0) - 基岩版有,Java版未找到 -7. 柴火 (firewood) - 基岩版有,Java版未找到 -8. 柴火_2 (firewood_2) - 基岩版有,Java版未找到 - - -================================================================================ -五、总结 -================================================================================ - -- 大部分核心配方(箭桶、晾干架、书柜、布料、旗帜、堆叠类等)在两个版本中一致 -- 纺车(spinner)配方材料有差异(Java: 4支杆+2线+1车轮,基岩: 5支杆+1线+1车轮) -- Java版有大量额外配方(工具、遮阳布、旗帜变体、食物加工等),基岩版尚未实现 -- 基岩版有部分配方(橱柜、碗柜、烧烤架、柴火等)是Java版没有的 -- Java版的支杆和车轮有独立的合成配方,基岩版未定义 - -================================================================================ \ No newline at end of file diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/RecipeData.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/RecipeData.py index 95af9fd..c643eb6 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/RecipeData.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/RecipeData.py @@ -16,8 +16,42 @@ 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 = [ # ===================================================================== diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/ToolData.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/ToolData.py deleted file mode 100644 index 069aea4..0000000 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/ToolData.py +++ /dev/null @@ -1,257 +0,0 @@ -# -*- coding: utf-8 -*- -""" -工具配置数据库(ToolData.py) -============================ -独立于 RecipeData.py,专门管理烹饪工具的配置信息: - - 每个工具的激活方式(用什么物品右键激活) - - 底座要求(下面必须放什么方块才能工作) - - 哪些工具本身可以作为底座(发热源) - - 工具的状态切换链 - -与 RecipeData.py 的关系: - RecipeData.py = 食材配方(什么食材+什么锅 = 什么菜) - ToolData.py = 工具配置(锅怎么激活、需要什么底座) - -CookingService 会同时加载这两个数据库,做菜时先检查工具配置,再查配方。 -""" - -# ============================================================ -# 一、工具激活/底座配置 -# ============================================================ -# 格式:工具源方块 -> {激活物品, 底座列表, 激活后目标, 其他配置} -# 当玩家用指定物品右键工具时,工具从"源方块"变成"目标方块" -# 如果底座列表不为空,工具下面必须有一个底座方块才能激活 - -TOOL_CONFIG = { - # ==================== 炒锅 ==================== - "rtdd:wok": { - "name": "炒锅", - "activate_item": "rtdd:spatula_oil", # 用带油锅铲激活 - "check_oil": True, # 需要检查物品含油标签 - "base_blocks": [ # 下面必须放这些方块之一 - "rtdd:cookstoves", # 灶台(基础款,有火) - "rtdd:stove_2", # 灶台(高级款,有火) - "minecraft:campfire", # 原版营火 - ], - "target": "rtdd:oilpan", # 激活后变成煎锅 - "need_fire": True, # 需要火源 - "is_heat_source": False, # 不是发热源 - }, - - # ==================== 煎锅 ==================== - "rtdd:oilpan": { - "name": "煎锅", - "activate_item": "rtdd:spatula_oil", # 用带油锅铲激活 - "check_oil": True, - "base_blocks": [ - "rtdd:cookstoves", - "rtdd:stove_2", - "minecraft:campfire", - ], - "target": "rtdd:oilpan", # 激活后不变(只是上油标记) - "need_fire": True, - "is_heat_source": False, - }, - - # ==================== 油锅 ==================== - "rtdd:oilpot_0": { - "name": "油锅", - "activate_item": "rtdd:oilcan", # 用油罐直接激活 - "check_oil": False, # 不需要检查物品含油 - "base_blocks": [ - "rtdd:cookstoves", - "rtdd:stove_2", - "minecraft:campfire", - ], - "target": "rtdd:oilpot_1", # 激活后变成倒了油的油锅 - "need_fire": True, - "is_heat_source": False, - }, - - # ==================== 架锅 ==================== - "rtdd:potsimmering_0": { - "name": "架锅", - "activate_item": "minecraft:water_bucket", # 用水桶加水 - "check_oil": False, - "base_blocks": [ - "rtdd:cookstoves", - "rtdd:stove_2", - "minecraft:campfire", - ], - "target": "rtdd:potsimmeringwater", # 激活后变成加了水的架锅 - "need_fire": True, - "is_heat_source": False, - }, - - # ==================== 蒸笼 ==================== - "rtdd:steamer": { - "name": "蒸笼", - "activate_item": "rtdd:steamercover", # 用蒸笼盖盖盖 - "check_oil": False, - "base_blocks": [ - "rtdd:cookstoves", - "rtdd:stove_2", - "minecraft:campfire", - ], - "target": "rtdd:steamer", # 盖盖后不变(只是标记已盖盖) - "need_fire": True, - "is_heat_source": False, - }, - - # ==================== 烧烤架 ==================== - "rtdd:barbecuegrill_0": { - "name": "烧烤架", - "activate_item": "minecraft:flint_and_steel", # 打火石点火 - "check_oil": False, - "base_blocks": [], # 不需要底座(自己就是发热源) - "target": "rtdd:barbecuegrill_1", # 点火后变成烧烤架_1 - "need_fire": False, - "is_heat_source": False, # 0状态还没点火,不是发热源 - }, - - # ==================== 搅拌器 ==================== - "rtdd:beater": { - "name": "搅拌器", - "activate_item": None, # 不需要激活,直接放食材 - "check_oil": False, - "base_blocks": [], # 手工工具,不需要底座 - "target": None, - "need_fire": False, - "is_heat_source": False, - }, - - # ==================== 榨汁机 ==================== - "rtdd:juicer_0": { - "name": "榨汁机", - "activate_item": None, - "check_oil": False, - "base_blocks": [], - "target": None, - "need_fire": False, - "is_heat_source": False, - }, - - # ==================== 丸子机 ==================== - "rtdd:meatballmaker_0": { - "name": "丸子机", - "activate_item": None, - "check_oil": False, - "base_blocks": [], - "target": None, - "need_fire": False, - "is_heat_source": False, - }, - - # ==================== 酒桶 ==================== - "rtdd:wine_barrel": { - "name": "酒桶", - "activate_item": None, - "check_oil": False, - "base_blocks": [], - "target": None, - "need_fire": False, - "is_heat_source": False, - }, - - # ==================== 面粉方块 ==================== - "rtdd:farineblock": { - "name": "面粉方块", - "activate_item": None, - "check_oil": False, - "base_blocks": [], - "target": None, - "need_fire": False, - "is_heat_source": False, - }, -} - -# ============================================================ -# 二、发热源配置(哪些方块可以作为底座) -# ============================================================ -# 这些方块放在锅下面,锅就能工作 - -HEAT_SOURCES = { - # 模组自定义灶台 - "rtdd:cookstoves": { - "name": "灶台(基础款)", - "heat_level": 1, - "supports": [ - "炒锅", "煎锅", "油锅", "架锅", "蒸笼" - ], - }, - "rtdd:stove_2": { - "name": "灶台(高级款·有火)", - "heat_level": 1, - "supports": [ - "炒锅", "煎锅", "油锅", "架锅", "蒸笼" - ], - }, - - # 原版底座 - "minecraft:campfire": { - "name": "营火", - "heat_level": 1, - "supports": [ - "炒锅", "煎锅", "油锅", "架锅", "蒸笼" - ], - }, -} - -# ============================================================ -# 三、工具状态切换链(完整的状态流转) -# ============================================================ -# 格式:工具名 -> 状态列表(从初始到结束) - -TOOL_STATE_CHAINS = { - "炒锅": { - "chain": ["rtdd:wok", "rtdd:oilpan", "rtdd:wok"], - "description": "空炒锅 -> 上油(煎锅) -> 做完菜 -> 空炒锅", - }, - "油锅": { - "chain": ["rtdd:oilpot_0", "rtdd:oilpot_1", "rtdd:oilpot_0"], - "description": "空油锅 -> 倒油 -> 炸食材 -> 空油锅", - }, - "架锅": { - "chain": ["rtdd:potsimmering_0", "rtdd:potsimmeringwater", "rtdd:potsimmering_0"], - "description": "空架锅 -> 加水 -> 炖食材 -> 空架锅", - }, - "蒸笼": { - "chain": ["rtdd:steamer", "rtdd:steamer", "rtdd:steamer"], - "description": "蒸笼 -> 盖盖 -> 蒸食材 -> 蒸笼(状态不变,通过标记控制)", - }, - "烧烤架": { - "chain": ["rtdd:barbecuegrill_0", "rtdd:barbecuegrill_1", "rtdd:barbecuegrill_0"], - "description": "烧烤架 -> 点火 -> 烤食材 -> 烧烤架", - }, - "榨汁机": { - "chain": ["rtdd:juicer_0", "rtdd:juicer_1", "rtdd:juicer_2", - "rtdd:juicer_3", "rtdd:juicer_4", "rtdd:juicer_0"], - "description": "空榨汁机 -> 放水果 -> 摇1 -> 摇2 -> 摇3 -> 取果汁 -> 空榨汁机", - }, - "丸子机": { - "chain": ["rtdd:meatballmaker_0", "rtdd:meatballmaker_1", "rtdd:meatballmaker_2", - "rtdd:meatballmaker_3", "rtdd:meatballmaker_4", "rtdd:meatballmaker_5", - "rtdd:meatballmaker_0"], - "description": "空丸子机 -> 放碎肉 -> 摇1 -> 摇2 -> 摇3 -> 摇4 -> 取肉丸 -> 空丸子机", - }, - "酒桶": { - "chain": ["rtdd:wine_barrel", "b_81", "b_238", "rtdd:wine_barrel"], - "description": "酒桶 -> 放原料 -> 发酵 -> 取酒 -> 酒桶", - }, -} - -# ============================================================ -# 四、工具分类(快速查询) -# ============================================================ - -# 需要火源的厨具(必须放在发热底座上) -NEED_FIRE_TOOLS = [k for k, v in TOOL_CONFIG.items() if v.get("need_fire")] - -# 手工工具(不需要底座,放哪里都能用) -MANUAL_TOOLS = [k for k, v in TOOL_CONFIG.items() if not v.get("need_fire") and not v.get("is_heat_source")] - -# 发热源工具(激活后可以作为底座) -HEAT_SOURCE_TOOLS = [k for k, v in TOOL_CONFIG.items() if v.get("is_heat_source")] - -# 所有合法底座方块(原版+模组) -ALL_BASE_BLOCKS = list(HEAT_SOURCES.keys()) \ No newline at end of file diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py index 815fa78..523b876 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py @@ -47,7 +47,7 @@ blockEntityDataComp = comp.CreateBlockEntityData(LevelId) # ---- 导入所有配方 ---- # RECIPES 是一个列表,每条配方是一个 dict,格式见 RecipeData.py 顶部注释 -from ..RecipeData import RECIPES +from ..RecipeData import RECIPES, inferBaseBlock, BELOW_CAMPFIRE # ---- 导入工具方块切换规则 ---- # BLOCK_SWITCHES 是一个列表,每条规则是一个 dict,格式见 BlockSwitchData.py 顶部注释 @@ -229,6 +229,10 @@ class CookingService(BlueFoxServerSystem): # 没找到匹配的配方 → 不是做菜操作,不拦截,让游戏正常处理 return + # ---- 底座检查:锅下面必须有灶台/营火,否则不让操作 ---- + if not self.checkBaseBlock(recipe, playerId, pos, dim): + return + # 找到配方后,取消默认行为(如喝药水、吃食物等),由本 Mod 全权接管 args['cancel'] = True # 同时标记该玩家下一次物品使用事件也要取消,防止喝药水等默认行为 @@ -578,6 +582,53 @@ class CookingService(BlueFoxServerSystem): 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 + # ============================================================================ # 条件检查 # ============================================================================ @@ -586,27 +637,10 @@ class CookingService(BlueFoxServerSystem): """ 检查配方的前置条件是否满足。 - 目前支持两种条件: - 1. below:锅下面一格必须是特定方块(比如灶台或营火) - 2. needOil:玩家手里的物品必须带有油标签 - - 两个条件都满足才返回 True,有一个不满足就返回 False。 + 目前只检查 needOil:玩家手里的物品必须带有油标签。 + 底座检查已移到入口 checkBaseBlock 统一处理。 """ - # ---- 条件1:检查下面是否有指定方块(底座检查) ---- - if recipe.get("below"): - # 下面一格坐标:(x, y-1, z) - belowPos = (pos[0], pos[1] - 1, pos[2]) - blockComp = comp.CreateBlockInfo(playerId) - try: - belowBlock = blockComp.GetBlockNew(belowPos, dim) - # 比较下面方块的名字是否和配方要求的底座一致 - if belowBlock.get("name") != recipe["below"]: - return False - except: - # 读取失败(比如方块不存在)→ 条件不满足 - return False - - # ---- 条件2:检查物品是否有油标签 ---- + # ---- 检查物品是否有油标签 ---- if recipe.get("needOil") and itemDict: if not self.getItemOil(itemDict): return False @@ -643,18 +677,19 @@ class CookingService(BlueFoxServerSystem): """ 消耗玩家主手物品的指定数量。 - 如果数量不够 → 清空主手(SetEntityItem 传 None) + 如果数量不够 → 清空主手 如果数量够 → 减少对应数量 重要:SetInvItemNum 的参数是背包槽位索引(int),不是 ItemPosType 枚举。 - 清空主手必须用 SetEntityItem(CARRIED, None),不能用 SetInvItemNum。 """ + if itemDict is None: + return count = itemDict.get("count", 0) if count <= amount: # 数量不够或刚好用完 → 清空主手 comp.CreateItem(playerId).SetEntityItem( serverApi.GetMinecraftEnum().ItemPosType.CARRIED, - None) + {"count": 0}) else: # 数量够 → 减少 amount 个 itemDict["count"] = count - amount diff --git a/resource_pack_Are13Lvd/entity/collection_test.json b/resource_pack_Are13Lvd/entity/collection_test.json index dd2a2aa..818fcad 100644 --- a/resource_pack_Are13Lvd/entity/collection_test.json +++ b/resource_pack_Are13Lvd/entity/collection_test.json @@ -6,7 +6,7 @@ "default": "geometry.test_collection" }, "materials": { - "default":"collection_test" + "default":"entity_alphatest" }, "render_controllers": [ "controller.render.agent" diff --git a/resource_pack_Are13Lvd/texts/zh_CN.lang b/resource_pack_Are13Lvd/texts/zh_CN.lang index 339896b..2f05d32 100644 --- a/resource_pack_Are13Lvd/texts/zh_CN.lang +++ b/resource_pack_Are13Lvd/texts/zh_CN.lang @@ -471,9 +471,9 @@ tile.rtdd:riceseedlingsd.name=稻苗_4(稻苗) tile.rtdd:riceseedlingsb.name=稻苗_2(稻苗) tile.rtdd:riceseedlingsc.name=稻苗_3(稻苗) tile.rtdd:beefbonebroth_3.name=汤锅_6(牛骨汤_3) -tile.rtdd:stove_1.name=炉灶(炉灶_2) +tile.rtdd:stove_1.name=炉灶(炉灶_加木条) tile.rtdd:riceseedlingsa.name=稻苗_1(稻苗) -tile.rtdd:stove_2.name=炉灶(炉灶_3) +tile.rtdd:stove_2.name=炉灶(炉灶_点燃) tile.rtdd:noodlesoup_2.name=羊杂面(杂面_2) tile.rtdd:noodlesoup_3.name=牛杂面(杂面_3) tile.rtdd:noodlesoup_4.name=菌菇鸡面(杂面_4) @@ -1026,7 +1026,7 @@ tile.rtdd:sales_box_apple.name=苹果盒_2(苹果盒) tile.rtdd:cloth_blue.name=淡蓝色布料(蓝色布料) tile.rtdd:sales_box_watermelon.name=西瓜盒_2(西瓜盒) tile.rtdd:rawnoodlesoup.name=汤锅_65(生面汤) -tile.rtdd:stove.name=炉灶(炉灶_1) +tile.rtdd:stove.name=炉灶(炉灶_空) tile.rtdd:b_16.name=土豆盒_1 tile.rtdd:b_15.name=木条_1 tile.rtdd:b_14.name=木桶_1 diff --git a/代办设计 b/代办设计 index d043e14..5ba265d 100644 --- a/代办设计 +++ b/代办设计 @@ -1,6 +1,8 @@ 做饭工具 物品化 (铲子汤勺盘子) -厨具 按流程替换方块(烧烤架点火) -底座方块分析(锅下面是灶) +厨具 按流程替换方块(比如烧烤架点火) + +底座方块判断(锅下面是灶) + 菜品做出后方块化 盘子 清洗/盛饭/放置 切菜 @@ -10,7 +12,9 @@ tab页仍需要细分,ai分的不行 所有的贴图都需要重新换 动物骸骨 动物自然死亡遗留 没有树苗模型 物品 -树苗生长 +树苗生长 群系生成 +动物自然死亡 +死亡后替换死亡模型(死猪) 不知道干嘛用的: diff --git a/工具方块切换列表,不包含功能 b/工具方块切换列表,不包含功能 index 05a6e71..051b002 100644 --- a/工具方块切换列表,不包含功能 +++ b/工具方块切换列表,不包含功能 @@ -19,7 +19,7 @@ 9.烧烤架_2(烧烤架点燃) -> 烤烤架_1(烧烤架无火) 转换条件:[水桶 右键 进行转换,消耗水桶变成桶] -10.炉灶(炉灶_1) -> 炉灶(炉灶_2) -> 炉灶(炉灶_3) +10.炉灶(炉灶_空) -> 炉灶(炉灶_加木条) -> 炉灶(炉灶_点燃) 转换: 1->2:木条 右键 木条数量减少 2->3:打火石/烈焰弹 右键 进行转换