类 PlayerBlockManager

java.lang.Object
com.playerblocklife.PlayerBlockManager

public class PlayerBlockManager extends Object
玩家方块管理器 - 负责管理玩家生命方块的核心组件

主要职责:

  • 生成和放置玩家生命方块
  • 管理方块位置和所有者映射关系
  • 处理方块破坏和恢复逻辑
  • 提供方块数据持久化存储
  • 支持方块位置查询和验证
  • 与SkinManager协同工作,确保方块正确显示玩家皮肤

SkinsRestorer集成特性:

  • 通过SkinManager获取SkinsRestorer提供的玩家皮肤纹理
  • 确保离线服务器上的方块显示正确的自定义皮肤
  • 支持异步皮肤加载,避免方块放置阻塞
  • 提供皮肤加载状态检查,确保皮肤就绪后再放置方块

使用并发安全的数据结构确保多线程环境下的数据一致性。

从以下版本开始:
1.0.0
  • 构造器详细资料

  • 方法详细资料

    • 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)
      为玩家生成指定数量的生命方块

      此方法负责生成玩家的生命方块,包括以下步骤:

      1. 检查玩家是否已有生命方块
      2. 验证玩家皮肤是否已从SkinsRestorer或其他来源加载完成
      3. 在指定范围内寻找合适的放置位置
      4. 放置带有玩家皮肤纹理的玩家头颅方块
      5. 记录方块位置和所有者关系
      6. 保存数据并返回生成结果

      皮肤加载检查:

      • 调用skinManager.isSkinLoaded()检查皮肤是否就绪
      • 如果皮肤未加载,方块生成将失败
      • 确保离线服务器通过SkinsRestorer获取的皮肤能正确应用
      • 避免放置默认Steve皮肤的方块

      参数:
      player - 目标玩家
      blockAmount - 要生成的方块数量
      spreadRange - 生成范围(以玩家为中心的正方形边长的一半)
      requireOpenSky - 是否需要开阔天空(上方无方块覆盖)
      maxAttempts - 寻找合适位置的最大尝试次数
      返回:
      生成成功返回true,失败返回false
      另请参阅:
    • getBlockOwner

      public UUID getBlockOwner(org.bukkit.Location location)
      检查方块是否属于某个玩家
    • removeBlock

      public boolean removeBlock(org.bukkit.Location location, org.bukkit.entity.Player breaker)
      移除方块(当被挖掘时)
    • getRemainingBlocks

      public int getRemainingBlocks(UUID playerId)
      获取玩家剩余方块数量
    • hasLifeBlocks

      public boolean hasLifeBlocks(UUID playerId)
      检查玩家是否有生命方块
    • getPlayerBlocks

      public List<org.bukkit.Location> getPlayerBlocks(UUID playerId)
      获取玩家的所有生命方块位置
    • clearPlayerBlocks

      public void clearPlayerBlocks(UUID playerId)
      清除玩家的所有生命方块
    • 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

      public Map<UUID,List<org.bukkit.Location>> getAllPlayerBlocks()
      获取所有玩家的方块数据
    • getAllBlockOwners

      public Map<org.bukkit.Location,UUID> getAllBlockOwners()
      获取所有方块的位置和所有者
    • isLifeBlock

      public boolean isLifeBlock(org.bukkit.Location location)
      检查位置是否包含生命方块
    • getPlayerBlockLocations

      public List<String> getPlayerBlockLocations(UUID playerId)
      获取玩家的生命方块位置列表(用于显示)
    • getNearestBlock

      public org.bukkit.Location getNearestBlock(org.bukkit.entity.Player player)
      获取距离玩家最近的方块
    • getStats

      public Map<String,Object> getStats()
      获取所有生命方块的统计信息