破坏掉落存储物品 (keyong)
This commit is contained in:
1 parent
0cb1da680d
commit
620500ab45
11 files changed
+373
-101
No files matched your search
+17
-7
@@ -287,21 +287,31 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
def OnDestroy(self, args):
|
||||
"""
|
||||
玩家拆方块时触发。
|
||||
部分"放置的半成品/死鱼"方块被拆掉时, 取消默认掉落(不把方块本身掉出来),
|
||||
手动清空方块并掉落对应的原版生食材:
|
||||
- killfish_0(死鲑鱼) → 原版生鲑鱼
|
||||
- killcod_0(死鳕鱼) → 原版生鳕鱼
|
||||
- roastchickenplace_0(生鸡肉放置后) → 原版生鸡肉
|
||||
注意: ServerPlayerTryDestroyBlockEvent 的方块名字段是 fullName(不是 blockName)!
|
||||
优先级:
|
||||
1. 有"破坏掉落"逻辑的服务(如家具的存物方块: 书柜/药水架/厨具架
|
||||
被拆掉 → 掉 空方块本体+全部存储物品, 与售卖盒不同, 破坏后取不到)
|
||||
2. 静态映射: 放置的死鱼/生鸡肉掉回原版生食材
|
||||
"""
|
||||
blockName = args.get("blockName")
|
||||
blockName = args.get("fullName") or args.get("blockName")
|
||||
args["blockName"] = blockName # 统一成 blockName 字段, 服务内部直接用
|
||||
|
||||
# 1. 优先: 归属的右键服务实现了 handleDestroy → 交给服务处理
|
||||
service = self.blockOwner.get(blockName)
|
||||
if service and hasattr(service, "handleDestroy"):
|
||||
if service.handleDestroy(args):
|
||||
return
|
||||
|
||||
# 2. 静态映射: 放置的死鱼/生鸡肉 → 原版生食材
|
||||
itemName = self.DESTROY_DROP.get(blockName)
|
||||
if not itemName:
|
||||
return
|
||||
playerId = args.get("playerId")
|
||||
x, y, z = args.get("x"), args.get("y"), args.get("z")
|
||||
dim = comp.CreateDimension(playerId).GetEntityDimensionId()
|
||||
# 取消默认破坏(不让方块本身作为掉落物掉出来)
|
||||
# 取消默认破坏+默认掉落(不让方块本身作为掉落物掉出来)
|
||||
args['cancel'] = True
|
||||
args['spawnResources'] = False
|
||||
# 手动清空方块
|
||||
try:
|
||||
comp.CreateBlockInfo(LevelId).SetBlockNew(
|
||||
|
||||
Reference in new issue
Block a user