From 38f2ff2b332c9ef326faf0bd036cec9c6502715f Mon Sep 17 00:00:00 2001 From: wenhe <1046926120@qq.com> Date: Thu, 3 Sep 2026 17:30:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=9F=E7=89=88=E7=86=9F=E9=A3=9F=E7=89=A9?= =?UTF-8?q?=E5=93=81=E6=94=BE=E7=BD=AE=20(keyong)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiangyemod/yuanbanfangzhi/YuanbanData.py | 34 ++++++++++- .../yuanbanfangzhi/service/YuanbanService.py | 59 +++++++++++++++---- tuilun/{ => ok}/家具家私转化关系.txt | 0 tuilun/{ => ok}/药物系统转化关系.txt | 4 +- tuilun/乡野食物转化关系.txt | 29 +++++---- tuilun/全部功能做了什么.txt | 5 ++ tuilun/全部功能没做什么.txt | 13 ++++ 7 files changed, 117 insertions(+), 27 deletions(-) rename tuilun/{ => ok}/家具家私转化关系.txt (100%) rename tuilun/{ => ok}/药物系统转化关系.txt (92%) diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/YuanbanData.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/YuanbanData.py index b4a9f9c..7b8e53f 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/YuanbanData.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/YuanbanData.py @@ -3,24 +3,29 @@ ================================================================================ 原版放置分类转换规则数据 ================================================================================ -统一管理"手持原版物品右键方块表面 → 放置对应方块"的规则(ServerItemUseOnEvent)。 +统一管理"手持原版物品右键方块表面"的规则(ServerItemUseOnEvent)。 从各功能分类中剔除出来单独成目录, 避免散落在各处。 -当前规则: +【一、相邻空格放置】(ITEM_USE_ON_RULES) —— 手持原版物品右键任意方块表面, 在相邻空格放置方块 1) 原版生鸡肉(minecraft:chicken) → 生鸡肉(放置后) roastchickenplace_0 [烧烤用] 2) 原版生鲑鱼(minecraft:salmon) → 死鲑鱼 killfish_0 [死亡生物用] 3) 原版生鳕鱼(minecraft:cod) → 死鳕鱼 killcod_0 [死亡生物用] 4) minecraft:fish → 死鳕鱼 killcod_0 (网易端 ItemUseOn 事件对 生鳕鱼报的 itemName 是 minecraft:fish, 与 GetPlayerItem 的 minecraft:cod 不同) +【二、盘子转换】(PLATE_RULES) —— 手持原版食物右键 空盘子(rtdd:plate_0), + 盘子本身变为对应成品盘 (乡野食物·原版食物 分类, 与上面的相邻放置不同, 是替换被右键方块) + 字段说明: item: 手持的原版物品 + source: 被右键的方块(盘子转换用, 必须匹配才替换) target: 放置成的方块 consume: 消耗数量(默认1) - tip: 放置成功提示 + tip: 转换成功提示 ================================================================================ """ +# ---- 一、相邻空格放置 ---- ITEM_USE_ON_RULES = [ { "item": "minecraft:chicken", # 原版生鸡肉 @@ -49,3 +54,26 @@ ITEM_USE_ON_RULES = [ "tip": "§a已放置死鳕鱼", }, ] + +# ---- 二、盘子转换: 手持原版食物右键 空盘子(plate_0), 盘子变为对应成品盘 ---- +# 生鱼片(plate_17)可用 鳕鱼/鲑鱼/热带鱼 右键(含网易端鳕鱼报 minecraft:fish 的兼容) +PLATE_RULES = [ + {"item": "minecraft:pumpkin_pie", "source": "rtdd:plate_0", + "target": "rtdd:plate_16", "consume": 1, "tip": "§a南瓜派装盘了"}, + {"item": "minecraft:cod", "source": "rtdd:plate_0", + "target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"}, + {"item": "minecraft:salmon", "source": "rtdd:plate_0", + "target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"}, + {"item": "minecraft:tropical_fish", "source": "rtdd:plate_0", + "target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"}, + {"item": "minecraft:fish", "source": "rtdd:plate_0", + "target": "rtdd:plate_17", "consume": 1, "tip": "§a生鱼片装盘了"}, + {"item": "minecraft:melon_slice", "source": "rtdd:plate_0", + "target": "rtdd:plate_18", "consume": 1, "tip": "§a西瓜装盘了"}, + {"item": "minecraft:bread", "source": "rtdd:plate_0", + "target": "rtdd:plate_20", "consume": 1, "tip": "§a面包装盘了"}, + {"item": "minecraft:cookie", "source": "rtdd:plate_0", + "target": "rtdd:plate_21", "consume": 1, "tip": "§a曲奇装盘了"}, + {"item": "minecraft:cooked_chicken", "source": "rtdd:plate_0", + "target": "rtdd:plate_4", "consume": 1, "tip": "§a熟鸡肉装盘了"}, +] diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/service/YuanbanService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/service/YuanbanService.py index 0f0b88b..135d506 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/service/YuanbanService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/yuanbanfangzhi/service/YuanbanService.py @@ -36,7 +36,7 @@ from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem from ....BlueFoxTools.ToolsConfig import LevelId # ---- 只导入原版放置自己的数据库 ---- -from ..YuanbanData import ITEM_USE_ON_RULES +from ..YuanbanData import ITEM_USE_ON_RULES, PLATE_RULES # ---- 统一分发器 ---- from ...service.FeatureDispatcher import FeatureDispatcher @@ -73,6 +73,11 @@ class YuanbanService(BlueFoxServerSystem): for rule in ITEM_USE_ON_RULES: self.itemUseOnRecipes[rule["item"]] = rule + # ---- 构建盘子转换规则字典(手持原版食物右键空盘子 → 成品盘) ---- + self.plateRecipes = {} + for rule in PLATE_RULES: + self.plateRecipes[rule["item"]] = rule + # ---- 右键冷却表 ---- self.cooldown = {} @@ -88,25 +93,57 @@ class YuanbanService(BlueFoxServerSystem): return set() def getItemUseOnRules(self): - """返回"手持物品右键方块表面"的规则: {物品名: 规则dict}""" - return self.itemUseOnRecipes + """返回"手持物品右键方块表面"的规则: 相邻放置+盘子转换的物品名合集 + (分发器只按物品名路由到本类, 值随意)""" + rules = {} + for k in self.itemUseOnRecipes: + rules[k] = True + for k in self.plateRecipes: + rules[k] = True + return rules def handleItemUseOn(self, args): """ 由 FeatureDispatcher 转发的"手持物品右键方块表面"事件。 - 在方块表面放置对应方块(生鸡肉/死鲑鱼/死鳕鱼)。 + 两种模式: + 1. 盘子转换: 手持原版食物右键 空盘子(plate_0) → 盘子本身变为对应成品盘 + 2. 相邻空格放置: 手持原版生鸡肉/鲑鱼/鳕鱼右键任意方块表面 → 相邻空格放置对应方块 返回 True=已处理,False=当前组合无匹配规则。 """ itemName = args.get("itemName") # ServerItemUseOnEvent 的玩家键是 entityId,不是 playerId playerId = args.get("playerId") or args.get("entityId") - rule = self.itemUseOnRecipes.get(itemName) - if not rule: - return False - x, y, z = args.get("x"), args.get("y"), args.get("z") face = args.get("face", 1) dim = comp.CreateDimension(playerId).GetEntityDimensionId() + pos = (x, y, z) + + # ---- 优先: 盘子转换(右键的必须是空盘子) ---- + plateRule = self.plateRecipes.get(itemName) + if plateRule: + try: + cur = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim) + except Exception: + cur = None + if cur and cur.get("name") == plateRule.get("source"): + key = (dim, x, y, z) + if not self.checkCooldown(key, 0.5): + return True + itemDict = self.getCarriedItem(playerId) + if not itemDict: + return False + self.consumeItem(playerId, itemDict, plateRule.get("consume", 1)) + # 直接替换被右键的盘子方块 + self.replaceBlock(pos, dim, plateRule["target"], playerId) + if plateRule.get("tip"): + comp.CreateMsg(playerId).NotifyOneMessage(playerId, plateRule["tip"]) + return True + # 被右键的不是盘子 → 交给下面的相邻放置处理 + + # ---- 相邻空格放置 ---- + rule = self.itemUseOnRecipes.get(itemName) + if not rule: + return False # 计算被点方块表面相邻的目标格 off = FACE_OFFSET.get(face, (0, 1, 0)) @@ -144,8 +181,9 @@ class YuanbanService(BlueFoxServerSystem): def getCarriedItem(self, playerId): itemComp = comp.CreateItem(playerId) + # getUserData=True 必须传, 否则取不到 userData(消耗堆叠物品时保留) return itemComp.GetPlayerItem( - serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0) + serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True) # ============================================================================ # 三、工具方法:消耗物品 @@ -165,7 +203,8 @@ class YuanbanService(BlueFoxServerSystem): serverApi.GetMinecraftEnum().ItemPosType.CARRIED, {"itemName": itemDict["newItemName"], "count": itemDict["count"], - "auxValue": itemDict.get("newAuxValue", 0)}) + "auxValue": itemDict.get("newAuxValue", 0), + "userData": itemDict.get("userData", {})}) # ============================================================================ # 四、工具方法:替换方块 diff --git a/tuilun/家具家私转化关系.txt b/tuilun/ok/家具家私转化关系.txt similarity index 100% rename from tuilun/家具家私转化关系.txt rename to tuilun/ok/家具家私转化关系.txt diff --git a/tuilun/药物系统转化关系.txt b/tuilun/ok/药物系统转化关系.txt similarity index 92% rename from tuilun/药物系统转化关系.txt rename to tuilun/ok/药物系统转化关系.txt index fb9d86f..eb03bff 100644 --- a/tuilun/药物系统转化关系.txt +++ b/tuilun/ok/药物系统转化关系.txt @@ -39,9 +39,7 @@ ======================================== 二、药罐(制药) ======================================== -7. 玻璃罐(药罐) -> 药罐_1 -> 药罐_2 -> 药罐_3 -> 药罐_4 -转换条件:[手持 药材 右键 依次制药] -机制: 手持药材右键,消耗1个,逐级制药(药材与配方待确认) + ======================================== 三、其他静态方块 diff --git a/tuilun/乡野食物转化关系.txt b/tuilun/乡野食物转化关系.txt index dd7b5e4..0605cd3 100644 --- a/tuilun/乡野食物转化关系.txt +++ b/tuilun/乡野食物转化关系.txt @@ -3,21 +3,28 @@ ======================================== 说明: - 当前tab展示3个分组: 章鱼小丸子 / 原版食物 / 烤制·串烧 -- 另有 汤面、盖饭、炒锅成品 分组与炒锅/汤锅页共用(不在此tab重复展示) -- 本分类方块以"成品菜"为主,多为静态成品,无后续转换 +- 本分类方块以"成品菜"为主 +- 食用类转换(吃)由统一的"总食用功能"后续实现, 本分类只记录形态转换 +- 烤制·串烧分组的转换见 烧烤(xy_barbecue) 相关文档 ======================================== 一、章鱼小丸子 ======================================== -1. 章鱼小丸子(完整) -> 章鱼小丸子(半份) -转换条件:[右键 吃 进行转换] -机制: 点击右键,转换为半份的章鱼小丸子 (属于吃的东西,后续实现) +1. 章鱼小丸子(完整) plate_40 -> 章鱼小丸子(半份) plate_40a +转换条件:[右键 进行转换] 【待实现】 +机制: 右键点击, 转换为半份的章鱼小丸子 (属于吃的东西, 后续实现) ======================================== -二、原版食物(静态成品盘) +二、原版食物(成品盘) ======================================== -plate_16(南瓜派盘)、plate_17(生鱼片)、plate_18(西瓜盘)、plate_20(面包盘)、plate_21(曲奇盘)、plate_4(熟鸡肉盘) -以上均为静态成品,无转化关系 - -todo 转换: 拿原版对应食物 右键盘子 进行转换 - 生鱼片 拿 鳕鱼鲑鱼热带鱼右键都可以 +盘子(空) plate_0 -> 对应成品盘 【已实现】(由 xiangyemod/yuanbanfangzhi 实现) +转换条件:[手持 原版对应食物 右键盘子 进行转换, 消耗1个食物] +机制: 手持对应的原版食物右键空盘子, 消耗1个, 盘子变为对应成品盘 + (转换后为静态成品盘, 无取回/无逆向) +- 南瓜派盘 plate_16: 手持 原版南瓜派 minecraft:pumpkin_pie +- 生鱼片 plate_17: 手持 原版生鱼(鳕鱼 minecraft:cod / 鲑鱼 minecraft:salmon / + 热带鱼 minecraft:tropical_fish 右键都可以, 含网易端鳕鱼兼容) +- 西瓜盘 plate_18: 手持 原版西瓜片 minecraft:melon_slice +- 面包盘 plate_20: 手持 原版面包 minecraft:bread +- 曲奇盘 plate_21: 手持 原版曲奇 minecraft:cookie +- 熟鸡肉盘 plate_4: 手持 原版熟鸡肉 minecraft:cooked_chicken diff --git a/tuilun/全部功能做了什么.txt b/tuilun/全部功能做了什么.txt index efd5b31..b66674f 100644 --- a/tuilun/全部功能做了什么.txt +++ b/tuilun/全部功能做了什么.txt @@ -90,6 +90,11 @@ - 计时用绝对时间戳写入方块实体数据, 支持退出/重启后继续计时 [已实现] - 原版放置(手持原版生鸡肉/鲑鱼/鳕鱼右键方块表面放置对应方块)已拆到独立目录 xiangyemod/yuanbanfangzhi (YuanbanData/YuanbanService), 从烧烤/死亡生物中剔除 [已重构] +- 原版食物成品盘转换(乡野食物·原版食物): 手持原版食物右键 空盘子(rtdd:plate_0) → + 盘子本身变为对应成品盘, 消耗1个食物; 生鱼片(plate_17)可用 鳕鱼/鲑鱼/热带鱼 + (含网易端鳕鱼报 minecraft:fish 兼容) [已实现] + 南瓜派→plate_16 / 西瓜片→plate_18 / 面包→plate_20 / 曲奇→plate_21 / 熟鸡肉→plate_4 + (实现于 xiangyemod/yuanbanfangzhi/YuanbanData.py PLATE_RULES + YuanbanService, 替换模式) ######################################## diff --git a/tuilun/全部功能没做什么.txt b/tuilun/全部功能没做什么.txt index a0399b8..e2e863c 100644 --- a/tuilun/全部功能没做什么.txt +++ b/tuilun/全部功能没做什么.txt @@ -93,3 +93,16 @@ - 方块: b_35(双人床) - 设想: 床, 但是可以两个人一起睡 - 未做原因: 未实现 (家具家私转化关系.txt 静态段 todo 已标注) + + +######################################## +【乡野食物】(xy_food) +######################################## + +一、章鱼小丸子-完整转半份 +- 方块: plate_40(章鱼小丸子完整) -> plate_40a(章鱼小丸子半份) +- 设想: 右键点击, 完整转为半份 +- 未做原因: 属于吃的东西, 食用部分由统一的"总食用功能"后续实现 + (乡野食物转化关系.txt 一、章鱼小丸子 todo 已标注) + +(原版食物-成品盘转换 已实现于 xiangyemod/yuanbanfangzhi, 见 全部功能做了什么.txt)