From f983a1640cd1bfb36eb66e66db865a4e4dc7da7c Mon Sep 17 00:00:00 2001 From: xiaobai Date: Sat, 14 Feb 2026 20:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E6=A1=A3=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 6 + javadoc/allclasses-index.html | 98 ++ javadoc/allpackages-index.html | 64 + .../com/playerblocklife/AdminCommands.html | 187 +++ .../playerblocklife/BlockBreakListener.html | 186 +++ .../CheckLifeBlocksCommand.html | 187 +++ .../com/playerblocklife/ConfigManager.html | 669 +++++++++ javadoc/com/playerblocklife/LifeSystem.html | 256 ++++ .../com/playerblocklife/MessageManager.html | 299 ++++ .../com/playerblocklife/PlayerBlockLife.html | 401 ++++++ .../playerblocklife/PlayerBlockManager.html | 472 ++++++ .../playerblocklife/PlayerJoinListener.html | 186 +++ .../playerblocklife/PlayerQuitListener.html | 177 +++ .../playerblocklife/SetLifeBlocksCommand.html | 187 +++ javadoc/com/playerblocklife/SkinManager.html | 296 ++++ .../class-use/AdminCommands.html | 57 + .../class-use/BlockBreakListener.html | 57 + .../class-use/CheckLifeBlocksCommand.html | 57 + .../class-use/ConfigManager.html | 75 + .../playerblocklife/class-use/LifeSystem.html | 75 + .../class-use/MessageManager.html | 75 + .../class-use/PlayerBlockLife.html | 119 ++ .../class-use/PlayerBlockManager.html | 75 + .../class-use/PlayerJoinListener.html | 57 + .../class-use/PlayerQuitListener.html | 57 + .../class-use/SetLifeBlocksCommand.html | 57 + .../class-use/SkinManager.html | 85 ++ .../com/playerblocklife/package-summary.html | 123 ++ javadoc/com/playerblocklife/package-tree.html | 86 ++ javadoc/com/playerblocklife/package-use.html | 92 ++ javadoc/copy.svg | 33 + javadoc/element-list | 1 + javadoc/help-doc.html | 183 +++ javadoc/index-files/index-1.html | 65 + javadoc/index-files/index-10.html | 81 ++ javadoc/index-files/index-11.html | 87 ++ javadoc/index-files/index-12.html | 87 ++ javadoc/index-files/index-13.html | 67 + javadoc/index-files/index-2.html | 65 + javadoc/index-files/index-3.html | 89 ++ javadoc/index-files/index-4.html | 191 +++ javadoc/index-files/index-5.html | 71 + javadoc/index-files/index-6.html | 103 ++ javadoc/index-files/index-7.html | 89 ++ javadoc/index-files/index-8.html | 65 + javadoc/index-files/index-9.html | 85 ++ javadoc/index.html | 26 + javadoc/legal/ADDITIONAL_LICENSE_INFO | 1 + javadoc/legal/ASSEMBLY_EXCEPTION | 1 + javadoc/legal/LICENSE | 1 + javadoc/legal/jquery.md | 26 + javadoc/legal/jqueryUI.md | 49 + javadoc/link.svg | 31 + javadoc/member-search-index.js | 1 + javadoc/module-search-index.js | 1 + javadoc/overview-tree.html | 90 ++ javadoc/package-search-index.js | 1 + javadoc/resources/glass.png | Bin 0 -> 499 bytes javadoc/resources/x.png | Bin 0 -> 394 bytes javadoc/script-dir/jquery-3.7.1.min.js | 2 + javadoc/script-dir/jquery-ui.min.css | 6 + javadoc/script-dir/jquery-ui.min.js | 6 + javadoc/script.js | 253 ++++ javadoc/search-page.js | 284 ++++ javadoc/search.html | 72 + javadoc/search.js | 458 ++++++ javadoc/stylesheet.css | 1272 +++++++++++++++++ javadoc/tag-search-index.js | 1 + javadoc/type-search-index.js | 1 + .../com/playerblocklife/ConfigManager.java | 3 +- 70 files changed, 8764 insertions(+), 2 deletions(-) create mode 100644 javadoc/allclasses-index.html create mode 100644 javadoc/allpackages-index.html create mode 100644 javadoc/com/playerblocklife/AdminCommands.html create mode 100644 javadoc/com/playerblocklife/BlockBreakListener.html create mode 100644 javadoc/com/playerblocklife/CheckLifeBlocksCommand.html create mode 100644 javadoc/com/playerblocklife/ConfigManager.html create mode 100644 javadoc/com/playerblocklife/LifeSystem.html create mode 100644 javadoc/com/playerblocklife/MessageManager.html create mode 100644 javadoc/com/playerblocklife/PlayerBlockLife.html create mode 100644 javadoc/com/playerblocklife/PlayerBlockManager.html create mode 100644 javadoc/com/playerblocklife/PlayerJoinListener.html create mode 100644 javadoc/com/playerblocklife/PlayerQuitListener.html create mode 100644 javadoc/com/playerblocklife/SetLifeBlocksCommand.html create mode 100644 javadoc/com/playerblocklife/SkinManager.html create mode 100644 javadoc/com/playerblocklife/class-use/AdminCommands.html create mode 100644 javadoc/com/playerblocklife/class-use/BlockBreakListener.html create mode 100644 javadoc/com/playerblocklife/class-use/CheckLifeBlocksCommand.html create mode 100644 javadoc/com/playerblocklife/class-use/ConfigManager.html create mode 100644 javadoc/com/playerblocklife/class-use/LifeSystem.html create mode 100644 javadoc/com/playerblocklife/class-use/MessageManager.html create mode 100644 javadoc/com/playerblocklife/class-use/PlayerBlockLife.html create mode 100644 javadoc/com/playerblocklife/class-use/PlayerBlockManager.html create mode 100644 javadoc/com/playerblocklife/class-use/PlayerJoinListener.html create mode 100644 javadoc/com/playerblocklife/class-use/PlayerQuitListener.html create mode 100644 javadoc/com/playerblocklife/class-use/SetLifeBlocksCommand.html create mode 100644 javadoc/com/playerblocklife/class-use/SkinManager.html create mode 100644 javadoc/com/playerblocklife/package-summary.html create mode 100644 javadoc/com/playerblocklife/package-tree.html create mode 100644 javadoc/com/playerblocklife/package-use.html create mode 100644 javadoc/copy.svg create mode 100644 javadoc/element-list create mode 100644 javadoc/help-doc.html create mode 100644 javadoc/index-files/index-1.html create mode 100644 javadoc/index-files/index-10.html create mode 100644 javadoc/index-files/index-11.html create mode 100644 javadoc/index-files/index-12.html create mode 100644 javadoc/index-files/index-13.html create mode 100644 javadoc/index-files/index-2.html create mode 100644 javadoc/index-files/index-3.html create mode 100644 javadoc/index-files/index-4.html create mode 100644 javadoc/index-files/index-5.html create mode 100644 javadoc/index-files/index-6.html create mode 100644 javadoc/index-files/index-7.html create mode 100644 javadoc/index-files/index-8.html create mode 100644 javadoc/index-files/index-9.html create mode 100644 javadoc/index.html create mode 100644 javadoc/legal/ADDITIONAL_LICENSE_INFO create mode 100644 javadoc/legal/ASSEMBLY_EXCEPTION create mode 100644 javadoc/legal/LICENSE create mode 100644 javadoc/legal/jquery.md create mode 100644 javadoc/legal/jqueryUI.md create mode 100644 javadoc/link.svg create mode 100644 javadoc/member-search-index.js create mode 100644 javadoc/module-search-index.js create mode 100644 javadoc/overview-tree.html create mode 100644 javadoc/package-search-index.js create mode 100644 javadoc/resources/glass.png create mode 100644 javadoc/resources/x.png create mode 100644 javadoc/script-dir/jquery-3.7.1.min.js create mode 100644 javadoc/script-dir/jquery-ui.min.css create mode 100644 javadoc/script-dir/jquery-ui.min.js create mode 100644 javadoc/script.js create mode 100644 javadoc/search-page.js create mode 100644 javadoc/search.html create mode 100644 javadoc/search.js create mode 100644 javadoc/stylesheet.css create mode 100644 javadoc/tag-search-index.js create mode 100644 javadoc/type-search-index.js diff --git a/.idea/misc.xml b/.idea/misc.xml index 0b92a2d..39106f1 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,12 @@ + + diff --git a/javadoc/allclasses-index.html b/javadoc/allclasses-index.html new file mode 100644 index 0000000..1c3d950 --- /dev/null +++ b/javadoc/allclasses-index.html @@ -0,0 +1,98 @@ + + + + +所有类和接口 + + + + + + + + + + + + + + +
+ +
+
+
+

所有类和接口

+
+
+
+
+
+
说明
+ +
 
+ +
 
+ +
 
+ +
+
配置管理器 - 负责加载、保存和管理插件的配置文件
+
+ +
+
生命值系统 - 负责管理玩家生命值和状态效果
+
+ +
 
+ +
+
PlayerBlockLife插件主类 - 玩家生命方块系统的核心控制器
+
+ +
+
玩家方块管理器 - 负责管理玩家生命方块的核心组件
+
+ +
 
+ +
 
+ +
 
+ +
+
皮肤管理器 - 负责玩家皮肤的获取、缓存和应用
+
+
+
+
+
+
+ + diff --git a/javadoc/allpackages-index.html b/javadoc/allpackages-index.html new file mode 100644 index 0000000..db123d2 --- /dev/null +++ b/javadoc/allpackages-index.html @@ -0,0 +1,64 @@ + + + + +所有程序包 + + + + + + + + + + + + + + +
+ +
+
+
+

所有程序包

+
+
程序包概要
+
+
程序包
+
说明
+ +
 
+
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/AdminCommands.html b/javadoc/com/playerblocklife/AdminCommands.html new file mode 100644 index 0000000..7329da8 --- /dev/null +++ b/javadoc/com/playerblocklife/AdminCommands.html @@ -0,0 +1,187 @@ + + + + +AdminCommands + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 AdminCommands

+
+
java.lang.Object +
com.playerblocklife.AdminCommands
+
+
+
+
所有已实现的接口:
+
org.bukkit.command.CommandExecutor
+
+
+
public class AdminCommands +extends Object +implements org.bukkit.command.CommandExecutor
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    + +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      onCommand

      +
      public boolean onCommand(org.bukkit.command.CommandSender sender, + org.bukkit.command.Command command, + String label, + String[] args)
      +
      +
      指定者:
      +
      onCommand 在接口中 org.bukkit.command.CommandExecutor
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/BlockBreakListener.html b/javadoc/com/playerblocklife/BlockBreakListener.html new file mode 100644 index 0000000..cd8cb8a --- /dev/null +++ b/javadoc/com/playerblocklife/BlockBreakListener.html @@ -0,0 +1,186 @@ + + + + +BlockBreakListener + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 BlockBreakListener

+
+
java.lang.Object +
com.playerblocklife.BlockBreakListener
+
+
+
+
所有已实现的接口:
+
org.bukkit.event.Listener
+
+
+
public class BlockBreakListener +extends Object +implements org.bukkit.event.Listener
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      BlockBreakListener

      +
      public BlockBreakListener(PlayerBlockLife plugin)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      onBlockBreak

      +
      public void onBlockBreak(org.bukkit.event.block.BlockBreakEvent event)
      +
      +
    • +
    • +
      +

      onBlockPlace

      +
      public void onBlockPlace(org.bukkit.event.block.BlockPlaceEvent event)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/CheckLifeBlocksCommand.html b/javadoc/com/playerblocklife/CheckLifeBlocksCommand.html new file mode 100644 index 0000000..e21abf9 --- /dev/null +++ b/javadoc/com/playerblocklife/CheckLifeBlocksCommand.html @@ -0,0 +1,187 @@ + + + + +CheckLifeBlocksCommand + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 CheckLifeBlocksCommand

+
+
java.lang.Object +
com.playerblocklife.CheckLifeBlocksCommand
+
+
+
+
所有已实现的接口:
+
org.bukkit.command.CommandExecutor
+
+
+
public class CheckLifeBlocksCommand +extends Object +implements org.bukkit.command.CommandExecutor
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      CheckLifeBlocksCommand

      +
      public CheckLifeBlocksCommand(PlayerBlockLife plugin)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      onCommand

      +
      public boolean onCommand(org.bukkit.command.CommandSender sender, + org.bukkit.command.Command command, + String label, + String[] args)
      +
      +
      指定者:
      +
      onCommand 在接口中 org.bukkit.command.CommandExecutor
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/ConfigManager.html b/javadoc/com/playerblocklife/ConfigManager.html new file mode 100644 index 0000000..fecb05b --- /dev/null +++ b/javadoc/com/playerblocklife/ConfigManager.html @@ -0,0 +1,669 @@ + + + + +ConfigManager + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 ConfigManager

+
+
java.lang.Object +
com.playerblocklife.ConfigManager
+
+
+
+
public class ConfigManager +extends Object
+
配置管理器 - 负责加载、保存和管理插件的配置文件 + +

主要功能包括: +

    +
  • 加载和验证配置文件
  • +
  • 配置版本检查和自动更新
  • +
  • 提供类型安全的配置项访问方法
  • +
  • 处理配置文件的保存和重载
  • +
  • 管理SkinsRestorer插件集成配置
  • +
  • 支持多种皮肤来源的优先级配置
  • +
+ +

SkinsRestorer配置支持: +

    +
  • skin.source:皮肤来源优先级(skinsrestorer/player_profile/local_cache)
  • +
  • skin.use-skinsrestorer:是否启用SkinsRestorer支持
  • +
  • skin.cache.expire_days:皮肤缓存过期时间
  • +
  • 默认配置已优化,优先使用SkinsRestorer以支持离线服务器
  • +
+

+
+
从以下版本开始:
+
1.0.0
+
版本:
+
2.1.0
+
作者:
+
xiaobai
+
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      ConfigManager

      +
      public ConfigManager(PlayerBlockLife plugin)
      +
      构造一个新的配置管理器
      +
      +
      参数:
      +
      plugin - 插件主类实例,用于访问插件相关功能
      +
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      loadConfig

      +
      public void loadConfig()
      +
      加载插件配置 + +

      执行以下操作: +

        +
      1. 确保插件数据文件夹存在
      2. +
      3. 如果配置文件不存在,从JAR中复制默认配置
      4. +
      5. 调用reloadConfig()重新加载配置
      6. +
      +
      +
      另请参阅:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      reloadConfig

      +
      public void reloadConfig()
      +
      重新加载配置文件 + +

      执行以下操作: +

        +
      1. 从磁盘重新加载配置文件
      2. +
      3. 加载JAR中的默认配置作为后备
      4. +
      5. 检查配置版本并进行必要的更新
      6. +
      +
      +
      另请参阅:
      +
      +
        +
      • checkConfigVersion()
      • +
      +
      +
      +
      +
    • +
    • +
      +

      saveConfig

      +
      public void saveConfig()
      +
      保存当前配置到文件 + +

      将内存中的配置数据写入到config.yml文件中。 + 如果保存失败,会记录错误日志。

      +
      +
      抛出:
      +
      IOException - 如果文件写入失败
      +
      +
      +
    • +
    • +
      +

      getConfig

      +
      public org.bukkit.configuration.file.FileConfiguration getConfig()
      +
      获取配置对象 + +

      如果配置对象为null,会自动调用reloadConfig()加载配置。

      +
      +
      返回:
      +
      当前的FileConfiguration配置对象
      +
      另请参阅:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      getBlocksPerPlayer

      +
      public int getBlocksPerPlayer()
      +
      +
    • +
    • +
      +

      getSpreadRange

      +
      public int getSpreadRange()
      +
      +
    • +
    • +
      +

      getMinDistance

      +
      public int getMinDistance()
      +
      +
    • +
    • +
      +

      getDepth

      +
      public int getDepth()
      +
      +
    • +
    • +
      +

      getBlockMaterial

      +
      public String getBlockMaterial()
      +
      +
    • +
    • +
      +

      isDieWhenBlocksGone

      +
      public boolean isDieWhenBlocksGone()
      +
      +
    • +
    • +
      +

      isBecomeSpectator

      +
      public boolean isBecomeSpectator()
      +
      +
    • +
    • +
      +

      isHealthSystemEnabled

      +
      public boolean isHealthSystemEnabled()
      +
      +
    • +
    • +
      +

      isSkinSystemEnabled

      +
      public boolean isSkinSystemEnabled()
      +
      +
    • +
    • +
      +

      getSkinSource

      +
      public String getSkinSource()
      +
      获取皮肤来源配置 + +

      支持的皮肤来源: +

        +
      • skinsrestorer:优先从SkinsRestorer插件获取皮肤纹理数据 +
          +
        • 推荐用于离线服务器
        • +
        • 支持玩家自定义皮肤
        • +
        • 避免默认Steve皮肤问题
        • +
        +
      • +
      • player_profile:优先使用Bukkit的PlayerProfile API +
          +
        • 需要玩家在线验证
        • +
        • 适合在线服务器
        • +
        • 支持Mojang官方皮肤
        • +
        +
      • +
      • local_cache:优先从本地缓存加载皮肤数据 +
          +
        • 减少网络请求
        • +
        • 提高加载速度
        • +
        • 支持离线使用
        • +
        +
      • +
      +

      + +

      默认配置已将此值设为"skinsrestorer",以优化离线服务器体验。

      +
      +
      返回:
      +
      皮肤来源配置值
      +
      另请参阅:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      useSkinsRestorer

      +
      public boolean useSkinsRestorer()
      +
      检查是否启用SkinsRestorer插件支持 + +

      当此方法返回true时,插件将: +

        +
      • 优先从SkinsRestorer插件获取玩家皮肤纹理
      • +
      • 支持离线服务器获取玩家自定义皮肤
      • +
      • 避免方块总是显示默认Steve皮肤的问题
      • +
      • 使用反射安全调用SkinsRestorer API,无需硬依赖
      • +
      +

      + +

      默认配置已将此值设为true,以优化离线服务器体验。

      +
      +
      返回:
      +
      如果启用SkinsRestorer支持返回true,否则返回false
      +
      另请参阅:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      getCacheExpireDays

      +
      public int getCacheExpireDays()
      +
      +
    • +
    • +
      +

      isAutoSaveEnabled

      +
      public boolean isAutoSaveEnabled()
      +
      +
    • +
    • +
      +

      getAutoSaveInterval

      +
      public int getAutoSaveInterval()
      +
      +
    • +
    • +
      +

      getStorageType

      +
      public String getStorageType()
      +
      +
    • +
    • +
      +

      isBroadcastOnBlockBreak

      +
      public boolean isBroadcastOnBlockBreak()
      +
      +
    • +
    • +
      +

      isBroadcastOnPlayerDeath

      +
      public boolean isBroadcastOnPlayerDeath()
      +
      +
    • +
    • +
      +

      getBroadcastRange

      +
      public int getBroadcastRange()
      +
      +
    • +
    • +
      +

      isGiveExpReward

      +
      public boolean isGiveExpReward()
      +
      +
    • +
    • +
      +

      getExpRewardAmount

      +
      public int getExpRewardAmount()
      +
      +
    • +
    • +
      +

      isProtectFromExplosions

      +
      public boolean isProtectFromExplosions()
      +
      +
    • +
    • +
      +

      isProtectFromFire

      +
      public boolean isProtectFromFire()
      +
      +
    • +
    • +
      +

      isProtectFromPistons

      +
      public boolean isProtectFromPistons()
      +
      +
    • +
    • +
      +

      isAutoGenerationEnabled

      +
      public boolean isAutoGenerationEnabled()
      +
      +
    • +
    • +
      +

      isRequireOpenSky

      +
      public boolean isRequireOpenSky()
      +
      +
    • +
    • +
      +

      getMaxAttempts

      +
      public int getMaxAttempts()
      +
      +
    • +
    • +
      +

      getOnFailureAction

      +
      public String getOnFailureAction()
      +
      +
    • +
    • +
      +

      isCommandEnabled

      +
      public boolean isCommandEnabled(String commandName)
      +
      +
    • +
    • +
      +

      isSelfUseAllowed

      +
      public boolean isSelfUseAllowed(String commandName)
      +
      +
    • +
    • +
      +

      isAdminUseAllowed

      +
      public boolean isAdminUseAllowed(String commandName)
      +
      +
    • +
    • +
      +

      isAdminOnly

      +
      public boolean isAdminOnly(String commandName)
      +
      +
    • +
    • +
      +

      useExternalMessageFile

      +
      public boolean useExternalMessageFile()
      +
      +
    • +
    • +
      +

      getExternalMessageFileName

      +
      public String getExternalMessageFileName()
      +
      +
    • +
    • +
      +

      getMessage

      +
      public String getMessage(String path, + String defaultValue)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/LifeSystem.html b/javadoc/com/playerblocklife/LifeSystem.html new file mode 100644 index 0000000..5e36b6a --- /dev/null +++ b/javadoc/com/playerblocklife/LifeSystem.html @@ -0,0 +1,256 @@ + + + + +LifeSystem + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 LifeSystem

+
+
java.lang.Object +
com.playerblocklife.LifeSystem
+
+
+
+
public class LifeSystem +extends Object
+
生命值系统 - 负责管理玩家生命值和状态效果 + +

根据玩家剩余生命方块数量计算生命值,并应用相应的状态效果: +

    +
  • 监控玩家剩余方块数量变化
  • +
  • 计算对应的生命值比例
  • +
  • 应用虚弱、缓慢、失明等负面效果
  • +
  • 处理玩家淘汰和复活逻辑
  • +
  • 提供生命值相关的音效和视觉反馈
  • +
+ +

生命值计算公式: +

+ 5个方块 → 20点生命值(满血)
+ 4个方块 → 16点生命值
+ 3个方块 → 12点生命值
+ 2个方块 → 8点生命值
+ 1个方块 → 4点生命值
+ 0个方块 → 0点生命值(淘汰)
+ 
+
+
从以下版本开始:
+
1.0.0
+
版本:
+
2.1.0
+
作者:
+
xiaobai
+
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    + +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      checkAllPlayers

      +
      public void checkAllPlayers()
      +
      +
    • +
    • +
      +

      checkPlayerHealth

      +
      public void checkPlayerHealth(org.bukkit.entity.Player player)
      +
      +
    • +
    • +
      +

      handlePlayerDeath

      +
      public void handlePlayerDeath(UUID playerId)
      +
      +
    • +
    • +
      +

      getPlayerHealth

      +
      public Integer getPlayerHealth(UUID playerId)
      +
      +
    • +
    • +
      +

      setPlayerHealth

      +
      public void setPlayerHealth(UUID playerId, + int health)
      +
      +
    • +
    • +
      +

      isPlayerAlive

      +
      public boolean isPlayerAlive(UUID playerId)
      +
      +
    • +
    • +
      +

      revivePlayer

      +
      public void revivePlayer(org.bukkit.entity.Player player)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/MessageManager.html b/javadoc/com/playerblocklife/MessageManager.html new file mode 100644 index 0000000..fea3f0f --- /dev/null +++ b/javadoc/com/playerblocklife/MessageManager.html @@ -0,0 +1,299 @@ + + + + +MessageManager + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 MessageManager

+
+
java.lang.Object +
com.playerblocklife.MessageManager
+
+
+
+
public class MessageManager +extends Object
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      MessageManager

      +
      public MessageManager(PlayerBlockLife plugin)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      loadMessages

      +
      public void loadMessages()
      +
      加载消息配置
      +
      +
    • +
    • +
      +

      reloadMessages

      +
      public void reloadMessages()
      +
      重新加载消息配置
      +
      +
    • +
    • +
      +

      getMessage

      +
      public String getMessage(String path, + String defaultValue)
      +
      获取消息
      +
      +
    • +
    • +
      +

      getFormattedMessage

      +
      public String getFormattedMessage(String path, + String defaultValue, + Map<String,String> variables)
      +
      获取格式化消息(替换变量)
      +
      +
    • +
    • +
      +

      getConsoleMessage

      +
      public String getConsoleMessage(String path, + String defaultValue)
      +
      获取控制台消息
      +
      +
    • +
    • +
      +

      getGameMessage

      +
      public String getGameMessage(String path, + String defaultValue)
      +
      获取游戏内消息
      +
      +
    • +
    • +
      +

      getCommandMessage

      +
      public String getCommandMessage(String command, + String path, + String defaultValue)
      +
      获取命令消息
      +
      +
    • +
    • +
      +

      getBroadcastMessage

      +
      public String getBroadcastMessage(String path, + String defaultValue)
      +
      获取广播消息
      +
      +
    • +
    • +
      +

      hasExternalMessageFile

      +
      public boolean hasExternalMessageFile()
      +
      检查消息文件是否存在
      +
      +
    • +
    • +
      +

      getMessageFilePath

      +
      public String getMessageFilePath()
      +
      获取消息文件路径
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/PlayerBlockLife.html b/javadoc/com/playerblocklife/PlayerBlockLife.html new file mode 100644 index 0000000..f4e159e --- /dev/null +++ b/javadoc/com/playerblocklife/PlayerBlockLife.html @@ -0,0 +1,401 @@ + + + + +PlayerBlockLife + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 PlayerBlockLife

+
+
java.lang.Object +
org.bukkit.plugin.PluginBase +
org.bukkit.plugin.java.JavaPlugin +
com.playerblocklife.PlayerBlockLife
+
+
+
+
+
+
所有已实现的接口:
+
io.papermc.paper.plugin.lifecycle.event.LifecycleEventOwner, org.bukkit.command.CommandExecutor, org.bukkit.command.TabCompleter, org.bukkit.command.TabExecutor, org.bukkit.plugin.Plugin
+
+
+
public class PlayerBlockLife +extends org.bukkit.plugin.java.JavaPlugin
+
PlayerBlockLife插件主类 - 玩家生命方块系统的核心控制器 + +

这个插件为Minecraft服务器添加了一个独特的游戏机制:每个玩家拥有一定数量的生命方块, + 这些方块使用玩家的皮肤作为材质。当其他玩家挖光某个玩家的所有生命方块时,该玩家会被淘汰。

+ +

主要功能: +

    +
  • 管理玩家生命方块的生成和销毁
  • +
  • 处理玩家皮肤的获取和应用
  • +
  • 监控玩家生命值状态
  • +
  • 提供完整的命令和权限系统
  • +
  • 支持配置热重载和数据持久化
  • +
+
+
从以下版本开始:
+
1.0.0
+
版本:
+
3.0.0-experimental-1.20.4
+
作者:
+
xiaobai
+
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      PlayerBlockLife

      +
      public PlayerBlockLife()
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      onEnable

      +
      public void onEnable()
      +
      插件启用时调用,执行初始化操作 + +

      初始化流程: +

        +
      1. 保存默认配置文件
      2. +
      3. 初始化所有管理器(注意依赖顺序)
      4. +
      5. 加载配置和消息数据
      6. +
      7. 注册事件监听器
      8. +
      9. 注册命令执行器
      10. +
      11. 加载玩家数据和皮肤缓存
      12. +
      13. 启动定时任务
      14. +
      +
      +
      指定者:
      +
      onEnable 在接口中 org.bukkit.plugin.Plugin
      +
      覆盖:
      +
      onEnable 在类中 org.bukkit.plugin.java.JavaPlugin
      +
      另请参阅:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      onDisable

      +
      public void onDisable()
      +
      插件禁用时调用,执行清理操作 + +

      执行以下清理操作: +

        +
      • 保存玩家方块数据到文件
      • +
      • 保存皮肤缓存数据
      • +
      • 记录插件禁用日志
      • +
      +
      +
      指定者:
      +
      onDisable 在接口中 org.bukkit.plugin.Plugin
      +
      覆盖:
      +
      onDisable 在类中 org.bukkit.plugin.java.JavaPlugin
      +
      另请参阅:
      +
      + +
      +
      +
      +
    • +
    • +
      +

      reloadConfig

      +
      public void reloadConfig()
      +
      重写 reloadConfig 方法,避免循环依赖
      +
      +
      指定者:
      +
      reloadConfig 在接口中 org.bukkit.plugin.Plugin
      +
      覆盖:
      +
      reloadConfig 在类中 org.bukkit.plugin.java.JavaPlugin
      +
      +
      +
    • +
    • +
      +

      reloadPluginConfig

      +
      public void reloadPluginConfig()
      +
      插件的完整重载方法(用于命令) + +

      重新加载所有插件配置和数据,包括: +

        +
      • 主配置文件 (config.yml)
      • +
      • 消息配置文件 (messages.yml)
      • +
      • 玩家方块数据
      • +
      • 皮肤缓存数据
      • +
      + +

      这个方法通常由管理员通过/pblreload命令调用。

      +
      +
    • +
    • +
      +

      getInstance

      +
      public static PlayerBlockLife getInstance()
      +
      获取插件单例实例 + +

      提供全局访问点,允许其他类访问插件主实例。

      +
      +
      返回:
      +
      PlayerBlockLife插件实例
      +
      抛出:
      +
      IllegalStateException - 如果插件尚未启用(实例为null)
      +
      +
      +
    • +
    • +
      +

      getBlockManager

      +
      public PlayerBlockManager getBlockManager()
      +
      +
    • +
    • +
      +

      getSkinManager

      +
      public SkinManager getSkinManager()
      +
      +
    • +
    • +
      +

      getLifeSystem

      +
      public LifeSystem getLifeSystem()
      +
      +
    • +
    • +
      +

      getConfigManager

      +
      public ConfigManager getConfigManager()
      +
      +
    • +
    • +
      +

      getMessageManager

      +
      public MessageManager getMessageManager()
      +
      +
    • +
    • +
      +

      logInfo

      +
      public void logInfo(String message)
      +
      +
    • +
    • +
      +

      logWarning

      +
      public void logWarning(String message)
      +
      +
    • +
    • +
      +

      logError

      +
      public void logError(String message, + Throwable throwable)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/PlayerBlockManager.html b/javadoc/com/playerblocklife/PlayerBlockManager.html new file mode 100644 index 0000000..b34a688 --- /dev/null +++ b/javadoc/com/playerblocklife/PlayerBlockManager.html @@ -0,0 +1,472 @@ + + + + +PlayerBlockManager + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 PlayerBlockManager

+
+
java.lang.Object +
com.playerblocklife.PlayerBlockManager
+
+
+
+
public class PlayerBlockManager +extends Object
+
玩家方块管理器 - 负责管理玩家生命方块的核心组件 + +

主要职责: +

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

SkinsRestorer集成特性: +

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

+ +

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

+
+
从以下版本开始:
+
1.0.0
+
版本:
+
2.1.0
+
作者:
+
xiaobai
+
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    + +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      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. +
      3. 验证玩家皮肤是否已从SkinsRestorer或其他来源加载完成
      4. +
      5. 在指定范围内寻找合适的放置位置
      6. +
      7. 放置带有玩家皮肤纹理的玩家头颅方块
      8. +
      9. 记录方块位置和所有者关系
      10. +
      11. 保存数据并返回生成结果
      12. +
      +

      + +

      皮肤加载检查: +

        +
      • 调用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()
      +
      获取所有生命方块的统计信息
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/PlayerJoinListener.html b/javadoc/com/playerblocklife/PlayerJoinListener.html new file mode 100644 index 0000000..6919511 --- /dev/null +++ b/javadoc/com/playerblocklife/PlayerJoinListener.html @@ -0,0 +1,186 @@ + + + + +PlayerJoinListener + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 PlayerJoinListener

+
+
java.lang.Object +
com.playerblocklife.PlayerJoinListener
+
+
+
+
所有已实现的接口:
+
org.bukkit.event.Listener
+
+
+
public class PlayerJoinListener +extends Object +implements org.bukkit.event.Listener
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      PlayerJoinListener

      +
      public PlayerJoinListener(PlayerBlockLife plugin)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      onPlayerJoin

      +
      public void onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent event)
      +
      +
    • +
    • +
      +

      onPlayerRespawn

      +
      public void onPlayerRespawn(org.bukkit.event.player.PlayerRespawnEvent event)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/PlayerQuitListener.html b/javadoc/com/playerblocklife/PlayerQuitListener.html new file mode 100644 index 0000000..55a7a78 --- /dev/null +++ b/javadoc/com/playerblocklife/PlayerQuitListener.html @@ -0,0 +1,177 @@ + + + + +PlayerQuitListener + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 PlayerQuitListener

+
+
java.lang.Object +
com.playerblocklife.PlayerQuitListener
+
+
+
+
所有已实现的接口:
+
org.bukkit.event.Listener
+
+
+
public class PlayerQuitListener +extends Object +implements org.bukkit.event.Listener
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      PlayerQuitListener

      +
      public PlayerQuitListener(PlayerBlockLife plugin)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      onPlayerQuit

      +
      public void onPlayerQuit(org.bukkit.event.player.PlayerQuitEvent event)
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/SetLifeBlocksCommand.html b/javadoc/com/playerblocklife/SetLifeBlocksCommand.html new file mode 100644 index 0000000..336d3ee --- /dev/null +++ b/javadoc/com/playerblocklife/SetLifeBlocksCommand.html @@ -0,0 +1,187 @@ + + + + +SetLifeBlocksCommand + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 SetLifeBlocksCommand

+
+
java.lang.Object +
com.playerblocklife.SetLifeBlocksCommand
+
+
+
+
所有已实现的接口:
+
org.bukkit.command.CommandExecutor
+
+
+
public class SetLifeBlocksCommand +extends Object +implements org.bukkit.command.CommandExecutor
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    +
      +
    • +
      +

      SetLifeBlocksCommand

      +
      public SetLifeBlocksCommand(PlayerBlockLife plugin)
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      onCommand

      +
      public boolean onCommand(org.bukkit.command.CommandSender sender, + org.bukkit.command.Command command, + String label, + String[] args)
      +
      +
      指定者:
      +
      onCommand 在接口中 org.bukkit.command.CommandExecutor
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/SkinManager.html b/javadoc/com/playerblocklife/SkinManager.html new file mode 100644 index 0000000..80185d1 --- /dev/null +++ b/javadoc/com/playerblocklife/SkinManager.html @@ -0,0 +1,296 @@ + + + + +SkinManager + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

类 SkinManager

+
+
java.lang.Object +
com.playerblocklife.SkinManager
+
+
+
+
public class SkinManager +extends Object
+
皮肤管理器 - 负责玩家皮肤的获取、缓存和应用 + +

主要功能: +

    +
  • 从多种来源获取玩家皮肤数据(SkinsRestorer插件、PlayerProfile、本地缓存)
  • +
  • 皮肤数据Base64编码和缓存管理
  • +
  • 自定义模型数据分配和管理
  • +
  • 异步皮肤加载避免阻塞主线程
  • +
  • 皮肤缓存过期清理
  • +
  • 完整的SkinsRestorer插件集成支持
  • +
+ +

皮肤获取优先级(根据配置的source字段): +

    +
  1. skinsrestorer:优先从SkinsRestorer插件获取皮肤纹理数据
  2. +
  3. player_profile:优先使用Bukkit的PlayerProfile API
  4. +
  5. local_cache:优先从本地缓存加载
  6. +
  7. 默认Steve皮肤(所有来源都失败时的备用)
  8. +
+ +

SkinsRestorer集成特性: +

    +
  • 自动检测SkinsRestorer插件是否安装
  • +
  • 使用反射安全调用SkinsRestorer API,避免硬依赖
  • +
  • 获取完整的皮肤纹理数据(value和signature)
  • +
  • 支持离线服务器,避免默认Steve皮肤问题
  • +
  • 优雅降级:SkinsRestorer失败时自动回退到其他来源
  • +
+ +

皮肤缓存默认保留7天,过期后自动重新获取。

+
+
从以下版本开始:
+
1.0.0
+
版本:
+
2.1.0
+
作者:
+
xiaobai
+
+
+
+ +
+
+
    + +
  • +
    +

    构造器详细资料

    + +
    +
  • + +
  • +
    +

    方法详细资料

    +
      +
    • +
      +

      loadAllSkins

      +
      public void loadAllSkins()
      +
      +
    • +
    • +
      +

      loadPlayerSkinAsync

      +
      public void loadPlayerSkinAsync(org.bukkit.entity.Player player)
      +
      +
    • +
    • +
      +

      createPlayerHead

      +
      public org.bukkit.inventory.ItemStack createPlayerHead(UUID playerId, + String playerName)
      +
      创建带有玩家皮肤的头颅物品 + +

      使用Base64纹理数据创建自定义玩家头颅,支持离线服务器皮肤显示。

      +
      +
      参数:
      +
      playerId - 玩家UUID
      +
      playerName - 玩家名称
      +
      返回:
      +
      带有玩家皮肤的玩家头颅物品
      +
      +
      +
    • +
    • +
      +

      isSkinLoaded

      +
      public boolean isSkinLoaded(UUID playerId)
      +
      +
    • +
    • +
      +

      getCustomModelData

      +
      public Integer getCustomModelData(UUID playerId)
      +
      +
    • +
    • +
      +

      getAllSkinData

      +
      public Map<UUID,String> getAllSkinData()
      +
      +
    • +
    • +
      +

      getAllCustomModelData

      +
      public Map<UUID,Integer> getAllCustomModelData()
      +
      +
    • +
    • +
      +

      saveSkinData

      +
      public void saveSkinData()
      +
      +
    • +
    • +
      +

      cleanupOldCache

      +
      public void cleanupOldCache()
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/AdminCommands.html b/javadoc/com/playerblocklife/class-use/AdminCommands.html new file mode 100644 index 0000000..5a85525 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/AdminCommands.html @@ -0,0 +1,57 @@ + + + + +类 com.playerblocklife.AdminCommands的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.AdminCommands

+
+没有com.playerblocklife.AdminCommands的用法
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/BlockBreakListener.html b/javadoc/com/playerblocklife/class-use/BlockBreakListener.html new file mode 100644 index 0000000..60c7771 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/BlockBreakListener.html @@ -0,0 +1,57 @@ + + + + +类 com.playerblocklife.BlockBreakListener的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.BlockBreakListener

+
+没有com.playerblocklife.BlockBreakListener的用法
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/CheckLifeBlocksCommand.html b/javadoc/com/playerblocklife/class-use/CheckLifeBlocksCommand.html new file mode 100644 index 0000000..041eea8 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/CheckLifeBlocksCommand.html @@ -0,0 +1,57 @@ + + + + +类 com.playerblocklife.CheckLifeBlocksCommand的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.CheckLifeBlocksCommand

+
+没有com.playerblocklife.CheckLifeBlocksCommand的用法
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/ConfigManager.html b/javadoc/com/playerblocklife/class-use/ConfigManager.html new file mode 100644 index 0000000..8d11e6f --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/ConfigManager.html @@ -0,0 +1,75 @@ + + + + +类 com.playerblocklife.ConfigManager的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.ConfigManager

+
+
+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/LifeSystem.html b/javadoc/com/playerblocklife/class-use/LifeSystem.html new file mode 100644 index 0000000..e1724d4 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/LifeSystem.html @@ -0,0 +1,75 @@ + + + + +类 com.playerblocklife.LifeSystem的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.LifeSystem

+
+
+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/MessageManager.html b/javadoc/com/playerblocklife/class-use/MessageManager.html new file mode 100644 index 0000000..3518ed8 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/MessageManager.html @@ -0,0 +1,75 @@ + + + + +类 com.playerblocklife.MessageManager的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.MessageManager

+
+
+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/PlayerBlockLife.html b/javadoc/com/playerblocklife/class-use/PlayerBlockLife.html new file mode 100644 index 0000000..27b89f6 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/PlayerBlockLife.html @@ -0,0 +1,119 @@ + + + + +类 com.playerblocklife.PlayerBlockLife的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.PlayerBlockLife

+
+
+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/PlayerBlockManager.html b/javadoc/com/playerblocklife/class-use/PlayerBlockManager.html new file mode 100644 index 0000000..192e31e --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/PlayerBlockManager.html @@ -0,0 +1,75 @@ + + + + +类 com.playerblocklife.PlayerBlockManager的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.PlayerBlockManager

+
+
+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/PlayerJoinListener.html b/javadoc/com/playerblocklife/class-use/PlayerJoinListener.html new file mode 100644 index 0000000..90f3959 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/PlayerJoinListener.html @@ -0,0 +1,57 @@ + + + + +类 com.playerblocklife.PlayerJoinListener的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.PlayerJoinListener

+
+没有com.playerblocklife.PlayerJoinListener的用法
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/PlayerQuitListener.html b/javadoc/com/playerblocklife/class-use/PlayerQuitListener.html new file mode 100644 index 0000000..4d8bf8c --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/PlayerQuitListener.html @@ -0,0 +1,57 @@ + + + + +类 com.playerblocklife.PlayerQuitListener的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.PlayerQuitListener

+
+没有com.playerblocklife.PlayerQuitListener的用法
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/SetLifeBlocksCommand.html b/javadoc/com/playerblocklife/class-use/SetLifeBlocksCommand.html new file mode 100644 index 0000000..da875d6 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/SetLifeBlocksCommand.html @@ -0,0 +1,57 @@ + + + + +类 com.playerblocklife.SetLifeBlocksCommand的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.SetLifeBlocksCommand

+
+没有com.playerblocklife.SetLifeBlocksCommand的用法
+
+
+ + diff --git a/javadoc/com/playerblocklife/class-use/SkinManager.html b/javadoc/com/playerblocklife/class-use/SkinManager.html new file mode 100644 index 0000000..644d342 --- /dev/null +++ b/javadoc/com/playerblocklife/class-use/SkinManager.html @@ -0,0 +1,85 @@ + + + + +类 com.playerblocklife.SkinManager的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

类的使用
com.playerblocklife.SkinManager

+
+
+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/package-summary.html b/javadoc/com/playerblocklife/package-summary.html new file mode 100644 index 0000000..3a261ca --- /dev/null +++ b/javadoc/com/playerblocklife/package-summary.html @@ -0,0 +1,123 @@ + + + + +com.playerblocklife + + + + + + + + + + + + + + +
+ +
+
+
+

程序包 com.playerblocklife

+
+
+
package com.playerblocklife
+
+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/package-tree.html b/javadoc/com/playerblocklife/package-tree.html new file mode 100644 index 0000000..d5dd9d9 --- /dev/null +++ b/javadoc/com/playerblocklife/package-tree.html @@ -0,0 +1,86 @@ + + + + +com.playerblocklife 类分层结构 + + + + + + + + + + + + + + +
+ +
+
+
+

程序包com.playerblocklife的分层结构

+
+
+

类分层结构

+ +
+
+
+
+ + diff --git a/javadoc/com/playerblocklife/package-use.html b/javadoc/com/playerblocklife/package-use.html new file mode 100644 index 0000000..b8234ba --- /dev/null +++ b/javadoc/com/playerblocklife/package-use.html @@ -0,0 +1,92 @@ + + + + +程序包 com.playerblocklife的使用 + + + + + + + + + + + + + + +
+ +
+
+
+

程序包的使用
com.playerblocklife

+
+
+ +
+
+
+
+ + diff --git a/javadoc/copy.svg b/javadoc/copy.svg new file mode 100644 index 0000000..7c46ab1 --- /dev/null +++ b/javadoc/copy.svg @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/javadoc/element-list b/javadoc/element-list new file mode 100644 index 0000000..1922ff0 --- /dev/null +++ b/javadoc/element-list @@ -0,0 +1 @@ +com.playerblocklife diff --git a/javadoc/help-doc.html b/javadoc/help-doc.html new file mode 100644 index 0000000..14be97b --- /dev/null +++ b/javadoc/help-doc.html @@ -0,0 +1,183 @@ + + + + +API 帮助 + + + + + + + + + + + + + + +
+ +
+
+

JavaDoc 帮助

+ +
+
+

导航

+从 概览 页开始,您可以使用每页中的链接以及每页顶部导航栏中的链接来浏览文档。 使用 索引 和搜索框可以导航到特定声明和概要页,包括:所有程序包, 所有类和接口 + +
+
+
+

页面类型

+以下各部分介绍了此集合中不同类型的页面。 +
+

程序包

+

每个程序包都有一页,其中包含它的类和接口的列表及其概要。这些页可以包含以下类别:

+
    +
  • 接口
  • +
  • +
  • 枚举类
  • +
  • 异常错误类
  • +
  • 批注接口
  • +
+
+
+

类或接口

+

每个类、接口、嵌套类和嵌套接口都有自己独立的页面。如果这些部分中每个部分的条目为空或不适用,则省略这些条目。

+
    +
  • 类继承图
  • +
  • 直接子类
  • +
  • 所有已知子接口
  • +
  • 所有已知实现类
  • +
  • 类或接口声明
  • +
  • 类或接口说明
  • +
+
+
    +
  • 嵌套类概要
  • +
  • 枚举常量概要
  • +
  • 字段概要
  • +
  • 属性概要
  • +
  • 构造器概要
  • +
  • 方法概要
  • +
  • 必需元素概要
  • +
  • 可选元素概要
  • +
+
+
    +
  • 枚举常量详细资料
  • +
  • 字段详细资料
  • +
  • 属性详细资料
  • +
  • 构造器详细资料
  • +
  • 方法详细资料
  • +
  • 元素详细资料
  • +
+

注: 批注接口有必需的元素和可选的元素,但没有方法。 只有枚举类有枚举常量。 记录类的组件显示为记录类声明的一部分。 属性是 JavaFX 的一个特性。

+

概要条目按字母顺序排列,而详细说明则按其在源代码中出现的顺序排列。这有助于保持程序员所建立的逻辑分组。

+
+
+

其他文件

+

程序包和模块所包含的页面中可能带有与附近声明相关的附加信息。

+
+
+

使用

+

每个已文档化的程序包、类和接口都有各自的“使用”页面。此页面介绍了使用给定类或程序包的任何部分的程序包、类、方法、构造器和字段。对于给定的类或接口 A,其“使用”页面包含 A 的子类、声明为 A 的字段、返回 A 的方法,以及带有类型为 A 的参数的方法和构造器。访问此页面的方法是:首先转至程序包、类或接口,然后单击导航栏中的“使用”链接。

+
+
+

树 (类分层结构)

+

对于所有程序包,都有一个 类分层结构 页,以及每个程序包的分层结构。每个分层结构页都包含类的列表和接口的列表。从 java.lang.Object 开始,按继承结构对类进行排列。接口不从 java.lang.Object 继承。

+
    +
  • 查看“概览”页面时,单击“树”将显示所有程序包的分层结构。
  • +
  • 查看特定程序包、类或接口页时,单击“树”将仅显示该程序包的分层结构。
  • +
+
+
+

所有程序包

+

所有程序包 包含文档中所有程序包的按字母顺序排列的索引。

+
+
+

所有类和接口

+

所有类和接口 包含文档中所有类和接口(包括批注接口、枚举类和记录类)的按字母顺序排列的索引。

+
+
+

索引

+

索引 包含文档中所有类、接口、构造器、方法和字段的按字母顺序排列的索引,以及概要页(例如 所有程序包, 所有类和接口)。

+
+
+
+此帮助文件适用于由标准 doclet 生成的 API 文档。
+
+
+ + diff --git a/javadoc/index-files/index-1.html b/javadoc/index-files/index-1.html new file mode 100644 index 0000000..09ca566 --- /dev/null +++ b/javadoc/index-files/index-1.html @@ -0,0 +1,65 @@ + + + + +A - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

A

+
+
AdminCommands - com.playerblocklife中的类
+
 
+
AdminCommands(PlayerBlockLife) - 类的构造器 com.playerblocklife.AdminCommands
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-10.html b/javadoc/index-files/index-10.html new file mode 100644 index 0000000..df27d9c --- /dev/null +++ b/javadoc/index-files/index-10.html @@ -0,0 +1,81 @@ + + + + +P - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

P

+
+
PlayerBlockLife - com.playerblocklife中的类
+
+
PlayerBlockLife插件主类 - 玩家生命方块系统的核心控制器
+
+
PlayerBlockLife() - 类的构造器 com.playerblocklife.PlayerBlockLife
+
 
+
PlayerBlockManager - com.playerblocklife中的类
+
+
玩家方块管理器 - 负责管理玩家生命方块的核心组件
+
+
PlayerBlockManager(PlayerBlockLife, SkinManager) - 类的构造器 com.playerblocklife.PlayerBlockManager
+
 
+
PlayerJoinListener - com.playerblocklife中的类
+
 
+
PlayerJoinListener(PlayerBlockLife) - 类的构造器 com.playerblocklife.PlayerJoinListener
+
 
+
PlayerQuitListener - com.playerblocklife中的类
+
 
+
PlayerQuitListener(PlayerBlockLife) - 类的构造器 com.playerblocklife.PlayerQuitListener
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-11.html b/javadoc/index-files/index-11.html new file mode 100644 index 0000000..b4612cf --- /dev/null +++ b/javadoc/index-files/index-11.html @@ -0,0 +1,87 @@ + + + + +R - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

R

+
+
regeneratePlayerBlocks(Player) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
重新生成玩家的生命方块
+
+
reloadConfig() - 类中的方法 com.playerblocklife.ConfigManager
+
+
重新加载配置文件
+
+
reloadConfig() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
+
重写 reloadConfig 方法,避免循环依赖
+
+
reloadMessages() - 类中的方法 com.playerblocklife.MessageManager
+
+
重新加载消息配置
+
+
reloadPluginConfig() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
+
插件的完整重载方法(用于命令)
+
+
removeBlock(Location, Player) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
移除方块(当被挖掘时)
+
+
revivePlayer(Player) - 类中的方法 com.playerblocklife.LifeSystem
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-12.html b/javadoc/index-files/index-12.html new file mode 100644 index 0000000..4044b6f --- /dev/null +++ b/javadoc/index-files/index-12.html @@ -0,0 +1,87 @@ + + + + +S - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

S

+
+
saveConfig() - 类中的方法 com.playerblocklife.ConfigManager
+
+
保存当前配置到文件
+
+
saveData() - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
保存数据
+
+
saveSkinData() - 类中的方法 com.playerblocklife.SkinManager
+
 
+
setLifeBlocks(Player, Location) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
为玩家设置生命方块(兼容旧方法)
+
+
SetLifeBlocksCommand - com.playerblocklife中的类
+
 
+
SetLifeBlocksCommand(PlayerBlockLife) - 类的构造器 com.playerblocklife.SetLifeBlocksCommand
+
 
+
setPlayerHealth(UUID, int) - 类中的方法 com.playerblocklife.LifeSystem
+
 
+
SkinManager - com.playerblocklife中的类
+
+
皮肤管理器 - 负责玩家皮肤的获取、缓存和应用
+
+
SkinManager(PlayerBlockLife) - 类的构造器 com.playerblocklife.SkinManager
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-13.html b/javadoc/index-files/index-13.html new file mode 100644 index 0000000..00ef5aa --- /dev/null +++ b/javadoc/index-files/index-13.html @@ -0,0 +1,67 @@ + + + + +U - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

U

+
+
useExternalMessageFile() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
useSkinsRestorer() - 类中的方法 com.playerblocklife.ConfigManager
+
+
检查是否启用SkinsRestorer插件支持
+
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-2.html b/javadoc/index-files/index-2.html new file mode 100644 index 0000000..1bb1acb --- /dev/null +++ b/javadoc/index-files/index-2.html @@ -0,0 +1,65 @@ + + + + +B - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

B

+
+
BlockBreakListener - com.playerblocklife中的类
+
 
+
BlockBreakListener(PlayerBlockLife) - 类的构造器 com.playerblocklife.BlockBreakListener
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-3.html b/javadoc/index-files/index-3.html new file mode 100644 index 0000000..3196d26 --- /dev/null +++ b/javadoc/index-files/index-3.html @@ -0,0 +1,89 @@ + + + + +C - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

C

+
+
checkAllPlayers() - 类中的方法 com.playerblocklife.LifeSystem
+
 
+
CheckLifeBlocksCommand - com.playerblocklife中的类
+
 
+
CheckLifeBlocksCommand(PlayerBlockLife) - 类的构造器 com.playerblocklife.CheckLifeBlocksCommand
+
 
+
checkPlayerHealth(Player) - 类中的方法 com.playerblocklife.LifeSystem
+
 
+
cleanupOldCache() - 类中的方法 com.playerblocklife.SkinManager
+
 
+
clearPlayerBlocks(UUID) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
清除玩家的所有生命方块
+
+
com.playerblocklife - 程序包 com.playerblocklife
+
 
+
ConfigManager - com.playerblocklife中的类
+
+
配置管理器 - 负责加载、保存和管理插件的配置文件
+
+
ConfigManager(PlayerBlockLife) - 类的构造器 com.playerblocklife.ConfigManager
+
+
构造一个新的配置管理器
+
+
createPlayerHead(UUID, String) - 类中的方法 com.playerblocklife.SkinManager
+
+
创建带有玩家皮肤的头颅物品
+
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-4.html b/javadoc/index-files/index-4.html new file mode 100644 index 0000000..ebba9ab --- /dev/null +++ b/javadoc/index-files/index-4.html @@ -0,0 +1,191 @@ + + + + +G - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

G

+
+
generateLifeBlocksForPlayer(Player, int, int, boolean, int) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
为玩家生成指定数量的生命方块
+
+
getAllBlockOwners() - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取所有方块的位置和所有者
+
+
getAllCustomModelData() - 类中的方法 com.playerblocklife.SkinManager
+
 
+
getAllPlayerBlocks() - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取所有玩家的方块数据
+
+
getAllSkinData() - 类中的方法 com.playerblocklife.SkinManager
+
 
+
getAutoSaveInterval() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getBlockManager() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
getBlockMaterial() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getBlockOwner(Location) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
检查方块是否属于某个玩家
+
+
getBlocksPerPlayer() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getBroadcastMessage(String, String) - 类中的方法 com.playerblocklife.MessageManager
+
+
获取广播消息
+
+
getBroadcastRange() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getCacheExpireDays() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getCommandMessage(String, String, String) - 类中的方法 com.playerblocklife.MessageManager
+
+
获取命令消息
+
+
getConfig() - 类中的方法 com.playerblocklife.ConfigManager
+
+
获取配置对象
+
+
getConfigManager() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
getConsoleMessage(String, String) - 类中的方法 com.playerblocklife.MessageManager
+
+
获取控制台消息
+
+
getCustomModelData(UUID) - 类中的方法 com.playerblocklife.SkinManager
+
 
+
getDepth() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getExpRewardAmount() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getExternalMessageFileName() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getFormattedMessage(String, String, Map<String, String>) - 类中的方法 com.playerblocklife.MessageManager
+
+
获取格式化消息(替换变量)
+
+
getGameMessage(String, String) - 类中的方法 com.playerblocklife.MessageManager
+
+
获取游戏内消息
+
+
getInstance() - 类中的静态方法 com.playerblocklife.PlayerBlockLife
+
+
获取插件单例实例
+
+
getLifeSystem() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
getMaxAttempts() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getMessage(String, String) - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getMessage(String, String) - 类中的方法 com.playerblocklife.MessageManager
+
+
获取消息
+
+
getMessageFilePath() - 类中的方法 com.playerblocklife.MessageManager
+
+
获取消息文件路径
+
+
getMessageManager() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
getMinDistance() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getNearestBlock(Player) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取距离玩家最近的方块
+
+
getOnFailureAction() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getPlayerBlockLocations(UUID) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取玩家的生命方块位置列表(用于显示)
+
+
getPlayerBlocks(UUID) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取玩家的所有生命方块位置
+
+
getPlayerBlocksCount() - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取已注册玩家的数量
+
+
getPlayerHealth(UUID) - 类中的方法 com.playerblocklife.LifeSystem
+
 
+
getRemainingBlocks(UUID) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取玩家剩余方块数量
+
+
getSkinManager() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
getSkinSource() - 类中的方法 com.playerblocklife.ConfigManager
+
+
获取皮肤来源配置
+
+
getSpreadRange() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getStats() - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取所有生命方块的统计信息
+
+
getStorageType() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
getTotalBlocksCount() - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
获取总方块数量
+
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-5.html b/javadoc/index-files/index-5.html new file mode 100644 index 0000000..0a001a5 --- /dev/null +++ b/javadoc/index-files/index-5.html @@ -0,0 +1,71 @@ + + + + +H - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

H

+
+
handlePlayerDeath(UUID) - 类中的方法 com.playerblocklife.LifeSystem
+
 
+
hasExternalMessageFile() - 类中的方法 com.playerblocklife.MessageManager
+
+
检查消息文件是否存在
+
+
hasLifeBlocks(UUID) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
检查玩家是否有生命方块
+
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-6.html b/javadoc/index-files/index-6.html new file mode 100644 index 0000000..a3d60df --- /dev/null +++ b/javadoc/index-files/index-6.html @@ -0,0 +1,103 @@ + + + + +I - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

I

+
+
isAdminOnly(String) - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isAdminUseAllowed(String) - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isAutoGenerationEnabled() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isAutoSaveEnabled() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isBecomeSpectator() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isBroadcastOnBlockBreak() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isBroadcastOnPlayerDeath() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isCommandEnabled(String) - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isDieWhenBlocksGone() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isGiveExpReward() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isHealthSystemEnabled() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isLifeBlock(Location) - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
检查位置是否包含生命方块
+
+
isPlayerAlive(UUID) - 类中的方法 com.playerblocklife.LifeSystem
+
 
+
isProtectFromExplosions() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isProtectFromFire() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isProtectFromPistons() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isRequireOpenSky() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isSelfUseAllowed(String) - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
isSkinLoaded(UUID) - 类中的方法 com.playerblocklife.SkinManager
+
 
+
isSkinSystemEnabled() - 类中的方法 com.playerblocklife.ConfigManager
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-7.html b/javadoc/index-files/index-7.html new file mode 100644 index 0000000..e9a0c54 --- /dev/null +++ b/javadoc/index-files/index-7.html @@ -0,0 +1,89 @@ + + + + +L - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

L

+
+
LifeSystem - com.playerblocklife中的类
+
+
生命值系统 - 负责管理玩家生命值和状态效果
+
+
LifeSystem(PlayerBlockLife) - 类的构造器 com.playerblocklife.LifeSystem
+
 
+
loadAllSkins() - 类中的方法 com.playerblocklife.SkinManager
+
 
+
loadConfig() - 类中的方法 com.playerblocklife.ConfigManager
+
+
加载插件配置
+
+
loadData() - 类中的方法 com.playerblocklife.PlayerBlockManager
+
+
加载数据
+
+
loadMessages() - 类中的方法 com.playerblocklife.MessageManager
+
+
加载消息配置
+
+
loadPlayerSkinAsync(Player) - 类中的方法 com.playerblocklife.SkinManager
+
 
+
logError(String, Throwable) - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
logInfo(String) - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
logWarning(String) - 类中的方法 com.playerblocklife.PlayerBlockLife
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-8.html b/javadoc/index-files/index-8.html new file mode 100644 index 0000000..36252e4 --- /dev/null +++ b/javadoc/index-files/index-8.html @@ -0,0 +1,65 @@ + + + + +M - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

M

+
+
MessageManager - com.playerblocklife中的类
+
 
+
MessageManager(PlayerBlockLife) - 类的构造器 com.playerblocklife.MessageManager
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index-files/index-9.html b/javadoc/index-files/index-9.html new file mode 100644 index 0000000..d9d2837 --- /dev/null +++ b/javadoc/index-files/index-9.html @@ -0,0 +1,85 @@ + + + + +O - 索引 + + + + + + + + + + + + + + +
+ +
+
+
+

索引

+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口 +

O

+
+
onBlockBreak(BlockBreakEvent) - 类中的方法 com.playerblocklife.BlockBreakListener
+
 
+
onBlockPlace(BlockPlaceEvent) - 类中的方法 com.playerblocklife.BlockBreakListener
+
 
+
onCommand(CommandSender, Command, String, String[]) - 类中的方法 com.playerblocklife.AdminCommands
+
 
+
onCommand(CommandSender, Command, String, String[]) - 类中的方法 com.playerblocklife.CheckLifeBlocksCommand
+
 
+
onCommand(CommandSender, Command, String, String[]) - 类中的方法 com.playerblocklife.SetLifeBlocksCommand
+
 
+
onDisable() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
+
插件禁用时调用,执行清理操作
+
+
onEnable() - 类中的方法 com.playerblocklife.PlayerBlockLife
+
+
插件启用时调用,执行初始化操作
+
+
onPlayerJoin(PlayerJoinEvent) - 类中的方法 com.playerblocklife.PlayerJoinListener
+
 
+
onPlayerQuit(PlayerQuitEvent) - 类中的方法 com.playerblocklife.PlayerQuitListener
+
 
+
onPlayerRespawn(PlayerRespawnEvent) - 类中的方法 com.playerblocklife.PlayerJoinListener
+
 
+
+A B C G H I L M O P R S U 
所有程序包|所有类和接口
+
+
+ + diff --git a/javadoc/index.html b/javadoc/index.html new file mode 100644 index 0000000..78069b8 --- /dev/null +++ b/javadoc/index.html @@ -0,0 +1,26 @@ + + + + +生成的文档 (无标题) + + + + + + + + + + + +
+ +

com/playerblocklife/package-summary.html

+
+ + diff --git a/javadoc/legal/ADDITIONAL_LICENSE_INFO b/javadoc/legal/ADDITIONAL_LICENSE_INFO new file mode 100644 index 0000000..b62cc3e --- /dev/null +++ b/javadoc/legal/ADDITIONAL_LICENSE_INFO @@ -0,0 +1 @@ +Please see ..\java.base\ADDITIONAL_LICENSE_INFO diff --git a/javadoc/legal/ASSEMBLY_EXCEPTION b/javadoc/legal/ASSEMBLY_EXCEPTION new file mode 100644 index 0000000..0d4cfb4 --- /dev/null +++ b/javadoc/legal/ASSEMBLY_EXCEPTION @@ -0,0 +1 @@ +Please see ..\java.base\ASSEMBLY_EXCEPTION diff --git a/javadoc/legal/LICENSE b/javadoc/legal/LICENSE new file mode 100644 index 0000000..4ad9fe4 --- /dev/null +++ b/javadoc/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/javadoc/legal/jquery.md b/javadoc/legal/jquery.md new file mode 100644 index 0000000..a763ec6 --- /dev/null +++ b/javadoc/legal/jquery.md @@ -0,0 +1,26 @@ +## jQuery v3.7.1 + +### jQuery License +``` +jQuery v 3.7.1 +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` diff --git a/javadoc/legal/jqueryUI.md b/javadoc/legal/jqueryUI.md new file mode 100644 index 0000000..46bfbaa --- /dev/null +++ b/javadoc/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.14.1 + +### jQuery UI License +``` +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/javadoc/link.svg b/javadoc/link.svg new file mode 100644 index 0000000..7ccc5ed --- /dev/null +++ b/javadoc/link.svg @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/javadoc/member-search-index.js b/javadoc/member-search-index.js new file mode 100644 index 0000000..c1834bb --- /dev/null +++ b/javadoc/member-search-index.js @@ -0,0 +1 @@ +memberSearchIndex = [{"p":"com.playerblocklife","c":"AdminCommands","l":"AdminCommands(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"BlockBreakListener","l":"BlockBreakListener(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"LifeSystem","l":"checkAllPlayers()"},{"p":"com.playerblocklife","c":"CheckLifeBlocksCommand","l":"CheckLifeBlocksCommand(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"LifeSystem","l":"checkPlayerHealth(Player)","u":"checkPlayerHealth(org.bukkit.entity.Player)"},{"p":"com.playerblocklife","c":"SkinManager","l":"cleanupOldCache()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"clearPlayerBlocks(UUID)","u":"clearPlayerBlocks(java.util.UUID)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"ConfigManager(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"SkinManager","l":"createPlayerHead(UUID, String)","u":"createPlayerHead(java.util.UUID,java.lang.String)"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"generateLifeBlocksForPlayer(Player, int, int, boolean, int)","u":"generateLifeBlocksForPlayer(org.bukkit.entity.Player,int,int,boolean,int)"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getAllBlockOwners()"},{"p":"com.playerblocklife","c":"SkinManager","l":"getAllCustomModelData()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getAllPlayerBlocks()"},{"p":"com.playerblocklife","c":"SkinManager","l":"getAllSkinData()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getAutoSaveInterval()"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"getBlockManager()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getBlockMaterial()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getBlockOwner(Location)","u":"getBlockOwner(org.bukkit.Location)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getBlocksPerPlayer()"},{"p":"com.playerblocklife","c":"MessageManager","l":"getBroadcastMessage(String, String)","u":"getBroadcastMessage(java.lang.String,java.lang.String)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getBroadcastRange()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getCacheExpireDays()"},{"p":"com.playerblocklife","c":"MessageManager","l":"getCommandMessage(String, String, String)","u":"getCommandMessage(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getConfig()"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"getConfigManager()"},{"p":"com.playerblocklife","c":"MessageManager","l":"getConsoleMessage(String, String)","u":"getConsoleMessage(java.lang.String,java.lang.String)"},{"p":"com.playerblocklife","c":"SkinManager","l":"getCustomModelData(UUID)","u":"getCustomModelData(java.util.UUID)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getDepth()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getExpRewardAmount()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getExternalMessageFileName()"},{"p":"com.playerblocklife","c":"MessageManager","l":"getFormattedMessage(String, String, Map)","u":"getFormattedMessage(java.lang.String,java.lang.String,java.util.Map)"},{"p":"com.playerblocklife","c":"MessageManager","l":"getGameMessage(String, String)","u":"getGameMessage(java.lang.String,java.lang.String)"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"getInstance()"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"getLifeSystem()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getMaxAttempts()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getMessage(String, String)","u":"getMessage(java.lang.String,java.lang.String)"},{"p":"com.playerblocklife","c":"MessageManager","l":"getMessage(String, String)","u":"getMessage(java.lang.String,java.lang.String)"},{"p":"com.playerblocklife","c":"MessageManager","l":"getMessageFilePath()"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"getMessageManager()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getMinDistance()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getNearestBlock(Player)","u":"getNearestBlock(org.bukkit.entity.Player)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getOnFailureAction()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getPlayerBlockLocations(UUID)","u":"getPlayerBlockLocations(java.util.UUID)"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getPlayerBlocks(UUID)","u":"getPlayerBlocks(java.util.UUID)"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getPlayerBlocksCount()"},{"p":"com.playerblocklife","c":"LifeSystem","l":"getPlayerHealth(UUID)","u":"getPlayerHealth(java.util.UUID)"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getRemainingBlocks(UUID)","u":"getRemainingBlocks(java.util.UUID)"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"getSkinManager()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getSkinSource()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getSpreadRange()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getStats()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"getStorageType()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"getTotalBlocksCount()"},{"p":"com.playerblocklife","c":"LifeSystem","l":"handlePlayerDeath(UUID)","u":"handlePlayerDeath(java.util.UUID)"},{"p":"com.playerblocklife","c":"MessageManager","l":"hasExternalMessageFile()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"hasLifeBlocks(UUID)","u":"hasLifeBlocks(java.util.UUID)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isAdminOnly(String)","u":"isAdminOnly(java.lang.String)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isAdminUseAllowed(String)","u":"isAdminUseAllowed(java.lang.String)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isAutoGenerationEnabled()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isAutoSaveEnabled()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isBecomeSpectator()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isBroadcastOnBlockBreak()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isBroadcastOnPlayerDeath()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isCommandEnabled(String)","u":"isCommandEnabled(java.lang.String)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isDieWhenBlocksGone()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isGiveExpReward()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isHealthSystemEnabled()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"isLifeBlock(Location)","u":"isLifeBlock(org.bukkit.Location)"},{"p":"com.playerblocklife","c":"LifeSystem","l":"isPlayerAlive(UUID)","u":"isPlayerAlive(java.util.UUID)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isProtectFromExplosions()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isProtectFromFire()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isProtectFromPistons()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isRequireOpenSky()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isSelfUseAllowed(String)","u":"isSelfUseAllowed(java.lang.String)"},{"p":"com.playerblocklife","c":"SkinManager","l":"isSkinLoaded(UUID)","u":"isSkinLoaded(java.util.UUID)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"isSkinSystemEnabled()"},{"p":"com.playerblocklife","c":"LifeSystem","l":"LifeSystem(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"SkinManager","l":"loadAllSkins()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"loadConfig()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"loadData()"},{"p":"com.playerblocklife","c":"MessageManager","l":"loadMessages()"},{"p":"com.playerblocklife","c":"SkinManager","l":"loadPlayerSkinAsync(Player)","u":"loadPlayerSkinAsync(org.bukkit.entity.Player)"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"logError(String, Throwable)","u":"logError(java.lang.String,java.lang.Throwable)"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"logInfo(String)","u":"logInfo(java.lang.String)"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"logWarning(String)","u":"logWarning(java.lang.String)"},{"p":"com.playerblocklife","c":"MessageManager","l":"MessageManager(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"BlockBreakListener","l":"onBlockBreak(BlockBreakEvent)","u":"onBlockBreak(org.bukkit.event.block.BlockBreakEvent)"},{"p":"com.playerblocklife","c":"BlockBreakListener","l":"onBlockPlace(BlockPlaceEvent)","u":"onBlockPlace(org.bukkit.event.block.BlockPlaceEvent)"},{"p":"com.playerblocklife","c":"AdminCommands","l":"onCommand(CommandSender, Command, String, String[])","u":"onCommand(org.bukkit.command.CommandSender,org.bukkit.command.Command,java.lang.String,java.lang.String[])"},{"p":"com.playerblocklife","c":"CheckLifeBlocksCommand","l":"onCommand(CommandSender, Command, String, String[])","u":"onCommand(org.bukkit.command.CommandSender,org.bukkit.command.Command,java.lang.String,java.lang.String[])"},{"p":"com.playerblocklife","c":"SetLifeBlocksCommand","l":"onCommand(CommandSender, Command, String, String[])","u":"onCommand(org.bukkit.command.CommandSender,org.bukkit.command.Command,java.lang.String,java.lang.String[])"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"onDisable()"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"onEnable()"},{"p":"com.playerblocklife","c":"PlayerJoinListener","l":"onPlayerJoin(PlayerJoinEvent)","u":"onPlayerJoin(org.bukkit.event.player.PlayerJoinEvent)"},{"p":"com.playerblocklife","c":"PlayerQuitListener","l":"onPlayerQuit(PlayerQuitEvent)","u":"onPlayerQuit(org.bukkit.event.player.PlayerQuitEvent)"},{"p":"com.playerblocklife","c":"PlayerJoinListener","l":"onPlayerRespawn(PlayerRespawnEvent)","u":"onPlayerRespawn(org.bukkit.event.player.PlayerRespawnEvent)"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"PlayerBlockLife()","u":"%3Cinit%3E()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"PlayerBlockManager(PlayerBlockLife, SkinManager)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife,com.playerblocklife.SkinManager)"},{"p":"com.playerblocklife","c":"PlayerJoinListener","l":"PlayerJoinListener(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"PlayerQuitListener","l":"PlayerQuitListener(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"regeneratePlayerBlocks(Player)","u":"regeneratePlayerBlocks(org.bukkit.entity.Player)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"reloadConfig()"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"reloadConfig()"},{"p":"com.playerblocklife","c":"MessageManager","l":"reloadMessages()"},{"p":"com.playerblocklife","c":"PlayerBlockLife","l":"reloadPluginConfig()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"removeBlock(Location, Player)","u":"removeBlock(org.bukkit.Location,org.bukkit.entity.Player)"},{"p":"com.playerblocklife","c":"LifeSystem","l":"revivePlayer(Player)","u":"revivePlayer(org.bukkit.entity.Player)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"saveConfig()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"saveData()"},{"p":"com.playerblocklife","c":"SkinManager","l":"saveSkinData()"},{"p":"com.playerblocklife","c":"PlayerBlockManager","l":"setLifeBlocks(Player, Location)","u":"setLifeBlocks(org.bukkit.entity.Player,org.bukkit.Location)"},{"p":"com.playerblocklife","c":"SetLifeBlocksCommand","l":"SetLifeBlocksCommand(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"LifeSystem","l":"setPlayerHealth(UUID, int)","u":"setPlayerHealth(java.util.UUID,int)"},{"p":"com.playerblocklife","c":"SkinManager","l":"SkinManager(PlayerBlockLife)","u":"%3Cinit%3E(com.playerblocklife.PlayerBlockLife)"},{"p":"com.playerblocklife","c":"ConfigManager","l":"useExternalMessageFile()"},{"p":"com.playerblocklife","c":"ConfigManager","l":"useSkinsRestorer()"}];updateSearchResults(); \ No newline at end of file diff --git a/javadoc/module-search-index.js b/javadoc/module-search-index.js new file mode 100644 index 0000000..0d59754 --- /dev/null +++ b/javadoc/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/javadoc/overview-tree.html b/javadoc/overview-tree.html new file mode 100644 index 0000000..887d30e --- /dev/null +++ b/javadoc/overview-tree.html @@ -0,0 +1,90 @@ + + + + +类分层结构 + + + + + + + + + + + + + + +
+ +
+
+
+

所有程序包的分层结构

+
+程序包分层结构: + +
+

类分层结构

+ +
+
+
+
+ + diff --git a/javadoc/package-search-index.js b/javadoc/package-search-index.js new file mode 100644 index 0000000..61da5d5 --- /dev/null +++ b/javadoc/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"com.playerblocklife"},{"l":"所有程序包","u":"allpackages-index.html"}];updateSearchResults(); \ No newline at end of file diff --git a/javadoc/resources/glass.png b/javadoc/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/javadoc/script-dir/jquery-3.7.1.min.js b/javadoc/script-dir/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/javadoc/script-dir/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0{"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(x){x.ui=x.ui||{};x.ui.version="1.14.1";var n,s,C,k,o,l,a,r,u,i,h=0,c=Array.prototype.hasOwnProperty,d=Array.prototype.slice;x.cleanData=(n=x.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=x._data(i,"events"))&&e.remove&&x(i).triggerHandler("remove");n(t)}),x.widget=function(t,i,e){var s,n,o,l,a={},r=t.split(".")[0];return"__proto__"===(t=t.split(".")[1])||"constructor"===t?x.error("Invalid widget name: "+t):(l=r+"-"+t,e||(e=i,i=x.Widget),Array.isArray(e)&&(e=x.extend.apply(null,[{}].concat(e))),x.expr.pseudos[l.toLowerCase()]=function(t){return!!x.data(t,l)},x[r]=x[r]||{},s=x[r][t],n=x[r][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},x.extend(n,s,{version:e.version,_proto:x.extend({},e),_childConstructors:[]}),(o=new i).options=x.widget.extend({},o.options),x.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}a[e]="function"!=typeof s?s:function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}}),n.prototype=x.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},a,{constructor:n,namespace:r,widgetName:t,widgetFullName:l}),s?(x.each(s._childConstructors,function(t,e){var i=e.prototype;x.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),x.widget.bridge(t,n),n)},x.widget.extend=function(t){for(var e,i,s=d.call(arguments,1),n=0,o=s.length;n",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n{var i=[];n.element.each(function(t,e){x.map(l.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),l._on(x(i),{remove:"_untrackClassesElement"})})(),x(x.uniqueSort(i.get().concat(n.element.get())))):x(i.not(n.element).get()),l.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=x.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;x.each(s.classesElementLookup,function(t,e){-1!==x.inArray(i.target,e)&&(s.classesElementLookup[t]=x(e.not(i.target).get()))}),this._off(x(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,e={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return e.element.toggleClass(this._classes(e),s),this},_on:function(n,o,t){var l,a=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=l=x(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,l=this.widget()),x.each(t,function(t,e){function i(){if(n||!0!==a.options.disabled&&!x(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||x.guid++);var t=t.match(/^([\w:-]*)\s*(.*)$/),s=t[1]+a.eventNamespace,t=t[2];t?l.on(s,t,i):o.on(s,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=x(this.bindings.not(t).get()),this.focusable=x(this.focusable.not(t).get()),this.hoverable=x(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(x(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(x(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(x(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(x(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=x.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},x.each({show:"fadeIn",hide:"fadeOut"},function(o,l){x.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t)?!0!==t&&"number"!=typeof t&&t.effect||l:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!x.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&x.effects&&x.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){x(this)[o](),i&&i.call(e[0]),t()})}}),x.widget;function E(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function T(t,e){return parseInt(x.css(t,e),10)||0}function W(t){return null!=t&&t===t.window}C=Math.max,k=Math.abs,o=/left|center|right/,l=/top|center|bottom/,a=/[\+\-]\d+(\.[\d]+)?%?/,r=/^\w+/,u=/%$/,i=x.fn.position,x.position={scrollbarWidth:function(){var t,e,i;return void 0!==s?s:(i=(e=x("
")).children()[0],x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i)},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthC(k(s),k(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})):i.apply(this,arguments)},x.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,s=s.width,o=t.left-e.collisionPosition.marginLeft,l=n-o,a=o+e.collisionWidth-s-n;s",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(this.document[0].activeElement);!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active)&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],this.document[0].activeElement)||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]!==i[0])||i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),t=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(t,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),e=(i=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(i,"ui-menu-item")._addClass(e,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(e=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,i=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-e-i,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&"true"===this.element.prop("contentEditable"),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)i=!1,this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault();else if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){n?(n=!1,t.preventDefault()):this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("
    ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent)&&/^mouse/.test(t.originalEvent.type)?(this.menu.blur(),this.document.one("mousemove",function(){x(t.target).trigger(t.originalEvent)})):(s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("
    ").text(i))},100)))},menuselect:function(t,e){var e=e.item.data("ui-autocomplete-item"),i=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.trigger("focus"),this.previous=i),!1!==this._trigger("select",t,{item:e})&&this._value(e.value),this.term=this._value(),this.close(t),this.selectedItem=e}}),this.liveRegion=x("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||x.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=(t=(t=t&&(t.jquery||t.nodeType?x(t):this.document.find(t).eq(0)))&&t[0]?t:this.element.closest(".ui-front, dialog")).length?t:this.document[0].body},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(x.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=x.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(x("
    ").text(e.label)).appendTo(t)},_move:function(t,e){this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur()):this.menu[t](e):this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())}}),x.extend(x.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(x.ui.autocomplete.escapeRegex(e),"i");return x.grep(t,function(t){return i.test(t.label||t.value||t)})}}),x.widget("ui.autocomplete",x.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e))},100))}}),x.ui.autocomplete}); \ No newline at end of file diff --git a/javadoc/script.js b/javadoc/script.js new file mode 100644 index 0000000..bb9c8a2 --- /dev/null +++ b/javadoc/script.js @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; + +var oddRowColor = "odd-row-color"; +var evenRowColor = "even-row-color"; +var sortAsc = "sort-asc"; +var sortDesc = "sort-desc"; +var tableTab = "table-tab"; +var activeTableTab = "active-table-tab"; + +function loadScripts(doc, tag) { + createElem(doc, tag, 'search.js'); + + createElem(doc, tag, 'module-search-index.js'); + createElem(doc, tag, 'package-search-index.js'); + createElem(doc, tag, 'type-search-index.js'); + createElem(doc, tag, 'member-search-index.js'); + createElem(doc, tag, 'tag-search-index.js'); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +// Helper for making content containing release names comparable lexicographically +function makeComparable(s) { + return s.toLowerCase().replace(/(\d+)/g, + function(n, m) { + return ("000" + m).slice(-4); + }); +} + +// Switches between two styles depending on a condition +function toggleStyle(classList, condition, trueStyle, falseStyle) { + if (condition) { + classList.remove(falseStyle); + classList.add(trueStyle); + } else { + classList.remove(trueStyle); + classList.add(falseStyle); + } +} + +// Sorts the rows in a table lexicographically by the content of a specific column +function sortTable(header, columnIndex, columns) { + var container = header.parentElement; + var descending = header.classList.contains(sortAsc); + container.querySelectorAll("div.table-header").forEach( + function(header) { + header.classList.remove(sortAsc); + header.classList.remove(sortDesc); + } + ) + var cells = container.children; + var rows = []; + for (var i = columns; i < cells.length; i += columns) { + rows.push(Array.prototype.slice.call(cells, i, i + columns)); + } + var comparator = function(a, b) { + var ka = makeComparable(a[columnIndex].textContent); + var kb = makeComparable(b[columnIndex].textContent); + if (ka < kb) + return descending ? 1 : -1; + if (ka > kb) + return descending ? -1 : 1; + return 0; + }; + var sorted = rows.sort(comparator); + var visible = 0; + sorted.forEach(function(row) { + if (row[0].style.display !== 'none') { + var isEvenRow = visible++ % 2 === 0; + } + row.forEach(function(cell) { + toggleStyle(cell.classList, isEvenRow, evenRowColor, oddRowColor); + container.appendChild(cell); + }) + }); + toggleStyle(header.classList, descending, sortDesc, sortAsc); +} + +// Toggles the visibility of a table category in all tables in a page +function toggleGlobal(checkbox, selected, columns) { + var display = checkbox.checked ? '' : 'none'; + document.querySelectorAll("div.table-tabs").forEach(function(t) { + var id = t.parentElement.getAttribute("id"); + var selectedClass = id + "-tab" + selected; + // if selected is empty string it selects all uncategorized entries + var selectUncategorized = !Boolean(selected); + var visible = 0; + document.querySelectorAll('div.' + id) + .forEach(function(elem) { + if (selectUncategorized) { + if (elem.className.indexOf(selectedClass) === -1) { + elem.style.display = display; + } + } else if (elem.classList.contains(selectedClass)) { + elem.style.display = display; + } + if (elem.style.display === '') { + var isEvenRow = visible++ % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + } + }); + var displaySection = visible === 0 ? 'none' : ''; + t.parentElement.style.display = displaySection; + document.querySelector("li#contents-" + id).style.display = displaySection; + }) +} + +// Shows the elements of a table belonging to a specific category +function show(tableId, selected, columns) { + if (tableId !== selected) { + document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') + .forEach(function(elem) { + elem.style.display = 'none'; + }); + } + document.querySelectorAll('div.' + selected) + .forEach(function(elem, index) { + elem.style.display = ''; + var isEvenRow = index % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + }); + updateTabs(tableId, selected); +} + +function updateTabs(tableId, selected) { + document.getElementById(tableId + '.tabpanel') + .setAttribute('aria-labelledby', selected); + document.querySelectorAll('button[id^="' + tableId + '"]') + .forEach(function(tab, index) { + if (selected === tab.id || (tableId === selected && index === 0)) { + tab.className = activeTableTab; + tab.setAttribute('aria-selected', true); + tab.setAttribute('tabindex',0); + } else { + tab.className = tableTab; + tab.setAttribute('aria-selected', false); + tab.setAttribute('tabindex',-1); + } + }); +} + +function switchTab(e) { + var selected = document.querySelector('[aria-selected=true]'); + if (selected) { + if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { + // left or up arrow key pressed: move focus to previous tab + selected.previousSibling.click(); + selected.previousSibling.focus(); + e.preventDefault(); + } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { + // right or down arrow key pressed: move focus to next tab + selected.nextSibling.click(); + selected.nextSibling.focus(); + e.preventDefault(); + } + } +} + +var updateSearchResults = function() {}; + +function indexFilesLoaded() { + return moduleSearchIndex + && packageSearchIndex + && typeSearchIndex + && memberSearchIndex + && tagSearchIndex; +} +// Copy the contents of the local snippet to the clipboard +function copySnippet(button) { + copyToClipboard(button.nextElementSibling.innerText); + switchCopyLabel(button, button.firstElementChild); +} +function copyToClipboard(content) { + var textarea = document.createElement("textarea"); + textarea.style.height = 0; + document.body.appendChild(textarea); + textarea.value = content; + textarea.select(); + document.execCommand("copy"); + document.body.removeChild(textarea); +} +function switchCopyLabel(button, span) { + var copied = span.getAttribute("data-copied"); + button.classList.add("visible"); + var initialLabel = span.innerHTML; + span.innerHTML = copied; + setTimeout(function() { + button.classList.remove("visible"); + setTimeout(function() { + if (initialLabel !== copied) { + span.innerHTML = initialLabel; + } + }, 100); + }, 1900); +} +// Workaround for scroll position not being included in browser history (8249133) +document.addEventListener("DOMContentLoaded", function(e) { + var contentDiv = document.querySelector("div.flex-content"); + window.addEventListener("popstate", function(e) { + if (e.state !== null) { + contentDiv.scrollTop = e.state; + } + }); + window.addEventListener("hashchange", function(e) { + history.replaceState(contentDiv.scrollTop, document.title); + }); + var timeoutId; + contentDiv.addEventListener("scroll", function(e) { + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(function() { + history.replaceState(contentDiv.scrollTop, document.title); + }, 100); + }); + if (!location.hash) { + history.replaceState(contentDiv.scrollTop, document.title); + } +}); diff --git a/javadoc/search-page.js b/javadoc/search-page.js new file mode 100644 index 0000000..540c90f --- /dev/null +++ b/javadoc/search-page.js @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +"use strict"; +$(function() { + var copy = $("#page-search-copy"); + var expand = $("#page-search-expand"); + var searchLink = $("span#page-search-link"); + var redirect = $("input#search-redirect"); + function setSearchUrlTemplate() { + var href = document.location.href.split(/[#?]/)[0]; + href += "?q=" + "%s"; + if (redirect.is(":checked")) { + href += "&r=1"; + } + searchLink.html(href); + copy[0].onmouseenter(); + } + function copyLink(e) { + copyToClipboard(this.previousSibling.innerText); + switchCopyLabel(this, this.lastElementChild); + } + copy.click(copyLink); + copy[0].onmouseenter = function() {}; + redirect.click(setSearchUrlTemplate); + setSearchUrlTemplate(); + copy.prop("disabled", false); + redirect.prop("disabled", false); + expand.click(function (e) { + var searchInfo = $("div.page-search-info"); + if(this.parentElement.hasAttribute("open")) { + searchInfo.attr("style", "border-width: 0;"); + } else { + searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight")); + } + }); +}); +$(window).on("load", function() { + var input = $("#page-search-input"); + var reset = $("#page-search-reset"); + var notify = $("#page-search-notify"); + var resultSection = $("div#result-section"); + var resultContainer = $("div#result-container"); + var searchTerm = ""; + var activeTab = ""; + var fixedTab = false; + var visibleTabs = []; + var feelingLucky = false; + function renderResults(result) { + if (!result.length) { + notify.html(messages.noResult); + } else if (result.length === 1) { + notify.html(messages.oneResult); + } else { + notify.html(messages.manyResults.replace("{0}", result.length)); + } + resultContainer.empty(); + var r = { + "types": [], + "members": [], + "packages": [], + "modules": [], + "searchTags": [] + }; + for (var i in result) { + var item = result[i]; + var arr = r[item.category]; + arr.push(item); + } + if (!activeTab || r[activeTab].length === 0 || !fixedTab) { + Object.keys(r).reduce(function(prev, curr) { + if (r[curr].length > 0 && r[curr][0].score > prev) { + activeTab = curr; + return r[curr][0].score; + } + return prev; + }, 0); + } + if (feelingLucky && activeTab) { + notify.html(messages.redirecting) + var firstItem = r[activeTab][0]; + window.location = getURL(firstItem.indexItem, firstItem.category); + return; + } + if (result.length > 20) { + if (searchTerm[searchTerm.length - 1] === ".") { + if (activeTab === "types" && r["members"].length > r["types"].length) { + activeTab = "members"; + } else if (activeTab === "packages" && r["types"].length > r["packages"].length) { + activeTab = "types"; + } + } + } + var categoryCount = Object.keys(r).reduce(function(prev, curr) { + return prev + (r[curr].length > 0 ? 1 : 0); + }, 0); + visibleTabs = []; + var tabContainer = $("
    ").appendTo(resultContainer); + for (var key in r) { + var id = "#result-tab-" + key.replace("searchTags", "search_tags"); + if (r[key].length) { + var count = r[key].length >= 1000 ? "999+" : r[key].length; + if (result.length > 20 && categoryCount > 1) { + var button = $("").appendTo(tabContainer); + button.click(key, function(e) { + fixedTab = true; + renderResult(e.data, $(this)); + }); + visibleTabs.push(key); + } else { + $("" + categories[key] + + " (" + count + ")").appendTo(tabContainer); + renderTable(key, r[key]).appendTo(resultContainer); + tabContainer = $("
    ").appendTo(resultContainer); + + } + } + } + if (activeTab && result.length > 20 && categoryCount > 1) { + $("button#result-tab-" + activeTab).addClass("active-table-tab"); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + } + resultSection.show(); + function renderResult(category, button) { + activeTab = category; + setSearchUrl(); + resultContainer.find("div.summary-table").remove(); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + button.siblings().removeClass("active-table-tab"); + button.addClass("active-table-tab"); + } + } + function selectTab(category) { + $("button#result-tab-" + category).click(); + } + function renderTable(category, items) { + var table = $("
    ") + .addClass(category === "modules" + ? "one-column-search-results" + : "two-column-search-results"); + var col1, col2; + if (category === "modules") { + col1 = "Module"; + } else if (category === "packages") { + col1 = "Module"; + col2 = "Package"; + } else if (category === "types") { + col1 = "Package"; + col2 = "Class" + } else if (category === "members") { + col1 = "Class"; + col2 = "Member"; + } else if (category === "searchTags") { + col1 = "Location"; + col2 = "Name"; + } + $("
    " + col1 + "
    ").appendTo(table); + if (category !== "modules") { + $("
    " + col2 + "
    ").appendTo(table); + } + $.each(items, function(index, item) { + var rowColor = index % 2 ? "odd-row-color" : "even-row-color"; + renderItem(item, table, rowColor); + }); + return table; + } + function renderItem(item, table, rowColor) { + var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length); + var link = $("") + .attr("href", getURL(item.indexItem, item.category)) + .attr("tabindex", "0") + .addClass("search-result-link") + .html(label); + var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1); + if (item.category === "searchTags") { + container = item.indexItem.h || ""; + } + if (item.category !== "modules") { + $("
    ").html(container).addClass("col-plain").addClass(rowColor).appendTo(table); + } + $("
    ").html(link).addClass("col-last").addClass(rowColor).appendTo(table); + } + var timeout; + function schedulePageSearch() { + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(function () { + doPageSearch() + }, 100); + } + function doPageSearch() { + setSearchUrl(); + var term = searchTerm = input.val().trim(); + if (term === "") { + notify.html(messages.enterTerm); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + resultSection.hide(); + } else { + notify.html(messages.searching); + doSearch({ term: term, maxResults: 1200 }, renderResults); + } + } + function setSearchUrl() { + var query = input.val().trim(); + var url = document.location.pathname; + if (query) { + url += "?q=" + encodeURI(query); + if (activeTab && fixedTab) { + url += "&c=" + activeTab; + } + } + history.replaceState({query: query}, "", url); + } + input.on("input", function(e) { + feelingLucky = false; + schedulePageSearch(); + }); + $(document).keydown(function(e) { + if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) { + if (activeTab && visibleTabs.length > 1) { + var idx = visibleTabs.indexOf(activeTab); + idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1; + selectTab(visibleTabs[idx % visibleTabs.length]); + return false; + } + } + }); + reset.click(function() { + notify.html(messages.enterTerm); + resultSection.hide(); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + input.val('').focus(); + setSearchUrl(); + }); + input.prop("disabled", false); + reset.prop("disabled", false); + + var urlParams = new URLSearchParams(window.location.search); + if (urlParams.has("q")) { + input.val(urlParams.get("q")) + } + if (urlParams.has("c")) { + activeTab = urlParams.get("c"); + fixedTab = true; + } + if (urlParams.get("r")) { + feelingLucky = true; + } + if (input.val()) { + doPageSearch(); + } else { + notify.html(messages.enterTerm); + } + input.select().focus(); +}); diff --git a/javadoc/search.html b/javadoc/search.html new file mode 100644 index 0000000..dd64a72 --- /dev/null +++ b/javadoc/search.html @@ -0,0 +1,72 @@ + + + + +搜索 + + + + + + + + + + + + + + +
    + +
    +
    +

    搜索

    +
    + + +
    +其他资源 +
    +
    +
    +

    帮助页 介绍了 JavaDoc 搜索的范围和语法。

    +

    您可以使用 <ctrl> 或 <cmd> 键与左箭头和右箭头键组合在此页面中的结果选项卡之间切换。

    +

    下面的 URL 模板可用于在支持此功能的浏览器中将此页面配置为搜索引擎。已经对其进行了测试以在 Google Chrome 和 Mozilla Firefox 中使用。请注意,其他浏览器可能不支持此功能或需要不同的 URL 格式。

    +link +

    + +

    +
    +

    正在加载搜索索引...

    + +
    +
    +
    + + diff --git a/javadoc/search.js b/javadoc/search.js new file mode 100644 index 0000000..d675d24 --- /dev/null +++ b/javadoc/search.js @@ -0,0 +1,458 @@ +/* + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +"use strict"; +const messages = { + enterTerm: "输入搜索词", + noResult: "未找到结果", + oneResult: "找到一个结果", + manyResults: "找到 {0} 个结果", + loading: "正在加载搜索索引...", + searching: "正在搜索...", + redirecting: "正在重定向到第一个结果...", + linkIcon: "链接图标", + linkToSection: "链接到此节" +} +const categories = { + modules: "模块", + packages: "程序包", + types: "类和接口", + members: "成员", + searchTags: "搜索标记" +}; +const highlight = "$&"; +const NO_MATCH = {}; +const MAX_RESULTS = 300; +function checkUnnamed(name, separator) { + return name === "" || !name ? "" : name + separator; +} +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(str, boundaries, from, to) { + var start = from; + var text = ""; + for (var i = 0; i < boundaries.length; i += 2) { + var b0 = boundaries[i]; + var b1 = boundaries[i + 1]; + if (b0 >= to || b1 <= from) { + continue; + } + text += escapeHtml(str.slice(start, Math.max(start, b0))); + text += ""; + text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1))); + text += ""; + start = Math.min(to, b1); + } + text += escapeHtml(str.slice(start, to)); + return text; +} +function getURLPrefix(item, category) { + var urlPrefix = ""; + var slash = "/"; + if (category === "modules") { + return item.l + slash; + } else if (category === "packages" && item.m) { + return item.m + slash; + } else if (category === "types" || category === "members") { + if (item.m) { + urlPrefix = item.m + slash; + } else { + $.each(packageSearchIndex, function(index, it) { + if (it.m && item.p === it.l) { + urlPrefix = it.m + slash; + } + }); + } + } + return urlPrefix; +} +function getURL(item, category) { + if (item.url) { + return item.url; + } + var url = getURLPrefix(item, category); + if (category === "modules") { + url += "module-summary.html"; + } else if (category === "packages") { + if (item.u) { + url = item.u; + } else { + url += item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (category === "types") { + if (item.u) { + url = item.u; + } else { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html"; + } + } else if (category === "members") { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#"; + if (item.u) { + url += item.u; + } else { + url += item.l; + } + } else if (category === "searchTags") { + url += item.u; + } + item.url = url; + return url; +} +function createMatcher(term, camelCase) { + if (camelCase && !isUpperCase(term)) { + return null; // no need for camel-case matcher for lower case query + } + var pattern = ""; + var upperCase = []; + term.trim().split(/\s+/).forEach(function(w, index, array) { + var tokens = w.split(/(?=[A-Z,.()<>?[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + // ',' and '?' are the only delimiters commonly followed by space in java signatures + pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")"; + upperCase.push(false); + var isWordToken = /\w$/.test(s); + if (isWordToken) { + if (i === tokens.length - 1 && index < array.length - 1) { + // space in query string matches all delimiters + pattern += "(.*?)"; + upperCase.push(isUpperCase(s[0])); + } else { + if (!camelCase && isUpperCase(s) && s.length === 1) { + pattern += "()"; + } else { + pattern += "([a-z0-9$<>?[\\]]*?)"; + } + upperCase.push(isUpperCase(s[0])); + } + } else { + pattern += "()"; + upperCase.push(false); + } + } + }); + var re = new RegExp(pattern, "gi"); + re.upperCase = upperCase; + return re; +} +function findMatch(matcher, input, startOfName, endOfName) { + var from = startOfName; + matcher.lastIndex = from; + var match = matcher.exec(input); + // Expand search area until we get a valid result or reach the beginning of the string + while (!match || match.index + match[0].length < startOfName || endOfName < match.index) { + if (from === 0) { + return NO_MATCH; + } + from = input.lastIndexOf(".", from - 2) + 1; + matcher.lastIndex = from; + match = matcher.exec(input); + } + var boundaries = []; + var matchEnd = match.index + match[0].length; + var score = 5; + var start = match.index; + var prevEnd = -1; + for (var i = 1; i < match.length; i += 2) { + var isUpper = isUpperCase(input[start]); + var isMatcherUpper = matcher.upperCase[i]; + // capturing groups come in pairs, match and non-match + boundaries.push(start, start + match[i].length); + // make sure groups are anchored on a left word boundary + var prevChar = input[start - 1] || ""; + var nextChar = input[start + 1] || ""; + if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) { + if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) { + score -= 0.1; + } else if (isMatcherUpper && start === prevEnd) { + score -= isUpper ? 0.1 : 1.0; + } else { + return NO_MATCH; + } + } + prevEnd = start + match[i].length; + start += match[i].length + match[i + 1].length; + + // lower score for parts of the name that are missing + if (match[i + 1] && prevEnd < endOfName) { + score -= rateNoise(match[i + 1]); + } + } + // lower score if a type name contains unmatched camel-case parts + if (input[matchEnd - 1] !== "." && endOfName > matchEnd) + score -= rateNoise(input.slice(matchEnd, endOfName)); + score -= rateNoise(input.slice(0, Math.max(startOfName, match.index))); + + if (score <= 0) { + return NO_MATCH; + } + return { + input: input, + score: score, + boundaries: boundaries + }; +} +function isUpperCase(s) { + return s !== s.toLowerCase(); +} +function isLowerCase(s) { + return s !== s.toUpperCase(); +} +function rateNoise(str) { + return (str.match(/([.(])/g) || []).length / 5 + + (str.match(/([A-Z]+)/g) || []).length / 10 + + str.length / 20; +} +function doSearch(request, response) { + var term = request.term.trim(); + var maxResults = request.maxResults || MAX_RESULTS; + if (term.length === 0) { + return this.close(); + } + var matcher = { + plainMatcher: createMatcher(term, false), + camelCaseMatcher: createMatcher(term, true) + } + var indexLoaded = indexFilesLoaded(); + + function getPrefix(item, category) { + switch (category) { + case "packages": + return checkUnnamed(item.m, "/"); + case "types": + return checkUnnamed(item.p, "."); + case "members": + return checkUnnamed(item.p, ".") + item.c + "."; + default: + return ""; + } + } + function useQualifiedName(category) { + switch (category) { + case "packages": + return /[\s/]/.test(term); + case "types": + case "members": + return /[\s.]/.test(term); + default: + return false; + } + } + function searchIndex(indexArray, category) { + var matches = []; + if (!indexArray) { + if (!indexLoaded) { + matches.push({ l: messages.loading, category: category }); + } + return matches; + } + $.each(indexArray, function (i, item) { + var prefix = getPrefix(item, category); + var simpleName = item.l; + var qualifiedName = prefix + simpleName; + var useQualified = useQualifiedName(category); + var input = useQualified ? qualifiedName : simpleName; + var startOfName = useQualified ? prefix.length : 0; + var endOfName = category === "members" && input.indexOf("(", startOfName) > -1 + ? input.indexOf("(", startOfName) : input.length; + var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName); + if (m === NO_MATCH && matcher.camelCaseMatcher) { + m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName); + } + if (m !== NO_MATCH) { + m.indexItem = item; + m.prefix = prefix; + m.category = category; + if (!useQualified) { + m.input = qualifiedName; + m.boundaries = m.boundaries.map(function(b) { + return b + prefix.length; + }); + } + matches.push(m); + } + return true; + }); + return matches.sort(function(e1, e2) { + return e2.score - e1.score; + }).slice(0, maxResults); + } + + var result = searchIndex(moduleSearchIndex, "modules") + .concat(searchIndex(packageSearchIndex, "packages")) + .concat(searchIndex(typeSearchIndex, "types")) + .concat(searchIndex(memberSearchIndex, "members")) + .concat(searchIndex(tagSearchIndex, "searchTags")); + + if (!indexLoaded) { + updateSearchResults = function() { + doSearch(request, response); + } + } else { + updateSearchResults = function() {}; + } + response(result); +} +// JQuery search menu implementation +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> .result-item"); + // workaround for search result scrolling + this.menu._scrollIntoView = function _scrollIntoView( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height() - 26; + itemHeight = item.outerHeight(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }; + }, + _renderMenu: function(ul, items) { + var currentCategory = ""; + var widget = this; + widget.menu.bindings = $(); + $.each(items, function(index, item) { + if (item.category && item.category !== currentCategory) { + ul.append("
  • " + categories[item.category] + "
  • "); + currentCategory = item.category; + } + var li = widget._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", categories[item.category] + " : " + item.l); + } else { + li.attr("aria-label", item.l); + } + li.attr("class", "result-item"); + }); + ul.append(""); + }, + _renderItem: function(ul, item) { + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + var label = item.l + ? item.l + : getHighlightedText(item.input, item.boundaries, 0, item.input.length); + var idx = item.indexItem; + if (item.category === "searchTags" && idx && idx.h) { + if (idx.d) { + div.html(label + " (" + idx.h + ")
    " + + idx.d + "
    "); + } else { + div.html(label + " (" + idx.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + var expanded = false; + var windowWidth; + function collapse() { + if (expanded) { + $("div#navbar-top").removeAttr("style"); + $("button#navbar-toggle-button") + .removeClass("expanded") + .attr("aria-expanded", "false"); + expanded = false; + } + } + $("button#navbar-toggle-button").click(function (e) { + if (expanded) { + collapse(); + } else { + var navbar = $("div#navbar-top"); + navbar.height(navbar.prop("scrollHeight")); + $("button#navbar-toggle-button") + .addClass("expanded") + .attr("aria-expanded", "true"); + expanded = true; + windowWidth = window.innerWidth; + } + }); + $("ul.sub-nav-list-small li a").click(collapse); + $("input#search-input").focus(collapse); + $("main").click(collapse); + $("section[id] > :header, :header[id], :header:has(a[id])").each(function(idx, el) { + // Create anchor links for headers with an associated id attribute + var hdr = $(el); + var id = hdr.attr("id") || hdr.parent("section").attr("id") || hdr.children("a").attr("id"); + if (id) { + hdr.append(" " + messages.linkIcon +""); + } + }); + $(window).on("orientationchange", collapse).on("resize", function(e) { + if (expanded && windowWidth !== window.innerWidth) collapse(); + }); + var search = $("#search-input"); + var reset = $("#reset-button"); + search.catcomplete({ + minLength: 1, + delay: 200, + source: doSearch, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push({ l: messages.noResult }); + } else { + $("#search-input").empty(); + } + }, + autoFocus: true, + focus: function(event, ui) { + return false; + }, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.indexItem) { + var url = getURL(ui.item.indexItem, ui.item.category); + window.location.href = pathtoroot + url; + $("#search-input").focus(); + } + } + }); + search.val(''); + search.prop("disabled", false); + reset.prop("disabled", false); + reset.click(function() { + search.val('').focus(); + }); + search.focus(); +}); diff --git a/javadoc/stylesheet.css b/javadoc/stylesheet.css new file mode 100644 index 0000000..f71489f --- /dev/null +++ b/javadoc/stylesheet.css @@ -0,0 +1,1272 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * These CSS custom properties (variables) define the core color and font + * properties used in this stylesheet. + */ +:root { + /* body, block and code fonts */ + --body-font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + --block-font-family: 'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + --code-font-family: 'DejaVu Sans Mono', monospace; + /* Base font sizes for body and code elements */ + --body-font-size: 14px; + --code-font-size: 14px; + /* Text colors for body and block elements */ + --body-text-color: #353833; + --block-text-color: #474747; + /* Background colors for various structural elements */ + --body-background-color: #ffffff; + --section-background-color: #f8f8f8; + --detail-background-color: #ffffff; + /* Colors for navigation bar and table captions */ + --navbar-background-color: #4D7A97; + --navbar-text-color: #ffffff; + /* Background color for subnavigation and various headers */ + --subnav-background-color: #dee3e9; + /* Background and text colors for selected tabs and navigation items */ + --selected-background-color: #f8981d; + --selected-text-color: #253441; + --selected-link-color: #1f389c; + /* Background colors for generated tables */ + --even-row-color: #ffffff; + --odd-row-color: #eeeeef; + /* Text color for page title */ + --title-color: #2c4557; + /* Text colors for links */ + --link-color: #4A6782; + --link-color-active: #bb7a2a; + /* Snippet colors */ + --snippet-background-color: #ebecee; + --snippet-text-color: var(--block-text-color); + --snippet-highlight-color: #f7c590; + /* Border colors for structural elements and user defined tables */ + --border-color: #ededed; + --table-border-color: #000000; + /* Search input colors */ + --search-input-background-color: #ffffff; + --search-input-text-color: #000000; + --search-input-placeholder-color: #909090; + /* Highlight color for active search tag target */ + --search-tag-highlight-color: #ffff00; + /* Adjustments for icon and active background colors of copy-to-clipboard buttons */ + --copy-icon-brightness: 100%; + --copy-button-background-color-active: rgba(168, 168, 176, 0.3); + /* Colors for invalid tag notifications */ + --invalid-tag-background-color: #ffe6e6; + --invalid-tag-text-color: #000000; +} +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ +body { + background-color:var(--body-background-color); + color:var(--body-text-color); + font-family:var(--body-font-family); + font-size:var(--body-font-size); + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:var(--link-color); +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:var(--link-color-active); +} +pre { + font-family:var(--code-font-family); + font-size:1em; +} +h1 { + font-size:1.428em; +} +h2 { + font-size:1.285em; +} +h3 { + font-size:1.14em; +} +h4 { + font-size:1.072em; +} +h5 { + font-size:1.001em; +} +h6 { + font-size:0.93em; +} +/* Disable font boosting for selected elements */ +h1, h2, h3, h4, h5, h6, div.member-signature { + max-height: 1000em; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:var(--code-font-family); +} +:not(h1, h2, h3, h4, h5, h6) > code, +:not(h1, h2, h3, h4, h5, h6) > tt { + font-size:var(--code-font-size); + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:var(--code-font-family); + font-size:1em; + padding-top:4px; +} +.summary-table dt code { + font-family:var(--code-font-family); + font-size:1em; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: var(--body-font-family); + font-size: 1em; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.about-language { + float:right; + padding:0 21px 8px 8px; + font-size:0.915em; + margin-top:-9px; + height:2.9em; +} +.legal-copy { + margin-left:.5em; +} +/* + * Styles for navigation bar. + */ +@media screen { + div.flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + header.flex-header { + flex: 0 0 auto; + } + div.flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + float:left; + width:100%; + clear:right; + min-height:2.8em; + padding:10px 0 0 0; + overflow:hidden; + font-size:0.857em; +} +button#navbar-toggle-button { + display:none; +} +ul.sub-nav-list-small { + display: none; +} +.sub-nav { + background-color:var(--subnav-background-color); + float:left; + width:100%; + overflow:hidden; + font-size:0.857em; +} +.sub-nav div { + clear:left; + float:left; + padding:6px; + text-transform:uppercase; +} +.sub-nav .sub-nav-list { + padding-top:4px; +} +ul.nav-list { + display:block; + margin:0 25px 0 0; + padding:0; +} +ul.sub-nav-list { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.nav-list li { + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list-search { + float:right; + margin:0; + padding:6px; + clear:none; + text-align:right; + position:relative; +} +ul.sub-nav-list li { + list-style:none; + float:left; +} +.top-nav a:link, .top-nav a:active, .top-nav a:visited { + color:var(--navbar-text-color); + text-decoration:none; + text-transform:uppercase; +} +.top-nav a:hover { + color:var(--link-color-active); +} +.nav-bar-cell1-rev { + background-color:var(--selected-background-color); + color:var(--selected-text-color); + margin: auto 5px; +} +.skip-nav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Hide navigation links and search box in print layout + */ +@media print { + ul.nav-list, div.sub-nav { + display:none; + } +} +/* + * Styles for page header. + */ +.title { + color:var(--title-color); + margin:10px 0; +} +.sub-title { + margin:5px 0 0 0; +} +ul.contents-list { + margin: 0 0 15px 0; + padding: 0; + list-style: none; +} +ul.contents-list li { + font-size:0.93em; +} +/* + * Styles for headings. + */ +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; +} +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { + background-color:var(--subnav-background-color); + border:1px solid var(--border-color); + margin:0 0 6px -8px; + padding:7px 5px; +} +/* + * Styles for page layout containers. + */ +main { + clear:both; + padding:10px 20px; + position:relative; +} +dl.notes > dt { + font-family: var(--body-font-family); + font-size:0.856em; + font-weight:bold; + margin:10px 0 0 0; + color:var(--body-text-color); +} +dl.notes > dd { + margin:5px 10px 10px 0; + font-size:1em; + font-family:var(--block-font-family) +} +dl.name-value > dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +dl.name-value > dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +div.inheritance { + margin:0; + padding:0; +} +div.inheritance div.inheritance { + margin-left:2em; +} +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { + margin:10px 0 10px 0; + padding:0; +} +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.ref-list { + padding:0; + margin:0; +} +ul.ref-list > li { + list-style:none; +} +.summary-table dl, .summary-table dl dt, .summary-table dl dd { + margin-top:0; + margin-bottom:1px; +} +ul.tag-list, ul.tag-list-long { + padding-left: 0; + list-style: none; +} +ul.tag-list li { + display: inline; +} +ul.tag-list li:not(:last-child):after, +ul.tag-list-long li:not(:last-child):after +{ + content: ", "; + white-space: pre-wrap; +} +ul.preview-feature-list { + list-style: none; + margin:0; + padding:0.1em; + line-height: 1.6em; +} +/* + * Styles for tables. + */ +.summary-table, .details-table { + width:100%; + border-spacing:0; + border:1px solid var(--border-color); + border-top:0; + padding:0; +} +.caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:var(--selected-text-color); + clear:none; + overflow:hidden; + padding: 10px 0 0 1px; + margin:0; +} +.caption a:link, .caption a:visited { + color:var(--selected-link-color); +} +.caption a:hover, +.caption a:active { + color:var(--navbar-text-color); +} +.caption span { + font-weight:bold; + white-space:nowrap; + padding:5px 12px 7px 12px; + display:inline-block; + float:left; + background-color:var(--selected-background-color); + border: none; + height:16px; +} +div.table-tabs { + padding:10px 0 0 1px; + margin:10px 0 0 0; +} +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 8px; +} +div.table-tabs > .active-table-tab { + background: var(--selected-background-color); + color: var(--selected-text-color); +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.two-column-search-results { + display: grid; + grid-template-columns: minmax(400px, max-content) minmax(400px, auto); +} +div.checkboxes { + line-height: 2em; +} +div.checkboxes > span { + margin-left: 10px; +} +div.checkboxes > label { + margin-left: 8px; + white-space: nowrap; +} +div.checkboxes > label > input { + margin: 0 2px; +} +.two-column-summary { + display: grid; + grid-template-columns: minmax(25%, max-content) minmax(25%, auto); +} +.three-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto); +} +.three-column-release-summary { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto); +} +.four-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto); +} +@media screen and (max-width: 1000px) { + .four-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); + } +} +@media screen and (max-width: 800px) { + .two-column-search-results { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(40%, auto); + } + .three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(25%, auto); + } + .three-column-release-summary { + display: grid; + grid-template-columns: minmax(70%, max-content) minmax(30%, max-content) + } + .three-column-summary .col-last, + .three-column-release-summary .col-last{ + grid-column-end: span 2; + } +} +@media screen and (max-width: 600px) { + .two-column-summary { + display: grid; + grid-template-columns: 1fr; + } +} +.summary-table > div, .details-table > div { + text-align:left; + padding: 8px 3px 3px 7px; + overflow-x: auto; + scrollbar-width: thin; +} +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { + vertical-align:top; + padding-right:0; + padding-top:8px; + padding-bottom:3px; +} +.table-header { + background:var(--subnav-background-color); + font-weight: bold; +} +/* Sortable table columns */ +.table-header[onclick] { + cursor: pointer; +} +.table-header[onclick]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + '); + background-size:100% 100%; + width:9px; + height:14px; + margin-left:4px; + margin-bottom:-3px; +} +.table-header[onclick].sort-asc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + +} +.table-header[onclick].sort-desc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +.col-first, .col-first { + font-size:0.93em; +} +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { + font-size:0.93em; +} +.col-first, .col-second, .col-constructor-name { + vertical-align:top; + overflow: auto; +} +.col-last { + white-space:normal; +} +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-constructor-name a:link, .col-constructor-name a:visited, +.col-summary-item-name a:link, .col-summary-item-name a:visited { + font-weight:bold; +} +.even-row-color, .even-row-color .table-header { + background-color:var(--even-row-color); +} +.odd-row-color, .odd-row-color .table-header { + background-color:var(--odd-row-color); +} +/* + * Styles for contents. + */ +div.block { + font-size:var(--body-font-size); + font-family:var(--block-font-family); +} +.col-last div { + padding-top:0; +} +.col-last a { + padding-bottom:3px; +} +.module-signature, +.package-signature, +.type-signature, +.member-signature { + font-family:var(--code-font-family); + font-size:1em; + margin:14px 0; + white-space: pre-wrap; +} +.module-signature, +.package-signature, +.type-signature { + margin-top: 0; +} +.member-signature .type-parameters-long, +.member-signature .parameters, +.member-signature .exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +.member-signature .type-parameters { + white-space: normal; +} +/* + * Styles for formatting effect. + */ +.source-line-no { + /* Color of line numbers in source pages can be set via custom property below */ + color:var(--source-linenumber-color, green); + padding:0 30px 0 0; +} +.block { + display:block; + margin:0 10px 5px 0; + color:var(--block-text-color); +} +.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { + font-weight:bold; +} +.deprecation-comment, .help-footnote, .preview-comment { + font-style:italic; +} +.deprecation-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +.preview-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecation-comment { + font-style:normal; +} +details.invalid-tag, span.invalid-tag { + font-size:1em; + font-family:var(--block-font-family); + color: var(--invalid-tag-text-color); + background: var(--invalid-tag-background-color); + border: thin solid var(--table-border-color); + border-radius:2px; + padding: 2px 4px; + display:inline-block; +} +details summary { + cursor: pointer; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-state-active { + /* Overrides the color of selection used in jQuery UI */ + background: var(--selected-background-color); + border: 1px solid var(--selected-background-color); + color: var(--selected-text-color); +} +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:auto; + overflow-x:auto; + scrollbar-width: thin; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:1; + background-color: var(--body-background-color); +} +ul.ui-autocomplete li { + float:left; + clear:both; + min-width:100%; +} +ul.ui-autocomplete li.ui-static-link { + position:sticky; + bottom:0; + left:0; + background: var(--subnav-background-color); + padding: 5px 0; + font-family: var(--body-font-family); + font-size: 0.93em; + font-weight: bolder; + z-index: 2; +} +li.ui-static-link a, li.ui-static-link a:visited { + text-decoration:none; + color:var(--link-color); + float:right; + margin-right:20px; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +.ui-autocomplete .result-highlight { + font-weight:bold; +} +#search-input, #page-search-input { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + background-color: var(--search-input-background-color); + color: var(--search-input-text-color); + border-color: var(--border-color); + padding-left:20px; + width: 250px; + margin: 0; +} +#search-input { + margin-left: 4px; +} +#reset-button { + background-color: transparent; + background-image:url('resources/x.png'); + background-repeat:no-repeat; + background-size:contain; + border:0; + border-radius:0; + width:12px; + height:12px; + position:absolute; + right:12px; + top:10px; + font-size:0; +} +::placeholder { + color:var(--search-input-placeholder-color); + opacity: 1; +} +.search-tag-desc-result { + font-style:italic; + font-size:11px; +} +.search-tag-holder-result { + font-style:italic; + font-size:12px; +} +.search-tag-result:target { + background-color:var(--search-tag-highlight-color); +} +details.page-search-details { + display: inline-block; +} +div#result-container { + font-size: 1em; +} +div#result-container a.search-result-link { + padding: 0; + margin: 4px 0; + width: 100%; +} +#result-container .result-highlight { + font-weight:bolder; +} +.page-search-info { + background-color: var(--subnav-background-color); + border-radius: 3px; + border: 0 solid var(--border-color); + padding: 0 8px; + overflow: hidden; + height: 0; + transition: all 0.2s ease; +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.page-search-header { + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + display: inline-block; +} +button.page-search-header { + border: none; + cursor: pointer; +} +span#page-search-link { + text-decoration: underline; +} +.module-graph span, .sealed-graph span { + display:none; + position:absolute; +} +.module-graph:hover span, .sealed-graph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.inherited-list { + margin: 10px 0 10px 0; +} +section.class-description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0 20px 5px 10px; + border: 1px solid var(--border-color); + background-color: var(--section-background-color); +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:var(--detail-background-color); + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +ul.help-subtoc > li { + display: inline-block; + padding-right: 5px; + font-size: smaller; +} +ul.help-subtoc > li::before { + content: "\2022" ; + padding-right:2px; +} +.help-note { + font-style: italic; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +/* + * Styles for header/section anchor links + */ +a.anchor-link { + opacity: 0; + transition: opacity 0.1s; +} +:hover > a.anchor-link { + opacity: 80%; +} +a.anchor-link:hover, +a.anchor-link:focus-visible, +a.anchor-link.visible { + opacity: 100%; +} +a.anchor-link > img { + width: 0.9em; + height: 0.9em; +} +/* + * Styles for copy-to-clipboard buttons + */ +button.copy { + opacity: 70%; + border: none; + border-radius: 3px; + position: relative; + background:none; + transition: opacity 0.3s; + cursor: pointer; +} +:hover > button.copy { + opacity: 80%; +} +button.copy:hover, +button.copy:active, +button.copy:focus-visible, +button.copy.visible { + opacity: 100%; +} +button.copy img { + position: relative; + background: none; + filter: brightness(var(--copy-icon-brightness)); +} +button.copy:active { + background-color: var(--copy-button-background-color-active); +} +button.copy span { + color: var(--body-text-color); + position: relative; + top: -0.1em; + transition: all 0.1s; + font-size: 0.76rem; + line-height: 1.2em; + opacity: 0; +} +button.copy:hover span, +button.copy:focus-visible span, +button.copy.visible span { + opacity: 100%; +} +/* search page copy button */ +button#page-search-copy { + margin-left: 0.4em; + padding:0.3em; + top:0.13em; +} +button#page-search-copy img { + width: 1.2em; + height: 1.2em; + padding: 0.01em 0; + top: 0.15em; +} +button#page-search-copy span { + color: var(--body-text-color); + line-height: 1.2em; + padding: 0.2em; + top: -0.18em; +} +div.page-search-info:hover button#page-search-copy span { + opacity: 100%; +} +/* snippet copy button */ +button.snippet-copy { + position: absolute; + top: 6px; + right: 6px; + height: 1.7em; + padding: 2px; +} +button.snippet-copy img { + width: 18px; + height: 18px; + padding: 0.05em 0; +} +button.snippet-copy span { + line-height: 1.2em; + padding: 0.2em; + position: relative; + top: -0.5em; +} +div.snippet-container:hover button.snippet-copy span { + opacity: 100%; +} +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.striped > thead { + background-color: var(--subnav-background-color); +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped > tbody > tr:nth-child(even) { + background-color: var(--odd-row-color) +} +table.striped > tbody > tr:nth-child(odd) { + background-color: var(--even-row-color) +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid var(--table-border-color); + border-right: 1px solid var(--table-border-color); +} +table.striped > tbody > tr > th { + font-weight: normal; +} +/** + * Tweak style for small screens. + */ +@media screen and (max-width: 920px) { + header.flex-header { + max-height: 100vh; + overflow-y: auto; + } + div#navbar-top { + height: 2.8em; + transition: height 0.35s ease; + } + ul.nav-list { + display: block; + width: 40%; + float:left; + clear: left; + margin: 10px 0 0 0; + padding: 0; + } + ul.nav-list li { + float: none; + padding: 6px; + margin-left: 10px; + margin-top: 2px; + } + ul.sub-nav-list-small { + display:block; + height: 100%; + width: 50%; + float: right; + clear: right; + background-color: var(--subnav-background-color); + color: var(--body-text-color); + margin: 6px 0 0 0; + padding: 0; + } + ul.sub-nav-list-small ul { + padding-left: 20px; + } + ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited { + color:var(--link-color); + } + ul.sub-nav-list-small a:hover { + color:var(--link-color-active); + } + ul.sub-nav-list-small li { + list-style:none; + float:none; + padding: 6px; + margin-top: 1px; + text-transform:uppercase; + } + ul.sub-nav-list-small > li { + margin-left: 10px; + } + ul.sub-nav-list-small li p { + margin: 5px 0; + } + div#navbar-sub-list { + display: none; + } + .top-nav a:link, .top-nav a:active, .top-nav a:visited { + display: block; + } + button#navbar-toggle-button { + width: 3.4em; + height: 2.8em; + background-color: transparent; + display: block; + float: left; + border: 0; + margin: 0 10px; + cursor: pointer; + font-size: 10px; + } + button#navbar-toggle-button .nav-bar-toggle-icon { + display: block; + width: 24px; + height: 3px; + margin: 1px 0 4px 0; + border-radius: 2px; + transition: all 0.1s; + background-color: var(--navbar-text-color); + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) { + transform: rotate(45deg); + transform-origin: 10% 10%; + width: 26px; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) { + opacity: 0; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) { + transform: rotate(-45deg); + transform-origin: 10% 90%; + width: 26px; + } +} +@media screen and (max-width: 800px) { + .about-language { + padding-right: 16px; + } + ul.nav-list li { + margin-left: 5px; + } + ul.sub-nav-list-small > li { + margin-left: 5px; + } + main { + padding: 10px; + } + .summary section[class$="-summary"], .details section[class$="-details"], + .class-uses .detail, .serialized-class-details { + padding: 0 8px 5px 8px; + } + body { + -webkit-text-size-adjust: none; + } +} +@media screen and (max-width: 400px) { + .about-language { + font-size: 10px; + padding-right: 12px; + } +} +@media screen and (max-width: 400px) { + .nav-list-search { + width: 94%; + } + #search-input, #page-search-input { + width: 70%; + } +} +@media screen and (max-width: 320px) { + .nav-list-search > label { + display: none; + } + .nav-list-search { + width: 90%; + } + #search-input, #page-search-input { + width: 80%; + } +} + +pre.snippet { + background-color: var(--snippet-background-color); + color: var(--snippet-text-color); + padding: 10px; + margin: 12px 0; + overflow: auto; + white-space: pre; +} +div.snippet-container { + position: relative; +} +@media screen and (max-width: 800px) { + pre.snippet { + padding-top: 26px; + } + button.snippet-copy { + top: 4px; + right: 4px; + } +} +pre.snippet .italic { + font-style: italic; +} +pre.snippet .bold { + font-weight: bold; +} +pre.snippet .highlighted { + background-color: var(--snippet-highlight-color); + border-radius: 10%; +} diff --git a/javadoc/tag-search-index.js b/javadoc/tag-search-index.js new file mode 100644 index 0000000..0367dae --- /dev/null +++ b/javadoc/tag-search-index.js @@ -0,0 +1 @@ +tagSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/javadoc/type-search-index.js b/javadoc/type-search-index.js new file mode 100644 index 0000000..e0366c7 --- /dev/null +++ b/javadoc/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"p":"com.playerblocklife","l":"AdminCommands"},{"p":"com.playerblocklife","l":"BlockBreakListener"},{"p":"com.playerblocklife","l":"CheckLifeBlocksCommand"},{"p":"com.playerblocklife","l":"ConfigManager"},{"p":"com.playerblocklife","l":"LifeSystem"},{"p":"com.playerblocklife","l":"MessageManager"},{"p":"com.playerblocklife","l":"PlayerBlockLife"},{"p":"com.playerblocklife","l":"PlayerBlockManager"},{"p":"com.playerblocklife","l":"PlayerJoinListener"},{"p":"com.playerblocklife","l":"PlayerQuitListener"},{"p":"com.playerblocklife","l":"SetLifeBlocksCommand"},{"p":"com.playerblocklife","l":"SkinManager"},{"l":"所有类和接口","u":"allclasses-index.html"}];updateSearchResults(); \ No newline at end of file diff --git a/src/main/java/com/playerblocklife/ConfigManager.java b/src/main/java/com/playerblocklife/ConfigManager.java index 02ecead..13fab74 100644 --- a/src/main/java/com/playerblocklife/ConfigManager.java +++ b/src/main/java/com/playerblocklife/ConfigManager.java @@ -277,7 +277,7 @@ public class ConfigManager { * * @return 皮肤来源配置值 * @see #useSkinsRestorer() - * @see SkinManager#loadPlayerSkinAsync() + * @see SkinManager #loadPlayerSkinAsync() */ public String getSkinSource() { return getConfig().getString("skin.source", "skinsrestorer"); @@ -299,7 +299,6 @@ public class ConfigManager { * * @return 如果启用SkinsRestorer支持返回true,否则返回false * @see #getSkinSource() - * @see SkinManager#getSkinFromSkinsRestorer() */ public boolean useSkinsRestorer() { return getConfig().getBoolean("skin.use-skinsrestorer", true);