吃 3 功能 完整 正向药水效果 回复饱食度

This commit is contained in:
wenhe committed 2026-09-21 16:58:41 +08:00
1 parent fb817b5d34
commit 78b48516d0
5 files changed
+416 -1353

No files matched your search

@@ -11,8 +11,8 @@
3. handleItemTryUse 手持 饭团/水煮蛋/豆腐 长按右键(空中使用) -> 直接吃(消耗1个)
【数值】
- 饱食度: SetPlayerHunger(0~20), 1点 = 半个鸡腿(原版饥饿值)
- 效果: AddEffectToEntity(effectName, 时长秒, amplifier)
- 饱食度: CreatePlayer(玩家ID).GetPlayerHunger/SetPlayerHunger(0~20, PlayerCompServer), 1点 = 半个鸡腿
- 效果: CreateEffect(玩家ID).AddEffectToEntity(effectName, 时长秒, amplifier, showParticles)
amplifier = 等级-1 (效果I=0, 效果II=1, ...)
- 冷却: 0.4 秒(防长按右键连吃刷屏)
================================================================================
@@ -23,8 +23,7 @@ import mod.server.extraServerApi as serverApi
ServerSystem = serverApi.GetServerSystemCls() # 服务端系统基类
comp = serverApi.GetEngineCompFactory() # 组件工厂
from ...BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
from ...BlueFoxTools.ToolsConfig import LevelId
from ....BlueFoxTools.SpecialFunciton.BlueFoxSystem import BlueFoxServerSystem
from ..ShiyongfoodData import EAT_RULE_MAP, TRY_USE_RULES, EFFECT_CN
@@ -144,23 +143,33 @@ class ShiyongfoodService(BlueFoxServerSystem):
def _applyFood(self, playerId, hunger, effects):
try:
# 饱食度【在现有值上累加】(不是覆盖): 当前值 + 回复值, 上限20点
attrComp = comp.CreateAttr(playerId)
cur = attrComp.GetPlayerHunger()
# 接口: CreatePlayer(玩家ID).GetPlayerHunger/SetPlayerHunger (PlayerCompServer)
playerComp = comp.CreatePlayer(playerId)
cur = playerComp.GetPlayerHunger()
if cur is None:
cur = 0
newVal = max(0.0, min(float(cur) + float(hunger), 20.0))
attrComp.SetPlayerHunger(newVal)
playerComp.SetPlayerHunger(newVal)
except Exception:
pass
if effects:
try:
effectComp = comp.CreateEffect(LevelId)
for name, dur, lvl in effects:
# 接口: CreateEffect(实体ID).AddEffectToEntity(effectName, duration, amplifier, showParticles)
# 效果I -> amplifier 0, 效果II -> amplifier 1 ...
effectComp.AddEffectToEntity(playerId, name, dur, lvl - 1, False)
comp.CreateEffect(playerId).AddEffectToEntity(
name, int(dur), max(0, min(int(lvl) - 1, 255)), False)
except Exception:
pass
# ====================================================================
# 工具: 获取玩家主手物品
# ====================================================================
def getCarriedItem(self, playerId):
itemComp = comp.CreateItem(playerId)
return itemComp.GetPlayerItem(
serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
# ====================================================================
# 工具: 替换/清除方块
# ====================================================================
@@ -190,14 +199,15 @@ class ShiyongfoodService(BlueFoxServerSystem):
def _notify(self, playerId, rule):
try:
hunger = rule.get("hunger", 0)
msg = "\u00a7a回复 %d 点饱食度" % hunger
# 用真正的 § 颜色符(与全模组一致), 不要写 "\u00a7" 转义(Py2 字节串不解释该转义, 会原样显示)
msg = "§a回复 %d 点饱食度" % hunger
effects = rule.get("effects", [])
if effects:
parts = []
for name, dur, lvl in effects:
cn = EFFECT_CN.get(name, name)
parts.append("%s%s(%d秒)" % (cn, self._roman(lvl), dur))
msg += ", 获得 " + " ".join(parts)
msg += "§a,获得 " + "§e" + "§a".join(parts)
comp.CreateMsg(playerId).NotifyOneMessage(playerId, msg)
except Exception:
pass