烤猪 1
This commit is contained in:
1 parent
fadb5db6ec
commit
379a1c87e9
4 files changed
+170
-50
No files matched your search
+64
-1
@@ -45,6 +45,17 @@ from ...BlueFoxTools.ToolsConfig import LevelId
|
||||
# ---- 方块实体数据组件(计时持久化:记录开始时间戳,重启后继续计时) ----
|
||||
blockEntityDataComp = comp.CreateBlockEntityData(LevelId)
|
||||
|
||||
# ---- 方块表面方向 → 相邻坐标偏移(0下 1上 2北 3南 4西 5东) ----
|
||||
# 用于放置后事件计算"落点"(被点方块的相邻格)
|
||||
FACE_OFFSET = {
|
||||
0: (0, -1, 0),
|
||||
1: (0, 1, 0),
|
||||
2: (0, 0, -1),
|
||||
3: (0, 0, 1),
|
||||
4: (-1, 0, 0),
|
||||
5: (1, 0, 0),
|
||||
}
|
||||
|
||||
|
||||
class FeatureDispatcher(BlueFoxServerSystem):
|
||||
"""
|
||||
@@ -157,12 +168,15 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
|
||||
def ListenEvent(self):
|
||||
"""
|
||||
注册五个事件:
|
||||
注册六个事件:
|
||||
1. ServerBlockUseEvent —— 玩家右键方块(所有功能的右键转换入口)
|
||||
2. ServerItemUseOnEvent —— 手持物品右键方块表面(如放置生鸡肉)
|
||||
3. ServerItemTryUseEvent —— 玩家尝试使用物品(拦截喝药水/吃食物等默认行为)
|
||||
4. ServerBlockEntityTickEvent —— 计时方块每tick触发(烤制/饲料变空等,持久化计时)
|
||||
5. ServerPlayerTryDestroyBlockEvent —— 玩家拆方块(放置的死鱼/生鸡肉掉回原版生食材)
|
||||
6. ItemUseOnAfterServerEvent —— 放置方块/生态后触发(携带放置者 entityId)。
|
||||
用于"创造模式直接放生态"也能拿到是谁放的 → 记录到计时源方块 rtdd_tp,
|
||||
让计时源服务能"谁放提示发给谁"(如烧烤直接放烤乳猪也提示营火)。
|
||||
"""
|
||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
@@ -179,6 +193,9 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ServerPlayerTryDestroyBlockEvent", self, self.OnDestroy)
|
||||
self.ListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
||||
|
||||
def UnListenEvent(self):
|
||||
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||
@@ -196,6 +213,9 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ServerPlayerTryDestroyBlockEvent", self, self.OnDestroy)
|
||||
self.UnListenForEvent(serverApi.GetEngineNamespace(),
|
||||
serverApi.GetEngineSystemName(),
|
||||
"ItemUseOnAfterServerEvent", self, self.OnItemPlaceAfter)
|
||||
|
||||
# ============================================================================
|
||||
# 主入口1:玩家右键方块 → 按 blockOwner 路由到右键服务
|
||||
@@ -290,6 +310,49 @@ class FeatureDispatcher(BlueFoxServerSystem):
|
||||
self._cancelItemUse[playerId] = True
|
||||
return
|
||||
|
||||
# ============================================================================
|
||||
# 主入口2.5:放置方块/生态后 → 给计时源补记录放置者(谁放提示发给谁)
|
||||
# ============================================================================
|
||||
|
||||
def OnItemPlaceAfter(self, args):
|
||||
"""
|
||||
玩家放置方块/生态后触发(ItemUseOnAfterServerEvent)。
|
||||
用途:创造模式"直接放烤乳猪等计时源生态"时,没有右键上杆,拿不到放置者。
|
||||
这里拿到 放置者(entityId) + 落点方块,若落点是某个计时源的方块,
|
||||
就带 playerId 调 startTimerFor → startTimer 会判断下方营火并提示"谁放的"。
|
||||
这样"创造直接放"也能做到谁放提示发给谁(不依赖右键路径)。
|
||||
"""
|
||||
playerId = args.get("entityId")
|
||||
if not playerId:
|
||||
return
|
||||
# 被点方块的坐标 + 朝向面
|
||||
try:
|
||||
face = args.get("face", 1)
|
||||
x, y, z = args.get("x"), args.get("y"), args.get("z")
|
||||
except Exception:
|
||||
return
|
||||
# 落点 = 被点方块相邻的那一格(0下 1上 2北 3南 4西 5东)
|
||||
off = FACE_OFFSET.get(face, (0, 1, 0))
|
||||
targetPos = (x + off[0], y + off[1], z + off[2])
|
||||
dim = args.get("dimensionId")
|
||||
if dim is None:
|
||||
try:
|
||||
dim = comp.CreateDimension(playerId).GetEntityDimensionId()
|
||||
except Exception:
|
||||
return
|
||||
# 读取落点方块名
|
||||
try:
|
||||
b = comp.CreateBlockInfo(LevelId).GetBlockNew(targetPos, dim)
|
||||
blockName = b.get("name") if b else ""
|
||||
except Exception:
|
||||
return
|
||||
if not blockName:
|
||||
return
|
||||
# 落点是计时源方块 → 带放置者启动(判断营火 + 谁放提示发给谁)
|
||||
service = self.timerOwner.get(blockName)
|
||||
if service and hasattr(service, "startTimer"):
|
||||
service.startTimer(dim, targetPos, blockName, playerId)
|
||||
|
||||
# ============================================================================
|
||||
# 主入口3:拦截物品使用(防止喝药水/吃食物等默认行为)
|
||||
# ============================================================================
|
||||
|
||||
Reference in new issue
Block a user