厨具功能 bug 改
This commit is contained in:
1 parent
262b91ba08
commit
eed273f777
5 files changed
+82
-39
No files matched your search
@@ -51,7 +51,8 @@ MEATBALLMAKER_RULES = [
|
||||
{"source": "rtdd:meatballmaker_1", "item": "rtdd:rawsquidwhiskersr",
|
||||
"target": "rtdd:meatballmaker_2", "consume": 4, "tip": "§a加入鱿鱼须"},
|
||||
{"source": "rtdd:meatballmaker_2", "item": "*any",
|
||||
"target": "rtdd:meatballmaker_3", "consume": 1, "tip": "§a加入配料,开始烹制丸子"},
|
||||
"target": "rtdd:meatballmaker_3", "consume": 1,
|
||||
"below": ["rtdd:stove_2"], "tip": "§a加入配料,开始烹制丸子"},
|
||||
{"source": "rtdd:meatballmaker_5", "item": "rtdd:plate_0",
|
||||
"target": "rtdd:meatballmaker_0", "consume": 1,
|
||||
"dropItem": [{"name": "rtdd:plate_40", "count": 1}],
|
||||
@@ -61,9 +62,9 @@ MEATBALLMAKER_RULES = [
|
||||
# 丸子机计时: _3(加料完成) -> 30s -> _4(半熟) -> 30s -> _5(熟)
|
||||
MEATBALL_TIMERS = [
|
||||
{"source": "rtdd:meatballmaker_3", "target": "rtdd:meatballmaker_4",
|
||||
"time": 30, "autoStart": True, "doneTip": "§e丸子半熟了"},
|
||||
"time": 30, "autoStart": True, "below": ["rtdd:stove_2"], "doneTip": "§e丸子半熟了"},
|
||||
{"source": "rtdd:meatballmaker_4", "target": "rtdd:meatballmaker_5",
|
||||
"time": 30, "autoStart": True, "doneTip": "§e丸子熟了!"},
|
||||
"time": 30, "autoStart": True, "below": ["rtdd:stove_2"], "doneTip": "§e丸子熟了!"},
|
||||
]
|
||||
|
||||
# ============================================================================
|
||||
|
||||
+41
-20
@@ -127,6 +127,11 @@ class ChujuService(BlueFoxServerSystem):
|
||||
return False
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
# 下方方块检查(丸子机开始烹制需下方点燃的炉灶 stove_2)
|
||||
if not self.checkBelow(recipe, dim, pos):
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§c下方需要点燃的炉灶(stove_2)才能烹制!")
|
||||
return True
|
||||
self.handleSwitch(recipe, playerId, pos, dim, itemDict, key)
|
||||
return True
|
||||
|
||||
@@ -144,6 +149,19 @@ class ChujuService(BlueFoxServerSystem):
|
||||
return self.switchRecipes.get((blockName, "*any"))
|
||||
return None
|
||||
|
||||
def checkBelow(self, recipe, dim, pos):
|
||||
"""检查方块下方是否为 recipe["below"] 指定的方块列表。
|
||||
没写 below 字段 → 视为满足(炉灶/蒸笼等无需下方方块)。"""
|
||||
below = recipe.get("below")
|
||||
if not below:
|
||||
return True
|
||||
belowPos = (pos[0], pos[1] - 1, pos[2])
|
||||
try:
|
||||
b = comp.CreateBlockInfo(LevelId).GetBlockNew(belowPos, dim)
|
||||
return b.get("name") in below
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
# ============================================================================
|
||||
# 三、通用开关规则执行(炉灶/丸子机/蒸笼)
|
||||
# ============================================================================
|
||||
@@ -186,13 +204,16 @@ class ChujuService(BlueFoxServerSystem):
|
||||
# ---------- 空搅拌器:放入第一份食材 ----------
|
||||
if blockName == "rtdd:beater":
|
||||
if itemName in MEAT_ITEMS:
|
||||
if (itemDict.get("count") or 0) < 2:
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§c需要2个肉")
|
||||
return True
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.consumeItem(playerId, itemDict, 2)
|
||||
self.replaceBlock(pos, dim, "rtdd:beatermeat_0", playerId)
|
||||
self._writeMeat(dim, pos, itemName)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§a放入肉,再放一份搅打")
|
||||
playerId, "§a放入肉,空手右键搅打")
|
||||
return True
|
||||
if itemName == MILK_ITEM:
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
@@ -203,30 +224,29 @@ class ChujuService(BlueFoxServerSystem):
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a放入牛奶")
|
||||
return True
|
||||
if itemName == EGG_ITEM:
|
||||
if (itemDict.get("count") or 0) < 3:
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§c需要3个鸡蛋")
|
||||
return True
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.consumeItem(playerId, itemDict, 3)
|
||||
self.replaceBlock(pos, dim, "rtdd:beater_custard_0", playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a放入鸡蛋")
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§a放入鸡蛋,空手右键搅打")
|
||||
return True
|
||||
return False
|
||||
|
||||
# ---------- 肉态: 再放一份同种肉 -> 搅打完成 ----------
|
||||
# ---------- 肉态: 空手右键搅打 -> 肉_2 ----------
|
||||
if blockName == "rtdd:beatermeat_0":
|
||||
meat = self._readMeat(pos, dim)
|
||||
if itemName in MEAT_ITEMS and itemName == meat:
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
meat = self._readMeat(pos, dim)
|
||||
self.replaceBlock(pos, dim, "rtdd:beatermeat_1", playerId)
|
||||
self._writeMeat(dim, pos, meat)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§a搅打完成,空手取出肉馅")
|
||||
return True
|
||||
if itemName in MEAT_ITEMS and itemName != meat:
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§c不能混入不同种类的肉")
|
||||
return True
|
||||
return False
|
||||
|
||||
if blockName == "rtdd:beatermeat_1":
|
||||
@@ -242,17 +262,19 @@ class ChujuService(BlueFoxServerSystem):
|
||||
return True
|
||||
return False
|
||||
|
||||
# ---------- 牛奶态: 继续加牛奶 -> 牛奶_3 ----------
|
||||
# ---------- 牛奶态: 空手右键搅打 -> 牛奶_3 ----------
|
||||
if blockName in ("rtdd:beatermike_0", "rtdd:beatermike_1"):
|
||||
if itemName == MILK_ITEM:
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
self.giveItem(playerId, BUCKET_ITEM)
|
||||
target = "rtdd:beatermike_1" if blockName == "rtdd:beatermike_0" \
|
||||
else "rtdd:beatermike_2"
|
||||
self.replaceBlock(pos, dim, target, playerId)
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a继续搅打牛奶")
|
||||
if target == "rtdd:beatermike_2":
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(
|
||||
playerId, "§a牛奶搅打完成,加入鸡蛋做鸡蛋牛奶")
|
||||
else:
|
||||
comp.CreateMsg(playerId).NotifyOneMessage(playerId, "§a继续搅打牛奶")
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -268,12 +290,11 @@ class ChujuService(BlueFoxServerSystem):
|
||||
return True
|
||||
return False
|
||||
|
||||
# ---------- 蛋态: 继续加蛋 -> 蛋_3 ----------
|
||||
# ---------- 蛋态: 空手右键搅打 -> 蛋_3 ----------
|
||||
if blockName in ("rtdd:beater_custard_0", "rtdd:beater_custard_1"):
|
||||
if itemName == EGG_ITEM:
|
||||
if not itemName or itemName == "minecraft:air":
|
||||
if not self.checkCooldown(key, 0.5):
|
||||
return True
|
||||
self.consumeItem(playerId, itemDict, 1)
|
||||
target = "rtdd:beater_custard_1" if blockName == "rtdd:beater_custard_0" \
|
||||
else "rtdd:beater_custard_2"
|
||||
self.replaceBlock(pos, dim, target, playerId)
|
||||
|
||||
+18
-2
@@ -116,9 +116,10 @@ class ChujuTimerService(BlueFoxServerSystem):
|
||||
except Exception:
|
||||
tid = ""
|
||||
if tid != blockName:
|
||||
# 丸子机为 autoStart=True: 计时源方块无计时数据时自动启动
|
||||
# 丸子机为 autoStart=True: 计时源方块无计时数据且下方有炉灶时自动启动
|
||||
if recipe.get("autoStart", True):
|
||||
self._writeTimerData(dim, pos, recipe, None)
|
||||
if self.checkBelow(recipe, dim, pos):
|
||||
self._writeTimerData(dim, pos, recipe, None)
|
||||
return
|
||||
|
||||
tstart = blockData["rtdd_tstart"]
|
||||
@@ -135,6 +136,9 @@ class ChujuTimerService(BlueFoxServerSystem):
|
||||
if cur and cur.get("name") != recipe["source"]:
|
||||
self._clearTimerData(dim, pos)
|
||||
return
|
||||
# 下方炉灶被拿走 → 暂停烹制, 等炉灶回来继续
|
||||
if not self.checkBelow(recipe, dim, pos):
|
||||
return
|
||||
self.replaceBlock(pos, dim, recipe["target"], None)
|
||||
self._clearTimerData(dim, pos)
|
||||
if recipe.get("doneTip"):
|
||||
@@ -142,6 +146,18 @@ class ChujuTimerService(BlueFoxServerSystem):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
def checkBelow(self, recipe, dim, pos):
|
||||
"""检查方块下方是否为 recipe["below"] 指定的方块列表(丸子机需 stove_2)。"""
|
||||
below = recipe.get("below")
|
||||
if not below:
|
||||
return True
|
||||
belowPos = (pos[0], pos[1] - 1, pos[2])
|
||||
try:
|
||||
b = comp.CreateBlockInfo(LevelId).GetBlockNew(belowPos, dim)
|
||||
return b.get("name") in below
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
# ============================================================================
|
||||
# 四、计时数据读写(存在方块实体数据里,重启不丢)
|
||||
# ============================================================================
|
||||
|
||||
Reference in new issue
Block a user