类 PlayerBlockManager
java.lang.Object
com.playerblocklife.PlayerBlockManager
玩家方块管理器 - 负责管理玩家生命方块的核心组件
主要职责:
- 生成和放置玩家生命方块
- 管理方块位置和所有者映射关系
- 处理方块破坏和恢复逻辑
- 提供方块数据持久化存储
- 支持方块位置查询和验证
- 与SkinManager协同工作,确保方块正确显示玩家皮肤
SkinsRestorer集成特性:
- 通过SkinManager获取SkinsRestorer提供的玩家皮肤纹理
- 确保离线服务器上的方块显示正确的自定义皮肤
- 支持异步皮肤加载,避免方块放置阻塞
- 提供皮肤加载状态检查,确保皮肤就绪后再放置方块
使用并发安全的数据结构确保多线程环境下的数据一致性。
- 从以下版本开始:
- 1.0.0
-
构造器概要
构造器 -
方法概要
修饰符和类型方法说明voidclearPlayerBlocks(UUID playerId) 清除玩家的所有生命方块booleangenerateLifeBlocksForPlayer(org.bukkit.entity.Player player, int blockAmount, int spreadRange, boolean requireOpenSky, int maxAttempts) 为玩家生成指定数量的生命方块获取所有方块的位置和所有者获取所有玩家的方块数据getBlockOwner(org.bukkit.Location location) 检查方块是否属于某个玩家org.bukkit.LocationgetNearestBlock(org.bukkit.entity.Player player) 获取距离玩家最近的方块getPlayerBlockLocations(UUID playerId) 获取玩家的生命方块位置列表(用于显示)List<org.bukkit.Location> getPlayerBlocks(UUID playerId) 获取玩家的所有生命方块位置int获取已注册玩家的数量intgetRemainingBlocks(UUID playerId) 获取玩家剩余方块数量getStats()获取所有生命方块的统计信息int获取总方块数量booleanhasLifeBlocks(UUID playerId) 检查玩家是否有生命方块booleanisLifeBlock(org.bukkit.Location location) 检查位置是否包含生命方块voidloadData()加载数据booleanregeneratePlayerBlocks(org.bukkit.entity.Player player) 重新生成玩家的生命方块booleanremoveBlock(org.bukkit.Location location, org.bukkit.entity.Player breaker) 移除方块(当被挖掘时)voidsaveData()保存数据booleansetLifeBlocks(org.bukkit.entity.Player player, org.bukkit.Location center) 为玩家设置生命方块(兼容旧方法)
-
构造器详细资料
-
PlayerBlockManager
-
-
方法详细资料
-
setLifeBlocks
public boolean setLifeBlocks(org.bukkit.entity.Player player, org.bukkit.Location center) 为玩家设置生命方块(兼容旧方法) -
generateLifeBlocksForPlayer
public boolean generateLifeBlocksForPlayer(org.bukkit.entity.Player player, int blockAmount, int spreadRange, boolean requireOpenSky, int maxAttempts) 为玩家生成指定数量的生命方块此方法负责生成玩家的生命方块,包括以下步骤:
- 检查玩家是否已有生命方块
- 验证玩家皮肤是否已从SkinsRestorer或其他来源加载完成
- 在指定范围内寻找合适的放置位置
- 放置带有玩家皮肤纹理的玩家头颅方块
- 记录方块位置和所有者关系
- 保存数据并返回生成结果
皮肤加载检查:
- 调用skinManager.isSkinLoaded()检查皮肤是否就绪
- 如果皮肤未加载,方块生成将失败
- 确保离线服务器通过SkinsRestorer获取的皮肤能正确应用
- 避免放置默认Steve皮肤的方块
- 参数:
player- 目标玩家blockAmount- 要生成的方块数量spreadRange- 生成范围(以玩家为中心的正方形边长的一半)requireOpenSky- 是否需要开阔天空(上方无方块覆盖)maxAttempts- 寻找合适位置的最大尝试次数- 返回:
- 生成成功返回true,失败返回false
- 另请参阅:
-
getBlockOwner
检查方块是否属于某个玩家 -
removeBlock
public boolean removeBlock(org.bukkit.Location location, org.bukkit.entity.Player breaker) 移除方块(当被挖掘时) -
getRemainingBlocks
获取玩家剩余方块数量 -
hasLifeBlocks
检查玩家是否有生命方块 -
getPlayerBlocks
获取玩家的所有生命方块位置 -
clearPlayerBlocks
清除玩家的所有生命方块 -
regeneratePlayerBlocks
public boolean regeneratePlayerBlocks(org.bukkit.entity.Player player) 重新生成玩家的生命方块 -
getPlayerBlocksCount
public int getPlayerBlocksCount()获取已注册玩家的数量 -
getTotalBlocksCount
public int getTotalBlocksCount()获取总方块数量 -
loadData
public void loadData()加载数据 -
saveData
public void saveData()保存数据 -
getAllPlayerBlocks
获取所有玩家的方块数据 -
getAllBlockOwners
获取所有方块的位置和所有者 -
isLifeBlock
public boolean isLifeBlock(org.bukkit.Location location) 检查位置是否包含生命方块 -
getPlayerBlockLocations
获取玩家的生命方块位置列表(用于显示) -
getNearestBlock
public org.bukkit.Location getNearestBlock(org.bukkit.entity.Player player) 获取距离玩家最近的方块 -
getStats
获取所有生命方块的统计信息
-