破坏掉落存储物品 (keyong)

This commit is contained in:
wenhe committed 2026-09-03 17:07:41 +08:00
1 parent 0cb1da680d
commit 620500ab45
11 files changed
+373 -101

No files matched your search

@@ -19,7 +19,8 @@
dropItem: 以掉落物形式给的物品 [{"name": "xx", "count": N}]
record: "count"=记录一种物品+数量(箭桶) / "stack"=后放先取堆栈(书柜),
记录写入方块实体数据(rtdd_swt/rtdd_swc/rtdd_swi/rtdd_swa/rtdd_sws),
退出重进不丢
退出重进不丢; 附魔以扁平ench字段([[附魔ID,等级],...])存储,
不存含__type__/__value__的userData(引擎写不进方块实体)
maxCount: record 类型最大容量(箭桶32 / 书柜13)
arrowMode:"store"=箭桶存箭(批量) / "retrieve"=箭桶取箭(一次性全取)
discPut: True=唱片机放入时把唱片写入方块实体(取回时原样返还)
@@ -160,6 +161,43 @@ for _i in range(len(_BOOKCASE_CHAIN) - 1, 0, -1):
"record": "stack", "tip": "§a取回了书",
})
# ============================================================
# 四b、药水架 (lotion 系列, 后放先取, 至多3瓶)
# 放药水(任意药水: 普通/喷溅/滞留 minecraft:potion/splash_potion/lingering_potion):
# 逐个放入, 消耗1瓶, stack记录物品名+aux(aux决定药水效果)
# 取药水: 空手右键, 后放先取(LIFO), 原样返还该瓶药水
# 方块链: 药水架_1(空)=lotion_0, 药水架_2(一瓶)=lotion_1,
# 药水架_3(两瓶)=lotion_2, 药水架_4(三瓶)=lotion_3
# ============================================================
_POTIONRACK_CHAIN = [
"rtdd:lotion_0", # 药水架_1(空)
"rtdd:lotion_1", # 药水架_2(一瓶)
"rtdd:lotion_2", # 药水架_3(两瓶)
"rtdd:lotion_3", # 药水架_4(三瓶)
]
POTIONRACK_RULES = []
# 放入: 第 i 级 -> 第 i+1 级, 任意药水, 消耗1, stack记录
for _i in range(len(_POTIONRACK_CHAIN) - 1):
_src, _dst = _POTIONRACK_CHAIN[_i], _POTIONRACK_CHAIN[_i + 1]
POTIONRACK_RULES.append({
"source": _src, "item": "*potion", "target": _dst,
"consume": 1, "record": "stack", "maxCount": 3,
"tip": "§a放入1瓶药水",
})
# 取回: 第 i 级 -> 第 i-1 级, 空手, 后放先取
for _i in range(len(_POTIONRACK_CHAIN) - 1, 0, -1):
_src, _dst = _POTIONRACK_CHAIN[_i], _POTIONRACK_CHAIN[_i - 1]
POTIONRACK_RULES.append({
"source": _src, "item": None, "target": _dst,
"record": "stack", "tip": "§a取回了1瓶药水",
})
# 满架: 手持药水右键三瓶满的药水架 -> 提示已满, 拦截默认行为(防止误喝药水)
POTIONRACK_RULES.append({
"source": "rtdd:lotion_3", "item": "*potion",
"tip": "§c药水架已满!",
})
# ============================================================
# 五、厨具架 (kitchenwarerack, 至多挂2件)
# 组合由方块状态+stack记录决定, 与放入顺序无关, 取回后放先取。
@@ -203,6 +241,23 @@ KITCHENRACK_COMBO_BLOCK = {
("rtdd:cleaver", "rtdd:cleaver"): "rtdd:kitchenwarerackd_3", # 双菜刀
}
# 方块状态 -> 厨具物品列表(名称即组合, 顺序按方块名从左到右, 最后一件=后放入)
# 用于"无记录"时推断(如创造模式直接放置带厨具的厨具架), 取回按此顺序后放先取
KITCHENRACK_BLOCK_ITEMS = {
"rtdd:kitchenwarerack": [], # 空
"rtdd:kitchenwareracka_1": ["rtdd:spatula"], # 单锅铲
"rtdd:kitchenwareracka_2": ["rtdd:spatula", "rtdd:spatula"], # 双锅铲
"rtdd:kitchenwareracka_3": ["rtdd:spatula", "rtdd:potandspoon"], # 锅铲+锅勺
"rtdd:kitchenwarerackb_1": ["rtdd:potandspoon"], # 单锅勺
"rtdd:kitchenwarerackb_2": ["rtdd:potandspoon", "rtdd:potandspoon"], # 双锅勺
"rtdd:kitchenwarerackc_1": ["rtdd:wok"], # 单炒锅
"rtdd:kitchenwarerackc_2": ["rtdd:wok", "rtdd:cleaver"], # 炒锅+菜刀
"rtdd:kitchenwarerackd_1": ["rtdd:cleaver"], # 单菜刀
"rtdd:kitchenwarerackd_2": ["rtdd:cleaver", "rtdd:spatula"], # 菜刀+锅铲
"rtdd:kitchenwarerackd_3": ["rtdd:cleaver", "rtdd:cleaver"], # 双菜刀
"rtdd:kitchenwarerackd_4": ["rtdd:cleaver", "rtdd:potandspoon"], # 菜刀+锅勺
}
# ============================================================
# 六、古式唱片机 (b_108 无碟 / b_109 有碟)
# 放入: 手持任意原版唱片 -> 有碟, 消耗1, 记录唱片(rtdd_disc)
@@ -239,8 +294,22 @@ TRASHBIN_RULES = [
"target": "rtdd:storage_buckets", "tip": "§a垃圾桶已关闭"},
]
# ============================================================
# 八、左键破坏存物方块的掉落(书柜/药水架/厨具架)
# 存了东西的方块被左键打碎时, 掉 空方块本体 + 全部存储物品(附魔/药水效果保留)。
# 与售卖盒不同: 破坏后记录随方块一起消失, 重新放置右键取不到东西。
# ============================================================
STORAGE_EMPTY_BLOCK = {}
for _b in _BOOKCASE_CHAIN[1:]: # 书柜_2~14(有书) -> 书柜_1(空)
STORAGE_EMPTY_BLOCK[_b] = _BOOKCASE_CHAIN[0]
for _b in _POTIONRACK_CHAIN[1:]: # 药水架_2~4(有药水) -> 药水架_1(空)
STORAGE_EMPTY_BLOCK[_b] = _POTIONRACK_CHAIN[0]
for _b in KITCHENRACK_BLOCKS[1:]: # 厨具架各形态 -> 厨具架(空)
STORAGE_EMPTY_BLOCK[_b] = KITCHENRACK_BLOCKS[0]
# ============================================================
# 汇总: 家具家私右键转换规则(厨具架为通用逻辑, 不在规则表, 单独注册)
# ============================================================
FURNITURE_SWITCHES = (ARROWBARREL_RULES + FLUME_RULES + TRAYRACKS_RULES
+ BOOKCASE_RULES + RECORDPLAYER_RULES + TRASHBIN_RULES)
+ BOOKCASE_RULES + POTIONRACK_RULES
+ RECORDPLAYER_RULES + TRASHBIN_RULES)