汤锅功能实现 3 计时 提示修改

This commit is contained in:
wenhe committed 2026-09-16 11:12:15 +08:00
1 parent df71a62d7c
commit 31bb44a409
10 files changed
+153 -56

No files matched your search

@@ -64,18 +64,55 @@ class TangguoService(BlueFoxServerSystem):
self.itemUseOnRecipes[(r["item"], r["surface"])] = r
# ---- 空手右键"计时源方块"(生汤羹/生米锅等): 放在点燃炉灶上 -> 开始计时 ----
# 提示包含"总共多少秒": 从当前级沿计时链累加, 直到终点(总秒数/级数/成品名)
self._timerBySrc = {r["source"]: r for r in TIMER_RULES}
self._timerTotal = {} # source -> (总秒数, 每级秒数列表)
for src, r in self._timerBySrc.items():
total, stages, cur, seen = 0, [], src, set()
while cur in self._timerBySrc and cur not in seen:
seen.add(cur)
curR = self._timerBySrc[cur]
sec = curR.get("time", 60)
total += sec
stages.append(sec)
if curR.get("randomTargets"):
break
nxt = curR.get("target")
if nxt not in self._timerBySrc:
break
cur = nxt
self._timerTotal[src] = (total, stages)
# 终点方块 -> 成品名(从 take_out 规则 tip 的"盛出 XX"提取, 用于计时提示)
self._finalNames = {}
for r in SWITCH_RULES:
if r.get("action") == "take_out":
tip = (r.get("tip") or "").replace("§a", "").replace("§e", "").replace("§c", "")
if "盛出" in tip:
nm = tip.split("盛出", 1)[1].split(",", 1)[0].strip()
if nm:
self._finalNames[r["block"]] = nm
self.timerSources = set()
self.startTimerTips = {}
for r in TIMER_RULES:
src = r["source"]
for src, r in self._timerBySrc.items():
self.timerSources.add(src)
self.featureBlocks.add(src) # 登记右键路由, 空手右键才分发到这里
if src not in self.startTimerTips:
sec = r.get("time", 60)
if r.get("randomTargets"):
self.startTimerTips[src] = "§a开始煮饭…等计时(%d秒)结束变成 熟米饭(形态随机)" % sec
else:
self.startTimerTips[src] = "§a开始熬制…等计时(%d秒)结束变成 下一形态" % sec
total, stages = self._timerTotal[src]
if len(stages) == 1:
stage = ""
elif len(set(stages)) == 1:
stage = "(%d级×%d秒)" % (len(stages), stages[0])
else:
stage = "(%d级: %s)" % (len(stages), "→".join("%d秒" % s for s in stages))
if r.get("randomTargets"):
tip = "§a开始煮饭…共需计时%d秒%s; 计时结束变成 熟米饭(形态随机)" % (total, stage)
else:
tip = "§a开始熬制…共需计时%d秒%s" % (total, stage)
end = self._timerTerminalName(src)
if end:
tip += "; 计时结束变成 %s" % end
self.startTimerTips[src] = tip
# ---- 右键冷却表 ----
self.cooldown = {}
@@ -140,6 +177,17 @@ class TangguoService(BlueFoxServerSystem):
comp.CreateMsg(playerId).NotifyOneMessage(
playerId, "§c汤锅需要放在点燃的炉灶上才能开始计时")
def _timerTerminalName(self, src):
"""沿计时链走到终点方块, 返回成品名(未取到则返回空串)"""
cur, seen = src, set()
while cur in self._timerBySrc and cur not in seen:
seen.add(cur)
r = self._timerBySrc[cur]
if r.get("randomTargets"):
return ""
cur = r["target"]
return self._finalNames.get(cur, "")
def handleItemUseOn(self, args):
"""由 FeatureDispatcher 转发的"手持物品右键方块表面"入口(锅态汤面)。
手持 蘑菇汤/蔬菜汤/蛋花汤 右键 熟面条表面 -> 汤面, 转换与取消放置同一事件完成"""
@@ -197,7 +245,7 @@ class TangguoService(BlueFoxServerSystem):
recipe["startTimer"], dim, pos, playerId)
if not started:
comp.CreateMsg(playerId).NotifyOneMessage(
playerId, "§e熬制需要下方是 点燃的炉灶; 放上炉灶后会自动开始计时")
playerId, "§c熬制需要下方是 点燃的炉灶; 放好炉灶后空手右键即可开始计时")
# 给背包物品(加水给空桶)
if recipe.get("give"):