diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py index 3875ad7..fadc933 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/ceshi/service/CookingService.py @@ -225,6 +225,9 @@ class CookingService(BlueFoxServerSystem): # 没找到匹配的配方 → 不是做菜操作,不拦截,让游戏正常处理 return + # 找到配方后,取消默认行为(如喝药水、吃食物等),由本 Mod 全权接管 + args['cancel'] = True + # ---- 第四步:判断是不是工具切换类型 ---- recipeType = recipe.get("type", "cook") # type="switch" 或 "timer" → 工具方块切换(箭桶、挂肉钩、水槽等) @@ -351,7 +354,20 @@ class CookingService(BlueFoxServerSystem): # 检查是否满了 maxCount = recipe.get("maxCount", 999) if record["count"] >= maxCount: - return # 满了,不能再放 + # 满了,自动转向取回操作 + takeRecipe = self.allRecipes.get((blockName, None)) + if takeRecipe and record["count"] > 0: + self.giveItem(playerId, record["itemName"]) + record["count"] -= 1 + if takeRecipe.get("giveItem"): + self.giveItem(playerId, takeRecipe["giveItem"]) + if takeRecipe.get("target"): + self.replaceBlock(pos, dim, takeRecipe["target"], playerId) + if record["count"] <= 0: + self.clearSwitchRecord(key, playerId, pos, dim) + else: + self._saveRecord(key, playerId, pos, dim, record) + return # 记录物品+1 record["count"] += 1 needSave = True @@ -362,7 +378,32 @@ class CookingService(BlueFoxServerSystem): record = {"stack": []} maxCount = recipe.get("maxCount", 999) if len(record["stack"]) >= maxCount: - return # 满了 + # 满了,自动转向取回操作 + takeRecipe = self.allRecipes.get((blockName, None)) + if takeRecipe: + needSave = False + needClear = False + if record["stack"]: + topItem = record["stack"].pop() + comp.CreateItem(playerId).SpawnItemToPlayerInv( + {"itemName": topItem["itemName"], + "count": topItem["count"], + "auxValue": topItem["auxValue"], + "userData": topItem.get("userData", {})}, + playerId) + if not record["stack"]: + needClear = True + else: + needSave = True + if takeRecipe.get("giveItem"): + self.giveItem(playerId, takeRecipe["giveItem"]) + if takeRecipe.get("target"): + self.replaceBlock(pos, dim, takeRecipe["target"], playerId) + if needClear: + self.clearSwitchRecord(key, playerId, pos, dim) + elif needSave: + self._saveRecord(key, playerId, pos, dim, record) + return # 把物品信息压入堆栈 record["stack"].append({ "itemName": itemDict["newItemName"],