Files
rtdd/behavior_pack_v8jz0zSR/Script_NeteaseModousIY5aSF/xiangyemod/jiaju/FurnitureData.py
T
2026-09-03 15:23:33 +08:00

267 lines
15 KiB
Python

# -*- coding: utf-8 -*-
"""
================================================================================
家具家私分类转换规则数据
================================================================================
统一管理"家具家私"(xy_furniture) 分类下的全部【右键切换型】转换规则:
箭桶、水槽、盘子架、书柜、厨具架、古式唱片机、垃圾桶。
全部为即时右键转换, 无计时, 不需要 TimerService。
由 xiangyemod/jiaju/service/FurnitureService 处理, 注册到 FeatureDispatcher。
【规则字段说明】
source: 被右键的源方块
item: 手持物品名; None=空手; "*music_disc"=任意原版唱片;
"*arrow"=任意箭; "*any"=任意非空物品
target: 转换成的目标方块
consume: 消耗数量(默认0, 即不消耗)
clearHand: True=清空主手全部物品(垃圾桶扔垃圾)
giveItem: 取回/取水时给玩家背包的物品名(直接进背包)
dropItem: 以掉落物形式给的物品 [{"name": "xx", "count": N}]
record: "count"=记录一种物品+数量(箭桶) / "stack"=后放先取堆栈(书柜),
记录写入方块实体数据(rtdd_swt/rtdd_swc/rtdd_swi/rtdd_swa/rtdd_sws),
退出重进不丢
maxCount: record 类型最大容量(箭桶32 / 书柜13)
arrowMode:"store"=箭桶存箭(批量) / "retrieve"=箭桶取箭(一次性全取)
discPut: True=唱片机放入时把唱片写入方块实体(取回时原样返还)
discGet: True=唱片机取回时从方块实体读出唱片并掉落
tip: 转换成功提示
================================================================================
"""
# ============================================================
# 一、箭桶 (arrowbarrel_0 无箭 / arrowbarrel_1 有箭)
# 存箭: 手持箭(普通箭/药水箭)右键, 批量存入手中所有箭, 至多32只,
# 只存一种箭(类型+药水效果aux不符不能混存), count记录
# 取箭: 空手右键, 一次性取回方块记录的全部箭
# ============================================================
ARROWBARREL_RULES = [
{"source": "rtdd:arrowbarrel_0", "item": "*arrow",
"target": "rtdd:arrowbarrel_1", "arrowMode": "store",
"record": "count", "maxCount": 32,
"tip": "§a已存入箭"},
{"source": "rtdd:arrowbarrel_1", "item": None,
"target": "rtdd:arrowbarrel_0", "arrowMode": "retrieve",
"record": "count",
"tip": "§a取回了箭"},
]
# ============================================================
# 二、水槽 (flume_0~5)
# 加水: 空手右键空槽 -> 满水
# 取水: 手持空水桶右键满水 -> 空槽 + 给装满水的水桶
# 放脏盘子(脏盘子 rtdd:plate_0a): 满水起, 逐个放入最多4个
# 取脏盘子: 空手右键逐个取回
# ============================================================
FLUME_RULES = [
# 加水/取水
{"source": "rtdd:flume_0", "item": None,
"target": "rtdd:flume_1", "tip": "§a水槽加满了水"},
{"source": "rtdd:flume_1", "item": "minecraft:bucket",
"target": "rtdd:flume_0", "consume": 1,
"giveItem": "minecraft:water_bucket", "tip": "§a取走了水, 水桶装满水"},
# 放脏盘子(需满水)
{"source": "rtdd:flume_1", "item": "rtdd:plate_0a",
"target": "rtdd:flume_2", "consume": 1, "tip": "§a放入1个脏盘子"},
{"source": "rtdd:flume_2", "item": "rtdd:plate_0a",
"target": "rtdd:flume_3", "consume": 1, "tip": "§a放入1个脏盘子"},
{"source": "rtdd:flume_3", "item": "rtdd:plate_0a",
"target": "rtdd:flume_4", "consume": 1, "tip": "§a放入1个脏盘子"},
{"source": "rtdd:flume_4", "item": "rtdd:plate_0a",
"target": "rtdd:flume_5", "consume": 1, "tip": "§a放入1个脏盘子"},
# 取脏盘子
{"source": "rtdd:flume_5", "item": None,
"target": "rtdd:flume_4", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"},
{"source": "rtdd:flume_4", "item": None,
"target": "rtdd:flume_3", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"},
{"source": "rtdd:flume_3", "item": None,
"target": "rtdd:flume_2", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"},
{"source": "rtdd:flume_2", "item": None,
"target": "rtdd:flume_1", "giveItem": "rtdd:plate_0a", "tip": "§a取回1个脏盘子"},
]
# ============================================================
# 三、盘子架 (trayracks_1 空 ~ trayracks_6 五个)
# 放盘子(盘子 rtdd:plate_0): 逐个放入最多5个
# 取盘子: 空手右键逐个取回
# ============================================================
TRAYRACKS_RULES = [
{"source": "rtdd:trayracks_1", "item": "rtdd:plate_0",
"target": "rtdd:trayracks_2", "consume": 1, "tip": "§a放上1个盘子"},
{"source": "rtdd:trayracks_2", "item": "rtdd:plate_0",
"target": "rtdd:trayracks_3", "consume": 1, "tip": "§a放上1个盘子"},
{"source": "rtdd:trayracks_3", "item": "rtdd:plate_0",
"target": "rtdd:trayracks_4", "consume": 1, "tip": "§a放上1个盘子"},
{"source": "rtdd:trayracks_4", "item": "rtdd:plate_0",
"target": "rtdd:trayracks_5", "consume": 1, "tip": "§a放上1个盘子"},
{"source": "rtdd:trayracks_5", "item": "rtdd:plate_0",
"target": "rtdd:trayracks_6", "consume": 1, "tip": "§a放上1个盘子"},
{"source": "rtdd:trayracks_6", "item": None,
"target": "rtdd:trayracks_5", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"},
{"source": "rtdd:trayracks_5", "item": None,
"target": "rtdd:trayracks_4", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"},
{"source": "rtdd:trayracks_4", "item": None,
"target": "rtdd:trayracks_3", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"},
{"source": "rtdd:trayracks_3", "item": None,
"target": "rtdd:trayracks_2", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"},
{"source": "rtdd:trayracks_2", "item": None,
"target": "rtdd:trayracks_1", "giveItem": "rtdd:plate_0", "tip": "§a取回1个盘子"},
]
# ============================================================
# 四、书柜 (bookcase 系列, 后放先取, 至多13本)
# 放书(书 minecraft:book / 附魔书 minecraft:enchanted_book): 逐个放入,
# stack记录完整物品信息(附魔书附魔不丢)
# 取书: 空手右键, 后放先取(LIFO)
# 方块链: 书柜_1(空)=bookcase, 书柜_2(1本)=bookcase_12, 书柜_3(2本)=bookcase_11,
# 书柜_4(3本)=bookcase_10, 书柜_5(4本)=bookcase_9, 书柜_6(5本)=bookcase_8,
# 书柜_7(6本)=bookcase_7, 书柜_8(7本)=bookcase_6, 书柜_9(8本)=bookcase_5,
# 书柜_10(9本)=bookcase_4, 书柜_11(10本)=b_196, 书柜_12(11本)=bookcase_3,
# 书柜_13(12本)=bookcase_2, 书柜_14(13本)=bookcase_1
# ============================================================
_BOOKCASE_CHAIN = [
"rtdd:bookcase", # 书柜_1(空)
"rtdd:bookcase_12", # 书柜_2(1本)
"rtdd:bookcase_11", # 书柜_3(2本)
"rtdd:bookcase_10", # 书柜_4(3本)
"rtdd:bookcase_9", # 书柜_5(4本)
"rtdd:bookcase_8", # 书柜_6(5本)
"rtdd:bookcase_7", # 书柜_7(6本)
"rtdd:bookcase_6", # 书柜_8(7本)
"rtdd:bookcase_5", # 书柜_9(8本)
"rtdd:bookcase_4", # 书柜_10(9本)
"rtdd:b_196", # 书柜_11(10本)
"rtdd:bookcase_3", # 书柜_12(11本)
"rtdd:bookcase_2", # 书柜_13(12本)
"rtdd:bookcase_1", # 书柜_14(13本)
]
BOOKCASE_RULES = []
# 放入: 第 i 级 -> 第 i+1 级, 书/附魔书, 消耗1, stack记录
for _i in range(len(_BOOKCASE_CHAIN) - 1):
_src, _dst = _BOOKCASE_CHAIN[_i], _BOOKCASE_CHAIN[_i + 1]
BOOKCASE_RULES.append({
"source": _src, "item": "minecraft:book", "target": _dst,
"consume": 1, "record": "stack", "maxCount": 13,
"tip": "§a放入1本书",
})
BOOKCASE_RULES.append({
"source": _src, "item": "minecraft:enchanted_book", "target": _dst,
"consume": 1, "record": "stack", "maxCount": 13,
"tip": "§a放入1本附魔书",
})
# 取回: 第 i 级 -> 第 i-1 级, 空手, 后放先取
for _i in range(len(_BOOKCASE_CHAIN) - 1, 0, -1):
_src, _dst = _BOOKCASE_CHAIN[_i], _BOOKCASE_CHAIN[_i - 1]
BOOKCASE_RULES.append({
"source": _src, "item": None, "target": _dst,
"record": "stack", "tip": "§a取回了书",
})
# ============================================================
# 五、厨具架 (kitchenwarerack, 至多挂2件, 方块状态即组合, 纯切换)
# 可放: 锅铲(spatula) / 锅勺(potandspoon) / 菜刀(cleaver) / 炒锅(wok)
# ============================================================
KITCHENRACK_RULES = [
# ---- 放入 (空架 -> 单件) ----
{"source": "rtdd:kitchenwarerack", "item": "rtdd:spatula",
"target": "rtdd:kitchenwareracka_1", "consume": 1, "tip": "§a放上了锅铲"},
{"source": "rtdd:kitchenwarerack", "item": "rtdd:potandspoon",
"target": "rtdd:kitchenwarerackb_1", "consume": 1, "tip": "§a放上了锅勺"},
{"source": "rtdd:kitchenwarerack", "item": "rtdd:cleaver",
"target": "rtdd:kitchenwarerackd_1", "consume": 1, "tip": "§a放上了菜刀"},
{"source": "rtdd:kitchenwarerack", "item": "rtdd:wok",
"target": "rtdd:kitchenwarerackc_1", "consume": 1, "tip": "§a放上了炒锅"},
# ---- 放入 (单件 -> 双件/组合) ----
{"source": "rtdd:kitchenwareracka_1", "item": "rtdd:spatula",
"target": "rtdd:kitchenwareracka_2", "consume": 1, "tip": "§a再放上一把锅铲"},
{"source": "rtdd:kitchenwareracka_1", "item": "rtdd:potandspoon",
"target": "rtdd:kitchenwareracka_3", "consume": 1, "tip": "§a放上了锅勺"},
{"source": "rtdd:kitchenwarerackb_1", "item": "rtdd:potandspoon",
"target": "rtdd:kitchenwarerackb_2", "consume": 1, "tip": "§a再放上一把锅勺"},
{"source": "rtdd:kitchenwarerackc_1", "item": "rtdd:cleaver",
"target": "rtdd:kitchenwarerackc_2", "consume": 1, "tip": "§a放上了菜刀"},
{"source": "rtdd:kitchenwarerackd_1", "item": "rtdd:cleaver",
"target": "rtdd:kitchenwarerackd_3", "consume": 1, "tip": "§a再放上一把菜刀"},
{"source": "rtdd:kitchenwarerackd_1", "item": "rtdd:spatula",
"target": "rtdd:kitchenwarerackd_2", "consume": 1, "tip": "§a放上了锅铲"},
{"source": "rtdd:kitchenwarerackd_1", "item": "rtdd:potandspoon",
"target": "rtdd:kitchenwarerackd_4", "consume": 1, "tip": "§a放上了锅勺"},
# ---- 取回 (空手右键, 掉落对应厨具) ----
{"source": "rtdd:kitchenwareracka_1", "item": None,
"target": "rtdd:kitchenwarerack",
"dropItem": [{"name": "rtdd:spatula", "count": 1}], "tip": "§a取回了锅铲"},
{"source": "rtdd:kitchenwareracka_2", "item": None,
"target": "rtdd:kitchenwareracka_1",
"dropItem": [{"name": "rtdd:spatula", "count": 1}], "tip": "§a取回了一把锅铲"},
{"source": "rtdd:kitchenwareracka_3", "item": None,
"target": "rtdd:kitchenwareracka_1",
"dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了锅勺"},
{"source": "rtdd:kitchenwarerackb_1", "item": None,
"target": "rtdd:kitchenwarerack",
"dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了锅勺"},
{"source": "rtdd:kitchenwarerackb_2", "item": None,
"target": "rtdd:kitchenwarerackb_1",
"dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了一把锅勺"},
{"source": "rtdd:kitchenwarerackc_1", "item": None,
"target": "rtdd:kitchenwarerack",
"dropItem": [{"name": "rtdd:wok", "count": 1}], "tip": "§a取回了炒锅"},
{"source": "rtdd:kitchenwarerackc_2", "item": None,
"target": "rtdd:kitchenwarerackc_1",
"dropItem": [{"name": "rtdd:cleaver", "count": 1}], "tip": "§a取回了菜刀"},
{"source": "rtdd:kitchenwarerackd_1", "item": None,
"target": "rtdd:kitchenwarerack",
"dropItem": [{"name": "rtdd:cleaver", "count": 1}], "tip": "§a取回了菜刀"},
{"source": "rtdd:kitchenwarerackd_2", "item": None,
"target": "rtdd:kitchenwarerackd_1",
"dropItem": [{"name": "rtdd:spatula", "count": 1}], "tip": "§a取回了锅铲"},
{"source": "rtdd:kitchenwarerackd_3", "item": None,
"target": "rtdd:kitchenwarerackd_1",
"dropItem": [{"name": "rtdd:cleaver", "count": 1}], "tip": "§a取回了一把菜刀"},
{"source": "rtdd:kitchenwarerackd_4", "item": None,
"target": "rtdd:kitchenwarerackd_1",
"dropItem": [{"name": "rtdd:potandspoon", "count": 1}], "tip": "§a取回了锅勺"},
]
# ============================================================
# 六、古式唱片机 (b_108 无碟 / b_109 有碟)
# 放入: 手持任意原版唱片 -> 有碟, 消耗1, 记录唱片(rtdd_disc)
# 取回: 空手右键 -> 无碟 + 原样返还唱片
# 注: 放入后播放曲目为 todo, 后续实现
# ============================================================
RECORDPLAYER_RULES = [
{"source": "rtdd:b_108", "item": "*music_disc",
"target": "rtdd:b_109", "consume": 1, "discPut": True,
"tip": "§a放入了唱片"},
{"source": "rtdd:b_109", "item": None,
"target": "rtdd:b_108", "discGet": True,
"tip": "§a取回了唱片"},
]
# ============================================================
# 七、垃圾桶 (storage_buckets 关闭 / rubbish_bin_2 打开 / b_160 有垃圾)
# 打开: 右键垃圾桶(空手/手持均可) -> 打开桶盖(不消耗)
# 扔垃圾: 打开时手持任意物品右键 -> 有垃圾 + 清空主手
# 关闭: 右键(空手/手持均可) 打开/有垃圾 -> 关闭
# ============================================================
TRASHBIN_RULES = [
{"source": "rtdd:storage_buckets", "item": None,
"target": "rtdd:rubbish_bin_2", "tip": "§a垃圾桶已打开"},
{"source": "rtdd:storage_buckets", "item": "*any",
"target": "rtdd:rubbish_bin_2", "tip": "§a垃圾桶已打开"},
{"source": "rtdd:rubbish_bin_2", "item": None,
"target": "rtdd:storage_buckets", "tip": "§a垃圾桶已关闭"},
{"source": "rtdd:rubbish_bin_2", "item": "*any",
"target": "rtdd:b_160", "clearHand": True, "tip": "§a已丢入垃圾桶"},
{"source": "rtdd:b_160", "item": None,
"target": "rtdd:storage_buckets", "tip": "§a垃圾桶已关闭"},
{"source": "rtdd:b_160", "item": "*any",
"target": "rtdd:storage_buckets", "tip": "§a垃圾桶已关闭"},
]
# ============================================================
# 汇总: 家具家私全部右键转换规则
# ============================================================
FURNITURE_SWITCHES = (ARROWBARREL_RULES + FLUME_RULES + TRAYRACKS_RULES
+ BOOKCASE_RULES + KITCHENRACK_RULES
+ RECORDPLAYER_RULES + TRASHBIN_RULES)