搬运了原版食材 死亡生物 手办 功能实现 小bug

This commit is contained in:
wenhe committed 2026-09-02 19:23:37 +08:00
1 parent 6bd16734e8
commit 4f032234c0
23 files changed
+134 -119

No files matched your search

@@ -6,6 +6,9 @@ from xiangyemod.dongwuyangzhi.service.AnimalService import AnimalService
from xiangyemod.dongwuyangzhi.service.AnimalTimerService import AnimalTimerService
from xiangyemod.shaokao.service.BarbecueService import BarbecueService
from xiangyemod.shaokao.service.BarbecueTimerService import BarbecueTimerService
from xiangyemod.siwangshengwu.service.DeadmobService import DeadmobService
from xiangyemod.siwangshengwu.service.DeadmobTimerService import DeadmobTimerService
from xiangyemod.shouban.service.ShoubanService import ShoubanService
if not serverApi.IsInServer():
pass
@@ -54,6 +54,24 @@ gameComp = comp.CreateGame(LevelId)
# BLOCK_SWITCHES 是一个列表,每条规则是一个 dict,格式见 BlockSwitchData.py 顶部注释
from ..BlockSwitchData import BLOCK_SWITCHES
# ---- 已由 DeadmobService/DeadmobTimerService 接管的死亡生物方块 ----
# 这些方块属于"死亡生物"(xy_deadmob) 分类,由新系统处理(挂肉钩切肉/鱼晾干/死鱼切块),
# 工具切换系统必须跳过,否则右键会触发旧规则(含逆向退回),和新系统双重响应产生冲突。
_DEADMOB_OWNED = set([
"rtdd:meathook",
"rtdd:cow_0", "rtdd:cow_1", "rtdd:cow_2", "rtdd:cow_3",
"rtdd:pig_0", "rtdd:pig_1", "rtdd:pig_2", "rtdd:pig_3",
"rtdd:sheep", "rtdd:sheep_1", "rtdd:sheep_2", "rtdd:sheep_3",
"rtdd:hang_meat_hooks_1", "rtdd:hang_meat_hooks_2",
"rtdd:hang_meat_hooks_3", "rtdd:hang_meat_hooks_4",
"rtdd:meathookcod_1", "rtdd:meathookcod_2", "rtdd:meathookcoddry",
"rtdd:killfish_0", "rtdd:killfish_1", "rtdd:killfish_2", "rtdd:killfish_3",
"rtdd:killcod_0", "rtdd:killcod_1", "rtdd:killcod_2",
"rtdd:deadsquida", "rtdd:dead_squid_1",
# 旧版挂鱼方块(minecraft:fish 挂肉钩),已被新挂鱼(鲑鱼/鳕鱼)取代
"rtdd:fish_1", "rtdd:fish_2",
])
# ================================================================================
# 工具函数:读取物品 userData 里的嵌套字段
@@ -185,6 +203,9 @@ class BlockSwitchService(BlueFoxServerSystem):
# ---- 第二步:O(1) 方块名拦截 ----
# 只有工具方块的右键才归本系统处理;做菜方块直接放过,交给 CookingService
if blockName in _DEADMOB_OWNED:
# 死亡生物方块由新系统(DeadmobService)处理,本系统跳过
return
if blockName not in self.switchBlockSet:
return
@@ -175,6 +175,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
"""
blockName = args.get("blockName")
service = self.blockOwner.get(blockName)
print "[FD-BlockUse]", blockName, "svc:", (service.__class__.__name__ if service else "NONE")
if not service:
# 这个方块不属于任何已注册的功能 → 交给原版/其他模组处理
return
@@ -199,13 +200,15 @@ class FeatureDispatcher(BlueFoxServerSystem):
"""
itemName = args.get("itemName")
service = self.itemUseOnOwner.get(itemName)
print "[FD-ItemUseOn]", itemName, "svc:", (service.__class__.__name__ if service else "NONE")
if not service:
return
handled = service.handleItemUseOn(args)
if handled:
args['ret'] = True
playerId = args.get("playerId")
# ServerItemUseOnEvent 的玩家键是 entityId,不是 playerId
playerId = args.get("playerId") or args.get("entityId")
self._cancelItemUse[playerId] = True
# ============================================================================
@@ -219,6 +222,7 @@ class FeatureDispatcher(BlueFoxServerSystem):
就取消这次默认行为,避免右键转换方块时误喝药水。
"""
playerId = args.get("playerId")
print "[FD-ItemTryUse]", args.get("itemName"), "player", playerId
if self._cancelItemUse.pop(playerId, False):
args['cancel'] = True
@@ -160,7 +160,8 @@ class BarbecueService(BlueFoxServerSystem):
返回 True=已处理,False=当前组合无匹配规则。
"""
itemName = args.get("itemName")
playerId = args.get("playerId")
# ServerItemUseOnEvent 的玩家键是 entityId,不是 playerId
playerId = args.get("playerId") or args.get("entityId")
rule = self.itemUseOnRecipes.get(itemName)
if not rule:
return False