烧烤烤串,冷却,放置误触,目前创造物品栏所有的碰撞箱修改1

This commit is contained in:
wenhe committed 2026-09-30 17:26:27 +08:00
1 parent c70ab9bcf7
commit 23c64953a2
98 files changed
+945 -914

No files matched your search

@@ -128,6 +128,14 @@ class FeatureDispatcher(BlueFoxServerSystem):
tryUseSet = set()
grassDropOwners = [] # 破坏"草/杂草"时概率掉食材(如黄豆)的服务列表; OnDestroy 逐个尝试
# ---- 位置级"防误吃"窗口: (dim, x, y, z) -> 到期时间戳 ----
# 转换服务刚把方块换成"可吃成品"(如翻烤出炉的熟串)后, 给该位置加一小段禁吃时间。
# 原因: 翻烤(BarbecueService)与吃(ShiyongfoodService)是两种服务、两张独立冷却表,
# 而输入都是"空手右键同一位置"; 快速连点时翻烤出锅后的下一次点击会直接进吃逻辑,
# 把刚烤好的串立刻吃掉。窗口内空手右键不执行吃(见 ShiyongfoodService.handleBlockUse)。
eatLock = {}
EAT_LOCK_SECONDS = 1.0
# ---- 拆方块掉落映射: 方块名 → 掉落对应的原版生食材 ----
# 玩家左键破坏这些"放置的半成品/死鱼"方块时, 取消默认掉落, 改为掉对应的原版生食材
DESTROY_DROP = {
@@ -206,6 +214,22 @@ class FeatureDispatcher(BlueFoxServerSystem):
return False
return service.startTimer(dim, pos, blockName, playerId)
@classmethod
def lockEat(cls, pos, dim, seconds=None):
"""
转换服务调用:给"刚转换出来的方块位置"加一个防误吃窗口。
窗口内空手右键该位置不会执行"吃"(见 ShiyongfoodService.handleBlockUse),
避免快速连点把刚出锅的可吃成品(如熟串)立刻吃掉。
"""
if seconds is None:
seconds = cls.EAT_LOCK_SECONDS
cls.eatLock[(dim, pos[0], pos[1], pos[2])] = time.time() + seconds
@classmethod
def isEatLocked(cls, pos, dim):
"""查询该位置的"防误吃"窗口是否仍在生效(过期自动视为未锁定)"""
return time.time() < cls.eatLock.get((dim, pos[0], pos[1], pos[2]), 0)
def __init__(self, namespace, systemName):
"""
初始化:注册事件监听(全模组唯一监听点)。
@@ -146,6 +146,9 @@ class BarbecueService(BlueFoxServerSystem):
# 切换型规则:就地执行
self.handleSwitch(recipe, playerId, pos, dim, itemDict, key)
# 防误吃: 本次转换刚换掉的方块位置, 短时间内禁止"空手右键吃"。
# 否则快速连点时, 翻烤出的可吃成品(熟串)会被紧接着的下一次点击立刻吃掉。
FeatureDispatcher.lockEat(pos, dim)
return True
# ============================================================================
@@ -25,6 +25,7 @@ comp = serverApi.GetEngineCompFactory() # 组件工厂
from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
from ..ShiyongfoodData import EAT_RULE_MAP, TRY_USE_RULES
from ...service.FeatureDispatcher import FeatureDispatcher
# ---- 吃的声音 random.eat(任务三) ----
from ....ModUtil.ServerUtil import PlaySoundToAllClient
@@ -79,6 +80,10 @@ class ShiyongfoodService(BlueFoxServerSystem):
rule = EAT_RULE_MAP.get(blockName)
if not rule:
return False
# 防误吃窗口: 该位置刚被转换服务换成"可吃成品"(如翻烤出的熟串), 短时间内不执行吃,
# 避免快速连点把刚出锅的成品立刻吃掉; 窗口过后正常一次点击即可吃。
if FeatureDispatcher.isEatLocked(pos, dim):
return True
if not self.checkCooldown(key, 0.4):
return True