From 104603fd64771435cac871e6d2608830a06239ad Mon Sep 17 00:00:00 2001 From: wenhe <1046926120@qq.com> Date: Thu, 24 Sep 2026 12:53:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=BB=E4=BA=A1=20=E7=94=9F=E6=88=90=20?= =?UTF-8?q?=E9=BB=84=E8=B1=86=E8=8E=B7=E5=8F=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiangyemod/service/FeatureDispatcher.py | 47 ++- .../xiangyemod/shicai/ShicaiData.py | 10 + .../shicai/service/ShicaiService.py | 27 ++ .../service/DeadmobGeneratorService.py | 191 +++++++++ tuilun/全部功能做了什么.txt | 18 + tuilun/配方整理汇总.txt | 363 ++++++++++++++++++ 6 files changed, 654 insertions(+), 2 deletions(-) create mode 100644 behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/siwangshengwu/service/DeadmobGeneratorService.py create mode 100644 tuilun/配方整理汇总.txt diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py index 9273ae5..0d51674 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/service/FeatureDispatcher.py @@ -44,6 +44,10 @@ from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem from ...BlueFoxTools.ToolsConfig import LevelId from ...BlueFoxTools.ModConfig import MOD_NAME +# ---- 死亡生物·生成引擎: 玩家杀猪/牛/羊/鱿鱼/村民 -> 尸体方块 ---- +# 它是"普通逻辑类"(自己不监听), 由本分发器实例化并把 ServerEntityDieEvent 转给它。 +from ..siwangshengwu.service.DeadmobGeneratorService import DeadmobGeneratorService + # ---- 汤锅盛出自定义事件名(与客户端 ClientFeatureDispatcher TAKEOUT_EVENT 一致) ---- TAKEOUT_EVENT = "TakeoutRequest" @@ -112,6 +116,7 @@ class FeatureDispatcher(BlueFoxServerSystem): timerSet = set() tryUseOwner = {} # 物品名 -> 服务: 手持"直接吃"物品(长按使用)路由 tryUseSet = set() + grassDropOwners = [] # 破坏"草/杂草"时概率掉食材(如黄豆)的服务列表; OnDestroy 逐个尝试 # ---- 拆方块掉落映射: 方块名 → 掉落对应的原版生食材 ---- # 玩家左键破坏这些"放置的半成品/死鱼"方块时, 取消默认掉落, 改为掉对应的原版生食材 @@ -166,6 +171,15 @@ class FeatureDispatcher(BlueFoxServerSystem): cls.tryUseOwner[item] = service cls.tryUseSet.add(item) + @classmethod + def registerGrassDrop(cls, service): + """ + 破坏草/杂草掉食材(如黄豆)的服务初始化时调用:把自己挂进 grassDropOwners。 + OnDestroy 遇到草/杂草方块会逐个调用这些服务的 handleGrassDrop(args)。 + """ + if service not in cls.grassDropOwners: + cls.grassDropOwners.append(service) + @classmethod def startTimerFor(cls, blockName, dim, pos, playerId=None): """ @@ -190,6 +204,7 @@ class FeatureDispatcher(BlueFoxServerSystem): super(FeatureDispatcher, self).__init__(namespace, systemName) print "===== FeatureDispatcher init =====" self._cancelItemUse = {} # 将要取消下一次物品使用的玩家ID集合(防止喝药水等) + self._deadmobGen = DeadmobGeneratorService() # 死亡生物·生成引擎(杀猪牛羊等->尸体方块) self.ListenEvent() def Destroy(self): @@ -202,15 +217,19 @@ class FeatureDispatcher(BlueFoxServerSystem): def ListenEvent(self): """ - 注册六个事件: + 注册七个事件: 1. ServerBlockUseEvent —— 玩家右键方块(所有功能的右键转换入口) 2. ServerItemUseOnEvent —— 手持物品右键方块表面(如放置生鸡肉) 3. ServerItemTryUseEvent —— 玩家尝试使用物品(拦截喝药水/吃食物等默认行为) 4. ServerBlockEntityTickEvent —— 计时方块每tick触发(烤制/饲料变空等,持久化计时) - 5. ServerPlayerTryDestroyBlockEvent —— 玩家拆方块(放置的死鱼/生鸡肉掉回原版生食材) + 5. ServerPlayerTryDestroyBlockEvent —— 玩家拆方块(放置的死鱼/生鸡肉掉回原版生食材; + 以及草/杂草 概率掉黄豆→ 转给 shicai 的 handleGrassDrop) 6. ItemUseOnAfterServerEvent —— 放置方块/生态后触发(携带放置者 entityId)。 用于"创造模式直接放生态"也能拿到是谁放的 → 记录到计时源方块 rtdd_tp, 让计时源服务能"谁放提示发给谁"(如烧烤直接放烤乳猪也提示营火)。 + 7. MobDieEvent —— 生物死亡(玩家杀死猪/牛/羊/鱿鱼/村民 → + 转给 _deadmobGen 生成尸体方块)。注意: 网易该 SDK 里死亡事件叫 MobDieEvent + (参数 id=死亡实体, attacker=击杀者), 不是 ServerEntityDieEvent。 """ self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), @@ -230,6 +249,9 @@ class FeatureDispatcher(BlueFoxServerSystem): self.ListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), "ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter) + self.ListenForEvent(serverApi.GetEngineNamespace(), + serverApi.GetEngineSystemName(), + "MobDieEvent", self, self.OnEntityDie) # 7. TakeoutRequest —— 客户端拦截(碗/盘,汤锅/炒锅/油锅成品)放置预览后, 显式请求服务端盛出。 # 客户端系统 ClientFeatureDispatcher 用 NotifyToServer(TAKEOUT_EVENT) 发送, # 服务端以 MOD_NAME + 客户端系统名 监听该自定义事件。 @@ -268,6 +290,9 @@ class FeatureDispatcher(BlueFoxServerSystem): self.UnListenForEvent(serverApi.GetEngineNamespace(), serverApi.GetEngineSystemName(), "ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter) + self.UnListenForEvent(serverApi.GetEngineNamespace(), + serverApi.GetEngineSystemName(), + "MobDieEvent", self, self.OnEntityDie) self.UnListenForEvent(MOD_NAME, "ClientFeatureDispatcher", TAKEOUT_EVENT, self, self.OnTakeoutRequest) self.UnListenForEvent(MOD_NAME, "ClientFeatureDispatcher", @@ -630,6 +655,17 @@ class FeatureDispatcher(BlueFoxServerSystem): # 主入口5:玩家拆方块 → 放置的死鱼/生鸡肉掉回原版生食材 # ============================================================================ + def OnEntityDie(self, args): + """ + 玩家杀死生物时触发(ServerEntityDieEvent)。 + 转给死亡生物·生成引擎: 若击杀者是玩家且被杀是 猪/牛/羊/鱿鱼/村民, + 在死亡位置生成对应尸体方块。 + """ + try: + self._deadmobGen.OnEntityDie(args) + except Exception as e: + print "[FD-OnEntityDie-ERR]", e + def OnDestroy(self, args): """ 玩家拆方块时触发。 @@ -642,6 +678,13 @@ class FeatureDispatcher(BlueFoxServerSystem): blockName = args.get("fullName") or args.get("blockName") args["blockName"] = blockName # 统一成 blockName 字段, 服务内部直接用 + # 0. 草/杂草 概率掉食材(黄豆): 逐个尝试挂了 handleGrassDrop 的服务。 + # 如 shicai: 打草概率掉黄豆, 不取消破坏本身。 + if self.grassDropOwners: + for _s in self.grassDropOwners: + if hasattr(_s, "handleGrassDrop") and _s.handleGrassDrop(args): + return + # 1. 优先: 归属的右键服务实现了 handleDestroy → 交给服务处理(逐个 fallback) services = self.blockOwnerAll.get(blockName) if services: diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/ShicaiData.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/ShicaiData.py index 3334475..ac022c1 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/ShicaiData.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/ShicaiData.py @@ -107,4 +107,14 @@ DESTROY_DROP = { "rtdd:cutscallions_2": "rtdd:scallions", "rtdd:cutscallions_3": "rtdd:scallions", "rtdd:cutscallions_4": "rtdd:scallions", +} + +# ---- 打碎草/杂草 概率获得黄豆(和黄原版打草掉小麦种子一样, ~14%) ---- +# 黄豆物品与石磨(CHUJU)共用同一物品 rtndd:soybean +SOYBEAN_ITEM = "rtdd:soybean" # 黄豆(与石磨同物品, 见 ChujuData) +GRASS_DROP_CHANCE = 0.15 # 打草掉黄豆概率(参照原版小麦种子) +GRASS_BLOCKS = { # 草/杂草方块(网易 tallgrass 含 aux 变体) + "minecraft:tallgrass", + "minecraft:short_grass", + "minecraft:double_plant", } \ No newline at end of file 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 db0ad61..5e62826 100644 --- a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/service/ShicaiService.py +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/shicai/service/ShicaiService.py @@ -21,6 +21,7 @@ ================================================================================ """ import time +import random import mod.server.extraServerApi as serverApi # ---- 网易API基础对象 ---- @@ -36,6 +37,7 @@ from ..ShicaiData import ( CLEAVER_ITEM, CHOP_CHAINS, GARLIC_BLOCK, GARLIC_CHOP_COUNT, GARLIC_DROP, FLOUR_BLOCK, COATING_RULES, DESTROY_DROP, MEAT_PRESS_RULES, + SOYBEAN_ITEM, GRASS_DROP_CHANCE, GRASS_BLOCKS, ) # ---- 统一分发器 ---- @@ -87,6 +89,8 @@ class ShicaiService(BlueFoxServerSystem): # ---- 注册到统一分发器 ---- FeatureDispatcher.register(self) + # 打碎草掉黄豆: 把本服务的草掉落逻辑挂到分发器的破坏方块路由上 + FeatureDispatcher.registerGrassDrop(self) # ============================================================================ # 一、给 FeatureDispatcher 的接口 @@ -161,6 +165,29 @@ class ShicaiService(BlueFoxServerSystem): pass return True + def handleGrassDrop(self, args): + """由 FeatureDispatcher 破坏方块路由调用的"打草掉黄豆"。 + 被破坏方块是草/杂草时, 按 GRASS_DROP_CHANCE 概率掉 1 个黄豆掉落物。 + 只产生掉落, 不取消破坏本身、不设 skip, 原版打草行为保持不变。 + 返回 True=已处理(是草); False=不属本功能(非草)。""" + blockName = args.get("fullName") or args.get("blockName") + if not blockName or blockName not in GRASS_BLOCKS: + return False + playerId = args.get("playerId") + if not playerId: + return True + # 概率掉落黄豆 + if random.random() <= GRASS_DROP_CHANCE: + x, y, z = args.get("x"), args.get("y"), args.get("z") + dim = comp.CreateDimension(playerId).GetEntityDimensionId() + try: + self.CreateEngineItemEntity( + {"itemName": SOYBEAN_ITEM, "count": 1, "auxValue": 0}, + dim, (x, y + 0.5, z)) + except Exception: + pass + return True + def handleBlockUse(self, args): """由 FeatureDispatcher 转发的右键方块入口""" blockName = args.get("blockName") diff --git a/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/siwangshengwu/service/DeadmobGeneratorService.py b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/siwangshengwu/service/DeadmobGeneratorService.py new file mode 100644 index 0000000..308787c --- /dev/null +++ b/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/siwangshengwu/service/DeadmobGeneratorService.py @@ -0,0 +1,191 @@ +# -*- coding: utf-8 -*- +""" +================================================================================ +死亡生物·生成引擎(服务端逻辑类) +================================================================================ +功能: + 玩家杀死对应生物(牛/猪/羊/鱿鱼/村民)后, 在该生物死亡位置附近生成对应 + 死亡方块(尸体), 供其后的"挂肉钩挂放/切肉"体系使用。 + +【这个类为什么是"普通类"、不继承 BlueFoxServerSystem、也不监听事件】 + 全模组只有 FeatureDispatcher 监听游戏事件(架构约定), 本类不监听任何东西。 + 由于此前本类继承 BlueFoxServerSystem 想靠框架自动注册监听, 但新类未被打进 + 运行环境 -> 一直没被实例化, 日志里连 init 都没有。现在改为: + - 本类只是"逻辑处理类": __init__ 不需要 namespace/systemName, 方法用模块级 + comp / LevelId 直接工作。 + - 真正的 ServerEntityDieEvent 监听在 FeatureDispatcher, 由它实例化本类并 + 把事件转发给本类的 OnEntityDie。 + +【黄豆打草掉黄豆】 + 已移回"乡野食材"(shicai): 常量在 ShicaiData, 掉落方法在 ShicaiService, + 由 FeatureDispatcher 的破坏方块路由调用。本类不再包含黄豆逻辑。 + +【死亡方块清单】 + 死亡方块: 牛=rtdd:dead_cow, 猪=rtdd:dead_pig, 羊=rtdd:dead_sheep, + 鱿鱼=rtdd:deadsquida, 村民=rtdd:dead_villager + 对应实体类型(minecraft EntityType 枚举名): Cow/Pig/Sheep/Squid/Villager +================================================================================ +""" +import mod.server.extraServerApi as serverApi + +# ---- 网易API基础对象 ---- +comp = serverApi.GetEngineCompFactory() # 组件工厂 + +# ---- 只有方块信息组件用 LevelId(查询全维方块) ---- +from ....BlueFoxTools.ToolsConfig import LevelId + +# ---- 尸体生成延迟(秒): 死亡 1.5 秒后才生成尸体方块, 不会刚死瞬间就出现 ---- +GEN_DELAY = 1.5 + + +class DeadmobGeneratorService(object): + """ + 死亡生物·生成引擎(逻辑类, 由 FeatureDispatcher 实例化并调用) + """ + + def __init__(self): + print "===== DeadmobGeneratorService 逻辑类已挂载到 FeatureDispatcher =====" + + # ============================================================================ + # 一、玩家杀死生物 → 生成死亡方块(由 FeatureDispatcher 的 + # MobDieEvent 监听转发到这里) + # ============================================================================ + + def OnEntityDie(self, args): + """ + 玩家杀死对应生物时触发(网易死亡事件 MobDieEvent)。args: + id 死亡实体 + attacker 伤害来源(击杀者)实体(近战=玩家; 远程=玩家射出的抛射物) + 仅当击杀者是玩家、且死亡生物属于牛/猪/羊/鱿鱼/村民时, 在死亡位置延迟生成尸体。 + """ + try: + killedId = args.get("id") or args.get("entityId") + attackerId = args.get("attacker") or args.get("attackedByEntId") + if not killedId or not attackerId: + return + # 解析"由玩家击杀": 近战 attacker 就是玩家; 远程 attacker 是抛射物, 取其发射者 + if not self._resolvePlayerAttacker(attackerId): + return + # 命中"被玩家击杀": 打印实际类型串与映射结果, 便于确认事件与类型判断是否命中 + blockName = self._mobTypeToBlock(killedId) + print "[DeadmobGen-Attack] killedType=%s -> block=%s" % ( + self._mobTypeStr(killedId), blockName) + if not blockName: + return + # 死亡位置: 取实体脚下坐标(死亡时实体仍在场) + pos = self._getFootPos(killedId) + if not pos: + return + px, py, pz = (int(pos[0]), int(pos[1]), int(pos[2])) + dim = self._getDim(killedId) + # 该格若非空气则垫高找到可放格, 避免覆盖已存在的方块(如草/其他方块) + target = (px, py, pz) + if not self._isPlaceable(target, dim): + for dy in range(1, 4): + candidate = (px, py + dy, pz) + if self._isAir(candidate, dim): + target = candidate + break + else: + return # 周围都放不下 + # 延迟生成尸体方块: 死亡后约 1.5 秒才出现(不是刚死瞬间) + comp.CreateGame(LevelId).AddTimer( + GEN_DELAY, self._placeBlockDelayed, target, blockName, dim) + except Exception as e: + print "[DeadmobGen-ERR]", e + + def _resolvePlayerAttacker(self, attackerId): + """判断击杀者是否玩家(近战直接是玩家; 远程是玩家射出的抛射物)。 + 返回 True 表示由玩家击杀。""" + if not attackerId: + return False + if self._isPlayer(attackerId): + return True + # 远程: attacker 是抛射物(箭等), 取发射者, 发射者是玩家则算玩家击杀 + try: + owner = comp.CreateBulletAttributes(attackerId).GetSourceEntityId() + return bool(owner) and self._isPlayer(owner) + except Exception: + return False + + def _placeBlockDelayed(self, target, blockName, dim): + """AddTimer 到点后真正放置尸体方块""" + self._setBlock(target, blockName, dim) + print "[DeadmobGen]", blockName, "at", target + + def _mobTypeStr(self, entityId): + """取实体类型字符串(如 minecraft:pig), 小写; 取不到返回空串""" + try: + return (comp.CreateEngineType(entityId).GetEngineTypeStr() or "").lower() + except Exception: + return "" + + def _mobTypeToBlock(self, entityId): + """返回该实体对应的死亡方块名; 非目标生物返回 None。 + 用 GetEngineTypeStr() 拿类型字符串精确匹配(项目已有用法见 EventFilter), + 不使用 EntityType 位掩码(不同版本的枚举/Squid/Villager 存在性不稳)。""" + return { + "minecraft:pig": "rtdd:dead_pig", + "minecraft:cow": "rtdd:dead_cow", + "minecraft:sheep": "rtdd:dead_sheep", + "minecraft:squid": "rtdd:deadsquida", + "minecraft:villager": "rtdd:dead_villager", + "minecraft:villager_v2": "rtdd:dead_villager", + }.get(self._mobTypeStr(entityId)) + + # ============================================================================ + # 二、工具方法 + # ============================================================================ + + def _isPlayer(self, entityId): + try: + ET = serverApi.GetMinecraftEnum().EntityType + v = comp.CreateEngineType(entityId).GetEngineType() + return v & ET.Player == ET.Player + except Exception: + return False + + def _getFootPos(self, entityId): + try: + return comp.CreatePos(entityId).GetFootPos() + except Exception: + return None + + def _getDim(self, entityId): + try: + return comp.CreateDimension(entityId).GetEntityDimensionId() + except Exception: + return 0 + + def _isAir(self, pos, dim): + try: + b = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim) + return b is None or b.get("name") == "minecraft:air" + except Exception: + return True + + def _isPlaceable(self, pos, dim): + """目标格要么是空气、要么是可通过的草/花等非实体方块(可直接替换)""" + try: + b = comp.CreateBlockInfo(LevelId).GetBlockNew(pos, dim) + if not b: + return True + name = b.get("name", "minecraft:air") + if name == "minecraft:air": + return True + if name in ("minecraft:tallgrass", "minecraft:short_grass", + "minecraft:red_flower", "minecraft:yellow_flower", + "minecraft:double_plant"): + return True + return False + except Exception: + return True + + def _setBlock(self, pos, blockName, dim): + """放置死亡方块, aux 强制 0""" + try: + comp.CreateBlockInfo(LevelId).SetBlockNew( + pos, blockDict={"name": blockName, "aux": 0}, + oldBlockHandling=0, dimensionId=dim) + except Exception: + pass \ No newline at end of file diff --git a/tuilun/全部功能做了什么.txt b/tuilun/全部功能做了什么.txt index 521d3d1..57ba918 100644 --- a/tuilun/全部功能做了什么.txt +++ b/tuilun/全部功能做了什么.txt @@ -1079,3 +1079,21 @@ FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher) cancel 掉投掷动画; 窗口过后放行, 对地扔蛋正常。不设全局取消(会破坏对地投掷, 已弃)。 时长 0.2s, 不卡翻炒(0.3s 间隔)。 [已修] +######################################## +【死亡生物·生成引擎】(2026-09-24) +######################################## +新增 死亡生物包 下新文件 DeadmobGeneratorService.py (在 modMain 注册), 两个功能: +一、玩家杀死生物生成死亡方块 +- 监听 ServerEntityDieEvent, 判断击杀者是否为玩家(attackedByEntId 判断 Player)。 +- 死亡生物为 牛/猪/羊/鱿鱼/村民 时, 在死亡位置附近生成对应死亡方块: + 牛=dead_cow, 猪=dead_pig, 羊=dead_sheep, 鱿鱼=deadsquida, 村民=dead_villager +- 该格被占则向上寻 1~3 格找空气放; aux 强制 0。 +- 实体类型判定: 用 comp.CreateEngineType(entId).GetEngineType() 与 + serverApi.GetMinecraftEnum().EntityType 枚举比对(Cow/Pig/Sheep/Squid/Villager)。 +二、打碎草概率获得黄豆(参照原版打草掉小麦种子) +- 监听 ServerPlayerTryDestroyBlockEvent, 被破坏方块为 minecraft:tallgrass / + short_grass / double_plant 时, 以 15% 概率生成 1 个 黄豆(rtdd:soybean) 掉落物。 +- 不取消破坏本身(只额外掉落黄豆, 不动默认破坏)。 +【待验证】网易事件参数名(entityId/attackedByEntId)、实体类型枚举名在不同版本可能不同, + 需进游戏验证; 若类型判定不准, 改用实体类型字符串接口再调。 + diff --git a/tuilun/配方整理汇总.txt b/tuilun/配方整理汇总.txt new file mode 100644 index 0000000..6e14cd8 --- /dev/null +++ b/tuilun/配方整理汇总.txt @@ -0,0 +1,363 @@ +======================================================================== +乡野模组 - 自定义合成配方汇总(含九宫格摆法) +(netease_recipes 工作台配方,严格按分类组织) +======================================================================== +【图例】 + 撑=支撑杆(support_rod) 板条=木板条(barwood) 木板=木板(planks任意) + 板阶=木头台阶(wooden_slabs) 棍=木棍(stick) 铁粒=铁粒(iron_nugget) + 铁=铁锭 煤=煤炭 石=石头 麦=小麦 竹=竹子 线=线(string) + · = 此格留空 + +【排布说明】 + - 每个有序配方(recipe_shaped)下方画 3×3 九宫格(第一行为第1列~第3列), + 按该配方 JSON 的 pattern 实际摆放,· 表示留空。 + - 【无序】(recipe_shapeless) 配方的材料任意摆满即可,不画格子。 + - (x N)= 一次合成产出 N 个。 + +######################################################################## +一、乡野食材 (xy_ingredients) +######################################################################## +【食材堆 - 合成】(9 个对应食材 -> 堆) +- 苹果堆(apple_pile)【有序】 + 苹果 苹果 苹果 + 苹果 苹果 苹果 + 苹果 苹果 苹果 + +- 面包堆(bread_pile) / 胡萝卜堆 / 鳕鱼堆 / 鸡蛋堆 / 土豆堆 / 鲑鱼堆:同上,9 满格各自食材 +- 桃子堆(peachpile_0) / 橙子堆(orangepile_0): + 桃/橙 桃/橙 桃/橙 + 桃/橙 桃/橙 桃/橙 + 桃/橙 桃/橙 桃/橙 + +【食材堆 - 分解】(堆放工作台 -> 9 个食材)【有序 · 单格】 + (苹果堆/面包堆/胡萝卜堆/鳕鱼堆/鸡蛋堆/土豆堆/鲑鱼堆/桃子堆/橙子堆) + 堆块 · · + · · · + · · · + +【食材堆 - 8 取用】(堆 -> 8 个食材)【无序】苹果堆/面包堆/胡萝卜堆/鳕鱼堆/土豆堆/鲑鱼堆 + +【锭堆】(6 个对应锭 -> 堆)【有序】铁锭堆(ingotpile)/金锭堆/铜锭堆 + · · 铁 + · 铁 铁 + 铁 铁 铁 + +【锭堆分解】(堆 -> 6 锭)【有序 · 单格】 + 堆 · · + · · · + · · · + +【串】 +- 大蒜串(garlicskewers)【有序】 + 大 大 大 + 大 支杆 大 + 大 支杆 大 + (支杆=b_34) +- 辣椒串(chiliskewer)【有序】(辣椒=pepper) + 椒 椒 椒 + 椒 支杆 椒 + 椒 支杆 椒 + +【骨】 +- 骨头(minecraft:bone)【有序 · 单格】 + 牛头骨 · · + · · · + · · · + +######################################################################## +二、乡野自然 (xy_natural) +######################################################################## +- 柴火堆_1(firewood) x9【有序】 + 木 木 木 + 木 木 木 + 木 木 木 + (木=任意原版木头 logs) + +- 柴火堆_2(firewood_2) x9【有序】 + · · 木 + · 木 木 + 木 木 木 + +- 木条(b_15) x9 = 柴火堆_1 x1【无序】(任意摆放) +- 竹栏(bamboomeshfence)【有序】 + 竹 竹 竹 + 竹 竹 竹 + +######################################################################## +三、厨具 (xy_kitchenware) +######################################################################## +- 搅拌器(beater)【有序】 + 板条 棍 板条 + · 板条 · + · · · + +- 丸子机(meatballmaker_0)【有序】 + 撑 铁 铁 + +- 擀面杖(rollingpin) x4【有序】 + 撑 木板 + +- 锅铲(spatula)【有序】 + · · 铁 + · 撑 · + 撑 · · + +- 蒸笼(steamer)【有序】 + 竹 竹 竹 + 木板 木板 木板 + +- 石磨(stonemill)【有序】 + 石 · · + 石 撑 · + 石 · · + +- 盘子(plate_0) x6【有序】 + 木板 板阶 木板 + +- 盘子堆(platepile)【有序】(9 盘子满格) + 盘 盘 盘 + 盘 盘 盘 + 盘 盘 盘 + +- 盘子(plate_0) = 盘子堆 x1【有序 · 单格】 + 盘堆 · · + · · · + · · · + +- 玻璃罐(medicinetank)【有序】 + 木板 + 玻璃 + +- 马克杯(mug)【有序】 + 木板 铁粒 + 木板 · · + +- 支撑杆(support_rod) 配方1【有序】(3 木棍) + 棍 棍 棍 +- 支撑杆(support_rod) 配方2【有序】(6 板条) + 板条 板条 + 板条 板条 + 板条 板条 +- 支撑杆(support_rod) x2 配方3【有序】(3 板条) + 板条 板条 板条 + +######################################################################## +四、动物养殖 (xy_animal) +######################################################################## +- 鸡窝(chickencoop_0) x3【有序】 + 麦 · 麦 + · 麦 · +- 鸡饲料盆(chickenmanger_0)【有序 · 单格】 + 板条 · · +- 饲料槽(manger_0)【有序】 + 板条 · 板条 + 板阶 板条 板阶 + +######################################################################## +五、烧烤 (xy_barbecue) +######################################################################## +- 烧烤架(barbecuegrill_0) 配方1【有序】 + 铁 铁粒 铁 + 铁粒 煤 铁粒 +- 烧烤架(barbecuegrill_0) 配方2【有序】 + 铁粒 铁栅栏 铁粒 + 铁粒 煤 铁粒 +- 烤香菇串(roastedmushrooms_0)【无序】:棕蘑菇 x5 + 木棍 x1 + +######################################################################## +六、汤锅 (xy_tangguo) +######################################################################## +- 汤锅(stewedsoup)【有序】 + 砖 · 砖 + 铁 · 铁 + 黑 铁 黑 + (黑=黑色染料 black_dye) + +######################################################################## +七、炒锅 (xy_chaoguo) +######################################################################## +- 炒锅(wok)【有序】 + · 铁 · + 铁 煤 铁 + · 铁 · + +######################################################################## +八、油锅 (xy_youguo) +######################################################################## +- 油锅(oilpot_0)【有序】 + 铁粒 铁栅栏 铁粒 + 铁 黑 铁 + (黑=黑色染料) + +######################################################################## +九、乡野饮料 (xy_drink) +######################################################################## +- 榨汁机(juicer)【有序】 + · 铁粒 · + 板条 铁 板条 + 木板 石 木板 + +- 冰棍盒(icelollybox_1)【有序】 + 板条 棍 板条 + 板阶 板条 板阶 + +- 炒冰盒(frytheicebox)【有序】 + 板条 板阶 板条 + 板阶 板条 板阶 + +######################################################################## +十、死亡生物 (xy_deadmob) +######################################################################## +(挂肉钩/尸体等为右键方块转换,无工作台配方;牛头骨→骨见 乡野食材) + +######################################################################## +十一、家具家私 (xy_furniture) +######################################################################## +- 箭桶(arrowbarrel_0)【有序 · 单格】 + 云杉活板门 · · +- 书柜(bookcase)【有序】 + 箱子 木板 +- 碗柜(cupboard_0)【有序】 + 板条 板条 + 板条 板条 + 木板 木板 +- 水槽(flume_0)【有序】 + · 铁粒 · + 铁 铁 铁 + 砖 砖 砖 +- 厨具架(kitchenwarerack) 配方1【有序】 + 板条 板条 板条 + 板条 · 板条 +- 厨具架(kitchenwarerack) 配方2【有序】 + 板条 撑 板条 +- 药水架(lotion_0) x4【有序】 + · · 木 + · 板条 木 + 木 木 木 + (木=任意原版木头 logs) +- 置物架(shelving)【有序】 + 云杉活板门 · + · 云杉活板门 +- 调料架(seasoningrack)【有序】 + 撑 板条 撑 +- 垃圾桶(storage_buckets)【有序】 + 木板 板阶 木板 + 木板 · 木板 + 木板 木板 木板 +- 桌凳(stool)【有序】 + 板条 板条 + 棍 棍 +- 盘子架(trayracks_1)【有序】 + 板条 板条 + 木板 木板 + +######################################################################## +十二、市场贸易 (xy_market) +######################################################################## +- 条箱(woodenbox_0)【有序】 + 板条 · 板条 + 板条 板条 板条 +- 货桶(fishbucket_0)【有序】 + 板条 · 板条 + 板条 · 板条 + 板条 板条 板条 +- 售卖盒(sellingboxes)【有序】 + 板条 板条 板条 + 板条 · 板条 + 板条 · 板条 +- 餐牌(menus) x4【有序】 + 板条 + 板条 +- 悬赏纸(bountypaper) x2【无序】:纸 x1 + +######################################################################## +十三、乡野食物 (xy_food) +######################################################################## +(成品盘等为方块右键转换,无工作台配方) + +######################################################################## +十四、方块工具 (xy_blocktools) +######################################################################## +- 渔网(fishingnet)【有序】 + · 线 · + 线 线 线 + · 线 · + +######################################################################## +十五、机械装置 (xy_machine) +######################################################################## +- 车(cart)【有序】 + 板条 · · + 板条 板条 板条 + 轮 · 轮 + (轮=车轮 wheel) +- 风车叶(fanblades)【有序】 + 板条 羊毛 板条 + 羊毛 撑 羊毛 + 板条 羊毛 板条 +- 梯子(ladder)【有序】 + 撑 棍 撑 + 撑 棍 撑 + 撑 棍 撑 +- 支撑柱(prop_up) x2【有序】 + 撑 · 撑 + · 撑 · + 撑 · 撑 +- 车轮(wheel)【有序】 + · 棍 · + 棍 棍 棍 + · 棍 · +- 纺纱机(spinner)【有序】 + · · 轮 + 撑 线 线 + 撑 · 撑 + +######################################################################## +十六、铸造·晾晒·观赏用具 +######################################################################## +- 铸造台(casting_table)【有序】 + 铁粒 铁粒 + 高炉 砖 +- 晾干架(dryingrack) x2【有序】 + 撑 棍 撑 + 撑 棍 撑 +- 鱼缸(fishtank)【有序】 + 玻璃 石头 + +######################################################################## +十七、布料·旗帜·阳伞·帐篷(装饰) +######################################################################## +【布料】(3 格一行)【有序】 + 对应色羊毛 白/中色羊毛 对应色羊毛 + - 蓝布(cloth_blue) = 淡蓝羊毛 + 白羊毛 + 淡蓝羊毛 + - 绿布(cloth_lime) = 绿色羊毛 + 黄绿羊毛 + 绿色羊毛 + - 紫布(cloth_purple) = 紫色羊毛 + 白羊毛 + 紫色羊毛 + - 红布(cloth_red) = 红色羊毛 + 白羊毛 + 红色羊毛 + - 黄布(cloth_yellow) = 黄色羊毛 + 白羊毛 + 黄色羊毛 + +【旗】(x4)【有序】 +- 旗(flag) + 撑 撑 撑 + 绿布 · 黄布 +- 斜纹蓝绿旗(flag_blue_lime_oblique) + 撑 · · + 蓝布 撑 · + · 绿布 撑 + +【阳伞】= 撑 + 对应布【有序】 + 撑 + 布 + (蓝阳伞=撑+蓝布 / 紫阳伞=撑+紫布 / 红阳伞=撑+红布 / 黄阳伞=撑+黄布 / 绿阳伞=撑+绿布) + +【帐篷】(tent) x8【有序】 + 羊毛 · 羊毛 + 板条 羊毛 · + 羊毛 · · + +======================================================================== +附注 +======================================================================== +- 上述均为合成台(crafting_table)配方,见 behavior_pack_v8jz0zSR/netecase_recipes/xy_*.json。 +- 【有序】= minecraft:recipe_shaped,按上方九宫格摆放; + 【无序】= minecraft:recipe_shapeless,材料对数即可。 +- 本文件只收录该目录下现有的工作台配方;方块右键转换类合成(汤锅/炒锅/油锅/面食等)不在此目录。 \ No newline at end of file