汤锅功能实现 2

This commit is contained in:
wenhe committed 2026-09-14 17:10:00 +08:00
1 parent 30ac368690
commit 25b023b703
5 files changed
+82 -29

No files matched your search

@@ -35,7 +35,7 @@ from ....BlueFoxTools.ToolsConfig import LevelId
# ---- 只导入面食自己的数据库 ----
from ..MianshiData import (
CLEAVER, ROLLINGPIN, BOWL, OVEN, STEAMER,
CLEAVER, ROLLINGPIN, BOWL, PLATE, OVEN, STEAMER,
MEAT_ITEMS, FILLING_ITEMS, RICH_MEAT_ITEMS,
SWITCH_RULES, KNEAD_COUNTERS, ITEM_USE_ON_RULES, TIMER_RULES,
OVEN_FIX_BLOCKS, OVEN_RESULT_BLOCKS, NAME_MAP,
@@ -32,6 +32,7 @@ POT_LID = "rtdd:coverthepot" # 汤锅(盖锅)
LIT_STOVE = "rtdd:stove_2" # 点燃的炉灶(厨具)
BOWL = "rtdd:bowlasoup" # 木碗(厨具)
CLEAVER = "rtdd:cleaver" # 菜刀(厨具)
PLATE = "rtdd:plate_0" # 盘子(厨具)
WATER_BUCKET = "minecraft:water_bucket" # 水桶(原版)
EMPTY_BUCKET = "minecraft:bucket" # 空桶(原版)
@@ -61,6 +62,8 @@ BROWN_RICE = "rtdd:brownrice" # 大米(乡野食材)
EGG_PILE = "rtdd:egg_pile" # 鸡蛋堆(乡野食材)
SOYMILK = "rtdd:fruitjuice_7" # 豆浆(乡野饮料)
SCALLIONS = "rtdd:crushed_scallions" # 葱花碎
RICE_BALLS = "rtdd:rice_balls" # 饭团(乡野食物, 供寿司)
BOILED_EGG = "rtdd:boiled_egg" # 水煮蛋(乡野食物)
# ============================================================================
# 二、汤底方块(不可计时, 供继续加料/组合)
@@ -198,6 +201,7 @@ BOWL_VEGETABLE_FISH = "rtdd:brownvegetablefishsoup" # 蔬菜鱼片汤
BOWL_RICE_1 = "rtdd:bowlofrice" # 米饭_1(熟米饭_形态1)
BOWL_RICE_2 = "rtdd:bowlofrice_2" # 米饭_2(形态2)
BOWL_RICE_3 = "rtdd:bowlofrice_3" # 米饭_3(形态3)
PLATE_30A = "rtdd:plate_30a" # 美味饺子(全份)盘装
# ============================================================================
# 五、汤面方块(food_02_rice_noodle 分组)
@@ -428,6 +432,10 @@ SWITCH_RULES = [
{"block": DUMPLINGS_SOUP_2, "item": BOWL, "action": "take_out",
"target": POT_EMPTY, "dropItem": BOWL_DUMPLINGS, "consume": 1,
"tip": "§a盛出 饺子_碗装, 锅变回 汤锅(空); 成品【吃】右键食用"},
# 菜谱32 todo: 饺子汤_熟 + 盘子 -> 美味饺子(全份)盘装
{"block": DUMPLINGS_SOUP_2, "item": PLATE, "action": "take_out",
"target": POT_EMPTY, "dropItem": PLATE_30A, "consume": 1,
"tip": "§a捞出 美味饺子(全份)盘装, 锅变回 汤锅(空); 成品【吃】右键食用"},
{"block": VEGETABLE_FISH_SOUP_3, "item": BOWL, "action": "take_out",
"target": POT_EMPTY, "dropItem": BOWL_VEGETABLE_FISH, "consume": 1,
"tip": "§a盛出 蔬菜鱼片汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
@@ -481,18 +489,9 @@ SWITCH_RULES = [
{"block": BOWL_NOODLE, "item": BOWL_VEGETABLE_LAMB, "target": BRAISED_NOODLES,
"consume": 1, "drop": BOWL,
"tip": "§a蔬菜牛肉汤浇在面条上, 变成 胡萝卜蔬菜牛肉面, 掉落一个木碗; 汤面【吃】右键食用"},
{"block": BOWL_NOODLE, "item": MUSHROOM_SOUP, "target": MUSHROOM_NOODLES,
"consume": 1, "drop": BOWL,
"tip": "§a蘑菇汤浇在面条上, 变成 香菇面, 掉落一个木碗; 汤面【吃】右键食用"},
{"block": BOWL_NOODLE, "item": BOWL_VEGETABLE_FISH, "target": YUSHENG_RAMEN,
"consume": 1, "drop": BOWL,
"tip": "§a蔬菜鱼片汤浇在面条上, 变成 蔬菜鱼片面, 掉落一个木碗; 汤面【吃】右键食用"},
{"block": BOWL_NOODLE, "item": VEGETABLE_SOUP, "target": VEGETABLE_NOODLES,
"consume": 1, "drop": BOWL,
"tip": "§a蔬菜汤浇在面条上, 变成 蔬菜面, 掉落一个木碗; 汤面【吃】右键食用"},
{"block": BOWL_NOODLE, "item": EGG_SOUP, "target": NOODLES_1,
"consume": 1, "drop": BOWL,
"tip": "§a蛋花汤浇在面条上, 变成 蛋花面, 掉落一个木碗; 可加葱花碎 或 直接【吃】"},
{"block": BOWL_NOODLE, "item": BOILED_EGG, "target": EGG_NOODLES,
"consume": 1, "drop": BOWL,
"tip": "§a放上水煮蛋, 变成 鸡蛋面, 掉落一个木碗; 汤面【吃】右键食用"},
@@ -505,7 +504,24 @@ SWITCH_RULES = [
]
# ============================================================================
# 七、计时规则(供 TangguoTimerService)
# 七、手持物品右键方块表面规则(供 TangguoService handleItemUseOn)
# 锅态汤面走 itemUseOn 路径: 手持 锅态汤方块(蘑菇汤/蔬菜汤/蛋花汤) 右键 熟面条表面,
# 转换+取消放置在同一事件完成, 避免手持方块物品时引擎把"锅"放出来/掉出来
# ============================================================================
ITEM_USE_ON_RULES = [
{"item": MUSHROOM_SOUP, "surface": BOWL_NOODLE, "target": MUSHROOM_NOODLES,
"consume": 1, "drop": BOWL,
"tip": "§a蘑菇汤浇在面条上, 变成 香菇面, 掉落一个木碗; 汤面【吃】右键食用"},
{"item": VEGETABLE_SOUP, "surface": BOWL_NOODLE, "target": VEGETABLE_NOODLES,
"consume": 1, "drop": BOWL,
"tip": "§a蔬菜汤浇在面条上, 变成 蔬菜面, 掉落一个木碗; 汤面【吃】右键食用"},
{"item": EGG_SOUP, "surface": BOWL_NOODLE, "target": NOODLES_1,
"consume": 1, "drop": BOWL,
"tip": "§a蛋花汤浇在面条上, 变成 蛋花面, 掉落一个木碗; 可加葱花碎 或 直接【吃】"},
]
# ============================================================================
# 八、计时规则(供 TangguoTimerService)
# below: 汤羹方块正下方须是 点燃的炉灶(stove_2) 才计时
# randomTargets: 生米锅到点后随机出其一形态
# ============================================================================
@@ -33,7 +33,7 @@ from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
from ....BlueFoxTools.ToolsConfig import LevelId
# ---- 只导入汤锅自己的数据库 ----
from ..TangguoData import SWITCH_RULES
from ..TangguoData import SWITCH_RULES, ITEM_USE_ON_RULES
# ---- 统一分发器 ----
from ...service.FeatureDispatcher import FeatureDispatcher
@@ -55,6 +55,11 @@ class TangguoService(BlueFoxServerSystem):
self.recipes[(r["block"], r.get("item"))] = r
self.featureBlocks.add(r["block"])
# ---- 手持锅态汤方块右键 熟面条表面 -> 规则: (物品, 表面方块) -> 规则 ----
self.itemUseOnRecipes = {}
for r in ITEM_USE_ON_RULES:
self.itemUseOnRecipes[(r["item"], r["surface"])] = r
# ---- 右键冷却表 ----
self.cooldown = {}
@@ -70,8 +75,9 @@ class TangguoService(BlueFoxServerSystem):
return self.featureBlocks
def getItemUseOnRules(self):
"""手持物品右键方块表面不需要单独路由(所有转换都是右键方块本身), 返回空"""
return {}
"""手持锅态汤方块(蘑菇汤/蔬菜汤/蛋花汤)右键 熟面条表面 走 itemUseOn 路径,
在同一个事件里完成转换+取消放置, 防止引擎把"锅"放出来/掉出来"""
return {r["item"]: True for r in ITEM_USE_ON_RULES}
def handleBlockUse(self, args):
"""由 FeatureDispatcher 转发的右键方块入口"""
@@ -94,6 +100,29 @@ class TangguoService(BlueFoxServerSystem):
self.handleSwitch(recipe, playerId, pos, dim, itemDict)
return True
def handleItemUseOn(self, args):
"""由 FeatureDispatcher 转发的"手持物品右键方块表面"入口(锅态汤面)。
手持 蘑菇汤/蔬菜汤/蛋花汤 右键 熟面条表面 -> 汤面, 转换与取消放置同一事件完成"""
itemName = args.get("itemName")
playerId = args.get("playerId") or args.get("entityId")
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)
try:
b = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
clickedName = b.get("name") if b else None
except Exception:
clickedName = None
recipe = self.itemUseOnRecipes.get((itemName, clickedName))
if not recipe:
return False
if not self.checkCooldown(key, 0.4):
return True
itemDict = self.getCarriedItem(playerId)
self.handleSwitch(recipe, playerId, pos, dim, itemDict)
return True
# ============================================================================
# 二、通用转换执行
# ============================================================================