加入榨汁机 冰棍盒,炒冰盒 厨具架小bug

This commit is contained in:
wenhe committed 2026-09-29 17:14:43 +08:00
1 parent a7b56aec7d
commit 9d12baf1b2
25 files changed
+354 -227

No files matched your search

@@ -764,6 +764,81 @@ class BlueFoxServerSystem(serverBaseSystem):
serverCompFactory.CreateActorMotion(dropItemEntityId).SetMotion((x * 0.3, y * 0.5, z * 0.3))
return dropItemEntityId
def getCarriedItem(self, playerId):
"""获取玩家主手物品(统一实现)。子服务可覆写, 缺省走这里"""
itemComp = serverCompFactory.CreateItem(playerId)
return itemComp.GetPlayerItem(
serverApi.GetMinecraftEnum().ItemPosType.CARRIED, 0, True)
# ============================================================================
# 统一"主动获得物品"接口(任务一):
# 所有给玩家的物品一律按优先级分发, 而非直接掉落:
# 1) 背包(非主手)存在同类可叠加 -> +1 合并
# 2) 主手为空 -> 放到主手
# 3) 主手有物 -> 放入背包(同类叠加/空位)
# 4) 背包满且主手有物 -> 掉落物形式(在 pos 上方生成)
# 死亡生物屠宰 / 稻谷 需要保持"纯掉落"时请勿调用本方法(仍用 CreateEngineItemEntity)。
# ============================================================================
def giveItemToPlayer(self, playerId, itemName, count=1, pos=None, dim=None, aux=0, userData=None):
"""按统一优先级把物品给玩家。pos/dim 只在最终"掉落物"兜底时用(可为空)。
返回 True = 已成功放入(合并/主手/背包); False = 最终只能掉落或调用方无上下文。"""
itemDict = {"itemName": itemName, "count": count, "auxValue": aux}
if userData:
itemDict["userData"] = userData
try:
# 1) 背包同类合并
if self._mergeSameStackInv(playerId, itemName, count):
return True
# 2) 主手为空 -> 放主手
cur = self.getCarriedItem(playerId)
hand = (cur or {}).get("newItemName")
if not hand or hand == "minecraft:air":
try:
if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerCarried(
itemDict, playerId):
return True
except Exception:
pass
# 3) 放入背包(同类叠加/空位)
try:
if serverCompFactory.CreateItem(playerId).SpawnItemToPlayerInv(
itemDict, playerId):
return True
except Exception:
pass
except Exception:
pass
# 4) 掉落物兜底
if pos and dim:
try:
self.CreateEngineItemEntity(
itemDict, dim, (pos[0], pos[1] + 0.5, pos[2]))
except Exception:
pass
return False
def _mergeSameStackInv(self, playerId, itemName, count=1):
"""背包(主手除外)存在可叠加同种物品 -> 数量+count 合并。
返回 True=已合并; False=没有可合并的同种堆叠(不新增物品)。"""
itemComp = serverCompFactory.CreateItem(playerId)
enum = serverApi.GetMinecraftEnum().ItemPosType
try:
for i in range(0, 36):
d = itemComp.GetPlayerItem(enum.INVENTORY, i, True)
if not d:
continue
if d.get("newItemName") == itemName and (d.get("count") or 0) < 64:
newCount = (d.get("count") or 0) + count
itemComp.SetEntityItem(
enum.INVENTORY, i,
{"itemName": itemName, "count": newCount,
"auxValue": d.get("newAuxValue", 0),
"userData": d.get("userData", {})})
return True
except Exception:
return False
return False
@BlueFoxClientListener
def RucksackScreenClosed(self, args):
"""