面食 7 提示补充 烤炉转换物品 变成掉落物
This commit is contained in:
1 parent
c1a4de6a9f
commit
0bf10f1cb3
5 files changed
+157
-17
No files matched your search
@@ -62,6 +62,31 @@ OVEN_FIX_BLOCKS = {
|
|||||||
"rtdd:cakebatterblock_0", "rtdd:plate_34", "rtdd:creampastry_0",
|
"rtdd:cakebatterblock_0", "rtdd:plate_34", "rtdd:creampastry_0",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 烤制完成后的成品方块(下方是烤炉时空手右键 -> 掉落取走, 烤炉本身不参与):
|
||||||
|
# 法棍/吐司/可颂/甜甜圈胚(烤熟)/蛋糕面糊(烤熟)/布丁半成品/舒芙蕾
|
||||||
|
OVEN_RESULT_BLOCKS = {
|
||||||
|
"rtdd:bread_1", "rtdd:bread_2", "rtdd:bread_3", "rtdd:bread_4c",
|
||||||
|
"rtdd:cakebatterblock", "rtdd:plate_35", "rtdd:souffle_0",
|
||||||
|
}
|
||||||
|
|
||||||
|
# 物品/方块 -> 中文名(用于"下一步操作"提示)
|
||||||
|
NAME_MAP = {
|
||||||
|
EGG: "鸡蛋", CLEAVER: "菜刀", ROLLINGPIN: "擀面杖",
|
||||||
|
PORK_FILLING: "猪肉馅", BEEF_FILLING: "牛肉馅", VEGGIE: "青菜碎",
|
||||||
|
COOKED_BEEF: "熟牛肉", COOKED_PORK: "熟猪肉", COOKED_COD: "熟鳕鱼",
|
||||||
|
POTATO: "熟土豆", BROWN_RICE: "生大米", CREAM: "奶油",
|
||||||
|
HONEY: "蜂蜜", BERRIES: "浆果", SUGAR: "糖", PLATE: "盘子",
|
||||||
|
BOWL: "木碗", STEAMER: "蒸笼", OVEN: "烤炉", LIT_STOVE: "点燃的炉灶",
|
||||||
|
"rtdd:bread_1": "法棍", "rtdd:bread_2": "吐司", "rtdd:bread_3": "可颂",
|
||||||
|
"rtdd:bread_4": "甜甜圈", "rtdd:bread_4c": "甜甜圈胚(烤熟)",
|
||||||
|
"rtdd:shouroubao": "熟肉包子", "rtdd:cream_0": "奶油",
|
||||||
|
"rtdd:dumplings_4": "生饺子", "rtdd:roubaozi_3": "生肉包子",
|
||||||
|
"rtdd:bamboo_4": "竹筒(加入肉)", "rtdd:plate_34": "蛋液半成品",
|
||||||
|
"rtdd:dought_7": "生面饼", "rtdd:farineblock_1": "面粉(加鸡蛋)",
|
||||||
|
"rtdd:cakebatterblock": "蛋糕面糊(烤熟)", "rtdd:plate_35": "布丁半成品",
|
||||||
|
"rtdd:souffle_0": "舒芙蕾", "rtdd:dumplings_0": "饺子皮",
|
||||||
|
}
|
||||||
|
|
||||||
# 竹筒饭加肉: 接受原版常见生熟肉类(【待确认】具体肉类未定, 先放开常见肉)
|
# 竹筒饭加肉: 接受原版常见生熟肉类(【待确认】具体肉类未定, 先放开常见肉)
|
||||||
MEAT_ITEMS = [
|
MEAT_ITEMS = [
|
||||||
"minecraft:porkchop", "minecraft:cooked_porkchop",
|
"minecraft:porkchop", "minecraft:cooked_porkchop",
|
||||||
|
|||||||
+71
-5
@@ -37,7 +37,8 @@ from ....BlueFoxTools.ToolsConfig import LevelId
|
|||||||
from ..MianshiData import (
|
from ..MianshiData import (
|
||||||
CLEAVER, ROLLINGPIN, BOWL, OVEN, STEAMER,
|
CLEAVER, ROLLINGPIN, BOWL, OVEN, STEAMER,
|
||||||
MEAT_ITEMS, FILLING_ITEMS, RICH_MEAT_ITEMS,
|
MEAT_ITEMS, FILLING_ITEMS, RICH_MEAT_ITEMS,
|
||||||
SWITCH_RULES, KNEAD_COUNTERS, ITEM_USE_ON_RULES, OVEN_FIX_BLOCKS,
|
SWITCH_RULES, KNEAD_COUNTERS, ITEM_USE_ON_RULES, TIMER_RULES,
|
||||||
|
OVEN_FIX_BLOCKS, OVEN_RESULT_BLOCKS, NAME_MAP,
|
||||||
)
|
)
|
||||||
|
|
||||||
# ---- 统一分发器 ----
|
# ---- 统一分发器 ----
|
||||||
@@ -85,6 +86,35 @@ class MianshiService(BlueFoxServerSystem):
|
|||||||
for b in OVEN_FIX_BLOCKS:
|
for b in OVEN_FIX_BLOCKS:
|
||||||
self.featureBlocks.add(b)
|
self.featureBlocks.add(b)
|
||||||
|
|
||||||
|
# 烤制成品也登记右键路由(空手右键取走)
|
||||||
|
for b in OVEN_RESULT_BLOCKS:
|
||||||
|
self.featureBlocks.add(b)
|
||||||
|
|
||||||
|
# ---- 目标方块 -> "下一步操作"提示(自动生成, 供转换/计时完成提示追加) ----
|
||||||
|
self.nextOps = {}
|
||||||
|
for r in SWITCH_RULES:
|
||||||
|
item = r.get("item")
|
||||||
|
if item is None:
|
||||||
|
op = "空手右键"
|
||||||
|
elif item == CLEAVER:
|
||||||
|
op = "手持菜刀右键"
|
||||||
|
elif item == ROLLINGPIN:
|
||||||
|
op = "手持擀面杖右键"
|
||||||
|
else:
|
||||||
|
op = "手持%s右键" % NAME_MAP.get(item, "对应物品")
|
||||||
|
self.nextOps.setdefault(r["block"], []).append(op)
|
||||||
|
for r in ITEM_USE_ON_RULES:
|
||||||
|
it = r["item"]
|
||||||
|
self.nextOps.setdefault(it, []).append(
|
||||||
|
"手持%s右键%s" % (NAME_MAP.get(it, "它"), NAME_MAP.get(r["surface"], "表面")))
|
||||||
|
for r in TIMER_RULES:
|
||||||
|
src = r["source"]
|
||||||
|
if r.get("below"):
|
||||||
|
self.nextOps.setdefault(src, []).append(
|
||||||
|
"放在%s上计时" % NAME_MAP.get(r["below"][0], "下方方块"))
|
||||||
|
else:
|
||||||
|
self.nextOps.setdefault(src, []).append("自动计时")
|
||||||
|
|
||||||
# ---- itemUseOn 映射: 手持物品 -> 规则 ----
|
# ---- itemUseOn 映射: 手持物品 -> 规则 ----
|
||||||
self.itemUseOnMap = {}
|
self.itemUseOnMap = {}
|
||||||
for r in ITEM_USE_ON_RULES:
|
for r in ITEM_USE_ON_RULES:
|
||||||
@@ -131,7 +161,18 @@ class MianshiService(BlueFoxServerSystem):
|
|||||||
if blockName in OVEN_FIX_BLOCKS and self._belowIs(dim, pos, OVEN):
|
if blockName in OVEN_FIX_BLOCKS and self._belowIs(dim, pos, OVEN):
|
||||||
FeatureDispatcher.startTimerFor(blockName, dim, pos, playerId)
|
FeatureDispatcher.startTimerFor(blockName, dim, pos, playerId)
|
||||||
if self.checkCooldown(key, 0.4):
|
if self.checkCooldown(key, 0.4):
|
||||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a开始烤制…(60秒)")
|
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a开始烤制…(60秒), 烤好空手右键取走")
|
||||||
|
return True
|
||||||
|
|
||||||
|
# ---- 烤制成品取走: 空手右键成品(下方是烤炉) -> 成品掉落物, 烤炉不动 ----
|
||||||
|
if blockName in OVEN_RESULT_BLOCKS and self._belowIs(dim, pos, OVEN) \
|
||||||
|
and (not itemName or itemName == "minecraft:air"):
|
||||||
|
if not self.checkCooldown(key, 0.4):
|
||||||
|
return True
|
||||||
|
self.clearBlock(pos, dim)
|
||||||
|
self.dropItem(dim, pos, blockName)
|
||||||
|
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||||
|
playerId, "§a取走" + self._nameOf(blockName))
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# ---- 常规转换 ----
|
# ---- 常规转换 ----
|
||||||
@@ -208,7 +249,11 @@ class MianshiService(BlueFoxServerSystem):
|
|||||||
rule["startTimer"], dim, (x, y, z), playerId)
|
rule["startTimer"], dim, (x, y, z), playerId)
|
||||||
|
|
||||||
if rule.get("tip"):
|
if rule.get("tip"):
|
||||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, rule["tip"])
|
tip = rule["tip"]
|
||||||
|
nxt = self._nextOpsFor(rule.get("replace") or rule.get("above"))
|
||||||
|
if nxt:
|
||||||
|
tip += ";下一步: " + "、".join(nxt)
|
||||||
|
comp.CreateMsg(playerId).NotifyOneMessage(playerId, tip)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -300,9 +345,13 @@ class MianshiService(BlueFoxServerSystem):
|
|||||||
# 转换后启动计时(发酵等, 记录玩家以便完成提示送达)
|
# 转换后启动计时(发酵等, 记录玩家以便完成提示送达)
|
||||||
if recipe.get("startTimer"):
|
if recipe.get("startTimer"):
|
||||||
FeatureDispatcher.startTimerFor(recipe["startTimer"], dim, pos, playerId)
|
FeatureDispatcher.startTimerFor(recipe["startTimer"], dim, pos, playerId)
|
||||||
# 提示
|
# 提示(追加"下一步操作"指引)
|
||||||
if recipe.get("tip"):
|
if recipe.get("tip"):
|
||||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, recipe["tip"])
|
tip = recipe["tip"]
|
||||||
|
nxt = self._nextOpsFor(recipe.get("target") or recipe.get("dropItem"))
|
||||||
|
if nxt:
|
||||||
|
tip += ";下一步: " + "、".join(nxt)
|
||||||
|
comp.CreateMsg(playerId).NotifyOneMessage(playerId, tip)
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# 五、工具方法:判断正下方是否指定方块(烤炉/点燃炉灶)
|
# 五、工具方法:判断正下方是否指定方块(烤炉/点燃炉灶)
|
||||||
@@ -315,6 +364,23 @@ class MianshiService(BlueFoxServerSystem):
|
|||||||
except Exception:
|
except Exception:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def _nameOf(self, blockName):
|
||||||
|
"""方块/物品的中文名(提示用), 未知则原样"""
|
||||||
|
return NAME_MAP.get(blockName, blockName)
|
||||||
|
|
||||||
|
def _nextOpsFor(self, key):
|
||||||
|
"""返回某方块/物品的"下一步操作"提示列表(去重保序)"""
|
||||||
|
if not key:
|
||||||
|
return []
|
||||||
|
ops = self.nextOps.get(key, [])
|
||||||
|
seen = set()
|
||||||
|
out = []
|
||||||
|
for o in ops:
|
||||||
|
if o not in seen:
|
||||||
|
seen.add(o)
|
||||||
|
out.append(o)
|
||||||
|
return out
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# 六、工具方法:获取玩家主手物品
|
# 六、工具方法:获取玩家主手物品
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|||||||
+48
-2
@@ -171,6 +171,12 @@ class MianshiTimerService(BlueFoxServerSystem):
|
|||||||
self._setAir(dim, pos)
|
self._setAir(dim, pos)
|
||||||
self._notifyIfOnline(data.get("rtdd_tp"), BREAK_TIP)
|
self._notifyIfOnline(data.get("rtdd_tp"), BREAK_TIP)
|
||||||
|
|
||||||
|
# 蒸制/烤制/发酵 完成后的"下一步"指引(按目标方块)
|
||||||
|
_STEAM_DONE = {"rtdd:steamerdumplings_1", "rtdd:baozilong_2",
|
||||||
|
"rtdd:bamboo_7", "rtdd:steamermilkandegg_1"}
|
||||||
|
_OVEN_DONE = {"rtdd:bread_1", "rtdd:bread_2", "rtdd:bread_3", "rtdd:bread_4c",
|
||||||
|
"rtdd:cakebatterblock", "rtdd:plate_35", "rtdd:souffle_0"}
|
||||||
|
|
||||||
def _finishTimer(self, dim, pos, rule, data):
|
def _finishTimer(self, dim, pos, rule, data):
|
||||||
try:
|
try:
|
||||||
cur = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
|
cur = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
|
||||||
@@ -180,8 +186,48 @@ class MianshiTimerService(BlueFoxServerSystem):
|
|||||||
# 到点转换
|
# 到点转换
|
||||||
self.replaceBlock(pos, dim, rule["target"], None)
|
self.replaceBlock(pos, dim, rule["target"], None)
|
||||||
self._clearTimerData(dim, pos)
|
self._clearTimerData(dim, pos)
|
||||||
if rule.get("doneTip"):
|
tip = rule.get("doneTip", "")
|
||||||
self._notifyIfOnline(data.get("rtdd_tp"), rule["doneTip"])
|
if tip:
|
||||||
|
tip += self._nextStepTip(rule)
|
||||||
|
self._notifyIfOnline(data.get("rtdd_tp"), tip)
|
||||||
|
if not data.get("rtdd_tp"):
|
||||||
|
self._notifyNearby(dim, pos, tip)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _nextStepTip(self, rule):
|
||||||
|
"""计时完成后的"下一步"指引(让玩家知道该干什么)"""
|
||||||
|
t = rule.get("target", "")
|
||||||
|
if t in self._STEAM_DONE:
|
||||||
|
return ";空手右键取出"
|
||||||
|
if t in self._OVEN_DONE:
|
||||||
|
return ";空手右键取走"
|
||||||
|
if t == "rtdd:dough_0":
|
||||||
|
return ";可空手擀面或手持菜刀切小面团"
|
||||||
|
if t == "rtdd:breaddough_1a":
|
||||||
|
return ";放烤炉上烤制"
|
||||||
|
return ""
|
||||||
|
|
||||||
|
def _notifyNearby(self, dim, pos, tip, radius=6):
|
||||||
|
"""完成提示兜底: 发起玩家不在/未知时, 提示该方块附近(三维距离)的在线玩家"""
|
||||||
|
if not tip:
|
||||||
|
return
|
||||||
|
try:
|
||||||
|
r2 = radius * radius
|
||||||
|
for pid in comp.CreateGame(LevelId).GetAllPlayerIds():
|
||||||
|
try:
|
||||||
|
if comp.CreateDimension(pid).GetEntityDimensionId() != dim:
|
||||||
|
continue
|
||||||
|
fp = comp.CreatePos(pid).GetFootPos()
|
||||||
|
if fp is None:
|
||||||
|
continue
|
||||||
|
dx = fp[0] - pos[0]
|
||||||
|
dy = fp[1] - pos[1]
|
||||||
|
dz = fp[2] - pos[2]
|
||||||
|
if dx * dx + dy * dy + dz * dz <= r2:
|
||||||
|
comp.CreateMsg(pid).NotifyOneMessage(pid, tip)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
+6
-3
@@ -624,12 +624,15 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
|
|||||||
- 蛋液半成品 手持右键蒸笼 -> 蒸笼(蒸牛奶鸡蛋_生), 60秒 -> 熟 [已实现]
|
- 蛋液半成品 手持右键蒸笼 -> 蒸笼(蒸牛奶鸡蛋_生), 60秒 -> 熟 [已实现]
|
||||||
|
|
||||||
【烤炉机制】下方判定为烤炉才对该方块计时(烤炉只做判断); 计时中烤炉被打碎 ->
|
【烤炉机制】下方判定为烤炉才对该方块计时(烤炉只做判断); 计时中烤炉被打碎 ->
|
||||||
终止计时 + 烤炉上方方块变掉落物 + 提示 [已实现]
|
终止计时 + 烤炉上方方块变掉落物 + 提示; 烤制完成成品 空手右键(下方是烤炉) ->
|
||||||
|
成品掉落取走(烤炉不动) [已实现]
|
||||||
【蒸笼机制】手持生食右键蒸笼 -> 蒸笼变蒸X_生(蒸笼原位); 蒸X_生下方是
|
【蒸笼机制】手持生食右键蒸笼 -> 蒸笼变蒸X_生(蒸笼原位); 蒸X_生下方是
|
||||||
点燃的炉灶(stove_2)才计时60秒 -> 熟; 取出时蒸笼归位 [已实现]
|
点燃的炉灶(stove_2)才计时60秒 -> 熟; 取出时蒸笼归位 [已实现]
|
||||||
【信息提示】所有转换有成功提示(含消耗数量); 计时开始提示(和面完成开始发酵/
|
【信息提示】所有转换有成功提示(含消耗数量); 计时开始提示(和面完成开始发酵/
|
||||||
转法棍胚开始发酵/烤制60秒/蒸制); 计时完成提示发给发起玩家; 烤炉被打碎/
|
转法棍胚开始发酵/烤制60秒/蒸制); 计时完成提示发给发起玩家(发起者不在则提示附近
|
||||||
蒸笼下炉灶移走有中断/暂停提示 [已实现]
|
玩家); 烤炉被打碎/蒸笼下炉灶移走有中断/暂停提示 [已实现]
|
||||||
|
【操作方向提示】每个转换完成后自动追加"下一步"指引(如: 空手右键/手持菜刀右键/
|
||||||
|
手持生饺子右键蒸笼/放烤炉上计时/空手右键取走等), 玩家始终知道下一步干什么 [已实现]
|
||||||
【右键体验】右键转换/放入/取出均有0.4秒冷却(长按不会疯狂弹提示); 手持方块物品
|
【右键体验】右键转换/放入/取出均有0.4秒冷却(长按不会疯狂弹提示); 手持方块物品
|
||||||
右键"功能方块"时若无非处理服务, 直接取消默认放置, 不会"先放一个方块再消失" [已实现]
|
右键"功能方块"时若无非处理服务, 直接取消默认放置, 不会"先放一个方块再消失" [已实现]
|
||||||
|
|
||||||
|
|||||||
@@ -207,13 +207,13 @@ todo 熟竹筒饭 右键吃 (吃的操作后续实现)
|
|||||||
51. 法棍面胚_1(未发面) -> 法棍面胚_2(发面)
|
51. 法棍面胚_1(未发面) -> 法棍面胚_2(发面)
|
||||||
转换条件:[计时发酵60秒]
|
转换条件:[计时发酵60秒]
|
||||||
52. 法棍面胚_2(发面) -> 法棍
|
52. 法棍面胚_2(发面) -> 法棍
|
||||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||||
53. 吐司面胚 -> 吐司1
|
53. 吐司面胚 -> 吐司1
|
||||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||||
54. 甜甜圈胚(生) -> 甜甜圈胚(烤熟)
|
54. 甜甜圈胚(生) -> 甜甜圈胚(烤熟)
|
||||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||||
55. 可颂面胚 -> 可颂1
|
55. 可颂面胚 -> 可颂1
|
||||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||||
56. 蛋液半成品: 由 搅拌器 鸡蛋牛奶 用盘子取出(厨具转化关系.txt), 供甜点/蒸蛋
|
56. 蛋液半成品: 由 搅拌器 鸡蛋牛奶 用盘子取出(厨具转化关系.txt), 供甜点/蒸蛋
|
||||||
|
|
||||||
========================================
|
========================================
|
||||||
@@ -228,7 +228,7 @@ todo 熟竹筒饭 右键吃 (吃的操作后续实现)
|
|||||||
转换条件:[手持 面粉(加鸡蛋) 右键, 消耗1个]
|
转换条件:[手持 面粉(加鸡蛋) 右键, 消耗1个]
|
||||||
机制: 面粉(加鸡蛋)倒入木碗成面糊
|
机制: 面粉(加鸡蛋)倒入木碗成面糊
|
||||||
58. 蛋糕面糊(生) -> 蛋糕面糊(烤熟)
|
58. 蛋糕面糊(生) -> 蛋糕面糊(烤熟)
|
||||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||||
59. 蛋糕面糊(烤熟) -> 蛋糕胚
|
59. 蛋糕面糊(烤熟) -> 蛋糕胚
|
||||||
转换条件:[右键脱模, 掉落 1个蛋糕胚 + 1个木碗]
|
转换条件:[右键脱模, 掉落 1个蛋糕胚 + 1个木碗]
|
||||||
60. 蛋糕胚 + 奶油(食材) -> 奶油蛋糕
|
60. 蛋糕胚 + 奶油(食材) -> 奶油蛋糕
|
||||||
@@ -242,13 +242,13 @@ todo 巧克力暂不实现
|
|||||||
转换条件:[手持 菜刀 右键拆分, 半块消失 + 掉落 2个 小块]
|
转换条件:[手持 菜刀 右键拆分, 半块消失 + 掉落 2个 小块]
|
||||||
todo 各小块 空手右键 吃 (吃的操作后续实现)
|
todo 各小块 空手右键 吃 (吃的操作后续实现)
|
||||||
63. 蛋液半成品 -> 布丁半成品
|
63. 蛋液半成品 -> 布丁半成品
|
||||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||||
64. 布丁半成品 -> 焦糖布丁
|
64. 布丁半成品 -> 焦糖布丁
|
||||||
转换条件:[手持 糖 右键, 消耗16个]
|
转换条件:[手持 糖 右键, 消耗16个]
|
||||||
65. 蛋液半成品 -> 舒芙蕾半成品
|
65. 蛋液半成品 -> 舒芙蕾半成品
|
||||||
转换条件:[手持 奶油 右键, 消耗1个]
|
转换条件:[手持 奶油 右键, 消耗1个]
|
||||||
66. 舒芙蕾半成品 -> 舒芙蕾
|
66. 舒芙蕾半成品 -> 舒芙蕾
|
||||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||||
67. 蒸笼 + 蛋液半成品 -> 蒸笼(蒸牛奶鸡蛋_生) -> 蒸笼(蒸牛奶鸡蛋_熟)
|
67. 蒸笼 + 蛋液半成品 -> 蒸笼(蒸牛奶鸡蛋_生) -> 蒸笼(蒸牛奶鸡蛋_熟)
|
||||||
转换条件:[手持 蛋液半成品 右键蒸笼 -> 蒸笼(蒸牛奶鸡蛋_生); 蒸笼下面要点燃的炉灶(stove_2)才计时60秒变熟]
|
转换条件:[手持 蛋液半成品 右键蒸笼 -> 蒸笼(蒸牛奶鸡蛋_生); 蒸笼下面要点燃的炉灶(stove_2)才计时60秒变熟]
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user