diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/BlueFoxTools/SpecialFunciton/BlueFoxSystem.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/BlueFoxTools/SpecialFunciton/BlueFoxSystem.py index ff5a2a8..fa3c930 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/BlueFoxTools/SpecialFunciton/BlueFoxSystem.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/BlueFoxTools/SpecialFunciton/BlueFoxSystem.py @@ -764,6 +764,81 @@ class BlueFoxServerSystem(serverBaseSystem): serverCompFactory.CreateActorMotion(dropItemEntityId).SetMotion((x * 0.3, y * 0.5, z * 0.3)) return dropItemEntityId + def getCarriedItem(self, playerId): + """获取玩家主手物品(统一实现)。子服务可覆写, 缺省走这里""" + itemComp = serverCompFactory.CreateItem(playerId) + return itemComp.GetPlayerItem( + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True) + + # ============================================================================ + # 统一"主动获得物品"接口(任务一): + # 所有给玩家的物品一律按优先级分发, 而非直接掉落: + # 1) 背包(非主手)存在同类可叠加 -> +1 合并 + # 2) 主手为空 -> 放到主手 + # 3) 主手有物 -> 放入背包(同类叠加/空位) + # 4) 背包满且主手有物 -> 掉落物形式(在 pos 上方生成) + # 死亡生物屠宰 / 稻谷 需要保持"纯掉落"时请勿调用本方法(仍用 CreateEngineItemEntity)。 + # ============================================================================ + def giveItemToPlayer(self, playerId, itemName, count=1, pos=None, dim=None, aux=0, userData=None): + """按统一优先级把物品给玩家。pos/dim 只在最终"掉落物"兜底时用(可为空)。 + 返回 True = 已成功放入(合并/主手/背包); False = 最终只能掉落或调用方无上下文。""" + itemDict = {"itemName": itemName, "count": count, "auxValue": aux} + if userData: + itemDict["userData"] = userData + try: + # 1) 背包同类合并 + if self._mergeSameStackInv(playerId, itemName, count): + return True + # 2) 主手为空 -> 放主手 + cur = self.getCarriedItem(playerId) + hand = (cur or {}).get("newItemName") + if not hand or hand == "minecraft:air": + try: + if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerCarried( + itemDict, playerId): + return True + except Exception: + pass + # 3) 放入背包(同类叠加/空位) + try: + if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerInv( + itemDict, playerId): + return True + except Exception: + pass + except Exception: + pass + # 4) 掉落物兜底 + if pos and dim: + try: + self.CreateEngineItemEntity( + itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + except Exception: + pass + return False + + def _mergeSameStackInv(self, playerId, itemName, count=1): + """背包(主手除外)存在可叠加同种物品 -> 数量+count 合并。 + 返回 True=已合并; False=没有可合并的同种堆叠(不新增物品)。""" + itemComp = serverCompFactory.CreateItem(playerId) + enum = serverApi.GetMinecraftEnum().ItemPosType + try: + for i in range(0, 36): + d = itemComp.GetPlayerItem(enum.INVENTORY, i, True) + if not d: + continue + if d.get("newItemName") == itemName and (d.get("count") or 0) < 64: + newCount = (d.get("count") or 0) + count + itemComp.SetEntityItem( + enum.INVENTORY, i, + {"itemName": itemName, "count": newCount, + "auxValue": d.get("newAuxValue", 0), + "userData": d.get("userData", {})}) + return True + except Exception: + return False + return False + @BlueFoxClientListener def RucksackScreenClosed(self, args): """ diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/System/Ui/CookRecipe.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/System/Ui/CookRecipe.py index 9558270..732703d 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/System/Ui/CookRecipe.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/System/Ui/CookRecipe.py @@ -359,11 +359,10 @@ allCookRecipe = [ # 第19页 汤锅·锅底=汤锅(加水) —— 米饭/饭团/碗装 # ============================================================= { - 'publicResult': 'rtdd:rawricepot', # 锅底(首产物) = 生米锅 + 'publicResult': 'rtdd:stewedsoupwater', # 锅底(首产物) = 生米锅 'publicStep': [ {'itemName': 'rtdd:stewedsoup', 'count': 1}, # 汤锅(空) - {'itemName': 'minecraft:water_bucket', 'count': 1}, # 水桶 - {'itemName': 'rtdd:brownrice', 'count': 64}, # 大米 + {'itemName': 'minecraft:water_bucket', 'count': 1} # 水桶 ], # 锅底步骤: 汤锅(空)+水桶+大米x64 -> 生米锅 -> 计时 -> 熟米饭 'splitStep': [ {'result': 'rtdd:ricepot_1', 'items': [{'itemName': 'rtdd:brownrice', 'count': 64}, {}, {}]}, 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 5b75a92..d6f8f9e 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chaoguo/service/ChaoguoService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chaoguo/service/ChaoguoService.py @@ -372,27 +372,13 @@ class ChaoguoService(BlueFoxServerSystem): # ============================================================================ def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None): - """取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手; - 否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。 - 不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。""" + """取成品/返容器: playerId 给出时走统一优先级(同类合并->主手->背包->掉落); + 不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物。""" + if playerId is not None: + self.giveItemToPlayer(playerId, itemName, count, pos, dim) + return 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/chuju/service/ChujuService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chuju/service/ChujuService.py index b8ec133..fa7d957 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chuju/service/ChujuService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/chuju/service/ChujuService.py @@ -340,7 +340,7 @@ class ChujuService(BlueFoxServerSystem): # 掉落物 if recipe.get("dropItem"): - self.dropItems(dim, pos, recipe["dropItem"]) + self.dropItems(dim, pos, recipe["dropItem"], playerId) # 给背包物品 if recipe.get("giveItem"): @@ -399,7 +399,7 @@ class ChujuService(BlueFoxServerSystem): meat = self._readMeat(pos, dim) meatball = MEAT_ITEMS.get(meat) if meat else None if meatball: - self.dropItems(dim, pos, [{"name": meatball, "count": 1}]) + self.dropItems(dim, pos, [{"name": meatball, "count": 1}], playerId) self.replaceBlock(pos, dim, "rtdd:beater", playerId) return True return False @@ -442,7 +442,7 @@ class ChujuService(BlueFoxServerSystem): if not self.checkCooldown(key, 0.5): return True self.consumeItem(playerId, itemDict, 1) - self.dropItems(dim, pos, [{"name": CREAM_ITEM, "count": 1}]) + self.dropItems(dim, pos, [{"name": CREAM_ITEM, "count": 1}], playerId) self.replaceBlock(pos, dim, "rtdd:beater", playerId) return True if itemName == MILK_ITEM: @@ -471,7 +471,7 @@ class ChujuService(BlueFoxServerSystem): if not self.checkCooldown(key, 0.5): return True self.consumeItem(playerId, itemDict, 1) - self.dropItems(dim, pos, [{"name": EGG_CUSTARD_ITEM, "count": 1}]) + self.dropItems(dim, pos, [{"name": EGG_CUSTARD_ITEM, "count": 1}], playerId) self.replaceBlock(pos, dim, "rtdd:beater", playerId) return True return False @@ -569,7 +569,7 @@ class ChujuService(BlueFoxServerSystem): return False if not self.checkCooldown(key, 0.5): return True - self.dropItems(dim, pos, [{"name": FLOUR_ITEM, "count": 1}]) + self.dropItems(dim, pos, [{"name": FLOUR_ITEM, "count": 1}], playerId) self._clearMill(dim, pos) return True # 黄豆: + 玻璃罐 -> 油罐 @@ -577,7 +577,7 @@ class ChujuService(BlueFoxServerSystem): if not self.checkCooldown(key, 0.5): return True self.consumeItem(playerId, itemDict, 1) - self.dropItems(dim, pos, [{"name": OIL_CAN_ITEM, "count": 1}]) + self.dropItems(dim, pos, [{"name": OIL_CAN_ITEM, "count": 1}], playerId) self._clearMill(dim, pos) return True return False @@ -708,11 +708,8 @@ class ChujuService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, aux=0): - try: - itemDict = {"itemName": itemName, "count": count, "auxValue": aux} - comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) - except Exception: - pass + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count) # ============================================================================ # 十、工具方法,消耗物品 @@ -755,14 +752,19 @@ class ChujuService(BlueFoxServerSystem): # 十二、工具方法,以掉落物形式生成物品 # ============================================================================ - def dropItems(self, dim, pos, dropList): + def dropItems(self, dim, pos, dropList, playerId=None): for d in dropList: itemDict = { "itemName": d["name"], "count": d.get("count", 1), "auxValue": d.get("aux", 0), } - self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + if playerId is not None: + # 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落) + self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim, + aux=d.get("aux", 0)) + else: + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) # ============================================================================ # 十三、工具方法,冷却检查 diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/dongwuyangzhi/service/AnimalService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/dongwuyangzhi/service/AnimalService.py index da12256..79d6549 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/dongwuyangzhi/service/AnimalService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/dongwuyangzhi/service/AnimalService.py @@ -206,7 +206,7 @@ class AnimalService(BlueFoxServerSystem): # ---- 逆向操作:取东西/清理 ---- # 掉落物形式生成(取蛋、取下物品等),优先于 giveItem if recipe.get("dropItem"): - self.dropItems(dim, pos, recipe["dropItem"]) + self.dropItems(dim, pos, recipe["dropItem"], playerId) elif recipe.get("giveItem"): self.giveItem(playerId, recipe["giveItem"], recipe.get("giveCount", 1)) @@ -274,17 +274,17 @@ class AnimalService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, auxValue=0): - comp.CreateItem(playerId).SpawnItemToPlayerInv( - {"itemName": itemName, "count": count, "auxValue": auxValue}, playerId) + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count, aux=auxValue) # ============================================================================ # 九、工具方法:以掉落物形式生成物品(取蛋/取下物品等,符合"获得"体验) # ============================================================================ - def dropItems(self, dim, pos, dropList): + def dropItems(self, dim, pos, dropList, playerId=None): """ dropList 格式:[{"name": "minecraft:egg", "count": 5}, ...] - 在方块上方生成掉落物实体,让它自然掉到地上。 + playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。 """ for d in dropList: itemDict = { @@ -292,7 +292,11 @@ class AnimalService(BlueFoxServerSystem): "count": d.get("count", 1), "auxValue": d.get("aux", 0), } - self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + if playerId is not None: + self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim, + aux=d.get("aux", 0)) + else: + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) # ============================================================================ # 十、工具方法:冷却检查 diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py index da2ffec..c014b69 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/service/FurnitureService.py @@ -67,6 +67,9 @@ from ..FurnitureData import (FURNITURE_SWITCHES, # ---- 统一分发器 ---- from ...service.FeatureDispatcher import FeatureDispatcher +# ---- 声音播放(垃圾桶开关, 任务四) ---- +from ....ModUtil.ServerUtil import PlaySoundToAllClient + class FurnitureService(BlueFoxServerSystem): """ @@ -132,11 +135,15 @@ class FurnitureService(BlueFoxServerSystem): itemDict = self.getCarriedItem(playerId) itemName = itemDict.get("newItemName") if itemDict else None - # 厨具架: 通用组合逻辑(顺序无关, 后放先取), 单独处理 + # 厨具架: 通用组合逻辑(点左拿左, 点右拿右), 单独处理 if blockName in self.kitchenrackBlockSet: if not self.checkCooldown(key, 0.5): return True - self._handleKitchenRack(playerId, pos, dim, itemDict, itemName, blockName) + click = { + "cx": args.get("clickX"), "cz": args.get("clickZ"), + "face": args.get("face"), "aux": args.get("aux"), + } + self._handleKitchenRack(playerId, pos, dim, itemDict, itemName, blockName, click) return True recipe = self.findRecipe(blockName, itemDict) @@ -343,34 +350,53 @@ class FurnitureService(BlueFoxServerSystem): # 四、厨具架通用逻辑(组合由 stack 记录计算, 与放入顺序无关, 取回后放先取) # ============================================================================ - def _handleKitchenRack(self, playerId, pos, dim, itemDict, itemName, blockName): + def _handleKitchenRack(self, playerId, pos, dim, itemDict, itemName, blockName, click=None): """ - 厨具架:放入/取回通用处理。 + 厨具架:放入/取回通用处理(任务五: 点哪边拿哪个)。 放入: 手持 锅铲/锅勺/菜刀/炒锅 右键空架/单件架 -> 按组合(顺序无关)成型 - 取回: 空手右键 -> 弹出最后放入的厨具并返还, 形态退回剩余单件/空 - 无记录时(如创造模式直接放置带厨具的厨具架)按方块状态推断厨具。 + 取回: 空手右键 -> 按点击位置(clickX/clickZ/face)判断点在左槽还是右槽, + 取下该槽对应厨具, 形态退回剩余单件/空。 + 槽位固定布局: 组合块模型的左槽 = KITCHENRACK_BLOCK_ITEMS[blockName][0], + 右槽 = [1] (与放入顺序无关, 以方块固态布局为准)。 + [注意] 左右判定依赖朝向, 若实测相反, 调 _rackSideFlip 即可翻转。 """ + click = click or {} + # 槽位固定布局(左=index0, 右=index1); 单件=1个 + layout = list(KITCHENRACK_BLOCK_ITEMS.get(blockName, [])) record = self._loadRecord(pos, dim) if record and record.get("stack"): stack = record["stack"] # 有记录: 物品对象列表 stackNames = [s.get("itemName") for s in stack] else: stack = [] # 无记录: 按方块状态推断 - stackNames = list(KITCHENRACK_BLOCK_ITEMS.get(blockName, [])) + stackNames = list(layout) # ---- 取回: 空手 ---- if not itemName or itemName == "minecraft:air": if not stackNames: return - poppedName = stackNames.pop() # 后放先取, 弹最后一件 - if stack: - topItem = stack.pop() - self._dropItemObj(dim, pos, topItem) # 掉落物返还(根因C) + # 点左/点右 决定取哪个厨具(单件时无论点左右都取那一个) + side = self._rackSideByClick(click.get("face"), click.get("cx"), click.get("cz")) + if len(layout) >= 2: + idx = 0 if side == "left" else 1 else: - self._dropItemDict(dim, pos, - {"itemName": poppedName, "count": 1, "auxValue": 0}) - # 计算剩余 -> 目标方块, 并保存剩余记录(保证后续取回一致) + idx = 0 + picked = layout[idx] if idx < len(layout) else stackNames[-1] + if picked not in stackNames: + picked = stackNames[-1] # 槽位与记录不一致时兜底取最后一件 + idx = stackNames.index(picked) + # 移除被取走的那件, 计算剩余 -> 目标方块, 并保存剩余记录 + stackNames.remove(picked) target = self._rackTarget(stackNames) + pickedObj = None + for _s in stack: + if _s.get("itemName") == picked: + pickedObj = _s + break + if pickedObj is not None: + self.giveItemObj(playerId, pickedObj) # 按持久化对象给(附魔保留) + else: + self.giveItemToPlayer(playerId, picked, 1, pos, dim, aux=0) self.replaceBlock(pos, dim, target, playerId) if stackNames: self._saveRecordDelayed(pos, dim, {"stack": self._namesToObjs(stackNames)}) @@ -396,6 +422,17 @@ class FurnitureService(BlueFoxServerSystem): self.replaceBlock(pos, dim, target, playerId) self._saveRecordDelayed(pos, dim, {"stack": self._namesToObjs(stackNames)}) + def _rackSideByClick(self, face, cx, cz): + """根据点击的面 + 命中比例位置, 判断点的是左槽还是右槽。 + 顶面/南北面(法线沿Z): 沿X分左右; 东西面(法线沿X): 沿Z分左右。 + 返回 'left' / 'right'。若实测与实际相反, 直接翻转本方法即可。""" + if face in (4, 5): # 东/西面: 沿 Z 分 + v = cz + else: # 顶/北/南面(默认): 沿 X 分 + v = cx + v = float(v) if v is not None else 0 + return "left" if v < 0.5 else "right" + def _rackTarget(self, itemNames): """根据厨具物品名列表计算厨具架目标方块(0件=空, 1件=单件, 2件=组合, 顺序无关)""" if not itemNames: @@ -451,6 +488,14 @@ class FurnitureService(BlueFoxServerSystem): if recipe.get("target"): self.replaceBlock(pos, dim, recipe["target"], playerId) + # ---- 垃圾桶开关声音(任务四) ---- + _src = recipe.get("source") + _tgt = recipe.get("target") + if _tgt == "rtdd:rubbish_bin_2" and _src == "rtdd:storage_buckets": + PlaySoundToAllClient((pos[0], pos[1], pos[2], dim), "block.barrel.open", 1.0) + elif _tgt == "rtdd:storage_buckets" and _src in ("rtdd:rubbish_bin_2", "rtdd:b_160"): + PlaySoundToAllClient((pos[0], pos[1], pos[2], dim), "block.barrel.close", 1.0) + # ---- 替换后把堆栈写回新方块(此时写才不会被清掉) ---- if bookStack is not None: if bookStack: @@ -700,14 +745,8 @@ class FurnitureService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, aux=0, userData=None): - """往玩家背包塞一个物品, 背包满则掉地上""" - try: - itemDict = {"itemName": itemName, "count": count, "auxValue": aux} - if userData: - itemDict["userData"] = userData - comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) - except Exception: - pass + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count, aux=aux, userData=userData) def giveItemObj(self, playerId, itemObj): """按持久化物品对象给玩家(厨具架取回; 附魔书按扁平ench重建附魔)""" diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/mianshi/service/MianshiService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/mianshi/service/MianshiService.py index 756dee1..61b7131 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/mianshi/service/MianshiService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/mianshi/service/MianshiService.py @@ -196,7 +196,7 @@ class MianshiService(BlueFoxServerSystem): if not self.checkCooldown(key, 0.4): return True self.clearBlock(pos, dim) - self.dropItem(dim, pos, blockName) + self.dropItem(dim, pos, blockName, playerId=playerId) return True # ---- 空手右键"蒸笼计时源"(蒸X_生): 计时已改自动(tick 判定下方点燃炉灶), @@ -339,7 +339,7 @@ class MianshiService(BlueFoxServerSystem): action = recipe.get("action") # 掉落物(切分/递减/取出) —— 无特殊动作时才走通用掉落 if recipe.get("dropItem") and not action: - self.dropItem(dim, pos, recipe["dropItem"]) + self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId) # 给背包物品(水桶变空桶/擀面杖返还) if recipe.get("give"): self.giveItem(playerId, recipe["give"]) @@ -347,33 +347,33 @@ class MianshiService(BlueFoxServerSystem): if action == "chop_smalldough": self.clearBlock(pos, dim) for _ in range(8): - self.dropItem(dim, pos, "rtdd:smalldough_0") + self.dropItem(dim, pos, "rtdd:smalldough_0", playerId=playerId) elif action == "chop_noodles": self.clearBlock(pos, dim) - self.dropItem(dim, pos, "rtdd:noodles") + self.dropItem(dim, pos, "rtdd:noodles", playerId=playerId) elif action == "drop_dumpling_skin": # 擀好的小面团压成饺子皮: 面团消失, 掉落1个饺子皮物品(地上不留方块) self.clearBlock(pos, dim) - self.dropItem(dim, pos, recipe["dropItem"]) + self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId) elif action == "drop_result": # 捏合/塑形完成(生饺子/生肉包子): 方块消失, 成品以掉落物形式出现 self.clearBlock(pos, dim) - self.dropItem(dim, pos, recipe["dropItem"]) + self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId) elif action == "unmold_cake": # 蛋糕面糊(烤熟) 脱模 -> 蛋糕胚(方块) + 掉落 1 木碗 self.replaceBlock(pos, dim, "rtdd:cakebase", playerId) - self.dropItem(dim, pos, BOWL) + self.dropItem(dim, pos, BOWL, playerId=playerId) elif action == "split_cake": # 半块蛋糕 菜刀拆分: 半块消失 -> 掉落两个对应小块 self.clearBlock(pos, dim) for _ in range(2): - self.dropItem(dim, pos, recipe["dropItem"]) + self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId) elif action == "take_steamer": # 蒸笼取出: 蒸食物块 -> 变回空蒸笼 + 掉落成品(数量按 dropCount, 默认1) self.replaceBlock(pos, dim, "rtdd:steamer", playerId) if recipe.get("dropItem"): for _ in range(recipe.get("dropCount", 1)): - self.dropItem(dim, pos, recipe["dropItem"]) + self.dropItem(dim, pos, recipe["dropItem"], playerId=playerId) # 转换后启动计时(发酵等, 记录玩家以便完成提示送达) if recipe.get("startTimer"): FeatureDispatcher.startTimerFor(recipe["startTimer"], dim, pos, playerId) @@ -432,11 +432,8 @@ class MianshiService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, aux=0): - try: - itemDict = {"itemName": itemName, "count": count, "auxValue": aux} - comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) - except Exception: - pass + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count) # ============================================================================ # 八、工具方法,消耗物品 @@ -463,7 +460,11 @@ class MianshiService(BlueFoxServerSystem): # 九、工具方法,以掉落物形式生成物品 # ============================================================================ - def dropItem(self, dim, pos, itemName, count=1, aux=0): + def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None): + if playerId is not None: + # 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落) + self.giveItemToPlayer(playerId, itemName, count, pos, dim, aux=aux) + return try: itemDict = {"itemName": itemName, "count": count, "auxValue": aux} self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py index 469ac75..d220cdf 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py @@ -52,6 +52,9 @@ from ..siwangshengwu.service.DeadmobGeneratorService import DeadmobGeneratorServ # ---- 钓鱼掉落: 螃蟹/龙虾(普通逻辑类, 由本分发器转发 PlayerFishingServerEvent) ---- from ..yuanbanfangzhi.service.YuanbanFishing import YuanbanFishingService +# ---- 右键摆动动画(任务二): 服务器广播给该玩家客户端 -> Swing() ---- +from ...ModUtil.ServerUtil import PlayAttackToClient + # ---- 乡野自然·水稻: 踩踏耕地等下方方块变化时 清理作物+掉稻谷 ---- from ..ziran.NaturalData import RICE_BLOCKS, RICE_SEED_ITEM, RICE_CROP_ITEM @@ -358,6 +361,7 @@ class FeatureDispatcher(BlueFoxServerSystem): args['cancel'] = True # 记录时间戳(带窗口), 只取消同一右键配套的放置/吃; 过期残留自动放行 self._cancelItemUse[playerId] = time.time() + PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动 print "[FD-BlockUse-DONE]", "player:", playerId, "hand:", _handItem, "block:", blockName, "svc:", service.__class__.__name__, "-> cancel=True, _cancelItemUse=ts" return print "[FD-BlockUse-NOMATCH]", "player:", playerId, "hand:", _handItem, "block:", blockName, "-> 无匹配规则, 放行" @@ -437,6 +441,7 @@ class FeatureDispatcher(BlueFoxServerSystem): args['ret'] = True # 时间戳(带窗口): itemUseOn 转换成功后, 同右手的后续 TryUse/放置也取消 self._cancelItemUse[playerId] = time.time() + PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动 return # ============================================================================ @@ -516,6 +521,7 @@ class FeatureDispatcher(BlueFoxServerSystem): # 在客户端吞掉, 服务端不再设 _cancelItemUse(否则标记残留会吞掉玩家 # 下一次真实的 ServerItemUseOnEvent, 影响其它操作)。 service.handleTakeoutRequest(playerId, blockName, itemName, dim, (x, y, z)) + PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动 return print "[FD-TakeoutRequest-NO-HANDLER]", blockName @@ -549,6 +555,7 @@ class FeatureDispatcher(BlueFoxServerSystem): # 因此不设 _cancelItemUse —— 否则标记残留会吞掉玩家下一次真实的 itemUseOn. handled = service.handleItemUseOn(useOnArgs) if handled: + PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动 return print "[FD-GaifanRequest-NO-HANDLER]", itemName @@ -585,6 +592,7 @@ class FeatureDispatcher(BlueFoxServerSystem): if hasattr(service, "handleItemUseOn"): handled = service.handleItemUseOn(useOnArgs) if handled: + PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动 return print "[FD-ItemUseOnRequest-NO-HANDLER]", itemName @@ -618,6 +626,7 @@ class FeatureDispatcher(BlueFoxServerSystem): if hasattr(service, "handleBlockUse"): handled = service.handleBlockUse(useArgs) if handled: + PlayAttackToClient(playerId) # 任务二: 右键动作播放摆动 return print "[FD-BlockUseRequest-NO-HANDLER]", blockName @@ -644,6 +653,7 @@ class FeatureDispatcher(BlueFoxServerSystem): service = self.tryUseOwner.get(itemName) if service and service.handleItemTryUse(args): args['cancel'] = True + PlayAttackToClient(playerId) # 任务二: 手持右键动作播放摆动 # ============================================================================ # 主入口4:计时方块 tick → 按 timerOwner 路由到计时服务(持久化计时) diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shaokao/service/BarbecueService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shaokao/service/BarbecueService.py index 1660ece..929096d 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shaokao/service/BarbecueService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shaokao/service/BarbecueService.py @@ -225,7 +225,7 @@ class BarbecueService(BlueFoxServerSystem): # ---- 逆向操作 ---- # 掉落物形式生成(取下整只成品等),优先于 giveItem if recipe.get("dropItem"): - self.dropItems(dim, pos, recipe["dropItem"]) + self.dropItems(dim, pos, recipe["dropItem"], playerId) elif recipe.get("giveItem"): self.giveItem(playerId, recipe["giveItem"], recipe.get("giveCount", 1)) @@ -310,17 +310,17 @@ class BarbecueService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, auxValue=0): - comp.CreateItem(playerId).SpawnItemToPlayerInv( - {"itemName": itemName, "count": count, "auxValue": auxValue}, playerId) + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count, aux=auxValue) # ============================================================================ # 十、工具方法:以掉落物形式生成物品(取下烤鸡/烤乳猪等) # ============================================================================ - def dropItems(self, dim, pos, dropList): + def dropItems(self, dim, pos, dropList, playerId=None): """ dropList 格式:[{"name": "xxx", "count": N}, ...] - 在方块上方生成掉落物实体,让它自然掉到地上。 + playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。 """ for d in dropList: itemDict = { @@ -328,7 +328,11 @@ class BarbecueService(BlueFoxServerSystem): "count": d.get("count", 1), "auxValue": d.get("aux", 0), } - self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + if playerId is not None: + self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim, + aux=d.get("aux", 0)) + else: + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) # ============================================================================ # 十一、工具方法:冷却检查 diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/service/ShicaiService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/service/ShicaiService.py index 0140ea5..be17296 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/service/ShicaiService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/service/ShicaiService.py @@ -245,7 +245,7 @@ class ShicaiService(BlueFoxServerSystem): else: # 最后一级再切 -> 掉碎 + 变空气 self.clearBlock(pos, dim) - self.dropItems(dim, pos, [chain["drop"]]) + self.dropItems(dim, pos, [chain["drop"]], playerId) return True # ============================================================================ @@ -261,7 +261,7 @@ class ShicaiService(BlueFoxServerSystem): n = self.garlicChop.get(gkey, 0) + 1 if n >= GARLIC_CHOP_COUNT: self.clearBlock(pos, dim) - self.dropItems(dim, pos, [GARLIC_DROP]) + self.dropItems(dim, pos, [GARLIC_DROP], playerId) self.garlicChop.pop(gkey, None) else: self.garlicChop[gkey] = n @@ -284,7 +284,7 @@ class ShicaiService(BlueFoxServerSystem): return True self.consumeItem(playerId, itemDict, need) self.clearBlock(pos, dim) - self.dropItems(dim, pos, [rule["drop"]]) + self.dropItems(dim, pos, [rule["drop"]], playerId) return True # ============================================================================ @@ -343,14 +343,19 @@ class ShicaiService(BlueFoxServerSystem): # 八、工具方法:以掉落物形式生成物品 # ============================================================================ - def dropItems(self, dim, pos, dropList): + def dropItems(self, dim, pos, dropList, playerId=None): for d in dropList: itemDict = { "itemName": d["name"], "count": d.get("count", 1), "auxValue": d.get("aux", 0), } - self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + if playerId is not None: + # 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落) + self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim, + aux=d.get("aux", 0)) + else: + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) # ============================================================================ # 九、工具方法:冷却检查 diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shichangmaoyi/service/MarketService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shichangmaoyi/service/MarketService.py index 40c4edc..05fdf9e 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shichangmaoyi/service/MarketService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shichangmaoyi/service/MarketService.py @@ -156,7 +156,7 @@ class MarketService(BlueFoxServerSystem): # ---- 取出:掉落物 ---- if recipe.get("dropItem"): - self.dropItems(dim, pos, recipe["dropItem"]) + self.dropItems(dim, pos, recipe["dropItem"], playerId) # ---- 替换方块 ---- if recipe.get("target"): @@ -232,10 +232,10 @@ class MarketService(BlueFoxServerSystem): # 八、工具方法:以掉落物形式生成物品(取出) # ============================================================================ - def dropItems(self, dim, pos, dropList): + def dropItems(self, dim, pos, dropList, playerId=None): """ dropList 格式:[{"name": "xxx", "count": N}, ...] - 在方块上方生成掉落物实体, 让它自然掉到地上。 + playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。 """ for d in dropList: itemDict = { @@ -243,7 +243,11 @@ class MarketService(BlueFoxServerSystem): "count": d.get("count", 1), "auxValue": d.get("aux", 0), } - self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + if playerId is not None: + self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim, + aux=d.get("aux", 0)) + else: + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) # ============================================================================ # 九、工具方法:冷却检查 diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shiyongfood/service/ShiyongfoodService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shiyongfood/service/ShiyongfoodService.py index 8d47072..964b735 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shiyongfood/service/ShiyongfoodService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shiyongfood/service/ShiyongfoodService.py @@ -26,6 +26,9 @@ comp = serverApi.GetEngineCompFactory() # 组件工厂 from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem from ..ShiyongfoodData import EAT_RULE_MAP, TRY_USE_RULES +# ---- 吃的声音 random.eat(任务三) ---- +from ....ModUtil.ServerUtil import PlaySoundToAllClient + class ShiyongfoodService(BlueFoxServerSystem): """总食用服务: 所有成品右键吃(方块吃 + 手持物品直接吃)""" @@ -85,11 +88,14 @@ class ShiyongfoodService(BlueFoxServerSystem): # 方块转换成下一级(半份/下一份) self._replaceBlock(playerId, pos, dim, target) else: - # 完全消耗消失 + 掉落容器 - self._clearBlock(playerId, pos, dim) + # 任务三: 不再掉落容器, 而是把容器(脏盘子/木碗/玻璃杯/支杆)原地留在方块位置 drop = rule.get("drop") if drop: - self.dropItem(dim, pos, drop) + self._replaceBlock(playerId, pos, dim, drop) + else: + self._clearBlock(playerId, pos, dim) + # 吃的声音(任务三) + PlaySoundToAllClient((pos[0], pos[1], pos[2], dim), "random.eat", 1.0) return True # ==================================================================== @@ -133,6 +139,13 @@ class ShiyongfoodService(BlueFoxServerSystem): "auxValue": itemDict.get("newAuxValue", 0), "userData": itemDict.get("userData", {})}) self._applyFood(playerId, rule.get("hunger", 0), rule.get("effects", [])) + # 吃的声音(任务三, 手持吃) + try: + _fp = comp.CreatePos(playerId).GetFootPos() + _fd = comp.CreateDimension(playerId).GetEntityDimensionId() + PlaySoundToAllClient((_fp[0], _fp[1], _fp[2], _fd), "random.eat", 1.0) + except Exception: + pass return True # ============================================================================ diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shouban/service/ShoubanService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shouban/service/ShoubanService.py index 2a33827..da06585 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shouban/service/ShoubanService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shouban/service/ShoubanService.py @@ -134,7 +134,7 @@ class ShoubanService(BlueFoxServerSystem): # 盒子变为"开过" self.replaceBlock(pos, dim, BLIND_BOX_TARGET, playerId) # 掉落手办 - self.dropItems(dim, pos, [{"name": fig, "count": 1}]) + self.dropItems(dim, pos, [{"name": fig, "count": 1}], playerId) # 提示开出内容 name = FIGURINE_NAMES.get(fig, "手办") @@ -174,10 +174,10 @@ class ShoubanService(BlueFoxServerSystem): # 五、工具方法:以掉落物形式生成物品(开出/取下等) # ============================================================================ - def dropItems(self, dim, pos, dropList): + def dropItems(self, dim, pos, dropList, playerId=None): """ dropList 格式:[{"name": "xxx", "count": N}, ...] - 在方块上方生成掉落物实体, 让它自然掉到地上。 + playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。 """ for d in dropList: itemDict = { @@ -185,7 +185,11 @@ class ShoubanService(BlueFoxServerSystem): "count": d.get("count", 1), "auxValue": d.get("aux", 0), } - self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + if playerId is not None: + self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim, + aux=d.get("aux", 0)) + else: + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) # ============================================================================ # 六、工具方法:冷却检查 diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shousi/service/ShousiService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shousi/service/ShousiService.py index 39dfeb5..b2435d2 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shousi/service/ShousiService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shousi/service/ShousiService.py @@ -270,7 +270,7 @@ class ShousiService(BlueFoxServerSystem): 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) # ============================================================================ # 四、切块(手持菜刀右键卷寿司两次 -> 寿司块(三个)) @@ -301,7 +301,11 @@ class ShousiService(BlueFoxServerSystem): # 六、工具方法:以掉落物形式生成物品(递减取走返还) # ============================================================================ - def dropItem(self, dim, pos, itemName, count=1, aux=0): + def dropItem(self, dim, pos, itemName, count=1, aux=0, playerId=None): + if playerId is not None: + # 任务一: 玩家主动获得 -> 统一优先级(同类合并->主手->背包->掉落) + self.giveItemToPlayer(playerId, itemName, count, pos, dim, aux=aux) + return try: itemDict = {"itemName": itemName, "count": count, "auxValue": aux} self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) 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 de105a0..5b69706 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/tangguo/service/TangguoService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/tangguo/service/TangguoService.py @@ -316,11 +316,8 @@ class TangguoService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, aux=0): - try: - itemDict = {"itemName": itemName, "count": count, "auxValue": aux} - comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) - except Exception: - pass + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count) # ============================================================================ # 五、工具方法,消耗物品 @@ -351,24 +348,11 @@ class TangguoService(BlueFoxServerSystem): """取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手; 否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。 不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。""" + if playerId is not None: + self.giveItemToPlayer(playerId, itemName, count, pos, dim) + return 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/yinliao/service/YinliaoService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yinliao/service/YinliaoService.py index c779422..0a8b2e2 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yinliao/service/YinliaoService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yinliao/service/YinliaoService.py @@ -204,7 +204,7 @@ class YinliaoService(BlueFoxServerSystem): return False # 无水果记录(创造直接放置的完成态) → 不反应 juiceBlock, juiceName = juiceInfo self.consumeItem(playerId, itemDict, 1) # 消耗玻璃杯(果汁成品自带杯) - self.dropItems(dim, pos, [{"name": juiceBlock, "count": 1}]) + self.dropItems(dim, pos, [{"name": juiceBlock, "count": 1}], playerId) self.replaceBlock(pos, dim, "rtdd:juicer", playerId) # 还原空, 记录随方块清除 return True @@ -254,7 +254,7 @@ class YinliaoService(BlueFoxServerSystem): if not self.checkCooldown(key, 0.5): return True _fruit, popsicle, flavor = info - self.dropItems(dim, pos, [{"name": popsicle, "count": 2}]) + self.dropItems(dim, pos, [{"name": popsicle, "count": 2}], playerId) self.replaceBlock(pos, dim, "rtdd:icelollybox_1", playerId) # 还原未定型 return True @@ -296,7 +296,7 @@ class YinliaoService(BlueFoxServerSystem): return False if not self.checkCooldown(key, 0.5): return True - self.dropItems(dim, pos, [{"name": icecream, "count": 1}]) + self.dropItems(dim, pos, [{"name": icecream, "count": 1}], playerId) self.replaceBlock(pos, dim, "rtdd:frytheicebox", playerId) # 还原空 return True @@ -333,7 +333,7 @@ class YinliaoService(BlueFoxServerSystem): if not itemName or itemName == "minecraft:air": if not self.checkCooldown(key, 0.5): return True - self.dropItems(dim, pos, [{"name": POPSICLE_SINGLE_MELON, "count": 1}]) + self.dropItems(dim, pos, [{"name": POPSICLE_SINGLE_MELON, "count": 1}], playerId) self.replaceBlock(pos, dim, POPSICLE_SINGLE_ORANGE, playerId) return True return False @@ -344,7 +344,7 @@ class YinliaoService(BlueFoxServerSystem): if not itemName or itemName == "minecraft:air": if not self.checkCooldown(key, 0.5): return True - self.dropItems(dim, pos, [{"name": POPSICLE_PILE_ADD, "count": 1}]) + self.dropItems(dim, pos, [{"name": POPSICLE_PILE_ADD, "count": 1}], playerId) self.replaceBlock(pos, dim, POPSICLE_PILE_2, playerId) return True return False @@ -441,10 +441,10 @@ class YinliaoService(BlueFoxServerSystem): # 十、工具方法:以掉落物形式生成物品(取果汁/冰棍/冰沙) # ============================================================================ - def dropItems(self, dim, pos, dropList): + def dropItems(self, dim, pos, dropList, playerId=None): """ dropList 格式:[{"name": "xxx", "count": N}, ...] - 在方块上方生成掉落物实体, 让它自然掉到地上。 + playerId 给出时走统一优先级(任务一: 同类合并->主手->背包->掉落)。 """ for d in dropList: itemDict = { @@ -452,7 +452,11 @@ class YinliaoService(BlueFoxServerSystem): "count": d.get("count", 1), "auxValue": d.get("aux", 0), } - self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) + if playerId is not None: + self.giveItemToPlayer(playerId, d["name"], d.get("count", 1), pos, dim, + aux=d.get("aux", 0)) + else: + self.CreateEngineItemEntity(itemDict, dim, (pos[0], pos[1] + 0.5, pos[2])) # ============================================================================ # 十一、工具方法:冷却检查 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 a212779..53e0ca8 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/youguo/service/YouguoService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/youguo/service/YouguoService.py @@ -277,11 +277,8 @@ class YouguoService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, aux=0): - try: - itemDict = {"itemName": itemName, "count": count, "auxValue": aux} - comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) - except Exception: - pass + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count) # ============================================================================ # 六、工具方法,消耗物品 @@ -312,24 +309,11 @@ class YouguoService(BlueFoxServerSystem): """取成品/返容器: playerId 给出时【优先入包】—— 主手空->放主手; 否则入背包(同类叠加/空位); 背包满(返回False)->落回地面掉落物。 不传 playerId(无玩家上下文, 如破坏掉落) 保持原掉落物, 零影响。""" + if playerId is not None: + self.giveItemToPlayer(playerId, itemName, count, pos, dim) + return 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/ziran/service/NaturalService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/ziran/service/NaturalService.py index 3ef465b..11c6b08 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/ziran/service/NaturalService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/ziran/service/NaturalService.py @@ -207,11 +207,8 @@ class NaturalService(BlueFoxServerSystem): # ============================================================================ def giveItem(self, playerId, itemName, count=1, aux=0): - try: - itemDict = {"itemName": itemName, "count": count, "auxValue": aux} - comp.CreateItem(playerId).SpawnItemToPlayerInv(itemDict, playerId) - except Exception: - pass + """"给玩家物品": 统一走优先级(同类合并->主手->背包->掉落)""" + self.giveItemToPlayer(playerId, itemName, count, aux=aux) # ============================================================================ # 六、工具方法:消耗物品 diff --git a/behavior_pack_v8jz0zSR/netease_blocks/fruitjuice_0.json b/behavior_pack_v8jz0zSR/netease_blocks/fruitjuice_0.json index be02e28..6a4ba3e 100644 --- a/behavior_pack_v8jz0zSR/netease_blocks/fruitjuice_0.json +++ b/behavior_pack_v8jz0zSR/netease_blocks/fruitjuice_0.json @@ -3,8 +3,8 @@ "minecraft:block": { "description": { "identifier": "rtdd:fruitjuice_0", - "register_to_creative_menu": false, - "category": "xy_drink" + "register_to_creative_menu": true, + "category": "xy_kitchenware" }, "components": { "netease:aabb": { diff --git a/behavior_pack_v8jz0zSR/netease_blocks/frytheicebox.json b/behavior_pack_v8jz0zSR/netease_blocks/frytheicebox.json index 8383af0..ccc99a4 100644 --- a/behavior_pack_v8jz0zSR/netease_blocks/frytheicebox.json +++ b/behavior_pack_v8jz0zSR/netease_blocks/frytheicebox.json @@ -3,8 +3,8 @@ "minecraft:block": { "description": { "identifier": "rtdd:frytheicebox", - "register_to_creative_menu": false, - "category": "xy_drink" + "register_to_creative_menu": true, + "category": "xy_kitchenware" }, "components": { "netease:aabb": { diff --git a/behavior_pack_v8jz0zSR/netease_blocks/icelollybox_1.json b/behavior_pack_v8jz0zSR/netease_blocks/icelollybox_1.json index 910bf5d..51052d3 100644 --- a/behavior_pack_v8jz0zSR/netease_blocks/icelollybox_1.json +++ b/behavior_pack_v8jz0zSR/netease_blocks/icelollybox_1.json @@ -3,8 +3,8 @@ "minecraft:block": { "description": { "identifier": "rtdd:icelollybox_1", - "register_to_creative_menu": false, - "category": "xy_drink" + "register_to_creative_menu": true, + "category": "xy_kitchenware" }, "components": { "netease:aabb": { diff --git a/behavior_pack_v8jz0zSR/netease_blocks/juicer.json b/behavior_pack_v8jz0zSR/netease_blocks/juicer.json index 39a4b6b..cf429fe 100644 --- a/behavior_pack_v8jz0zSR/netease_blocks/juicer.json +++ b/behavior_pack_v8jz0zSR/netease_blocks/juicer.json @@ -3,8 +3,8 @@ "minecraft:block": { "description": { "identifier": "rtdd:juicer", - "register_to_creative_menu": false, - "category": "xy_drink" + "register_to_creative_menu": true, + "category": "xy_kitchenware" }, "components": { "netease:aabb": { diff --git a/behavior_pack_v8jz0zSR/netease_recipes/xy_b_57.json b/behavior_pack_v8jz0zSR/netease_recipes/xy_b_57.json index 753ceac..9bb2426 100644 --- a/behavior_pack_v8jz0zSR/netease_recipes/xy_b_57.json +++ b/behavior_pack_v8jz0zSR/netease_recipes/xy_b_57.json @@ -22,12 +22,20 @@ "item": "minecraft:stick", "data": 0 }, - "7": { + "8": { "item": "minecraft:stick", "data": 0 }, - "8": { - "item": "minecraft:stick", + "1": { + "item": "rtdd:b_34", + "data": 0 + }, + "4": { + "item": "rtdd:b_34", + "data": 0 + }, + "7": { + "item": "rtdd:b_34", "data": 0 } }, @@ -35,9 +43,9 @@ "identifier": "rtdd:xy_b_57" }, "pattern": [ - "0 2", - "3 5", - "678" + "010", + "343", + "636" ], "result": { "data": 0, diff --git a/resource_pack_Are13Lvd/texts/zh_CN.lang b/resource_pack_Are13Lvd/texts/zh_CN.lang index 86ba2dd..7aa3256 100644 --- a/resource_pack_Are13Lvd/texts/zh_CN.lang +++ b/resource_pack_Are13Lvd/texts/zh_CN.lang @@ -5,7 +5,7 @@ tile.rtdd:juicer_4.name=榨汁机(完成) tile.rtdd:chickencoop_4.name=鸡窝_5(4蛋) tile.rtdd:juicer_3.name=榨汁机(榨汁中3) tile.rtdd:juicer_2.name=榨汁机(榨汁中2) -tile.rtdd:trayracks_1.name=盘子架_1(空) +tile.rtdd:trayracks_1.name=盘子架 tile.rtdd:chickencoop_1.name=鸡窝_2(1蛋) tile.rtdd:chickencoop_0.name=鸡窝_1(0蛋) tile.rtdd:trayracks_3.name=盘子架_3(俩个) @@ -54,7 +54,7 @@ tile.rtdd:manger_1.name=饲料槽_4(少量小麦) tile.rtdd:manger_0.name=饲料槽_1(空) tile.rtdd:b_3.name=鲑鱼架_禁用 -tile.rtdd:peachbarrel.name=货桶(桃子) +tile.rtdd:peachbarrel.name=桃子货桶 tile.rtdd:b_4.name=摊位台 tile.rtdd:carrotlegoflamb.name=炒锅_13(胡萝卜羊腿_生) @@ -173,7 +173,7 @@ tile.rtdd:plate_19.name=辣炒兔肉(全份) tile.rtdd:plate_10.name=胡萝卜炒羊里脊(全份) tile.rtdd:dead_villagera.name=烤村民 tile.rtdd:vegetablesstew_2.name=汤锅_110(蔬菜乱炖_八分熟) -tile.rtdd:fishingnet.name=网(渔网) +tile.rtdd:fishingnet.name=渔网 tile.rtdd:vegetablesstew_1.name=汤锅_109(蔬菜乱炖_四分熟) tile.rtdd:plate_13.name=胡萝卜炒猪排骨(全份) tile.rtdd:plate_14.name=炒土豆 @@ -181,13 +181,13 @@ tile.rtdd:vegetablesstew_3.name=汤锅_111(蔬菜乱炖_熟) tile.rtdd:plate_11.name=胡萝卜炒羊排 tile.rtdd:plate_12.name=小炒五花肉(全份) tile.rtdd:cookingpotato.name=炒锅_47(炒土豆_生) -tile.rtdd:orangebox.name=售卖盒(橘子) +tile.rtdd:orangebox.name=橙子售卖盒 tile.rtdd:bowlaeggcodsoup.name=蛋花鳕鱼汤 tile.rtdd:hot_water_bucket.name=热水 -tile.rtdd:wok.name=炒锅(空) -tile.rtdd:stewedsoup.name=汤锅(空锅) +tile.rtdd:wok.name=炒锅 +tile.rtdd:stewedsoup.name=汤锅 tile.rtdd:mushroom_fried_chicken_1.name=炒锅_68(香菇滑鸡_生) tile.rtdd:fishmonsushi_6.name=热带鱼寿司块(三个) tile.rtdd:roastpignew_5.name=烤乳猪(2/6只) @@ -202,7 +202,7 @@ tile.rtdd:sunshade_cloth_yellow.name=淡黄色遮阳布 tile.rtdd:sunshade_cloth_lime.name=深绿色遮阳布 tile.rtdd:brown_norieggsoup.name=瘦肉蛋花汤 -tile.rtdd:sales_box_cod.name=售卖盒(鳕鱼盒) +tile.rtdd:sales_box_cod.name=鳕鱼售卖盒 tile.rtdd:cookingmeat.name=炒锅_44(炒碎肉_生) tile.rtdd:plate_40a.name=章鱼小丸子_半份 tile.rtdd:bread_2b.name=吐司3(3份) @@ -244,7 +244,7 @@ tile.rtdd:b_102.name=烟囱 tile.rtdd:carrotandbeef.name=炒锅_1(黑椒牛排_生) tile.rtdd:b_103.name=烟道 tile.rtdd:cod_pile.name=鳕鱼堆 -tile.rtdd:b_108.name=古式唱片机(无碟) +tile.rtdd:b_108.name=古式唱片机 tile.rtdd:balance.name=天平 tile.rtdd:b_109.name=古式唱片机(有碟) tile.rtdd:plate_53.name=胡萝卜炒猪肉 @@ -291,7 +291,7 @@ tile.rtdd:lotion_1.name=药水架_2(药水_一瓶) tile.rtdd:lotion_2.name=药水架_3(药水_两瓶) tile.rtdd:rollingpin.name=擀面杖 tile.rtdd:plate_24.name=炒碎肉 -tile.rtdd:lotion_0.name=药水架_1(药水_空) +tile.rtdd:lotion_0.name=药水架 tile.rtdd:wheel.name=车轮 tile.rtdd:plate_25.name=煎鲑鱼 @@ -312,7 +312,7 @@ tile.rtdd:coverthepan.name=炒锅(盖锅) tile.rtdd:plate_1a.name=清炒猪排(半份) tile.rtdd:cookedanymeat.name=炒锅_16(小炒鸡肉_熟) tile.rtdd:plate_39.name=盘装炸鱼 -tile.rtdd:cabinet.name=橱柜(盘子+调料瓶) +tile.rtdd:cabinet.name=餐具橱柜 tile.rtdd:cake_2a.name=浆果蛋糕(3/4块) tile.rtdd:plate_37.name=炸薯条 tile.rtdd:plate_38.name=盘装鸡块 @@ -357,9 +357,9 @@ tile.rtdd:peach_popsicleplace.name=桃子冰棍 tile.rtdd:roastpig_1.name=烤乳猪(熟) tile.rtdd:fishtank.name=鱼缸_禁用 tile.rtdd:carrotandpotatosoup.name=汤锅_8(胡萝卜土豆汤) -tile.rtdd:bountypaper_2.name=悬赏纸_2 +tile.rtdd:bountypaper_2.name=悬赏纸 -tile.rtdd:bountypaper_1.name=悬赏纸_1 +tile.rtdd:bountypaper_1.name=公告 tile.rtdd:plate_33a.name=炒蟹(半份) tile.rtdd:vegetableleanbroth_3.name=汤锅_105(蔬菜瘦肉汤_熟) tile.rtdd:vegetableleanbroth_2.name=汤锅_104(蔬菜瘦肉汤_八分熟) @@ -403,7 +403,7 @@ tile.rtdd:b_127.name=地图台 tile.rtdd:cooking_pepper.name=炒锅_19(炒胡萝卜_熟) tile.rtdd:noodle_soup.name=熟面条 -tile.rtdd:sales_box_carrot.name=售卖盒(胡萝卜) +tile.rtdd:sales_box_carrot.name=胡萝卜售卖盒 tile.rtdd:apple_fruit_1.name=苹果(形态1)_自然 tile.rtdd:apple_fruit_3.name=苹果(形态2)_自然 @@ -426,18 +426,18 @@ tile.rtdd:bookcase_4.name=书柜_10(9本) tile.rtdd:egg_pile.name=鸡蛋堆 tile.rtdd:bookcase_3.name=书柜_12(11本) tile.rtdd:sellingboxes.name=售卖盒 -tile.rtdd:flag_red_orange_oblique.name=红橙旗子(斜向) +tile.rtdd:flag_red_orange_oblique.name=斜向红橙旗子 tile.rtdd:plate_12a.name=小炒五花肉(半份) tile.rtdd:cupboard_2.name=碗柜(两个碗) tile.rtdd:cupboard_3.name=碗柜(三个碗) -tile.rtdd:cupboard_0.name=碗柜(空) +tile.rtdd:cupboard_0.name=碗柜 tile.rtdd:cupboard_1.name=碗柜(一个碗) tile.rtdd:squid_sushi.name=手握鱿鱼寿司(一个) tile.rtdd:fishsushicubes_2.name=热带鱼寿司块(两个) tile.rtdd:fishsushicubes_1.name=热带鱼寿司块(一个) tile.rtdd:bamboo_7.name=蒸笼(竹筒饭_熟) tile.rtdd:bamboo_6.name=蒸笼(竹筒饭_生) -tile.rtdd:bountypaper.name=农贸清单(悬赏纸) +tile.rtdd:bountypaper.name=农贸清单 tile.rtdd:bamboo_5.name=熟竹筒饭 tile.rtdd:bamboo_4.name=竹筒(加入肉) tile.rtdd:nigirisushisalnom_2.name=手握鲑鱼寿司(两个) @@ -554,7 +554,7 @@ tile.rtdd:nigirisushicod_3.name=手握鳕鱼寿司(三个) tile.rtdd:spicy_fish_0.name=炒锅_90(辣炒鲑鱼_生) tile.rtdd:spicy_fish_1.name=炒锅_91(辣炒鲑鱼_熟) tile.rtdd:plate_19a.name=辣炒兔肉(半份) -tile.rtdd:wine_barrel.name=酒桶! +tile.rtdd:wine_barrel.name=酒桶 tile.rtdd:cookingsheeploin.name=炒锅_52(胡萝卜炒羊里脊_生) tile.rtdd:cow_3.name=挂肉钩(牛_去肉) tile.rtdd:cow_2.name=挂肉钩(牛_去四肢) @@ -587,7 +587,7 @@ tile.rtdd:beater_custard_2.name=搅拌器(蛋_3) tile.rtdd:beater_custard_1.name=搅拌器(蛋_2) tile.rtdd:beater_custard_0.name=搅拌器(蛋_1) tile.rtdd:medicinetank.name=玻璃罐 -tile.rtdd:storage_buckets.name=垃圾桶(关闭) +tile.rtdd:storage_buckets.name=垃圾桶 tile.rtdd:jewelrybox_1.name=盲盒(开过) tile.rtdd:jewelrybox_0.name=盲盒 tile.rtdd:oilpotporkchop.name=油锅(禁用) @@ -595,7 +595,7 @@ tile.rtdd:rubbish_bin_2.name=垃圾桶(打开) tile.rtdd:peachpile.name=土豆堆_3(桃子堆)_禁用 tile.rtdd:vegetableleanbroth.name=汤锅_102(蔬菜瘦肉汤_生) tile.rtdd:warehousebox.name=Warehousebox(仓库箱) -tile.rtdd:oilpot_0.name=油锅(空锅) +tile.rtdd:oilpot_0.name=油锅 tile.rtdd:baozilong_2.name=蒸笼(包子_熟) tile.rtdd:baozilong_1.name=蒸笼(包子_生) tile.rtdd:appleicebox.name=炒冰盒_1(苹果炒冰盒) @@ -609,7 +609,7 @@ tile.rtdd:killcod_0.name=死鳕鱼 tile.rtdd:killcod_1.name=死鳕鱼(切一刀) tile.rtdd:killcod_2.name=死鳕鱼(切两刀) tile.rtdd:lambstew_2.name=汤锅_52(土豆胡萝卜炖羊肉_八分熟) -tile.rtdd:sales_box_bread.name=售卖盒(面包) +tile.rtdd:sales_box_bread.name=面包售卖盒 tile.rtdd:lambstew_1.name=汤锅_51(土豆胡萝卜炖羊肉_四分熟) tile.rtdd:mug.name=酒杯_10(酒杯) tile.rtdd:lambstew_3.name=汤锅_53(土豆胡萝卜炖羊肉_熟) @@ -632,8 +632,8 @@ tile.rtdd:roujiamo_1.name=馍(切开) tile.rtdd:carrotbeefsoup_2.name=汤锅_11(胡萝卜牛肉汤_八分熟) tile.rtdd:carrotbeefsoup_3.name=汤锅_12(胡萝卜牛肉汤_熟) tile.rtdd:bowlofmushroomsoup.name=蘑菇炖鸡 -tile.rtdd:cabinet_1.name=橱柜(仅调料瓶) -tile.rtdd:peachbox.name=售卖盒(桃子) +tile.rtdd:cabinet_1.name=调料瓶橱柜 +tile.rtdd:peachbox.name=桃子售卖盒 tile.rtdd:bowlofrice.name=米饭_1(熟米饭_形态1) tile.rtdd:bowlabeefbonebroth.name=胡萝卜土豆牛骨汤 tile.rtdd:carrotandbeef_1.name=炒锅_2(黑椒牛排_熟) @@ -644,24 +644,24 @@ tile.rtdd:dead_squid_1.name=死鱿鱼(切掉鱿鱼须) tile.rtdd:cookedeggsoup.name=汤锅_32(煮鸡蛋_熟) tile.rtdd:oven.name=烤炉 tile.rtdd:ingotpile.name=铁锭堆_禁用 -tile.rtdd:sales_box_pumpkin.name=售卖盒(南瓜) +tile.rtdd:sales_box_pumpkin.name=南瓜售卖盒 tile.rtdd:carrotribs_3.name=汤锅_24(胡萝卜排骨汤_熟) tile.rtdd:mushroomnoodles.name=香菇面 tile.rtdd:carrotribs_1.name=汤锅_22(胡萝卜排骨汤_四分熟) tile.rtdd:carrotribs_2.name=汤锅_23(胡萝卜排骨汤_八分熟) -tile.rtdd:menus.name=餐牌(菜单) +tile.rtdd:menus.name=餐牌 tile.rtdd:carrotandmutton_1.name=炒锅_8(清炒羊肉_熟) tile.rtdd:stonemill.name=石磨 tile.rtdd:cloth_red.name=淡红色布料 -tile.rtdd:meathook.name=挂肉钩(空钩) +tile.rtdd:meathook.name=挂肉钩 tile.rtdd:meathookcoddry.name=鳕鱼干挂肉钩(两条) tile.rtdd:woodenbox_0.name=条箱 -tile.rtdd:woodenbox_3.name=条箱(土豆) +tile.rtdd:woodenbox_3.name=土豆条箱 tile.rtdd:tent.name=帐篷_1(帐篷)禁用 -tile.rtdd:woodenbox_4.name=条箱(桃子) +tile.rtdd:woodenbox_4.name=桃子条箱 tile.rtdd:steamermilkandegg.name=蒸笼(蒸牛奶鸡蛋_生)_禁用 -tile.rtdd:woodenbox_1.name=条箱(苹果) -tile.rtdd:woodenbox_2.name=条箱(胡萝卜) +tile.rtdd:woodenbox_1.name=苹果条箱 +tile.rtdd:woodenbox_2.name=胡萝卜条箱 tile.rtdd:breaddough_4d.name=甜甜圈胚(生) tile.rtdd:chickenstewwithmushrooms_3.name=汤锅_29(蘑菇炖鸡_熟) tile.rtdd:chickenstewwithmushrooms_1.name=汤锅_27(蘑菇炖鸡_四分熟) @@ -738,7 +738,7 @@ tile.rtdd:cakebatterblock_0.name=蛋糕面糊(生) tile.rtdd:salmonsushi_1.name=鲑鱼寿司(加鲑鱼) tile.rtdd:soybeanseedling_0.name=豆苗_1(豆苗_0) tile.rtdd:soybeanseedling_1.name=豆苗_2(豆苗_1) -tile.rtdd:barbecuegrill_0.name=烧烤架_1(烧烤架无火) +tile.rtdd:barbecuegrill_0.name=烧烤架 tile.rtdd:codsushi_1.name=鳕鱼寿司(加鳕鱼) tile.rtdd:cookingscallions.name=炒锅_51(葱花锅底) tile.rtdd:codsushi_6.name=鳕鱼寿司块(三个) @@ -747,10 +747,10 @@ tile.rtdd:codsushi_5.name=鳕鱼寿司(卷_4) tile.rtdd:barbecuegrill_1.name=烧烤架_2(烧烤架点燃) tile.rtdd:codsushi_2.name=鳕鱼寿司(卷_1) tile.rtdd:codsushi_3.name=鳕鱼寿司(卷_2) -tile.rtdd:fishbucket_1.name=货桶(鳕鱼) +tile.rtdd:fishbucket_1.name=鳕鱼货桶 tile.rtdd:fishbucket_0.name=货桶 tile.rtdd:salmon_pile.name=鲑鱼堆 -tile.rtdd:carrotbarrel.name=货桶(胡萝卜) +tile.rtdd:carrotbarrel.name=胡萝卜货桶 tile.rtdd:bread_1.name=法棍 tile.rtdd:meathookcod_2.name=鳕鱼挂肉钩(两条) tile.rtdd:meathookcod_1.name=鳕鱼挂肉钩(一条) @@ -759,7 +759,7 @@ tile.rtdd:roujiamosoup_1.name=汤锅_78(羊肉泡馍汤_熟) tile.rtdd:bandage_2.name=绷带 tile.rtdd:orange_leaves.name=橘树树叶 -tile.rtdd:potatobarrel.name=货桶(土豆) +tile.rtdd:potatobarrel.name=土豆货桶 tile.rtdd:pepperplant_3.name=辣椒(辣椒_3) tile.rtdd:pepperplant_1.name=辣椒苗_1(辣椒_1) tile.rtdd:pepperplant_2.name=辣椒苗_2(辣椒_2) @@ -782,7 +782,7 @@ tile.rtdd:statueofadeity.name=神像 tile.rtdd:popsiclepile_3.name=冰棍堆2(橙子+西瓜+苹果) tile.rtdd:popsiclepile_2.name=冰棍堆(橙子+西瓜) tile.rtdd:b_225.name=浴缸_1 -tile.rtdd:fishbucket_2.name=货桶(鲑鱼) +tile.rtdd:fishbucket_2.name=鲑鱼货桶 tile.rtdd:bowlacarrotribs.name=胡萝卜排骨汤 tile.rtdd:squidwhiskersincooking_0.name=炒锅_92(炒鱿鱼须_生) tile.rtdd:ricepot_1.name=汤锅_74(熟米饭_形态1) @@ -794,12 +794,12 @@ tile.rtdd:cookingpotato_1.name=炒锅_48(炒土豆_熟) tile.rtdd:browncarrotfishsoupsoup.name=胡萝卜鲑鱼汤 tile.rtdd:dough_1.name=生面团(擀面_1) -tile.rtdd:dough_0.name=生面团(发酵后) +tile.rtdd:dough_0.name=发酵后的生面团 tile.rtdd:plate_30a.name=美味饺子(全份)盘装 tile.rtdd:cloth_orange.name=橙色布料 tile.rtdd:fried_porkwith_carrots.name=炒锅_63(胡萝卜炒猪肉_生) -tile.rtdd:sales_box_potato.name=售卖盒(土豆) +tile.rtdd:sales_box_potato.name=土豆售卖盒 tile.rtdd:roasted_vegetables_1.name=烤蔬菜串(半熟) tile.rtdd:carrotfishsoup_1.name=汤锅_18(胡萝卜鲑鱼汤_三分熟) tile.rtdd:roasted_vegetables_0.name=烤蔬菜串(生) @@ -837,7 +837,7 @@ tile.rtdd:pig_2.name=挂肉钩(猪_去四肢) tile.rtdd:pig_1.name=挂肉钩(猪_去皮) tile.rtdd:pig_0.name=挂肉钩(整只猪) tile.rtdd:arrowbarrel_1.name=箭桶_1(箭桶有箭) -tile.rtdd:arrowbarrel_0.name=箭桶_0(箭桶无箭) +tile.rtdd:arrowbarrel_0.name=箭桶 tile.rtdd:cutvegetable_3.name=切青菜(切三刀) tile.rtdd:cutvegetable_2.name=切青菜(切两刀) tile.rtdd:cutvegetable_1.name=切青菜(切一刀) @@ -874,10 +874,10 @@ tile.rtdd:vegetablefishsoup_3.name=汤锅_97(蔬菜鱼片汤_熟) tile.rtdd:melon_popsicleplace.name=西瓜冰棍 tile.rtdd:plate_46a.name=鸡肉番茄意面(半份) tile.rtdd:b_241.name=深绿色布料 -tile.rtdd:firewood.name=柴火_1(柴火) +tile.rtdd:firewood.name=柴火 tile.rtdd:flume_2.name=水槽_3(水槽_一个脏盘子) tile.rtdd:flume_1.name=水槽_2(水槽_满水) -tile.rtdd:flume_0.name=水槽_1(水槽_空) +tile.rtdd:flume_0.name=水槽 tile.rtdd:flume_5.name=水槽_6(水槽_四个脏盘子) tile.rtdd:flume_4.name=水槽_5(水槽_三个脏盘子) tile.rtdd:cookingsheeprack_1.name=炒锅_55(胡萝卜炒羊排_熟) @@ -965,7 +965,7 @@ tile.rtdd:b_40.name=胡萝卜堆 tile.rtdd:goldingotpile.name=金锭堆_禁用 -tile.rtdd:bookcase.name=书柜_1(空) +tile.rtdd:bookcase.name=书柜 tile.rtdd:cookingbeeftenderloin1.name=炒锅_24(胡萝卜牛里脊_熟) tile.rtdd:red_mushroomsoup.name=汤锅_73(红蘑菇汤) tile.rtdd:carrotandsalmon.name=炒锅_11(胡萝卜鲑鱼_生) @@ -988,9 +988,9 @@ tile.rtdd:lambstew.name=汤锅_50(土豆胡萝卜炖羊肉_生) tile.rtdd:deadsquida.name=死鱿鱼 tile.rtdd:friedchicken.name=炒锅_66(小炒鸡肉_半熟) itemGroup.tabrfood=乡野-市场与农业 -tile.rtdd:woodenbox_7.name=条箱(鲑鱼) -tile.rtdd:woodenbox_5.name=条箱(橘子) -tile.rtdd:woodenbox_6.name=条箱(鳕鱼) +tile.rtdd:woodenbox_7.name=鲑鱼条箱 +tile.rtdd:woodenbox_5.name=橙子条箱 +tile.rtdd:woodenbox_6.name=鳕鱼条箱 tile.rtdd:plate_2.name=黑椒牛排(全份) tile.rtdd:plate_3.name=清炒羊肉 tile.rtdd:plate_0.name=盘子 @@ -1003,7 +1003,7 @@ tile.rtdd:carrotbeefsoup.name=汤锅_9(胡萝卜牛肉汤_生) -tile.rtdd:applebox.name=货桶(苹果) +tile.rtdd:applebox.name=苹果货桶 tile.rtdd:kitchenwarerackb_2.name=厨具架(双锅勺) tile.rtdd:kitchenwarerackb_1.name=厨具架(单锅勺) tile.rtdd:plate_6.name=胡萝卜牛排骨 @@ -1019,12 +1019,12 @@ tile.rtdd:b_68.name=吊锅_14 tile.rtdd:b_67.name=吊锅_13 tile.rtdd:plate_8.name=胡萝卜牛里脊 tile.rtdd:plate_9.name=胡萝卜羊腿(全份) -tile.rtdd:flag_brown_blue.name=橙蓝旗子(正向) -tile.rtdd:sales_box_apple.name=售卖盒(苹果) +tile.rtdd:flag_brown_blue.name=正向橙蓝旗子 +tile.rtdd:sales_box_apple.name=苹果售卖盒 tile.rtdd:cloth_blue.name=淡蓝色布料 -tile.rtdd:sales_box_watermelon.name=售卖盒(西瓜) +tile.rtdd:sales_box_watermelon.name=西瓜售卖盒 tile.rtdd:rawnoodlesoup.name=汤锅_65(生面汤) -tile.rtdd:stove.name=炉灶(空) +tile.rtdd:stove.name=炉灶 tile.rtdd:b_16.name=土豆盒_1_禁用 tile.rtdd:b_15.name=木条 @@ -1039,7 +1039,7 @@ tile.rtdd:norieggsoup_3.name=汤锅_59(瘦肉蛋花汤_熟) tile.rtdd:norieggsoup_2.name=汤锅_58(瘦肉蛋花汤_全熟) tile.rtdd:cookingcookedporkloin_1.name=炒锅_31(小炒五花肉_熟) tile.rtdd:b_31.name=稻草人1 -tile.rtdd:b_30.name=售卖盒(鲑鱼) +tile.rtdd:b_30.name=鲑鱼售卖盒 tile.rtdd:cookingdought.name=炒锅_38(煎面饼_生)_禁用 tile.rtdd:b_35.name=双人床 @@ -1047,12 +1047,12 @@ tile.rtdd:b_34.name=支杆 tile.rtdd:cream_caramel.name=焦糖布丁 tile.rtdd:creampastry_0.name=舒芙蕾半成品 tile.rtdd:carrotandporkchop_1.name=炒锅_10(清炒猪排_熟) -tile.rtdd:flag.name=黄绿旗子(正向) +tile.rtdd:flag.name=正向黄绿旗子 tile.rtdd:raweggsoup.name=汤锅_62(煮鸡蛋_生) tile.rtdd:icelollybox_2.name=冰棍盒(冰棍定型) tile.rtdd:kitchenwarerackd_4.name=厨具架(菜刀+锅勺) -tile.rtdd:flag_blue_lime_oblique.name=蓝绿旗子(斜向) +tile.rtdd:flag_blue_lime_oblique.name=斜向蓝绿旗子 tile.rtdd:kitchenwarerackd_3.name=厨具架(双菜刀) tile.rtdd:kitchenwarerackd_2.name=厨具架(菜刀+锅铲) tile.rtdd:wokcarrot_1.name=炒锅_95(炒胡萝卜_半熟) @@ -1067,10 +1067,10 @@ tile.rtdd:icelollybox_1.name=冰棍盒(冰棍未定型) tile.rtdd:roastedmushrooms_0.name=烤香菇串(生) -tile.rtdd:orangebarrel.name=货桶(橘子) +tile.rtdd:orangebarrel.name=橙子货桶 tile.rtdd:roastedmushrooms_3.name=烤香菇串(熟) tile.rtdd:tonkotsu_ramen.name=猪排蔬菜面加水煮蛋 -tile.rtdd:flag_red_orange.name=红橙旗子(正向) +tile.rtdd:flag_red_orange.name=正向红橙旗子 tile.rtdd:roastedmushrooms_1.name=烤香菇串(半熟) itemGroup.name.tangguo_01_basic=基础工具 itemGroup.name.tangguo_02_ingredients=食材汤锅 diff --git a/tuilun/配方整理汇总.txt b/tuilun/配方整理汇总.txt index 3e8a3ea..bcbad13 100644 --- a/tuilun/配方整理汇总.txt +++ b/tuilun/配方整理汇总.txt @@ -415,9 +415,9 @@ todo 补充 木棍 木棍 木棍 【空】 木棍 【空】 ● 梯子(b_57)【有序】 - 木棍 【空】 木棍 - 木棍 【空】 木棍 - 木棍 木棍 木棍 + 木棍 支杆 木棍 + 木棍 支杆 木棍 + 木棍 支杆 木棍 ● 木尖桩(b_215)【有序】 【设计】木尖桩(b_215)【有序】 木棍 【空】 木棍