汤锅功能实现 1
This commit is contained in:
1 parent
d41f1eebac
commit
30ac368690
71 files changed
+2323
-333
No files matched your search
@@ -22,6 +22,8 @@ from xiangyemod.mianshi.service.MianshiService import MianshiService
|
||||
from xiangyemod.mianshi.service.MianshiTimerService import MianshiTimerService
|
||||
from xiangyemod.youguo.service.YouguoService import YouguoService
|
||||
from xiangyemod.youguo.service.YouguoTimerService import YouguoTimerService
|
||||
from xiangyemod.tangguo.service.TangguoService import TangguoService
|
||||
from xiangyemod.tangguo.service.TangguoTimerService import TangguoTimerService
|
||||
|
||||
if not serverApi.IsInServer():
|
||||
pass
|
||||
|
||||
@@ -0,0 +1,654 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
================================================================================
|
||||
汤锅(xy_tangguo)转化规则数据
|
||||
================================================================================
|
||||
统一管理"汤锅"分类下的转化规则常量。只被
|
||||
TangguoService / TangguoTimerService 读取, FeatureDispatcher 通过
|
||||
方块名路由到对应服务。
|
||||
|
||||
【实现范围(对应 汤锅转化关系.txt)】
|
||||
一、汤锅基础 : 汤锅(空)<->(加水)、盖/掀锅盖
|
||||
二、汤底/成品汤: 汤锅(加水)+食材(右键) -> 汤底; 汤底+肉/鱼/豆腐(右键) -> 汤羹(生)
|
||||
三、计时熬制 : 汤羹(生)->(四分熟)->(八分熟)->(熟), 下方须是点燃的炉灶(stove_2)
|
||||
四、出锅 : 熟汤羹+木碗(右键) -> 掉落碗装成品, 锅变回 汤锅(空)
|
||||
五、米饭/蛋/豆腐: 生米锅/煮蛋/煮豆腐 计时 + 取出
|
||||
六、汤面分组 : 手持汤锅成品菜 右键 熟面条(方块) -> 汤面
|
||||
|
||||
【计时(见 TangguoTimerService)】
|
||||
所有汤羹/生米锅/煮蛋/煮豆腐 计时都判定【正下方】是 点燃的炉灶(stove_2),
|
||||
计时数据在汤羹方块本身; 炉灶移走/熄灭则暂停, 回来继续
|
||||
|
||||
【不实现】: 各碗装成品/汤面 右键吃 (吃的操作后续由总食用功能实现)
|
||||
================================================================================
|
||||
"""
|
||||
|
||||
# ============================================================================
|
||||
# 一、方块/物品(常量)
|
||||
# ============================================================================
|
||||
POT_EMPTY = "rtdd:stewedsoup" # 汤锅(空)
|
||||
POT_WATER = "rtdd:stewedsoupwater" # 汤锅(加水)
|
||||
POT_LID = "rtdd:coverthepot" # 汤锅(盖锅)
|
||||
LIT_STOVE = "rtdd:stove_2" # 点燃的炉灶(厨具)
|
||||
BOWL = "rtdd:bowlasoup" # 木碗(厨具)
|
||||
CLEAVER = "rtdd:cleaver" # 菜刀(厨具)
|
||||
WATER_BUCKET = "minecraft:water_bucket" # 水桶(原版)
|
||||
EMPTY_BUCKET = "minecraft:bucket" # 空桶(原版)
|
||||
|
||||
# ---- 食材(乡野食材/原版) ----
|
||||
CRUSHED_CARROTS = "rtdd:crushed_carrots" # 胡萝卜碎
|
||||
VEGETABLE = "rtdd:vegetable" # 青菜碎
|
||||
EGG = "minecraft:egg" # 鸡蛋(原版)
|
||||
POTATO_WEDGES = "rtdd:potato_wedges" # 土豆块/土豆碎
|
||||
RED_MUSHROOM = "minecraft:red_mushroom" # 红蘑菇(原版)
|
||||
BROWN_MUSHROOM = "minecraft:brown_mushroom" # 棕蘑菇(原版)
|
||||
COD = "minecraft:cod" # 鳕鱼(原版)
|
||||
SALMON = "minecraft:salmon" # 鲑鱼(原版)
|
||||
BEEF = "minecraft:beef" # 生牛肉(原版)
|
||||
MUTTON = "minecraft:mutton" # 生羊肉(原版)
|
||||
CHICKEN = "minecraft:chicken" # 生鸡肉(原版)
|
||||
PORKRIB = "rtdd:porkrib" # 猪肋排
|
||||
COW_RIBS = "rtdd:costillavacaes" # 牛肋
|
||||
SHEEP_RACKS = "rtdd:sheepracks" # 羊小排
|
||||
CRUSHED_MEAT = "rtdd:crushedmeat" # 碎肉
|
||||
BEANCURD = "rtdd:beancurd" # 豆腐
|
||||
HAM = "rtdd:ham" # 猪蹄
|
||||
MO = "rtdd:roujiamo_0" # 馍(面食.甜食)
|
||||
NOODLES = "rtdd:noodles" # 生面(面食.甜食)
|
||||
DUMPLINGS = "rtdd:dumplings_4" # 生饺子(面食.甜食)
|
||||
SASHIMI = "rtdd:sashimi" # 生鱼片
|
||||
BROWN_RICE = "rtdd:brownrice" # 大米(乡野食材)
|
||||
EGG_PILE = "rtdd:egg_pile" # 鸡蛋堆(乡野食材)
|
||||
SOYMILK = "rtdd:fruitjuice_7" # 豆浆(乡野饮料)
|
||||
SCALLIONS = "rtdd:crushed_scallions" # 葱花碎
|
||||
|
||||
# ============================================================================
|
||||
# 二、汤底方块(不可计时, 供继续加料/组合)
|
||||
# ============================================================================
|
||||
CARROT_SOUP = "rtdd:carrotsoup" # 胡萝卜汤
|
||||
VEGETABLE_SOUP = "rtdd:vegetablesoup" # 蔬菜汤
|
||||
EGG_SOUP = "rtdd:eggsoup" # 蛋花汤
|
||||
POTATO_SOUP = "rtdd:potatosoup" # 土豆汤
|
||||
CARROT_POTATO_SOUP = "rtdd:carrotandpotatosoup" # 胡萝卜土豆汤
|
||||
RED_MUSHROOM_SOUP = "rtdd:red_mushroomsoup" # 红蘑菇汤
|
||||
BROWN_MUSHROOM_SOUP = "rtdd:brownmushroomsoup" # 棕蘑菇汤
|
||||
MUSHROOM_SOUP = "rtdd:mushroomsoup" # 蘑菇汤
|
||||
COD_SOUP = "rtdd:codsoup" # 鳕鱼汤
|
||||
SALMON_SOUP = "rtdd:salmonsoup" # 鲑鱼汤
|
||||
POTATO_EGG_SOUP = "rtdd:potatoeggsoup" # 土豆蛋花汤
|
||||
TOFU_SOUP = "rtdd:tufusoup" # 豆腐汤
|
||||
|
||||
# ============================================================================
|
||||
# 三、汤羹计时链(生 -> 四分熟 -> 八分熟 -> 熟)
|
||||
# ============================================================================
|
||||
CARROT_BEEF_SOUP = "rtdd:carrotbeefsoup" # 胡萝卜牛肉汤
|
||||
CARROT_BEEF_SOUP_1 = "rtdd:carrotbeefsoup_1"
|
||||
CARROT_BEEF_SOUP_2 = "rtdd:carrotbeefsoup_2"
|
||||
CARROT_BEEF_SOUP_3 = "rtdd:carrotbeefsoup_3"
|
||||
LAMB_SOUP_WITH_TURNIPS = "rtdd:lambsoupwithturnips" # 胡萝卜羊肉汤
|
||||
LAMB_SOUP_WITH_TURNIPS_1 = "rtdd:lambsoupwithturnips_1"
|
||||
LAMB_SOUP_WITH_TURNIPS_2 = "rtdd:lambsoupwithturnips_2"
|
||||
LAMB_SOUP_WITH_TURNIPS_3 = "rtdd:lambsoupwithturnips_3"
|
||||
CARROT_RIBS = "rtdd:carrotribs" # 胡萝卜排骨汤
|
||||
CARROT_RIBS_1 = "rtdd:carrotribs_1"
|
||||
CARROT_RIBS_2 = "rtdd:carrotribs_2"
|
||||
CARROT_RIBS_3 = "rtdd:carrotribs_3"
|
||||
VEGETABLE_BEEF_SOUP = "rtdd:vegetablebeefsoup" # 清汤羊肉
|
||||
VEGETABLE_BEEF_SOUP_1 = "rtdd:vegetablebeefsoup_1"
|
||||
VEGETABLE_BEEF_SOUP_2 = "rtdd:vegetablebeefsoup_2"
|
||||
VEGETABLE_BEEF_SOUP_3 = "rtdd:vegetablebeefsoup_3"
|
||||
VEGETABLE_LAMB_SOUP = "rtdd:vegetablelambsoup" # 蔬菜牛肉汤
|
||||
VEGETABLE_LAMB_SOUP_1 = "rtdd:vegetablelambsoup_1"
|
||||
VEGETABLE_LAMB_SOUP_2 = "rtdd:vegetablelambsoup_2"
|
||||
VEGETABLE_LAMB_SOUP_3 = "rtdd:vegetablelambsoup_3"
|
||||
VEGETABLE_LEAN_BROTH = "rtdd:vegetableleanbroth" # 蔬菜瘦肉汤
|
||||
VEGETABLE_LEAN_BROTH_1 = "rtdd:vegetableleanbroth_1"
|
||||
VEGETABLE_LEAN_BROTH_2 = "rtdd:vegetableleanbroth_2"
|
||||
VEGETABLE_LEAN_BROTH_3 = "rtdd:vegetableleanbroth_3"
|
||||
VEGETABLE_SSTEW = "rtdd:vegetablesstew" # 蔬菜乱炖
|
||||
VEGETABLE_SSTEW_1 = "rtdd:vegetablesstew_1"
|
||||
VEGETABLE_SSTEW_2 = "rtdd:vegetablesstew_2"
|
||||
VEGETABLE_SSTEW_3 = "rtdd:vegetablesstew_3"
|
||||
BEEF_BONE_BROTH = "rtdd:beefbonebroth" # 胡萝卜土豆牛骨汤
|
||||
BEEF_BONE_BROTH_1 = "rtdd:beefbonebroth_1"
|
||||
BEEF_BONE_BROTH_2 = "rtdd:beefbonebroth_2"
|
||||
BEEF_BONE_BROTH_3 = "rtdd:beefbonebroth_3"
|
||||
LAMB_STEW = "rtdd:lambstew" # 土豆胡萝卜炖羊肉
|
||||
LAMB_STEW_1 = "rtdd:lambstew_1"
|
||||
LAMB_STEW_2 = "rtdd:lambstew_2"
|
||||
LAMB_STEW_3 = "rtdd:lambstew_3"
|
||||
VEGETABLE_POTATOES_LAMBSTEAK = "rtdd:vegetablepotatoesandlambsteaksoup" # 胡萝卜土豆羊排汤(生)
|
||||
LAMB_CHOP_SOUP_1 = "rtdd:lambchopsoup_1" # 胡萝卜土豆羊排汤(三分熟)
|
||||
LAMB_CHOP_SOUP_2 = "rtdd:lambchopsoup_2" # (七分熟)
|
||||
LAMB_CHOP_SOUP_3 = "rtdd:lambchopsoup_3" # (熟)
|
||||
CARROT_COD_SOUP = "rtdd:carrotcodsoup" # 胡萝卜鳕鱼汤
|
||||
CARROT_COD_SOUP_1 = "rtdd:carrotcodsoup_1"
|
||||
CARROT_COD_SOUP_2 = "rtdd:carrotcodsoup_2"
|
||||
CARROT_COD_SOUP_3 = "rtdd:carrotcodsoup_3"
|
||||
CARROT_FISH_SOUP = "rtdd:carrotfishsoup" # 胡萝卜鲑鱼汤
|
||||
CARROT_FISH_SOUP_1 = "rtdd:carrotfishsoup_1"
|
||||
CARROT_FISH_SOUP_2 = "rtdd:carrotfishsoup_2"
|
||||
CARROT_FISH_SOUP_3 = "rtdd:carrotfishsoup_3"
|
||||
EGG_COD_SOUP = "rtdd:eggcodsoup" # 蛋花鳕鱼汤
|
||||
EGG_COD_SOUP_1 = "rtdd:eggcodsoup_1"
|
||||
EGG_COD_SOUP_2 = "rtdd:eggcodsoup_2"
|
||||
EGG_COD_SOUP_3 = "rtdd:eggcodsoup_3"
|
||||
NORI_EGG_SOUP = "rtdd:norieggsoup" # 瘦肉蛋花汤(生)
|
||||
NORI_EGG_SOUP_0 = "rtdd:norieggsoup_0" # (三分熟)
|
||||
NORI_EGG_SOUP_1 = "rtdd:norieggsoup_1" # (七分熟)
|
||||
NORI_EGG_SOUP_2 = "rtdd:norieggsoup_2" # (全熟)
|
||||
NORI_EGG_SOUP_3 = "rtdd:norieggsoup_3" # (熟)
|
||||
TOFU_FISH_SOUP_RAW = "rtdd:tufusoupb" # 豆腐鲑鱼汤(生)
|
||||
TOFU_FISH_SOUP_1 = "rtdd:tufufishsoup_1" # (四分熟)
|
||||
TOFU_FISH_SOUP_2 = "rtdd:tufufishsoup_2" # (八分熟)
|
||||
TOFU_FISH_SOUP_3 = "rtdd:tufufishsoup_3" # (熟)
|
||||
CHICKEN_STEW_MUSHROOMS = "rtdd:chickenstewwithmushrooms" # 蘑菇炖鸡
|
||||
CHICKEN_STEW_MUSHROOMS_1 = "rtdd:chickenstewwithmushrooms_1"
|
||||
CHICKEN_STEW_MUSHROOMS_2 = "rtdd:chickenstewwithmushrooms_2"
|
||||
CHICKEN_STEW_MUSHROOMS_3 = "rtdd:chickenstewwithmushrooms_3"
|
||||
RAW_PIG_FOOD_SOUP_0 = "rtdd:rawpigfoodsoup_0" # 汤锅_66(猪蹄汤_生)
|
||||
RAW_PIG_FOOD_SOUP_2 = "rtdd:rawpigfoodsoup_2" # 汤锅_67(猪蹄汤_加土豆)
|
||||
RAW_PIG_FOOD_SOUP_3 = "rtdd:rawpigfoodsoup_3" # 汤锅_68(三分熟)
|
||||
RAW_PIG_FOOD_SOUP_4 = "rtdd:rawpigfoodsoup_4" # 汤锅_69(七分熟)
|
||||
RAW_PIG_FOOD_SOUP_5 = "rtdd:rawpigfoodsoup_5" # 汤锅_70(全熟)
|
||||
ROUJIAMO_SOUP_0 = "rtdd:roujiamosoup_0" # 羊肉泡馍汤(生)
|
||||
ROUJIAMO_SOUP_1 = "rtdd:roujiamosoup_1" # (熟)
|
||||
RAW_NOODLE_SOUP = "rtdd:rawnoodlesoup" # 生面汤(生)
|
||||
COOKED_NOODLE_SOUP = "rtdd:cookednoodlessoup" # 熟面汤(熟)
|
||||
DUMPLINGS_SOUP_0 = "rtdd:dumplingssoup_0" # 饺子汤(生)
|
||||
DUMPLINGS_SOUP_1 = "rtdd:dumplingssoup_1" # (五分熟)
|
||||
DUMPLINGS_SOUP_2 = "rtdd:dumplingssoup_2" # (熟)
|
||||
VEGETABLE_FISH_SOUP_0 = "rtdd:vegetablefishsoup_0" # 蔬菜鱼片汤(生)
|
||||
VEGETABLE_FISH_SOUP_1 = "rtdd:vegetablefishsoup_1"
|
||||
VEGETABLE_FISH_SOUP_2 = "rtdd:vegetablefishsoup_2"
|
||||
VEGETABLE_FISH_SOUP_3 = "rtdd:vegetablefishsoup_3"
|
||||
RAW_RICE_POT = "rtdd:rawricepot" # 生米锅
|
||||
RICE_POT_1 = "rtdd:ricepot_1" # 熟米饭_形态1
|
||||
RICE_POT_2 = "rtdd:ricepot_2" # 熟米饭_形态2
|
||||
RICE_POT_3 = "rtdd:ricepot_3" # 熟米饭_形态3
|
||||
RAW_EGG_SOUP = "rtdd:raweggsoup" # 煮鸡蛋(生)
|
||||
COOKED_EGG_SOUP = "rtdd:cookedeggsoup" # 煮鸡蛋(熟)
|
||||
BEANCURD_SOUP_0 = "rtdd:beancurdsoup_0" # 煮豆腐(生)
|
||||
BEANCURD_SOUP_1 = "rtdd:beancurdsoup_1" # 煮豆腐(熟)
|
||||
|
||||
# ============================================================================
|
||||
# 四、碗装成品(出锅掉落物, 归 tangguo_finished, 均为【吃】)
|
||||
# ============================================================================
|
||||
BOWL_CARROT_BEEF = "rtdd:bowlacarrotbeefsoup" # 胡萝卜牛肉汤
|
||||
BOWL_LAMB_TURNIP = "rtdd:brownlambsoupwithturnipssoup" # 胡萝卜羊肉汤
|
||||
BOWL_CARROT_RIBS = "rtdd:bowlacarrotribs" # 胡萝卜排骨汤
|
||||
BOWL_VEGETABLE_BEEF = "rtdd:bowlavegetablebeefsoup" # 清汤羊肉
|
||||
BOWL_VEGETABLE_LAMB = "rtdd:bowlavegetablelambsoup" # 蔬菜牛肉汤
|
||||
BOWL_VEGETABLE_LEAN = "rtdd:bowlavegetableleanbroth" # 蔬菜瘦肉汤
|
||||
BOWL_VEGETABLE_SSTEW = "rtdd:bowlavegetablesstew" # 蔬菜乱炖
|
||||
BOWL_BEEF_BONE = "rtdd:bowlabeefbonebroth" # 胡萝卜土豆牛骨汤
|
||||
BOWL_LAMB_STEW = "rtdd:bowlalambstew" # 土豆胡萝卜炖羊肉
|
||||
BOWL_LAMB_CHOP = "rtdd:bowla_lambchopsoup" # 胡萝卜土豆羊排汤
|
||||
BOWL_CARROT_COD = "rtdd:bowlacarrotcodsoup" # 胡萝卜鳕鱼汤
|
||||
BOWL_CARROT_FISH = "rtdd:browncarrotfishsoupsoup" # 胡萝卜鲑鱼汤
|
||||
BOWL_EGG_COD = "rtdd:bowlaeggcodsoup" # 蛋花鳕鱼汤
|
||||
BOWL_NORI_EGG = "rtdd:brown_norieggsoup" # 瘦肉蛋花汤
|
||||
BOWL_TOFU_FISH = "rtdd:bowlatufufish" # 豆腐鲑鱼汤
|
||||
BOWL_MUSHROOM_CHICKEN = "rtdd:bowlofmushroomsoup" # 蘑菇炖鸡
|
||||
BOWL_PIG_FOOT = "rtdd:brownpigfootsoup" # 猪蹄汤
|
||||
BOWL_ROUJIAMO = "rtdd:bowla_roujiamo" # 羊肉泡馍汤
|
||||
BOWL_NOODLE = "rtdd:noodle_soup" # 熟面条
|
||||
BOWL_DUMPLINGS = "rtdd:dumplingssoup" # 饺子_碗装
|
||||
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)
|
||||
|
||||
# ============================================================================
|
||||
# 五、汤面方块(food_02_rice_noodle 分组)
|
||||
# ============================================================================
|
||||
NOODLESOUP_1 = "rtdd:noodlesoup_1" # 猪排蔬菜面
|
||||
NOODLESOUP_2 = "rtdd:noodlesoup_2" # 羊排蔬菜面
|
||||
NOODLESOUP_3 = "rtdd:noodlesoup_3" # 牛骨面
|
||||
NOODLESOUP_4 = "rtdd:noodlesoup_4" # 小鸡炖蘑菇面
|
||||
ASSORTED_RAMEN = "rtdd:assortedramen" # 胡萝卜蔬菜面
|
||||
BRAISED_NOODLES = "rtdd:braisednoodles" # 胡萝卜蔬菜牛肉面
|
||||
MUSHROOM_NOODLES = "rtdd:mushroomnoodles" # 香菇面
|
||||
YUSHENG_RAMEN = "rtdd:yushengramen" # 蔬菜鱼片面
|
||||
VEGETABLE_NOODLES = "rtdd:vegetable_noodles" # 蔬菜面
|
||||
NOODLES_1 = "rtdd:noodles_1" # 蛋花面
|
||||
NOODLES_2 = "rtdd:noodles_2" # 蛋花面(加葱花)
|
||||
EGG_NOODLES = "rtdd:egg_noodles" # 鸡蛋面
|
||||
TONKOTSU_RAMEN = "rtdd:tonkotsu_ramen" # 猪排蔬菜面加水煮蛋(由 猪排蔬菜面+水煮蛋)
|
||||
|
||||
# ============================================================================
|
||||
# 六、右键规则 (方块, 手持物品) -> 规则
|
||||
# item=None 表示空手右键
|
||||
# target=替换方块; consume=消耗手持; give=给背包;
|
||||
# drop=额外掉落(掉落物形式); dropItem=出锅/取出掉落物; count=掉落数量;
|
||||
# action=take_out(出锅/取出: 变回汤锅(空)+掉落); startTimer=转换后启动计时
|
||||
# ============================================================================
|
||||
SWITCH_RULES = [
|
||||
# ---------------- 一、汤锅基础 ----------------
|
||||
{"block": POT_EMPTY, "item": WATER_BUCKET, "target": POT_WATER,
|
||||
"consume": 1, "give": EMPTY_BUCKET,
|
||||
"tip": "§a倒入水, 汤锅变(加水); 水桶变回空桶"},
|
||||
{"block": POT_WATER, "item": EMPTY_BUCKET, "target": POT_EMPTY,
|
||||
"consume": 1, "drop": WATER_BUCKET,
|
||||
"tip": "§a倒掉水, 汤锅变回(空), 掉落一个水桶"},
|
||||
{"block": POT_WATER, "item": None, "target": POT_LID,
|
||||
"tip": "§a盖上锅盖, 汤锅变(盖锅); 空手右键可再掀开"},
|
||||
{"block": POT_LID, "item": None, "target": POT_WATER,
|
||||
"tip": "§a掀开锅盖, 汤锅变回(加水)"},
|
||||
|
||||
# ---------------- 二、汤底(汤锅(加水)+食材 -> 汤底) ----------------
|
||||
{"block": POT_WATER, "item": CRUSHED_CARROTS, "target": CARROT_SOUP,
|
||||
"consume": 4, "tip": "§a放入胡萝卜碎x4, 变成 胡萝卜汤; 可继续加肉/鱼 或 组合汤"},
|
||||
{"block": POT_WATER, "item": VEGETABLE, "target": VEGETABLE_SOUP,
|
||||
"consume": 4, "tip": "§a放入青菜碎x4, 变成 蔬菜汤; 可继续加肉/鱼 或 组合汤"},
|
||||
{"block": POT_WATER, "item": EGG, "target": EGG_SOUP,
|
||||
"consume": 3, "tip": "§a放入鸡蛋x3, 变成 蛋花汤; 可继续加肉/鱼 或 组合汤"},
|
||||
{"block": POT_WATER, "item": POTATO_WEDGES, "target": POTATO_SOUP,
|
||||
"consume": 4, "tip": "§a放入土豆块x4, 变成 土豆汤; 可继续加肉/鱼 或 组合汤"},
|
||||
{"block": POT_WATER, "item": RED_MUSHROOM, "target": RED_MUSHROOM_SOUP,
|
||||
"consume": 5, "tip": "§a放入红蘑菇x5, 变成 红蘑菇汤; 可继续加食材"},
|
||||
{"block": POT_WATER, "item": BROWN_MUSHROOM, "target": BROWN_MUSHROOM_SOUP,
|
||||
"consume": 5, "tip": "§a放入棕蘑菇x5, 变成 棕蘑菇汤; 可继续加食材"},
|
||||
{"block": POT_WATER, "item": COD, "target": COD_SOUP,
|
||||
"consume": 1, "tip": "§a放入鳕鱼, 变成 鳕鱼汤; 可继续加食材"},
|
||||
{"block": POT_WATER, "item": SALMON, "target": SALMON_SOUP,
|
||||
"consume": 1, "tip": "§a放入鲑鱼, 变成 鲑鱼汤; 可继续加食材"},
|
||||
{"block": POT_WATER, "item": BEANCURD, "target": TOFU_SOUP,
|
||||
"consume": 4, "tip": "§a放入豆腐x4, 变成 豆腐汤; 可继续加食材"},
|
||||
|
||||
# ---------------- 三、组合汤(汤底+汤底/食材 -> 组合汤底) ----------------
|
||||
{"block": POTATO_SOUP, "item": CRUSHED_CARROTS, "target": CARROT_POTATO_SOUP,
|
||||
"consume": 4, "tip": "§a土豆汤加胡萝卜碎x4, 变成 胡萝卜土豆汤; 可继续加肉/鱼"},
|
||||
{"block": CARROT_SOUP, "item": POTATO_WEDGES, "target": CARROT_POTATO_SOUP,
|
||||
"consume": 4, "tip": "§a胡萝卜汤加土豆块x4, 变成 胡萝卜土豆汤; 可继续加肉/鱼"},
|
||||
{"block": RED_MUSHROOM_SOUP, "item": BROWN_MUSHROOM, "target": MUSHROOM_SOUP,
|
||||
"consume": 5, "tip": "§a红蘑菇汤加棕蘑菇x5, 变成 蘑菇汤; 可继续加食材"},
|
||||
{"block": BROWN_MUSHROOM_SOUP, "item": RED_MUSHROOM, "target": MUSHROOM_SOUP,
|
||||
"consume": 5, "tip": "§a棕蘑菇汤加红蘑菇x5, 变成 蘑菇汤; 可继续加食材"},
|
||||
{"block": POTATO_SOUP, "item": EGG, "target": POTATO_EGG_SOUP,
|
||||
"consume": 3, "tip": "§a土豆汤加鸡蛋x3, 变成 土豆蛋花汤; 可继续加食材"},
|
||||
{"block": EGG_SOUP, "item": POTATO_WEDGES, "target": POTATO_EGG_SOUP,
|
||||
"consume": 4, "tip": "§a蛋花汤加土豆块x4, 变成 土豆蛋花汤; 可继续加食材"},
|
||||
|
||||
# ---------------- 四、加肉/鱼/豆腐 -> 汤羹(生), 开始计时 ----------------
|
||||
{"block": CARROT_SOUP, "item": BEEF, "target": CARROT_BEEF_SOUP,
|
||||
"consume": 2, "startTimer": CARROT_BEEF_SOUP,
|
||||
"tip": "§a胡萝卜汤加生牛肉x2, 开始计时熬制(30秒/级); 等计时结束变成 胡萝卜牛肉汤(熟), 手持木碗出锅"},
|
||||
{"block": CARROT_SOUP, "item": MUTTON, "target": LAMB_SOUP_WITH_TURNIPS,
|
||||
"consume": 2, "startTimer": LAMB_SOUP_WITH_TURNIPS,
|
||||
"tip": "§a胡萝卜汤加羊肉x2, 开始计时熬制(60秒/级); 等计时结束变成 胡萝卜羊肉汤(熟), 手持木碗出锅"},
|
||||
{"block": CARROT_SOUP, "item": PORKRIB, "target": CARROT_RIBS,
|
||||
"consume": 2, "startTimer": CARROT_RIBS,
|
||||
"tip": "§a胡萝卜汤加猪肋排x2, 开始计时熬制(60秒/级); 等计时结束变成 胡萝卜排骨汤(熟), 手持木碗出锅"},
|
||||
{"block": VEGETABLE_SOUP, "item": MUTTON, "target": VEGETABLE_BEEF_SOUP,
|
||||
"consume": 2, "startTimer": VEGETABLE_BEEF_SOUP,
|
||||
"tip": "§a蔬菜汤加羊肉x2, 开始计时熬制(60秒/级); 等计时结束变成 清汤羊肉(熟), 手持木碗出锅"},
|
||||
{"block": VEGETABLE_SOUP, "item": BEEF, "target": VEGETABLE_LAMB_SOUP,
|
||||
"consume": 2, "startTimer": VEGETABLE_LAMB_SOUP,
|
||||
"tip": "§a蔬菜汤加生牛肉x2, 开始计时熬制(60秒/级); 等计时结束变成 蔬菜牛肉汤(熟), 手持木碗出锅"},
|
||||
{"block": VEGETABLE_SOUP, "item": CRUSHED_MEAT, "target": VEGETABLE_LEAN_BROTH,
|
||||
"consume": 5, "startTimer": VEGETABLE_LEAN_BROTH,
|
||||
"tip": "§a蔬菜汤加碎肉x5, 开始计时熬制(60秒/级); 等计时结束变成 蔬菜瘦肉汤(熟), 手持木碗出锅"},
|
||||
{"block": VEGETABLE_SOUP, "item": CARROT_POTATO_SOUP, "target": VEGETABLE_SSTEW,
|
||||
"consume": 1, "drop": POT_EMPTY, "startTimer": VEGETABLE_SSTEW,
|
||||
"tip": "§a蔬菜汤加胡萝卜土豆汤, 变成 蔬菜乱炖(生), 掉落一个汤锅(空); 等计时结束变熟, 手持木碗出锅"},
|
||||
{"block": CARROT_POTATO_SOUP, "item": VEGETABLE, "target": VEGETABLE_SSTEW,
|
||||
"consume": 3, "startTimer": VEGETABLE_SSTEW,
|
||||
"tip": "§a胡萝卜土豆汤加青菜碎x3, 变成 蔬菜乱炖(生); 等计时结束变熟, 手持木碗出锅"},
|
||||
{"block": CARROT_POTATO_SOUP, "item": COW_RIBS, "target": BEEF_BONE_BROTH,
|
||||
"consume": 2, "startTimer": BEEF_BONE_BROTH,
|
||||
"tip": "§a胡萝卜土豆汤加牛肋x2, 开始计时熬制(60秒/级); 等计时结束变成 胡萝卜土豆牛骨汤(熟), 手持木碗出锅"},
|
||||
{"block": CARROT_POTATO_SOUP, "item": MUTTON, "target": LAMB_STEW,
|
||||
"consume": 2, "startTimer": LAMB_STEW,
|
||||
"tip": "§a胡萝卜土豆汤加羊肉x2, 开始计时熬制(60秒/级); 等计时结束变成 土豆胡萝卜炖羊肉(熟), 手持木碗出锅"},
|
||||
{"block": CARROT_POTATO_SOUP, "item": SHEEP_RACKS, "target": VEGETABLE_POTATOES_LAMBSTEAK,
|
||||
"consume": 2, "startTimer": VEGETABLE_POTATOES_LAMBSTEAK,
|
||||
"tip": "§a胡萝卜土豆汤加羊小排x2, 开始计时熬制(60秒/级); 等计时结束变成 胡萝卜土豆羊排汤(熟), 手持木碗出锅"},
|
||||
{"block": CARROT_SOUP, "item": COD, "target": CARROT_COD_SOUP,
|
||||
"consume": 1, "startTimer": CARROT_COD_SOUP,
|
||||
"tip": "§a胡萝卜汤加鳕鱼, 开始计时熬制(60秒/级); 等计时结束变成 胡萝卜鳕鱼汤(熟), 手持木碗出锅"},
|
||||
{"block": CARROT_SOUP, "item": SALMON, "target": CARROT_FISH_SOUP,
|
||||
"consume": 1, "startTimer": CARROT_FISH_SOUP,
|
||||
"tip": "§a胡萝卜汤加鲑鱼, 开始计时熬制(60秒/级); 等计时结束变成 胡萝卜鲑鱼汤(熟), 手持木碗出锅"},
|
||||
{"block": COD_SOUP, "item": EGG, "target": EGG_COD_SOUP,
|
||||
"consume": 3, "startTimer": EGG_COD_SOUP,
|
||||
"tip": "§a鳕鱼汤加鸡蛋x3, 开始计时熬制(60秒/级); 等计时结束变成 蛋花鳕鱼汤(熟), 手持木碗出锅"},
|
||||
{"block": EGG_SOUP, "item": COD, "target": EGG_COD_SOUP,
|
||||
"consume": 1, "startTimer": EGG_COD_SOUP,
|
||||
"tip": "§a蛋花汤加鳕鱼, 开始计时熬制(60秒/级); 等计时结束变成 蛋花鳕鱼汤(熟), 手持木碗出锅"},
|
||||
{"block": EGG_SOUP, "item": CRUSHED_MEAT, "target": NORI_EGG_SOUP,
|
||||
"consume": 5, "startTimer": NORI_EGG_SOUP,
|
||||
"tip": "§a蛋花汤加碎肉x5, 开始计时熬制(30秒/级); 等计时结束变成 瘦肉蛋花汤(熟), 手持木碗出锅"},
|
||||
{"block": VEGETABLE_LEAN_BROTH, "item": EGG, "target": NORI_EGG_SOUP,
|
||||
"consume": 3, "startTimer": NORI_EGG_SOUP,
|
||||
"tip": "§a蔬菜瘦肉汤加鸡蛋x3, 开始计时熬制(30秒/级); 等计时结束变成 瘦肉蛋花汤(熟), 手持木碗出锅"},
|
||||
{"block": TOFU_SOUP, "item": SALMON, "target": TOFU_FISH_SOUP_RAW,
|
||||
"consume": 1, "startTimer": TOFU_FISH_SOUP_RAW,
|
||||
"tip": "§a豆腐汤加鲑鱼, 开始计时熬制(60秒/级); 等计时结束变成 豆腐鲑鱼汤(熟), 手持木碗出锅"},
|
||||
{"block": SALMON_SOUP, "item": BEANCURD, "target": TOFU_FISH_SOUP_RAW,
|
||||
"consume": 4, "startTimer": TOFU_FISH_SOUP_RAW,
|
||||
"tip": "§a鲑鱼汤加豆腐x4, 开始计时熬制(60秒/级); 等计时结束变成 豆腐鲑鱼汤(熟), 手持木碗出锅"},
|
||||
{"block": MUSHROOM_SOUP, "item": CHICKEN, "target": CHICKEN_STEW_MUSHROOMS,
|
||||
"consume": 1, "startTimer": CHICKEN_STEW_MUSHROOMS,
|
||||
"tip": "§a蘑菇汤加生鸡肉, 开始计时熬制(90秒/级); 等计时结束变成 蘑菇炖鸡(熟), 手持木碗出锅"},
|
||||
{"block": VEGETABLE_SOUP, "item": SASHIMI, "target": VEGETABLE_FISH_SOUP_0,
|
||||
"consume": 10, "startTimer": VEGETABLE_FISH_SOUP_0,
|
||||
"tip": "§a蔬菜汤加生鱼片x10, 开始计时熬制(60秒/级); 等计时结束变成 蔬菜鱼片汤(熟), 手持木碗出锅"},
|
||||
|
||||
# ---------------- 五、单独菜谱 ----------------
|
||||
# 菜谱29 猪蹄汤
|
||||
{"block": POT_WATER, "item": HAM, "target": RAW_PIG_FOOD_SOUP_0,
|
||||
"consume": 2, "tip": "§a放入猪蹄x2, 变成 猪蹄汤(生); 继续拿土豆块x3右键 加土豆"},
|
||||
{"block": RAW_PIG_FOOD_SOUP_0, "item": POTATO_WEDGES, "target": RAW_PIG_FOOD_SOUP_2,
|
||||
"consume": 3, "startTimer": RAW_PIG_FOOD_SOUP_2,
|
||||
"tip": "§a猪蹄汤加土豆块x3, 开始计时熬制(30秒/级); 等计时结束变成 猪蹄汤(全熟), 手持木碗出锅"},
|
||||
# 菜谱30 羊肉泡馍汤
|
||||
{"block": POT_WATER, "item": MO, "target": ROUJIAMO_SOUP_0,
|
||||
"consume": 1, "startTimer": ROUJIAMO_SOUP_0,
|
||||
"tip": "§a放入馍, 开始计时熬制(30秒); 等计时结束变成 羊肉泡馍汤(熟), 手持木碗出锅"},
|
||||
# 菜谱31 生面汤
|
||||
{"block": POT_WATER, "item": NOODLES, "target": RAW_NOODLE_SOUP,
|
||||
"consume": 1, "startTimer": RAW_NOODLE_SOUP,
|
||||
"tip": "§a放入生面, 开始计时熬制(60秒); 等计时结束变成 熟面汤, 手持木碗盛出 熟面条"},
|
||||
# 菜谱32 饺子汤
|
||||
{"block": POT_WATER, "item": DUMPLINGS, "target": DUMPLINGS_SOUP_0,
|
||||
"consume": 1, "startTimer": DUMPLINGS_SOUP_0,
|
||||
"tip": "§a放入生饺子, 开始计时熬制(60秒/级); 等计时结束变成 饺子汤(熟), 手持木碗盛出 饺子_碗装"},
|
||||
# 菜谱35 生米锅
|
||||
{"block": POT_WATER, "item": BROWN_RICE, "target": RAW_RICE_POT,
|
||||
"consume": 64, "startTimer": RAW_RICE_POT,
|
||||
"tip": "§a放入大米x64, 变成 生米锅; 开始计时熬制(90秒)结束变成 熟米饭(形态随机)"},
|
||||
# 菜谱39 煮鸡蛋(生)
|
||||
{"block": POT_WATER, "item": EGG_PILE, "target": RAW_EGG_SOUP,
|
||||
"consume": 1, "startTimer": RAW_EGG_SOUP,
|
||||
"tip": "§a放入鸡蛋堆, 开始计时熬制(60秒); 等计时结束变成 煮鸡蛋(熟), 空手右键取出 水煮蛋x9"},
|
||||
# 菜谱42 煮豆腐(生)
|
||||
{"block": POT_WATER, "item": SOYMILK, "target": BEANCURD_SOUP_0,
|
||||
"consume": 1, "startTimer": BEANCURD_SOUP_0,
|
||||
"tip": "§a倒入豆浆, 开始计时熬制(60秒); 等计时结束变成 煮豆腐(熟), 拿菜刀右键切成 豆腐x16"},
|
||||
|
||||
# ---------------- 六、出锅(熟汤羹+木碗 -> 碗装成品, 锅变回汤锅(空)) ----------------
|
||||
{"block": CARROT_BEEF_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_CARROT_BEEF, "consume": 1,
|
||||
"tip": "§a盛出 胡萝卜牛肉汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": LAMB_SOUP_WITH_TURNIPS_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_LAMB_TURNIP, "consume": 1,
|
||||
"tip": "§a盛出 胡萝卜羊肉汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": CARROT_RIBS_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_CARROT_RIBS, "consume": 1,
|
||||
"tip": "§a盛出 胡萝卜排骨汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": VEGETABLE_BEEF_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_VEGETABLE_BEEF, "consume": 1,
|
||||
"tip": "§a盛出 清汤羊肉, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": VEGETABLE_LAMB_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_VEGETABLE_LAMB, "consume": 1,
|
||||
"tip": "§a盛出 蔬菜牛肉汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": VEGETABLE_LEAN_BROTH_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_VEGETABLE_LEAN, "consume": 1,
|
||||
"tip": "§a盛出 蔬菜瘦肉汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": VEGETABLE_SSTEW_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_VEGETABLE_SSTEW, "consume": 1,
|
||||
"tip": "§a盛出 蔬菜乱炖, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": BEEF_BONE_BROTH_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_BEEF_BONE, "consume": 1,
|
||||
"tip": "§a盛出 胡萝卜土豆牛骨汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": LAMB_STEW_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_LAMB_STEW, "consume": 1,
|
||||
"tip": "§a盛出 土豆胡萝卜炖羊肉, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": LAMB_CHOP_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_LAMB_CHOP, "consume": 1,
|
||||
"tip": "§a盛出 胡萝卜土豆羊排汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": CARROT_COD_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_CARROT_COD, "consume": 1,
|
||||
"tip": "§a盛出 胡萝卜鳕鱼汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": CARROT_FISH_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_CARROT_FISH, "consume": 1,
|
||||
"tip": "§a盛出 胡萝卜鲑鱼汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": EGG_COD_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_EGG_COD, "consume": 1,
|
||||
"tip": "§a盛出 蛋花鳕鱼汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": NORI_EGG_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_NORI_EGG, "consume": 1,
|
||||
"tip": "§a盛出 瘦肉蛋花汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": TOFU_FISH_SOUP_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_TOFU_FISH, "consume": 1,
|
||||
"tip": "§a盛出 豆腐鲑鱼汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": CHICKEN_STEW_MUSHROOMS_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_MUSHROOM_CHICKEN, "consume": 1,
|
||||
"tip": "§a盛出 蘑菇炖鸡, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": RAW_PIG_FOOD_SOUP_5, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_PIG_FOOT, "consume": 1,
|
||||
"tip": "§a盛出 猪蹄汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": ROUJIAMO_SOUP_1, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_ROUJIAMO, "consume": 1,
|
||||
"tip": "§a盛出 羊肉泡馍汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
{"block": COOKED_NOODLE_SOUP, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_NOODLE, "consume": 1,
|
||||
"tip": "§a盛出 熟面条, 锅变回 汤锅(空); 熟面条可做汤面"},
|
||||
{"block": DUMPLINGS_SOUP_2, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_DUMPLINGS, "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盛出 蔬菜鱼片汤, 锅变回 汤锅(空); 成品【吃】右键食用"},
|
||||
# 菜谱38 碗装米饭(木碗盛出)
|
||||
{"block": RICE_POT_1, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_RICE_1, "consume": 1,
|
||||
"tip": "§a盛出 米饭_1(熟米饭_形态1), 锅变回 汤锅(空); 碗装米饭供炒锅蛋炒饭"},
|
||||
{"block": RICE_POT_2, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_RICE_2, "consume": 1,
|
||||
"tip": "§a盛出 米饭_2(熟米饭_形态2), 锅变回 汤锅(空); 碗装米饭供炒锅蛋炒饭"},
|
||||
{"block": RICE_POT_3, "item": BOWL, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOWL_RICE_3, "consume": 1,
|
||||
"tip": "§a盛出 米饭_3(熟米饭_形态3), 锅变回 汤锅(空); 碗装米饭供炒锅蛋炒饭"},
|
||||
|
||||
# ---------------- 七、取出(空手/菜刀, 锅变回汤锅(空)) ----------------
|
||||
# 菜谱37 饭团
|
||||
{"block": RICE_POT_1, "item": None, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": RICE_BALLS, "count": 16,
|
||||
"tip": "§a捏成 饭团x16, 锅变回 汤锅(空); 饭团供寿司用"},
|
||||
{"block": RICE_POT_2, "item": None, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": RICE_BALLS, "count": 16,
|
||||
"tip": "§a捏成 饭团x16, 锅变回 汤锅(空); 饭团供寿司用"},
|
||||
{"block": RICE_POT_3, "item": None, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": RICE_BALLS, "count": 16,
|
||||
"tip": "§a捏成 饭团x16, 锅变回 汤锅(空); 饭团供寿司用"},
|
||||
# 菜谱41 水煮蛋
|
||||
{"block": COOKED_EGG_SOUP, "item": None, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BOILED_EGG, "count": 9,
|
||||
"tip": "§a取出 水煮蛋x9, 锅变回 汤锅(空); 水煮蛋【吃】右键食用"},
|
||||
# 菜谱44 豆腐(菜刀切, 不消耗刀)
|
||||
{"block": BEANCURD_SOUP_1, "item": CLEAVER, "action": "take_out",
|
||||
"target": POT_EMPTY, "dropItem": BEANCURD, "count": 16,
|
||||
"tip": "§a切出 豆腐x16, 锅变回 汤锅(空); 豆腐供炒锅/汤锅使用"},
|
||||
|
||||
# ---------------- 八、汤面分组(手持汤锅成品菜 右键 熟面条(方块)) ----------------
|
||||
{"block": BOWL_NOODLE, "item": BOWL_CARROT_RIBS, "target": NOODLESOUP_1,
|
||||
"consume": 1, "drop": BOWL,
|
||||
"tip": "§a排骨汤浇在面条上, 变成 猪排蔬菜面, 掉落一个木碗; 汤面【吃】右键食用"},
|
||||
{"block": BOWL_NOODLE, "item": BOWL_LAMB_CHOP, "target": NOODLESOUP_2,
|
||||
"consume": 1, "drop": BOWL,
|
||||
"tip": "§a羊排汤浇在面条上, 变成 羊排蔬菜面, 掉落一个木碗; 汤面【吃】右键食用"},
|
||||
{"block": BOWL_NOODLE, "item": BOWL_BEEF_BONE, "target": NOODLESOUP_3,
|
||||
"consume": 1, "drop": BOWL,
|
||||
"tip": "§a牛骨汤浇在面条上, 变成 牛骨面, 掉落一个木碗; 汤面【吃】右键食用"},
|
||||
{"block": BOWL_NOODLE, "item": BOWL_MUSHROOM_CHICKEN, "target": NOODLESOUP_4,
|
||||
"consume": 1, "drop": BOWL,
|
||||
"tip": "§a蘑菇炖鸡浇在面条上, 变成 小鸡炖蘑菇面, 掉落一个木碗; 汤面【吃】右键食用"},
|
||||
{"block": BOWL_NOODLE, "item": BOWL_VEGETABLE_SSTEW, "target": ASSORTED_RAMEN,
|
||||
"consume": 1, "drop": BOWL,
|
||||
"tip": "§a蔬菜乱炖浇在面条上, 变成 胡萝卜蔬菜面, 掉落一个木碗; 汤面【吃】右键食用"},
|
||||
{"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放上水煮蛋, 变成 鸡蛋面, 掉落一个木碗; 汤面【吃】右键食用"},
|
||||
# 蛋花面(加葱花)
|
||||
{"block": NOODLES_1, "item": SCALLIONS, "target": NOODLES_2,
|
||||
"consume": 1, "tip": "§a蛋花面撒上葱花碎, 变成 蛋花面(加葱花); 汤面【吃】右键食用"},
|
||||
# 猪排蔬菜面加水煮蛋(猪排蔬菜面 + 水煮蛋)
|
||||
{"block": NOODLESOUP_1, "item": BOILED_EGG, "target": TONKOTSU_RAMEN,
|
||||
"consume": 1, "tip": "§a猪排蔬菜面放上水煮蛋, 变成 猪排蔬菜面加水煮蛋; 汤面【吃】右键食用"},
|
||||
]
|
||||
|
||||
# ============================================================================
|
||||
# 七、计时规则(供 TangguoTimerService)
|
||||
# below: 汤羹方块正下方须是 点燃的炉灶(stove_2) 才计时
|
||||
# randomTargets: 生米锅到点后随机出其一形态
|
||||
# ============================================================================
|
||||
TIMER_RULES = [
|
||||
# 胡萝卜牛肉汤(30秒/级)
|
||||
{"source": CARROT_BEEF_SOUP, "target": CARROT_BEEF_SOUP_1, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_BEEF_SOUP_1, "target": CARROT_BEEF_SOUP_2, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_BEEF_SOUP_2, "target": CARROT_BEEF_SOUP_3, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 胡萝卜羊肉汤(60秒/级)
|
||||
{"source": LAMB_SOUP_WITH_TURNIPS, "target": LAMB_SOUP_WITH_TURNIPS_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": LAMB_SOUP_WITH_TURNIPS_1, "target": LAMB_SOUP_WITH_TURNIPS_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": LAMB_SOUP_WITH_TURNIPS_2, "target": LAMB_SOUP_WITH_TURNIPS_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 胡萝卜排骨汤(60秒/级)
|
||||
{"source": CARROT_RIBS, "target": CARROT_RIBS_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_RIBS_1, "target": CARROT_RIBS_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_RIBS_2, "target": CARROT_RIBS_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 清汤羊肉(60秒/级)
|
||||
{"source": VEGETABLE_BEEF_SOUP, "target": VEGETABLE_BEEF_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_BEEF_SOUP_1, "target": VEGETABLE_BEEF_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_BEEF_SOUP_2, "target": VEGETABLE_BEEF_SOUP_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 蔬菜牛肉汤(60秒/级)
|
||||
{"source": VEGETABLE_LAMB_SOUP, "target": VEGETABLE_LAMB_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_LAMB_SOUP_1, "target": VEGETABLE_LAMB_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_LAMB_SOUP_2, "target": VEGETABLE_LAMB_SOUP_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 蔬菜瘦肉汤(60秒/级)
|
||||
{"source": VEGETABLE_LEAN_BROTH, "target": VEGETABLE_LEAN_BROTH_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_LEAN_BROTH_1, "target": VEGETABLE_LEAN_BROTH_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_LEAN_BROTH_2, "target": VEGETABLE_LEAN_BROTH_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 蔬菜乱炖(60秒/级)
|
||||
{"source": VEGETABLE_SSTEW, "target": VEGETABLE_SSTEW_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_SSTEW_1, "target": VEGETABLE_SSTEW_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": VEGETABLE_SSTEW_2, "target": VEGETABLE_SSTEW_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 胡萝卜土豆牛骨汤(60秒/级)
|
||||
{"source": BEEF_BONE_BROTH, "target": BEEF_BONE_BROTH_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": BEEF_BONE_BROTH_1, "target": BEEF_BONE_BROTH_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": BEEF_BONE_BROTH_2, "target": BEEF_BONE_BROTH_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 土豆胡萝卜炖羊肉(60秒/级)
|
||||
{"source": LAMB_STEW, "target": LAMB_STEW_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": LAMB_STEW_1, "target": LAMB_STEW_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": LAMB_STEW_2, "target": LAMB_STEW_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 胡萝卜土豆羊排汤(60秒/级)
|
||||
{"source": VEGETABLE_POTATOES_LAMBSTEAK, "target": LAMB_CHOP_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": LAMB_CHOP_SOUP_1, "target": LAMB_CHOP_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": LAMB_CHOP_SOUP_2, "target": LAMB_CHOP_SOUP_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 胡萝卜鳕鱼汤(60秒/级)
|
||||
{"source": CARROT_COD_SOUP, "target": CARROT_COD_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_COD_SOUP_1, "target": CARROT_COD_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_COD_SOUP_2, "target": CARROT_COD_SOUP_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 胡萝卜鲑鱼汤(60秒/级)
|
||||
{"source": CARROT_FISH_SOUP, "target": CARROT_FISH_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_FISH_SOUP_1, "target": CARROT_FISH_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CARROT_FISH_SOUP_2, "target": CARROT_FISH_SOUP_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 蛋花鳕鱼汤(60秒/级)
|
||||
{"source": EGG_COD_SOUP, "target": EGG_COD_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": EGG_COD_SOUP_1, "target": EGG_COD_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": EGG_COD_SOUP_2, "target": EGG_COD_SOUP_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 瘦肉蛋花汤(30秒/级, 四段)
|
||||
{"source": NORI_EGG_SOUP, "target": NORI_EGG_SOUP_0, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": NORI_EGG_SOUP_0, "target": NORI_EGG_SOUP_1, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": NORI_EGG_SOUP_1, "target": NORI_EGG_SOUP_2, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": NORI_EGG_SOUP_2, "target": NORI_EGG_SOUP_3, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 豆腐鲑鱼汤(60秒/级, 生=tufusoupb)
|
||||
{"source": TOFU_FISH_SOUP_RAW, "target": TOFU_FISH_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": TOFU_FISH_SOUP_1, "target": TOFU_FISH_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": TOFU_FISH_SOUP_2, "target": TOFU_FISH_SOUP_3, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 蘑菇炖鸡(90秒/级)
|
||||
{"source": CHICKEN_STEW_MUSHROOMS, "target": CHICKEN_STEW_MUSHROOMS_1, "time": 90,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CHICKEN_STEW_MUSHROOMS_1, "target": CHICKEN_STEW_MUSHROOMS_2, "time": 90,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": CHICKEN_STEW_MUSHROOMS_2, "target": CHICKEN_STEW_MUSHROOMS_3, "time": 90,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 猪蹄汤(30秒/级, 加土豆->三分熟->七分熟->全熟)
|
||||
{"source": RAW_PIG_FOOD_SOUP_2, "target": RAW_PIG_FOOD_SOUP_3, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": RAW_PIG_FOOD_SOUP_3, "target": RAW_PIG_FOOD_SOUP_4, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": RAW_PIG_FOOD_SOUP_4, "target": RAW_PIG_FOOD_SOUP_5, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 羊肉泡馍汤(单级30秒)
|
||||
{"source": ROUJIAMO_SOUP_0, "target": ROUJIAMO_SOUP_1, "time": 30,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 生面汤(单级60秒)
|
||||
{"source": RAW_NOODLE_SOUP, "target": COOKED_NOODLE_SOUP, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 饺子汤(60秒/级)
|
||||
{"source": DUMPLINGS_SOUP_0, "target": DUMPLINGS_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
{"source": DUMPLINGS_SOUP_1, "target": DUMPLINGS_SOUP_2, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 生米锅(一级90秒, 形态随机)
|
||||
{"source": RAW_RICE_POT, "time": 90, "below": [LIT_STOVE], "autoStart": True,
|
||||
"randomTargets": [RICE_POT_1, RICE_POT_2, RICE_POT_3]},
|
||||
# 煮鸡蛋(单级60秒)
|
||||
{"source": RAW_EGG_SOUP, "target": COOKED_EGG_SOUP, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
# 煮豆腐(单级60秒)
|
||||
{"source": BEANCURD_SOUP_0, "target": BEANCURD_SOUP_1, "time": 60,
|
||||
"below": [LIT_STOVE], "autoStart": True},
|
||||
]
|
||||
@@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
+228
@@ -0,0 +1,228 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
================================================================================
|
||||
汤锅·右键转换引擎(服务端)
|
||||
================================================================================
|
||||
处理"汤锅"(xy_tangguo) 分类下的右键转换:
|
||||
汤锅(空)<->(加水)、盖/掀锅盖、下汤底、组合汤、
|
||||
加肉/鱼/豆腐(开始计时)、出锅(熟汤羹+木碗->碗装成品)、
|
||||
取出(饭团/水煮蛋/豆腐)、汤面(成品菜浇熟面条)
|
||||
|
||||
【事件监听在哪?】
|
||||
本类【不】监听任何事件!
|
||||
所有事件由 FeatureDispatcher 统一监听, 按 blockOwner 路由到本类 handleBlockUse。
|
||||
|
||||
【本类怎么做】
|
||||
handleBlockUse <- 入口: 分发器转发右键方块事件
|
||||
└─ handleSwitch <- 通用转换(含 空手右键/出锅/取出)
|
||||
|
||||
【计时在?】
|
||||
加肉/鱼后熬制计时在 TangguoTimerService, 本类只负责"开始计时"(startTimer 字段调
|
||||
FeatureDispatcher.startTimerFor 转发); 下方无点燃炉灶时提示玩家。
|
||||
================================================================================
|
||||
"""
|
||||
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
|
||||
|
||||
# ---- 只导入汤锅自己的数据库 ----
|
||||
from ..TangguoData import SWITCH_RULES
|
||||
|
||||
# ---- 统一分发器 ----
|
||||
from ...service.FeatureDispatcher import FeatureDispatcher
|
||||
|
||||
|
||||
class TangguoService(BlueFoxServerSystem):
|
||||
"""
|
||||
汤锅·右键转换引擎
|
||||
"""
|
||||
|
||||
def __init__(self, namespace, systemName):
|
||||
super(TangguoService, self).__init__(namespace, systemName)
|
||||
print "===== TangguoService init ====="
|
||||
|
||||
# ---- (方块, 手持物品) -> 规则: O(1) 查找 (item=None 表示空手右键) ----
|
||||
self.recipes = {}
|
||||
self.featureBlocks = set()
|
||||
for r in SWITCH_RULES:
|
||||
self.recipes[(r["block"], r.get("item"))] = r
|
||||
self.featureBlocks.add(r["block"])
|
||||
|
||||
# ---- 右键冷却表 ----
|
||||
self.cooldown = {}
|
||||
|
||||
# ---- 注册到统一分发器 ----
|
||||
FeatureDispatcher.register(self)
|
||||
|
||||
# ============================================================================
|
||||
# 一、给 FeatureDispatcher 的接口
|
||||
# ============================================================================
|
||||
|
||||
def getFeatureBlocks(self):
|
||||
"""返回本功能管辖的所有右键方块名集合"""
|
||||
return self.featureBlocks
|
||||
|
||||
def getItemUseOnRules(self):
|
||||
"""手持物品右键方块表面不需要单独路由(所有转换都是右键方块本身), 返回空"""
|
||||
return {}
|
||||
|
||||
def handleBlockUse(self, args):
|
||||
"""由 FeatureDispatcher 转发的右键方块入口"""
|
||||
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)
|
||||
itemName = itemDict.get("newItemName") if itemDict else None
|
||||
if itemName == "minecraft:air":
|
||||
itemName = None
|
||||
recipe = self.recipes.get((blockName, itemName))
|
||||
if not recipe:
|
||||
return False
|
||||
if not self.checkCooldown(key, 0.4):
|
||||
return True
|
||||
self.handleSwitch(recipe, playerId, pos, dim, itemDict)
|
||||
return True
|
||||
|
||||
# ============================================================================
|
||||
# 二、通用转换执行
|
||||
# ============================================================================
|
||||
|
||||
def handleSwitch(self, recipe, playerId, pos, dim, itemDict):
|
||||
# 消耗物品(数量不足则拦截, 不转换)
|
||||
consume = recipe.get("consume", 0)
|
||||
if consume > 1 and itemDict is not None and (itemDict.get("count") or 0) < consume:
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§c数量不足, 需要 %d 个" % consume)
|
||||
return
|
||||
if consume > 0:
|
||||
self.consumeItem(playerId, itemDict, consume)
|
||||
|
||||
# 出锅/取出: 熟汤羹+木碗 -> 碗装成品; 熟米饭->饭团/碗装米饭;
|
||||
# 煮鸡蛋->水煮蛋; 煮豆腐->豆腐. 锅都变回 汤锅(空)
|
||||
action = recipe.get("action")
|
||||
if action == "take_out":
|
||||
self.replaceBlock(pos, dim, recipe.get("target") or self._defaultPot(), playerId)
|
||||
self.dropItem(dim, pos, recipe["dropItem"], recipe.get("count", 1))
|
||||
# 普通替换方块(加水/盖锅/下汤底/组合/加料/汤面)
|
||||
if recipe.get("target") and action != "take_out":
|
||||
self.replaceBlock(pos, dim, recipe["target"], playerId)
|
||||
|
||||
# 额外掉落(倒水掉水桶 / 蔬菜乱炖掉汤锅(空) / 汤面掉木碗)
|
||||
if recipe.get("drop"):
|
||||
self.dropItem(dim, pos, recipe["drop"])
|
||||
|
||||
# 加料后启动计时(记录发起玩家); 下方无点燃炉灶时提示
|
||||
if recipe.get("startTimer"):
|
||||
started = FeatureDispatcher.startTimerFor(
|
||||
recipe["startTimer"], dim, pos, playerId)
|
||||
if not started:
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§e熬制需要下方是 点燃的炉灶; 放上炉灶后会自动开始计时")
|
||||
|
||||
# 给背包物品(加水给空桶)
|
||||
if recipe.get("give"):
|
||||
self.giveItem(playerId, recipe["give"])
|
||||
|
||||
# 提示
|
||||
if recipe.get("tip"):
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, recipe["tip"])
|
||||
|
||||
def _defaultPot(self):
|
||||
"""take_out 未指定 target 时回退(正常应总是带 target=汤锅(空))"""
|
||||
return "rtdd:stewedsoup"
|
||||
|
||||
# ============================================================================
|
||||
# 三、工具方法:获取玩家主手物品
|
||||
# ============================================================================
|
||||
|
||||
def getCarriedItem(self, playerId):
|
||||
itemComp = comp.CreateItem(playerId)
|
||||
return itemComp.GetPlayerItem(
|
||||
serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
|
||||
|
||||
# ============================================================================
|
||||
# 四、工具方法:给玩家物品
|
||||
# ============================================================================
|
||||
|
||||
def giveItem(self, playerId, itemName, count=1, aux=0):
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
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),
|
||||
"userData": itemDict.get("userData", {})})
|
||||
|
||||
# ============================================================================
|
||||
# 六、工具方法:以掉落物形式生成物品
|
||||
# ============================================================================
|
||||
|
||||
def dropItem(self, dim, pos, itemName, count=1, aux=0):
|
||||
try:
|
||||
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
|
||||
self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ============================================================================
|
||||
# 七、工具方法:替换方块 / 清空方块(清空时 aux 强制 0, 兼容定向变体)
|
||||
# ============================================================================
|
||||
|
||||
def replaceBlock(self, pos, dim, newBlockName, playerId=None):
|
||||
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 clearBlock(self, pos, dim):
|
||||
comp.CreateBlockInfo(LevelId).SetBlockNew(
|
||||
pos, blockDict={"name": "minecraft:air", "aux": 0},
|
||||
oldBlockHandling=0, dimensionId=dim)
|
||||
|
||||
# ============================================================================
|
||||
# 八、工具方法:冷却检查
|
||||
# ============================================================================
|
||||
|
||||
def checkCooldown(self, key, cd=0.4):
|
||||
now = time.time()
|
||||
last = self.cooldown.get(key, 0)
|
||||
if now - last < cd:
|
||||
return False
|
||||
self.cooldown[key] = now
|
||||
return True
|
||||
+234
@@ -0,0 +1,234 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
================================================================================
|
||||
汤锅·计时熬制引擎(服务端)
|
||||
================================================================================
|
||||
只处理"汤锅"(xy_tangguo) 分类下的【计时自动转换】:
|
||||
汤羹(生) -> (四分熟) -> (八分熟) -> (熟)
|
||||
瘦肉蛋花汤: 生->三分熟->七分熟->全熟->熟; 猪蹄汤: 加土豆->三分熟->七分熟->全熟
|
||||
生米锅: 一级计时到点后 熟米饭形态1/2/3 随机出一个
|
||||
煮鸡蛋/煮豆腐/生面汤/饺子汤/羊肉泡馍汤: 单级/双级计时
|
||||
|
||||
【计时判定(用户指定, 与油锅一致)】
|
||||
- 汤羹方块【正下方】必须是 点燃的炉灶(stove_2) 才开始计时
|
||||
- 计时数据仍在【汤羹方块本身】上(汤羹方块 tick 时判定下方炉灶)
|
||||
- 炉灶被移走/熄灭 -> 暂停计时(数据保留, 炉灶回来继续) + 提示发起玩家
|
||||
|
||||
【事件监听在哪?】
|
||||
本类【不】监听任何事件!
|
||||
ServerBlockEntityTickEvent 由 FeatureDispatcher 统一监听, 再按 timerOwner
|
||||
路由到本类的 handleBlockEntityTick。计时用绝对时间戳写方块实体数据,
|
||||
退出重进继续计时。
|
||||
================================================================================
|
||||
"""
|
||||
import time
|
||||
import random
|
||||
import mod.server.extraServerApi as serverApi
|
||||
|
||||
# ---- 网易API基础对象 ----
|
||||
ServerSystem = serverApi.GetServerSystemCls() # 服务端系统基类
|
||||
comp = serverApi.GetEngineCompFactory() # 组件工厂
|
||||
|
||||
# ---- 继承 BlueFox 框架的系统基类 ----
|
||||
from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
|
||||
from ....BlueFoxTools.ToolsConfig import LevelId
|
||||
|
||||
# ---- 方块实体数据组件(计时持久化: 开始时间戳+时长写进方块) ----
|
||||
blockEntityDataComp = comp.CreateBlockEntityData(LevelId)
|
||||
|
||||
# ---- 只导入汤锅自己的数据库 ----
|
||||
from ..TangguoData import TIMER_RULES
|
||||
|
||||
# ---- 统一分发器 ----
|
||||
from ...service.FeatureDispatcher import FeatureDispatcher
|
||||
|
||||
|
||||
class TangguoTimerService(BlueFoxServerSystem):
|
||||
"""
|
||||
汤锅·计时熬制引擎
|
||||
"""
|
||||
|
||||
def __init__(self, namespace, systemName):
|
||||
super(TangguoTimerService, self).__init__(namespace, systemName)
|
||||
print "===== TangguoTimerService init ====="
|
||||
|
||||
# ---- 计时规则: source -> [规则...] ----
|
||||
self.timerMap = {}
|
||||
for t in TIMER_RULES:
|
||||
self.timerMap.setdefault(t["source"], []).append(t)
|
||||
|
||||
# ---- 注册到分发器的计时路由表 ----
|
||||
FeatureDispatcher.registerTimer(self)
|
||||
|
||||
# ============================================================================
|
||||
# 一、给 FeatureDispatcher 的接口
|
||||
# ============================================================================
|
||||
|
||||
def getTimerBlocks(self):
|
||||
"""返回本功能的所有"计时源方块"集合(tick 路由用)"""
|
||||
return set(self.timerMap.keys())
|
||||
|
||||
def handleBlockEntityTick(self, args):
|
||||
"""由 FeatureDispatcher 转发的计时方块 tick 入口"""
|
||||
dim = args.get("dimension")
|
||||
pos = (args.get("posX"), args.get("posY"), args.get("posZ"))
|
||||
blockName = args.get("blockName", "")
|
||||
self._tickProcess(dim, pos, blockName)
|
||||
|
||||
# ============================================================================
|
||||
# 二、启动计时(右键加料后由 TangguoService 通过 startTimerFor 转发)
|
||||
# ============================================================================
|
||||
|
||||
def startTimer(self, dim, pos, blockName, playerId=None):
|
||||
rules = self.timerMap.get(blockName)
|
||||
if not rules:
|
||||
return False
|
||||
rule = self._pickRule(rules, dim, pos)
|
||||
if not rule:
|
||||
return False
|
||||
try:
|
||||
data = blockEntityDataComp.GetBlockEntityData(dim, pos)
|
||||
if data and data["rtdd_tid"] == blockName:
|
||||
return False
|
||||
except Exception:
|
||||
pass
|
||||
self._writeTimerData(dim, pos, rule, playerId)
|
||||
return True
|
||||
|
||||
# ============================================================================
|
||||
# 三、tick 检查与到点转换
|
||||
# ============================================================================
|
||||
|
||||
def _pickRule(self, rules, dim, pos):
|
||||
"""按"下方方块"匹配规则(点燃炉灶), 返回命中的规则; 无命中返回 None"""
|
||||
belowPos = (pos[0], pos[1] - 1, pos[2])
|
||||
try:
|
||||
b = comp.CreateBlockInfo(LevelId).GetBlockNew(belowPos, dim)
|
||||
belowName = b.get("name") if b else ""
|
||||
except Exception:
|
||||
belowName = ""
|
||||
for rule in rules:
|
||||
if belowName in rule.get("below", [belowName]):
|
||||
return rule
|
||||
return None
|
||||
|
||||
def _tickProcess(self, dim, pos, blockName):
|
||||
try:
|
||||
rules = self.timerMap.get(blockName)
|
||||
if not rules:
|
||||
return
|
||||
|
||||
blockData = blockEntityDataComp.GetBlockEntityData(dim, pos)
|
||||
if blockData is None:
|
||||
return
|
||||
|
||||
try:
|
||||
tid = blockData["rtdd_tid"]
|
||||
except Exception:
|
||||
tid = ""
|
||||
if tid != blockName:
|
||||
# autoStart: 计时源方块无计时数据且下方点燃炉灶时自动启动
|
||||
if any(r.get("autoStart", True) for r in rules):
|
||||
rule = self._pickRule(rules, dim, pos)
|
||||
if rule:
|
||||
self._writeTimerData(dim, pos, rule, None)
|
||||
return
|
||||
|
||||
# 计时中: 下方点燃炉灶被移走/熄灭 -> 暂停 + 提示
|
||||
rule = self._pickRule(rules, dim, pos)
|
||||
if rule is None:
|
||||
self._handleBelowBroken(dim, pos, blockName, blockData)
|
||||
return
|
||||
|
||||
tstart = blockData["rtdd_tstart"]
|
||||
tdur = blockData["rtdd_tdur"]
|
||||
|
||||
if time.time() - tstart >= tdur:
|
||||
self._finishTimer(dim, pos, rule)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def _handleBelowBroken(self, dim, pos, blockName, data):
|
||||
"""下方点燃炉灶被移走/熄灭: 暂停计时(数据保留, 炉灶回来继续) + 提示发起玩家"""
|
||||
tp = ""
|
||||
try:
|
||||
tp = data["rtdd_tp"] or ""
|
||||
except Exception:
|
||||
tp = ""
|
||||
self._notifyIfOnline(tp, "§c汤锅下的炉灶移走了, 暂停熬制")
|
||||
|
||||
def _finishTimer(self, dim, pos, rule):
|
||||
"""到点转换(只保留开始提示; 炉灶移走提示走 _handleBelowBroken)"""
|
||||
try:
|
||||
cur = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
|
||||
if cur and cur.get("name") != rule["source"]:
|
||||
self._clearTimerData(dim, pos)
|
||||
return
|
||||
# 生米锅: 一级计时到点后 三种形态随机出一个
|
||||
if rule.get("randomTargets"):
|
||||
target = random.choice(rule["randomTargets"])
|
||||
else:
|
||||
target = rule["target"]
|
||||
self.replaceBlock(pos, dim, target, None)
|
||||
self._clearTimerData(dim, pos)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ============================================================================
|
||||
# 四、计时数据读写(存在方块实体数据里,重启不丢)
|
||||
# ============================================================================
|
||||
|
||||
def _writeTimerData(self, dim, pos, recipe, playerId=None):
|
||||
try:
|
||||
blockData = blockEntityDataComp.GetBlockEntityData(dim, pos)
|
||||
if blockData is None:
|
||||
return
|
||||
now = time.time()
|
||||
blockData["rtdd_tid"] = recipe["source"]
|
||||
blockData["rtdd_tstart"] = now
|
||||
blockData["rtdd_tdur"] = recipe.get("time", 60)
|
||||
blockData["rtdd_tp"] = playerId if playerId else ""
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def _clearTimerData(self, dim, pos):
|
||||
try:
|
||||
blockData = blockEntityDataComp.GetBlockEntityData(dim, pos)
|
||||
if blockData is None:
|
||||
return
|
||||
blockData["rtdd_tid"] = ""
|
||||
blockData["rtdd_tstart"] = 0
|
||||
blockData["rtdd_tdur"] = 0
|
||||
blockData["rtdd_tp"] = ""
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ============================================================================
|
||||
# 五、提示工具
|
||||
# ============================================================================
|
||||
|
||||
def _notifyIfOnline(self, playerId, tip):
|
||||
if not tip or not playerId:
|
||||
return
|
||||
try:
|
||||
ids = comp.CreateGame(LevelId).GetAllPlayerIds()
|
||||
if playerId in ids:
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, tip)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# ============================================================================
|
||||
# 六、工具方法:替换方块
|
||||
# ============================================================================
|
||||
|
||||
def replaceBlock(self, pos, dim, newBlockName, playerId=None):
|
||||
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)
|
||||
+1
@@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
Reference in new issue
Block a user