Files
rtdd/tuilun/全部功能做了什么.txt
T
2026-09-04 11:59:53 +08:00

294 lines
19 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
========================================
全部功能 - 已实现功能记录
(汇总所有功能分类的"做了什么",按分类分节)
========================================
说明:
- 本文件汇总全部功能分类的已实现内容
- 每节对应一个功能分类(如 动物养殖 / 烧烤),后续新分类在此追加
- 各分类的详细转换流程见 tuilun 下对应的《XX转化关系.txt》
########################################
【动物养殖】(xy_animal)
########################################
一、鸡窝(产蛋) —— 低级机制
- 放蛋: 手持鸡蛋右键鸡窝逐级放置递增 (0蛋→1蛋→…→5蛋), 每次消耗1个鸡蛋,
提示 "鸡蛋已放入鸡窝 (N/5)" [已实现]
- 取蛋: 空手右键取走对应数量鸡蛋, 以掉落物形式获得, 回到0蛋形态,
提示 "取走了 N 个鸡蛋" (5/4/3/2/1蛋均可取) [已实现]
二、鸡饲料盆 (chickenmanger_0/1)
- 填充: 手持种子右键, 消耗16个种子 → 满, 提示 "鸡饲料已加满" [已实现]
- 计时变空: 满盆计时60秒 → 自动变空, 开始提示 "鸡饲料已加满,鸡正在进食…",
完成提示 "鸡饲料已吃完" [已实现]
三、饲料槽-小麦 (manger_0/3/2/1)
- 填充: 手持小麦右键, 消耗32个小麦 → 满, 提示 "小麦饲料已加满" [已实现]
- 计时逐级变空: 满→半量→少量→空, 每级计时60秒, 吃完提示 "小麦饲料已吃完" [已实现]
四、饲料槽-水 (manger_0/mangerwater)
- 加水: 手持水桶右键 → 水槽, 消耗水桶返还空桶, 提示 "已给饲料槽加水" [已实现]
五、饲料槽-胡萝卜 (manger_0/pigmanger_1/2)
- 填充: 手持胡萝卜右键, 消耗32个胡萝卜 → 满, 提示 "胡萝卜饲料已加满" [已实现]
- 计时逐级变空: 满→半量→空, 每级计时60秒, 吃完提示 "胡萝卜饲料已吃完" [已实现]
六、粪便 (feces_3/2/1)
- 清理: 空手右键逐级清理 (一坨→半坨→仅痕迹→消失), 提示 "清理了粪便" [已实现]
########################################
【烧烤】(xy_barbecue)
########################################
一、烧烤架 (barbecuegrill_0/1)
- 点火: 无火烧烤架_1 + 打火石 → 点燃烧烤架_2 (打火石不消耗) [已实现]
- 点火: 无火烧烤架_1 + 烈焰弹 → 点燃烧烤架_2 (消耗1个烈焰弹) [已实现]
- 灭火: 点燃烧烤架_2 + 水桶 → 无火烧烤架_1 (消耗水桶,返还空桶) [已实现]
二、烤串 (放烧烤架上,右键2次转换,不计时,需下方点燃烧烤炉)
- 牛肉串: beefkebabs_1(生) → beefkebabs_0(半熟) → beefkebabs_3(熟) [已实现]
- 羊肉串: lambkebabs_1(生) → lambkebabs_0(半熟) → lambkebabs_3(熟) [已实现]
- 烤蔬菜串: roasted_vegetables_0(生) → _1(半熟) → _3(熟) [已实现]
- 烤香菇串: roastedmushrooms_0(生) → _1(半熟) → _3(熟) [已实现]
- 失败提示: 下方不是点燃的烧烤炉 → "§c下方不是点燃的烧烤炉,无法翻烤!" [已实现]
三、上杆 (手持生食材右键 支杆b_34)
- 生鸡肉(放置后) roastchickenplace_0 → 烤鸡(上烤架_生) roastchicken_0 [已实现]
- 死猪 dead_pig → 烤乳猪(生) roastpig_0 [已实现]
- 鳕鱼 minecraft:cod → 烤鳕鱼(生) grilledcod_0 [已实现]
- 鲑鱼 minecraft:salmon → 烤鲑鱼(生) grilled_fish [已实现]
四、计时烤制 (支杆下方篝火 campfire,约60秒,右键激活 autoStart=False)
- 烤鸡: roastchicken_0(生) → roastchicken_1(熟) [已实现]
- 烤乳猪: roastpig_0(生) → roastpig_1(熟) [已实现]
- 烤鳕鱼: grilledcod_0(生) → grilledcod_1(熟) [已实现]
- 烤鲑鱼: grilled_fish(生) → grilled_salmon(熟) [已实现]
- 开始提示 "§e开始烤制烤X,约60秒…" / 完成提示 "§e烤X烤熟了!" [已实现]
- 下方无篝火: 拒绝开始 "§c支杆下方需要放一个篝火(营火)才能烤制!" [已实现]
- 烤制中拿走篝火: 暂停,篝火放回继续 (保持原时间戳) [已实现]
- 退出/重启游戏: 继续计时 (绝对时间戳写入方块实体数据持久化) [已实现]
五、取下 (空手右键烤熟方块,以掉落物形式获得整只)
- 烤鸡(熟) roastchicken_1 → b_34 + 掉落 烤鸡整只 roast_chickenplace_1,
提示 "§a取下了烤鸡(整只)" [已实现]
- 烤乳猪(熟) roastpig_1 → b_34 + 掉落 烤乳猪整只 roastpignew_1,
提示 "§a取下了烤乳猪(整只)" [已实现]
六、手持物品右键方块表面 (ServerItemUseOnEvent)
- 手持原版生鸡肉 minecraft:chicken 右键任意方块表面 → 生成 生鸡肉(放置后)
roastchickenplace_0, 消耗1个, 提示 "已放置生鸡肉,可右键支杆上杆烤制" [已实现]
########################################
【通用架构】
########################################
- 右键转换与计时转换已拆分为两个独立类 (XxxService / XxxTimerService), 解耦 [已实现]
- 事件由 FeatureDispatcher 统一监听路由 (blockOwner/itemUseOnOwner/timerOwner) [已实现]
- 右键服务通过 FeatureDispatcher.startTimerFor 把计时启动转发给计时服务 [已实现]
- 计时用绝对时间戳写入方块实体数据, 支持退出/重启后继续计时 [已实现]
- 原版放置(手持原版生鸡肉/鲑鱼/鳕鱼右键方块表面放置对应方块)已拆到独立目录
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, 替换模式)
########################################
【食材补齐】(2026-09-02 第二批)
########################################
- 大米(brownrice): 从Java版迁入, 归乡野食材/谷物·米面组, 用于生米锅/米饭/竹筒饭/蛋炒饭 [已迁移]
- 生面(noodles): 从Java版迁入, 归面食.甜食/面粉·面团组, 用于汤锅生面汤/炒锅意面 [已迁移]
- 牛肋(costillavacaes): 从Java版迁入, 归乡野食材/肉类·肉馅组, 用于胡萝卜牛排骨(菜名保留"牛排骨") [已迁移]
- 葱(scallions): 从Java版迁入, 归乡野食材/蔬菜·切配组, 用于炒锅加葱/葱花锅底 [已迁移]
- 香菜锅底 → 改名"葱花锅底"(食材用葱): Java版无香菜, 触发食材已从青菜改为葱 [已改]
########################################
【死亡生物】(xy_deadmob) 2026-09-02
########################################
一、挂肉钩-挂放 (手持尸体/原版鱼右键空钩 meathook, 消耗1)
- 死牛→整只牛(cow_0)、死猪→整只猪(pig_0)、死羊→整只羊(sheep) [已实现]
- 原版鲑鱼(salmon)→鲑鱼挂一条→两条(hang_meat_hooks_1/2) [已实现]
- 原版鳕鱼(cod)→鳕鱼挂一条→两条(meathookcod_1/2) [已实现]
二、挂肉钩-切肉 (手持 菜刀cleaver, 不可逆, 掉落物随机数量)
- 牛: 去头掉牛头骨1+原版牛肉4~5 → 去四肢掉牛腿肉4 → 去肉掉牛肋2~3+牛里脊2~3+牛肉4~5 → 空钩掉碎肉2~3+牛肉4~5 [已实现]
- 猪: 去皮掉五花肉2~3+生猪排4~5 → 去四肢掉猪蹄4 → 去肉掉猪肋排2~3+生猪排4~5 → 空钩掉碎肉2~3+生猪排4~5 [已实现]
- 羊: 去皮掉羊小排2~3+生羊肉4~5 → 去四肢掉羊腿4 → 去肉掉羊里脊2~3+生羊肉4~5 → 空钩掉碎肉2~3+生羊肉4~5 [已实现]
三、挂肉钩-取下退回 (切前空手右键, 掉落回尸体)
- 整只牛/猪/羊 → 空钩 + 掉落回 死牛/死猪/死羊 [已实现]
四、鱼晾干 (计时300秒, 挂上自动开始 autoStart=True)
- 鲑鱼挂一条→干一条、两条→干两条; 鳕鱼挂两条→干两条 [已实现]
五、取鱼干 (空手右键干钩, 掉落物)
- 干鲑鱼/干鳕鱼钩 → 掉落 鱼干(thedriedfish) [已实现]
六、死鱼/死鱿鱼切块 (手持菜刀)
- 死鲑鱼: 4刀每刀掉1份生鱼片, 共4份 → 消失 [已实现]
- 死鳕鱼: 3刀每刀掉1份生鱼片, 共3份 → 消失 [已实现]
- 死鱿鱼: 切须掉5~6个鱿鱼须 → 变死鱿鱼(切掉鱿鱼须) [已实现]
七、手持原版鱼右键方块表面放置死鱼 (ServerItemUseOnEvent)
- 原版生鲑鱼(salmon) 右键方块表面 → 在其表面放置 死鲑鱼(killfish_0), 消耗1条 [已实现]
- 原版鳕鱼(cod) 右键方块表面 → 在其表面放置 死鳕鱼(killcod_0), 消耗1条 [已实现]
- 注意: 网易端 ItemUseOn 事件对生鳕鱼报的 itemName 是 minecraft:fish, 已额外注册, 否则放置不了 [已实现]
- 被点方块是挂肉钩/挂鱼钩/尸体等死亡生物方块时跳过, 交还挂鱼逻辑 [已实现]
七之补、拆方块掉回原版生食材 (ServerPlayerTryDestroyBlockEvent)
- 破坏 死鲑鱼(killfish_0) → 掉落 原版生鲑鱼 1条 [已实现]
- 破坏 死鳕鱼(killcod_0) → 掉落 原版生鳕鱼 1条 [已实现]
- 破坏 生鸡肉(放置后 roastchickenplace_0) → 掉落 原版生鸡肉 1个 [已实现]
- 取消默认掉落, 不把方块本身掉出来
八、去皮额外掉落原版皮革
- 牛/猪/羊 去皮步骤额外掉落 原版皮革(minecraft:leather) 4~6个 [已实现]
【未做】尸体生成机制(玩家杀死生物生成尸体) 按txt标注暂时不搞
########################################
【手办】(xy_shouban) 2026-09-02
########################################
一、盲盒开盒 (空手右键 盲盒_未开 jewelrybox_0)
- 换为 盲盒_开过 jewelrybox_1, 随机开出 1 个手办(掉落物形式), 提示 "盲盒开出了XX!" [已实现]
- 开出范围: 猫手办_0(cat_0)、狐狸手办_0(fox_0)、赞助者手办_1~6(figurines~5) 共8种均等概率 [已实现]
- 注意: 只开猫/狐狸转换链【第一个】, cat_1~3、fox_1~3 无法从盲盒开出 [已实现]
二、猫/狐狸手办循环切换 (空手右键逐级切换)
- 猫: cat_0 → cat_1 → cat_2 → cat_3 → cat_0 (循环) [已实现]
- 狐狸: fox_0 → fox_1 → fox_2 → fox_3 → fox_0 (循环) [已实现]
- 说明: cat_1~3、fox_1~3 只能通过循环转换获得
三、静态手办 (无转换)
- 赞助者手办_1~6(figurines~5) 仅由盲盒开出, 无右键转换 [已实现]
########################################
【市场贸易】(xy_market) 2026-09-03
########################################
一、条箱 放入/取出 (woodenbox_0~7)
- 放入: 手持对应物品右键 空条箱 → 消耗32个 → 变为对应条箱(苹果/胡萝卜/土豆/桃子/橘子/鳕鱼/鲑鱼) [已实现]
- 取出: 空手右键装满条箱 → 空条箱 + 掉落32个对应物品 [已实现]
二、货桶 放入/取出 (fishbucket_0 等)
- 放入: 手持对应物品右键 空货桶 → 消耗32个 → 变为对应货桶(鳕鱼/鲑鱼/胡萝卜/土豆/桃子/橘子/苹果) [已实现]
- 取出: 空手右键装满货桶 → 空货桶 + 掉落32个对应物品 [已实现]
三、售卖盒 放入/取出 (sellingboxes 等)
- 放入: 手持对应物品右键 空售卖盒 → 除南瓜/西瓜消耗1个原版方块外, 其余消耗32个 → 变为对应售卖盒(含 售卖盒(鲑鱼) b_30) [已实现]
- 取出: 空手右键装满售卖盒 → 空售卖盒 + 取回(南瓜/西瓜1个原版方块, 其余32个) [已实现]
四、悬赏纸循环 (空手右键逐级切换)
- bountypaper → bountypaper_1 → bountypaper_2 → bountypaper [已实现]
五、布料已按标注禁用 [已处理]
- 售卖盒(黄绿布料 clothbox_1)、售卖盒(棕色布料 clothbox_2): 名字带"禁用", 已调去 禁用(xy_jinyong) 标签, 移出市场分组, 旧切换规则已移除
########################################
【家具家私】(xy_furniture) 2026-09-03
########################################
(旧 BlockSwitchService 已废弃, 全部 7 个功能统一由 xiangyemod/jiaju 的
FurnitureData+FurnitureService 实现, 注册到 FeatureDispatcher)
一、箭桶 (arrowbarrel_0 无箭 / arrowbarrel_1 有箭)
- 存箭: 手持箭(普通箭/药水箭)右键, 批量存入手中所有箭, 至多32只, count记录
(类型/药水效果aux不符不能混存, 记录写方块实体数据 rtdd_swt=count, 退出重进不丢) [已实现]
- 取箭: 空手右键, 一次性取回方块记录的全部箭(数量+类型+药水效果aux) [已实现]
二、水槽 (flume_0~5)
- 加水: 空手右键空槽 → 满水 [已实现]
- 取水: 手持空水桶右键满水 → 空槽 + 返还装满水的水桶 [已实现]
- 放水: 空手右键满水 → 直接把水放掉回到空槽(不放水桶取水) [已实现]
- 放脏盘子: 满水起手持脏盘子(rtdd:plate_0a)逐个放入(最多4个), 消耗1个 [已实现]
- 取盘子: 空手右键逐个取回, 取回的是洗好的 盘子(rtdd:plate_0); 取完最后一个 → 空槽 [已实现]
三、盘子架 (trayracks_1 空 ~ trayracks_6 五个)
- 放盘子: 手持盘子逐个放入(最多5个), 消耗1个 [已实现]
- 取盘子: 空手右键逐个取回 [已实现]
四、书柜 (bookcase 系列, 后放先取, 至多13本)
- 放书: 手持书/附魔书右键逐个放入, 消耗1本; 堆栈"替换方块前从旧方块读出→替换后写回新方块",
多本连续放入不会丢 [已实现]
- 取书: 空手右键后放先取(LIFO), 取回的书以掉落物形式掉在书柜前(不进背包) [已实现]
- 附魔书: 附魔以扁平ench字段([[附魔ID,等级],...])存方块实体(rtdd_swt=stack/rtdd_sws),
取回时重建userData; 不存含__type__/__value__的userData(引擎写不进方块实体),
退出重进词条不丢(掉落保护仍是掉落保护) [已实现]
- 健壮性: 方块实体里损坏/为None的旧堆栈数据按空堆栈处理, 不再报错(TypeError) [已实现]
四b、药水架 (lotion 系列, 后放先取, 至多3瓶)
- 从药物系统(xy_medicine)移至家具分类(xy_furniture) [已实现]
- 放药水: 手持任意药水(普通/喷溅/滞留)右键逐个放入, 消耗1瓶, 记录药水名+aux(aux决定效果) [已实现]
- 取药水: 空手右键后放先取(LIFO), 取回的药水以掉落物形式掉在架前(原样返还, 含aux效果) [已实现]
- 满架: 手持药水右键三瓶满的药水架 → 提示"已满", 拦截默认行为(防止误喝药水) [已实现]
- 方块链: 药水架_1(空)=lotion_0, 药水架_2(一瓶)=lotion_1, 药水架_3(两瓶)=lotion_2,
药水架_4(三瓶)=lotion_3 [已实现]
五、厨具架 (kitchenwarerack 系列, 组合顺序无关, 后放先取, 至多2件)
- 放入: 手持 锅铲/锅勺/菜刀/炒锅 右键空架/未满架 → 消耗1个 → 按组合成型 [已实现]
(组合与顺序无关: 先放锅再放刀 == 先放刀再放锅, 都是 炒锅+菜刀;
空+锅铲→单锅铲, 空+锅勺→单锅勺, 空+菜刀→单菜刀, 空+炒锅→单炒锅;
双锅铲/锅铲+锅勺/双锅勺/炒锅+菜刀/菜刀+锅铲/双菜刀/菜刀+锅勺)
- 取回: 空手右键 → 后放先取(LIFO), 取回最后放入的厨具, 形态退回剩余单件/空 [已实现]
六、古式唱片机 (b_108 无碟 / b_109 有碟)
- 放入: 手持任意原版唱片(minecraft:music_disc_*)右键无碟 → 有碟, 消耗1个, 记录唱片 [已实现]
- 取回: 空手右键 → 无碟 + 掉落该唱片(原样返还, 记录在方块实体数据, 退出重进不丢) [已实现]
- 注: 放入后播放对应唱片曲目 待后续实现 【未做】
七、垃圾桶 (storage_buckets 关闭 / rubbish_bin_2 打开 / b_160 有垃圾)
- 打开: 右键垃圾桶(空手/手持均可) → 打开桶盖(不消耗物品) [已实现]
- 扔垃圾: 打开时手持任意物品右键 → 变为 有垃圾 状态 + 清空主手物品 [已实现]
- 关闭: 右键(空手/手持均可) 打开/有垃圾 → 关闭桶盖 [已实现]
八、左键破坏存物方块掉落 (书柜/药水架/厨具架)
- 存了东西的家具方块被左键打碎时: 取消默认掉落 → 掉 空方块本体(保留朝向) + 全部存储物品 [已实现]
(书柜掉空书柜bookcase+里面的书; 药水架掉空药水架lotion_0+里面的药水; 厨具架掉空架+厨具)
- 附魔书/药水效果在掉落物中保留(取回时重建, 词条/效果不丢) [已实现]
- 与售卖盒区分: 售卖盒破坏重放仍可右键取物; 书柜这类破坏后记录随方块消失, 重放取不到 [已实现]
########################################
【乡野饮料】(xy_drink) 2026-09-04
########################################
实现于 xiangyemod/yinliao (YinliaoData + YinliaoService + YinliaoTimerService, 注册到 FeatureDispatcher)
一、榨汁机 (果汁·榨汁饮品, juicer 系列, 全流程右键)
- 空(juicer) + 水果(消耗1) → 放入水果(juicer_0), 并把水果类型写入方块实体数据(rtdd_jf) [已实现]
- 放入水果 → 榨汁中1 → 榨汁中2 → 榨汁中3 → 完成: 右键逐级推进(每级0.5s冷却) [已实现]
- 完成(juicer_4) 空手右键 → 掉落对应果汁 + 还原空(juicer) [已实现]
- 果汁由第一步放入的水果决定: 西瓜片→西瓜汁(fruitjuice_1)/橙子→橙汁(_2)/苹果→苹果汁(_3)/
桃子→桃子汁(_4)/葡萄→葡萄汁(_6)/黄豆→豆浆(_7) [已实现]
- 持久化: 每次换态 SetBlockNew 会清空方块实体, 都"先读旧→替换→写回新", 玩家在 榨汁2→榨汁3
过程中退出游戏, 重进后取出的果汁仍是第一步放入的水果类型 [已实现]
- 黄豆(rtdd:soybean) 物品已从Java版迁入(物品/纹理/名称齐全) [已实现]
二、冰棍盒 (冰棍, icelollybox 系列)
- 未定型(icelollybox_1) + 冰块(消耗1, 原版冰/冰砖/蓝冰/霜冰) → 启动30秒定型计时
(autoStart=False, 右键激活; 已在定型中不重复消耗) → 定型(icelollybox_2) [已实现]
- 定型 + 对应水果(消耗2) → 各口味冰棍盒(icelollyboxb 橙子/c 苹果/d 桃子/e 葡萄/f 西瓜) [已实现]
- 各口味冰棍盒 空手右键 → 掉落2根对应冰棍 + 还原未定型 [已实现]
- 定型计时用绝对时间戳写方块实体数据, 退出重进继续计时 [已实现]
三、冰棍堆 (组合, popsiclepile_2/3)
- 冰棍堆(橙子+西瓜 popsiclepile_2) + 苹果冰棍(消耗1) → 冰棍堆2(橙子+西瓜+苹果 popsiclepile_3) [已实现]
- 冰棍堆2 空手右键 → 掉落苹果冰棍(后放先取 LIFO) + 退回冰棍堆 [已实现]
四、炒冰盒 (冰棍盒·炒冰盒, frytheicebox 系列)
- 空(frytheicebox) + 冰块(消耗1) → 放冰(frytheicebox_1) [已实现]
- 放冰 + 对应水果(消耗1) → 各口味炒冰盒(苹果/葡萄/西瓜/橘子/桃子) [已实现]
- 各口味炒冰盒 空手右键 → 掉落1个对应冰沙 + 还原空 [已实现]
- 五种口味冰沙齐全: 西瓜冰沙(melonicecreamplace) 已从禁用移回乡野饮料, 正常取出 [已实现]
五、分类/分组调整
- 西瓜冰沙(melonicecreamplace): 分类 禁用(xy_jinyong) → 乡野饮料(xy_drink),
名称 西瓜冰棍_2(西瓜冰棍)禁用 → 西瓜冰沙, 放入 冰棍(drink_03_popsicle) 分组 [已调整]
- 黄豆(rtdd:soybean): 归乡野食材(xy_ingredients), 放入 谷物·米面(ingr_08_grain) 分组 [已调整]