From 87991d5dcf795b102e597a5fe6ec2339e314f540 Mon Sep 17 00:00:00 2001 From: wenhe <1046926120@qq.com> Date: Wed, 22 Jul 2026 13:37:47 +0800 Subject: [PATCH] =?UTF-8?q?=E8=83=A1=E8=90=9D=E5=8D=9C=E7=89=9B=E8=82=89?= =?UTF-8?q?=E6=B1=A4ceshi4=20=E5=AD=98=E6=95=B0=E6=8D=AE=20=E9=80=80?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ceshi/service/CookingService.py | 83 +++++++++++++++++-- 1 file changed, 76 insertions(+), 7 deletions(-) diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py index bd19047..4ef7980 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py @@ -14,6 +14,8 @@ serverApi.RegisterSystem("rtdd", "CookingService", "Script_NeteaseModousIY5aSF.ceshi.service.CookingService.CookingService") """ +import os +import json import time import mod.server.extraServerApi as serverApi @@ -22,6 +24,7 @@ comp = serverApi.GetEngineCompFactory() # 继承 BlueFoxServerSystem 后,LoadMod() 会自动发现并注册本系统 from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem +from ...BlueFoxTools.ToolsConfig import LevelId # 从配方数据文件导入所有配方 from ..RecipeData import RECIPES @@ -151,11 +154,14 @@ class CookingService(BlueFoxServerSystem): def handleStir(self, key, recipe, playerId, pos, dim, itemDict): now = time.time() - data = self.stirData.get(key) or { - "count": 0, "lastTime": 0.0, "finished": False, - "dropIfDone": recipe.get("dropIfDone", []), - "dropIfNot": recipe.get("dropIfNot", []) - } + data = self.stirData.get(key) or self.loadStirData(playerId, pos, dim, recipe) + if not data: + data = { + "count": 0, "lastTime": 0.0, "finished": False, + "dropIfDone": recipe.get("dropIfDone", []), + "dropIfNot": recipe.get("dropIfNot", []) + } + self.stirData[key] = data # 冷却检查 if now - data["lastTime"] < recipe.get("stirCd", 1.0): @@ -269,14 +275,76 @@ class CookingService(BlueFoxServerSystem): # ==================== 翻炒数据持久化 ==================== + def _getDataFile(self): + """获取持久化数据文件路径""" + # 获取模组脚本目录 + scriptDir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + return os.path.join(scriptDir, "rtdd_cooking_data.json") + + def _loadFileData(self): + """从文件加载所有翻炒数据""" + filePath = self._getDataFile() + if os.path.exists(filePath): + try: + with open(filePath, "r") as f: + return json.load(f) + except: + pass + return {} + + def _saveFileData(self, allData): + """保存所有翻炒数据到文件""" + filePath = self._getDataFile() + try: + with open(filePath, "w") as f: + json.dump(allData, f) + except: + pass + + def _makeKey(self, pos, dim): + """把方块坐标拼成一个字符串 key,如 '0_100_64_200'""" + return "%s_%s_%s_%s" % (dim, pos[0], pos[1], pos[2]) + def loadStirData(self, playerId, pos, dim, recipe): + try: + key = self._makeKey(pos, dim) + allData = self._loadFileData() + blockData = allData.get(key, {}) + if blockData and "rtdd_sc" in blockData: + return { + "count": blockData.get("rtdd_sc", 0), + "lastTime": blockData.get("rtdd_slt", 0.0), + "finished": blockData.get("rtdd_sf", False), + "dropIfDone": recipe.get("dropIfDone", []), + "dropIfNot": recipe.get("dropIfNot", []), + } + except: + pass return {} def saveStirData(self, playerId, pos, dim, data): - pass + try: + key = self._makeKey(pos, dim) + allData = self._loadFileData() + allData[key] = { + "rtdd_sc": data["count"], + "rtdd_slt": data["lastTime"], + "rtdd_sf": data["finished"], + } + self._saveFileData(allData) + except: + pass def clearStirData(self, key, playerId, pos, dim): self.stirData.pop(key, None) + try: + dataKey = self._makeKey(pos, dim) + allData = self._loadFileData() + if dataKey in allData: + del allData[dataKey] + self._saveFileData(allData) + except: + pass # ==================== 拆方块处理 ==================== @@ -304,6 +372,7 @@ class CookingService(BlueFoxServerSystem): dropItems = data.get("dropIfNot", []) for itemName in dropItems: - self.giveItem(playerId, itemName) + itemDict = {"itemName": itemName, "count": 1, "auxValue": 0} + self.CreateEngineItemEntity(itemDict, dim, (x, y + 0.5, z)) self.clearStirData(key, playerId, (x, y, z), dim) \ No newline at end of file