面食 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",
|
||||
}
|
||||
|
||||
# 烤制完成后的成品方块(下方是烤炉时空手右键 -> 掉落取走, 烤炉本身不参与):
|
||||
# 法棍/吐司/可颂/甜甜圈胚(烤熟)/蛋糕面糊(烤熟)/布丁半成品/舒芙蕾
|
||||
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 = [
|
||||
"minecraft:porkchop", "minecraft:cooked_porkchop",
|
||||
|
||||
+71
-5
@@ -37,7 +37,8 @@ from ....BlueFoxTools.ToolsConfig import LevelId
|
||||
from ..MianshiData import (
|
||||
CLEAVER, ROLLINGPIN, BOWL, OVEN, STEAMER,
|
||||
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:
|
||||
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 映射: 手持物品 -> 规则 ----
|
||||
self.itemUseOnMap = {}
|
||||
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):
|
||||
FeatureDispatcher.startTimerFor(blockName, dim, pos, playerId)
|
||||
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
|
||||
|
||||
# ---- 常规转换 ----
|
||||
@@ -208,7 +249,11 @@ class MianshiService(BlueFoxServerSystem):
|
||||
rule["startTimer"], dim, (x, y, z), playerId)
|
||||
|
||||
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
|
||||
|
||||
# ============================================================================
|
||||
@@ -300,9 +345,13 @@ class MianshiService(BlueFoxServerSystem):
|
||||
# 转换后启动计时(发酵等, 记录玩家以便完成提示送达)
|
||||
if recipe.get("startTimer"):
|
||||
FeatureDispatcher.startTimerFor(recipe["startTimer"], dim, pos, playerId)
|
||||
# 提示
|
||||
# 提示(追加"下一步操作"指引)
|
||||
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:
|
||||
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._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):
|
||||
try:
|
||||
cur = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim)
|
||||
@@ -180,8 +186,48 @@ class MianshiTimerService(BlueFoxServerSystem):
|
||||
# 到点转换
|
||||
self.replaceBlock(pos, dim, rule["target"], None)
|
||||
self._clearTimerData(dim, pos)
|
||||
if rule.get("doneTip"):
|
||||
self._notifyIfOnline(data.get("rtdd_tp"), rule["doneTip"])
|
||||
tip = rule.get("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:
|
||||
pass
|
||||
|
||||
|
||||
+6
-3
@@ -624,12 +624,15 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
|
||||
- 蛋液半成品 手持右键蒸笼 -> 蒸笼(蒸牛奶鸡蛋_生), 60秒 -> 熟 [已实现]
|
||||
|
||||
【烤炉机制】下方判定为烤炉才对该方块计时(烤炉只做判断); 计时中烤炉被打碎 ->
|
||||
终止计时 + 烤炉上方方块变掉落物 + 提示 [已实现]
|
||||
终止计时 + 烤炉上方方块变掉落物 + 提示; 烤制完成成品 空手右键(下方是烤炉) ->
|
||||
成品掉落取走(烤炉不动) [已实现]
|
||||
【蒸笼机制】手持生食右键蒸笼 -> 蒸笼变蒸X_生(蒸笼原位); 蒸X_生下方是
|
||||
点燃的炉灶(stove_2)才计时60秒 -> 熟; 取出时蒸笼归位 [已实现]
|
||||
【信息提示】所有转换有成功提示(含消耗数量); 计时开始提示(和面完成开始发酵/
|
||||
转法棍胚开始发酵/烤制60秒/蒸制); 计时完成提示发给发起玩家; 烤炉被打碎/
|
||||
蒸笼下炉灶移走有中断/暂停提示 [已实现]
|
||||
转法棍胚开始发酵/烤制60秒/蒸制); 计时完成提示发给发起玩家(发起者不在则提示附近
|
||||
玩家); 烤炉被打碎/蒸笼下炉灶移走有中断/暂停提示 [已实现]
|
||||
【操作方向提示】每个转换完成后自动追加"下一步"指引(如: 空手右键/手持菜刀右键/
|
||||
手持生饺子右键蒸笼/放烤炉上计时/空手右键取走等), 玩家始终知道下一步干什么 [已实现]
|
||||
【右键体验】右键转换/放入/取出均有0.4秒冷却(长按不会疯狂弹提示); 手持方块物品
|
||||
右键"功能方块"时若无非处理服务, 直接取消默认放置, 不会"先放一个方块再消失" [已实现]
|
||||
|
||||
|
||||
@@ -207,13 +207,13 @@ todo 熟竹筒饭 右键吃 (吃的操作后续实现)
|
||||
51. 法棍面胚_1(未发面) -> 法棍面胚_2(发面)
|
||||
转换条件:[计时发酵60秒]
|
||||
52. 法棍面胚_2(发面) -> 法棍
|
||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
||||
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||
53. 吐司面胚 -> 吐司1
|
||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
||||
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||
54. 甜甜圈胚(生) -> 甜甜圈胚(烤熟)
|
||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
||||
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||
55. 可颂面胚 -> 可颂1
|
||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
||||
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||
56. 蛋液半成品: 由 搅拌器 鸡蛋牛奶 用盘子取出(厨具转化关系.txt), 供甜点/蒸蛋
|
||||
|
||||
========================================
|
||||
@@ -228,7 +228,7 @@ todo 熟竹筒饭 右键吃 (吃的操作后续实现)
|
||||
转换条件:[手持 面粉(加鸡蛋) 右键, 消耗1个]
|
||||
机制: 面粉(加鸡蛋)倒入木碗成面糊
|
||||
58. 蛋糕面糊(生) -> 蛋糕面糊(烤熟)
|
||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
||||
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||
59. 蛋糕面糊(烤熟) -> 蛋糕胚
|
||||
转换条件:[右键脱模, 掉落 1个蛋糕胚 + 1个木碗]
|
||||
60. 蛋糕胚 + 奶油(食材) -> 奶油蛋糕
|
||||
@@ -242,13 +242,13 @@ todo 巧克力暂不实现
|
||||
转换条件:[手持 菜刀 右键拆分, 半块消失 + 掉落 2个 小块]
|
||||
todo 各小块 空手右键 吃 (吃的操作后续实现)
|
||||
63. 蛋液半成品 -> 布丁半成品
|
||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
||||
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||
64. 布丁半成品 -> 焦糖布丁
|
||||
转换条件:[手持 糖 右键, 消耗16个]
|
||||
65. 蛋液半成品 -> 舒芙蕾半成品
|
||||
转换条件:[手持 奶油 右键, 消耗1个]
|
||||
66. 舒芙蕾半成品 -> 舒芙蕾
|
||||
转换条件:[下方方块是 烤炉, 计时60秒]
|
||||
转换条件:[下方方块是 烤炉, 计时60秒; 烤好 空手右键取走]
|
||||
67. 蒸笼 + 蛋液半成品 -> 蒸笼(蒸牛奶鸡蛋_生) -> 蒸笼(蒸牛奶鸡蛋_熟)
|
||||
转换条件:[手持 蛋液半成品 右键蒸笼 -> 蒸笼(蒸牛奶鸡蛋_生); 蒸笼下面要点燃的炉灶(stove_2)才计时60秒变熟]
|
||||
|
||||
|
||||
Reference in new issue
Block a user