From 14de700929c2336bd28b566a4f96eb2a9fcdcf47 Mon Sep 17 00:00:00 2001 From: wenhe <1046926120@qq.com> Date: Tue, 29 Sep 2026 12:12:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E7=8E=A9=E5=AE=B6=E8=83=8C?= =?UTF-8?q?=E5=8C=85=E6=9C=89=E8=BF=99=E4=B8=AA=E6=88=90=E5=93=81=E8=8F=9C?= =?UTF-8?q?,=E4=BC=98=E5=85=88=E7=BB=99=E8=BF=99=E4=B8=AA=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E5=8A=A0=E4=B8=80,=E4=B9=9F=E5=B0=B1=E6=98=AF?= =?UTF-8?q?=E6=8A=8A=E5=8F=96=E5=88=B0=E7=9A=84=E6=88=90=E5=93=81=E8=8F=9C?= =?UTF-8?q?=E6=94=BE=E5=88=B0=E5=90=8C=E7=B1=BB=E9=A1=B9,=E6=AC=A1?= =?UTF-8?q?=E4=BC=98=E5=85=88=E5=88=99:=E5=BD=93=E6=88=91=E4=BB=AC?= =?UTF-8?q?=E4=B8=BB=E6=89=8B=E6=B2=A1=E6=9C=89=E7=89=A9=E5=93=81=E6=97=B6?= =?UTF-8?q?,=E8=8E=B7=E5=8F=96=E5=88=B0=E7=8E=A9=E5=AE=B6=E4=B8=BB?= =?UTF-8?q?=E6=89=8B=E4=B8=8A=E5=8E=BB,=E5=86=8D=E6=AC=A1=E7=BA=A7,?= =?UTF-8?q?=E5=88=99=E6=98=AF=E7=8E=A9=E5=AE=B6=E4=B8=BB=E6=89=8B=E6=9C=89?= =?UTF-8?q?=E4=B8=9C=E8=A5=BF,=E8=83=8C=E5=8C=85=E6=9C=89=E7=A9=BA?= =?UTF-8?q?=E4=BD=99=E4=BD=8D=E7=BD=AE,=E9=82=A3=E4=B9=88=E5=B0=86?= =?UTF-8?q?=E6=88=90=E5=93=81=E8=8F=9C=E6=94=BE=E5=88=B0=E7=8E=A9=E5=AE=B6?= =?UTF-8?q?=E8=83=8C=E5=8C=85=E9=87=8C=E5=8E=BB,=E6=9C=80=E6=AC=A1?= =?UTF-8?q?=E5=B0=B1=E6=98=AF=E7=8E=A9=E5=AE=B6=E8=83=8C=E5=8C=85=E6=BB=A1?= =?UTF-8?q?=E4=BA=86,=E4=B8=BB=E6=89=8B=E4=B9=9F=E6=9C=89=E4=B8=9C?= =?UTF-8?q?=E8=A5=BF,=E9=82=A3=E4=B9=88=E5=B0=B1=E4=BB=A5=E7=8E=B0?= =?UTF-8?q?=E5=9C=A8=E6=88=91=E4=BB=AC=E8=BF=99=E6=A0=B7=E7=9A=84=E6=8E=89?= =?UTF-8?q?=E8=90=BD=E7=89=A9=E5=BD=A2=E5=BC=8F=E8=8E=B7=E5=BE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chaoguo/service/ChaoguoService.py | 23 +++++++++++++++-- .../tangguo/service/TangguoService.py | 25 ++++++++++++++++--- .../youguo/service/YouguoService.py | 23 +++++++++++++++-- .../netease_recipes/xy_b_111.json | 2 +- tuilun/全部功能做了什么.txt | 6 +++++ tuilun/配方整理汇总.txt | 4 +-- 6 files changed, 73 insertions(+), 10 deletions(-) diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chaoguo/service/ChaoguoService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chaoguo/service/ChaoguoService.py index c0a09be..d5a6e29 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chaoguo/service/ChaoguoService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chaoguo/service/ChaoguoService.py @@ -271,7 +271,7 @@ class ChaoguoService(BlueFoxServerSystem): elif action == "take_out": # 出锅: 锅变回 炒锅(空) + 掉落盘装成品(掉落物形式) self.replaceBlock(pos, dim, WOK, playerId) - self.dropItem(dim, pos, recipe["dropItem"]) + self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId) self._clearWokData(dim, pos) # 普通替换方块(盖锅/锅底/放料/加料) # 注意: 翻炒(stir)的 target 由 _handleStir 满4次才替换, 这里必须排除, @@ -400,9 +400,28 @@ class ChaoguoService(BlueFoxServerSystem): # 七、工具方法,以掉落物形式生成物品 # ============================================================================ - def dropItem(self, dim, pos, itemName, count=1, aux=0): + def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None): + """取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手; + 否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。 + 不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。""" try: itemDict = {"itemName": itemName, "count": count, "auxValue": aux} + if playerId is not None: + # 1) 主手空 -> 放主手 + cur = self.getCarriedItem(playerId) + handItem = (cur or {}).get("newItemName") + if not handItem or handItem == "minecraft:air": + try: + if comp.CreateItem(playerId).SpawnItemToPlayerCarried(itemDict, playerId): + return + except Exception: + pass + # 2) 否则入包(同类叠加/空位); 失败(满)->掉落 + try: + if comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId): + return + except Exception: + pass self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) except Exception: pass diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/tangguo/service/TangguoService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/tangguo/service/TangguoService.py index c3ba68a..6cd7a7c 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/tangguo/service/TangguoService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/tangguo/service/TangguoService.py @@ -301,14 +301,14 @@ class TangguoService(BlueFoxServerSystem): action = recipe.get("action") if action == "take_out": self.replaceBlock(pos, dim, recipe.get("target") or self._defaultPot(), playerId) - self.dropItem(dim, pos, recipe["dropItem"], recipe.get("count", 1)) + self.dropItem(dim, pos, recipe["dropItem"], recipe.get("count", 1), playerId=playerId) # 普通替换方块(加水/盖锅/下汤底/组合/加料/汤面) if recipe.get("target") and action != "take_out": self.replaceBlock(pos, dim, recipe["target"], playerId) # 额外掉落(倒水掉水桶 / 蔬菜乱炖掉汤锅(空) / 汤面掉木碗) if recipe.get("drop"): - self.dropItem(dim, pos, recipe["drop"]) + self.dropItem(dim, pos, recipe["drop"], playerId=playerId) # 加料后启动计时(记录发起玩家); 下方无点燃炉灶时提示 if recipe.get("startTimer"): @@ -375,9 +375,28 @@ class TangguoService(BlueFoxServerSystem): # 六、工具方法,以掉落物形式生成物品 # ============================================================================ - def dropItem(self, dim, pos, itemName, count=1, aux=0): + def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None): + """取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手; + 否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。 + 不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。""" try: itemDict = {"itemName": itemName, "count": count, "auxValue": aux} + if playerId is not None: + # 1) 主手空 -> 放主手 + cur = self.getCarriedItem(playerId) + handItem = (cur or {}).get("newItemName") + if not handItem or handItem == "minecraft:air": + try: + if comp.CreateItem(playerId).SpawnItemToPlayerCarried(itemDict, playerId): + return + except Exception: + pass + # 2) 否则入包(同类叠加/空位); 失败(满)->掉落 + try: + if comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId): + return + except Exception: + pass self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) except Exception: pass diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/youguo/service/YouguoService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/youguo/service/YouguoService.py index 728da81..0d87f3e 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/youguo/service/YouguoService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/youguo/service/YouguoService.py @@ -267,7 +267,7 @@ class YouguoService(BlueFoxServerSystem): action = recipe.get("action") if action == "take_out": self.replaceBlock(pos, dim, OILPOT_1, playerId) - self.dropItem(dim, pos, recipe["dropItem"]) + self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId) # 替换方块(倒油/取油/放料) if recipe.get("target"): self.replaceBlock(pos, dim, recipe["target"], playerId) @@ -340,9 +340,28 @@ class YouguoService(BlueFoxServerSystem): # 七、工具方法,以掉落物形式生成物品 # ============================================================================ - def dropItem(self, dim, pos, itemName, count=1, aux=0): + def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None): + """取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手; + 否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。 + 不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。""" try: itemDict = {"itemName": itemName, "count": count, "auxValue": aux} + if playerId is not None: + # 1) 主手空 -> 放主手 + cur = self.getCarriedItem(playerId) + handItem = (cur or {}).get("newItemName") + if not handItem or handItem == "minecraft:air": + try: + if comp.CreateItem(playerId).SpawnItemToPlayerCarried(itemDict, playerId): + return + except Exception: + pass + # 2) 否则入包(同类叠加/空位); 失败(满)->掉落 + try: + if comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId): + return + except Exception: + pass self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) except Exception: pass diff --git a/behavior_pack_v8jz0zSR/netease_recipes/xy_b_111.json b/behavior_pack_v8jz0zSR/netease_recipes/xy_b_111.json index 42f5cbb..e51ef64 100644 --- a/behavior_pack_v8jz0zSR/netease_recipes/xy_b_111.json +++ b/behavior_pack_v8jz0zSR/netease_recipes/xy_b_111.json @@ -3,7 +3,7 @@ "minecraft:recipe_shaped": { "key": { "0": { - "tag": "minecraft:wooden_trapdoors", + "item": "minecraft:spruce_trapdoor", "data": 0 }, "3": { diff --git a/tuilun/全部功能做了什么.txt b/tuilun/全部功能做了什么.txt index 6cc571d..0fa60ea 100644 --- a/tuilun/全部功能做了什么.txt +++ b/tuilun/全部功能做了什么.txt @@ -721,6 +721,12 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher) (同汤锅): 客户端 ClientItemUseOnEvent ret=True 消闪 + NotifyToServer('TakeoutRequest') -> YouguoService.handleTakeoutRequest(校验落点仍是成品防重复). 由 InterceptData.TAKEOUT_CANCEL 自动派生 [已实现] +【成品入包 2026-09-29】炒锅/汤锅/油锅的 dropItem 工具方法统一改为【优先入包】(用户要求): +传 playerId 时 —— ①主手空->放主手(SpawnItemToPlayerCarried) ②否则入背包 +(SpawnItemToPlayerInv, 引擎自动同类叠加/找空位) ③背包满(返回False)->落回地面掉落物。 +三处取成品调用点(炒锅出锅/油锅出锅/汤锅盛出+返容器的 桶/锅/木碗) 均补传 playerId, +玩家不再需要弯腰捡, 直接进手/进包; 不传 playerId 的其他 dropItem 调用(如破坏掉落) +保持原掉落物, 零影响 [已实现] 【留后】各盘装成品 右键吃(总食用功能后续实现)、天妇罗炸虾递减吃(整份->半份 plate_49a)、 盘子用后变脏 diff --git a/tuilun/配方整理汇总.txt b/tuilun/配方整理汇总.txt index 7063f31..4ee4d16 100644 --- a/tuilun/配方整理汇总.txt +++ b/tuilun/配方整理汇总.txt @@ -303,10 +303,10 @@ todo 补充 (3 石砖竖排 -> 1 烟道) · 吧台 b_111 / todo 自己想一个 【设计】吧台(b_111)【有序】 - 【空】 【空】 原版任意活板门 + 【空】 【空】 云杉活板门 木条 木条 木条 任意原版木板 任意原版木板 任意原版木板 - (3 木条 + 3 木板 -> 1 吧台) + (3 木条 + 3 木板 + 1 云杉活板门 -> 1 吧台) · 台柜 b_112 —— 无配方todo 自己想一个 【设计】台柜(b_112)【有序】 任意原版木板 任意原版木板 任意原版木板