配置

TIP

本插件所有版本均使用 UTF-8 解码,请勿使用其他编码。推荐使用 Visual Studio Code 来编写配置。

TIP

编辑完成请重载插件以应用更新,重载指令:/july-safe plugin reload

作者在默认配置中已经对许多功能进行了注释,故一些简单的内容这里就不再赘述。

模块开关

本插件所有模块均可自行开启或关闭。

例子:

# 自动重启
auto_restart:
  enabled: false # 关

enabled 项为 false,即代表功能不开启;若 enabled 项为 true,即代表功能开启。

包含-排除集

插件许多地方用到了包含-排除集。

例如:

# 世界集
world_set:
  # 包含的世界正则表达式
  includes:
    - '.*'
  # 排除的世界正则表达式
  excludes:
    - 'excluded_world'
# 实体集
entity_set:
  # 包含
  includes:
    'entity_filter_1':
      # 类过滤器
      type: CLASS
      properties:
        classes:
          - 'org.bukkit.entity.Monster'
  # 除外
  excludes:
    'entity_filter_1':
      # METADATA 过滤器
      type: METADATA
      properties:
        keys:
          - 'MyPet' # 宠物插件生物
          - 'NPC' # Citizens 插件生物

它的规则是:当目标在 includes 里且不在 excludes 时才会被包含在集合里。

执行器

执行器作用就是执行任务,执行方式支持以下几种:

  • 固定时间执行(FIXED_TIME)
  • 定时执行(TIMER)
  • 调度执行(SCHEDULER)

它能实现:固定时间清理实体,按间隔清理实体,先清理实体后清理掉落物等功能,这里以实体为例,可以将其应用到所有可以使用执行器的模块。

执行器包含了以下内容:

  • 倒计时器
  • 完成器

一个调度执行器的例子:

# 执行器
executor:
  # 使用调度器
  type: SCHEDULER
  # 参数
  properties:
    # 优先级
    priority: 1
  # 倒计时器
  countdown_timer:
    # 倒计时秒数
    seconds: '1-60'
    # 倒计时通知
    notification:
      # 倒计时类型
      type: TITLE
      # 参数
      properties:
        title: '&e即将清理生物'
        subtitle: '&c倒计时 ${countdown} 秒'
        stay: 20
        fade_in: 20
        fade_out: 20
  # 完成器
  completer:
    notification:
      type: MESSAGE
      properties:
        message: '&a[JulySafe] &b清理完毕, 共计清理 &e${total} &b个生物.'

固定时间执行器

例子,在 10:55:00 执行:

# 定时执行器
type: FIXED_TIME
properties:
  # 24 小时制时间
  times:
    - '10:55:00'

参数:

  • timers(24 小时制时间表达式列表)

定时执行器

例子,以 10 秒为一个重复周期:

# 定时执行器
type: TIMER
properties:
  # 周期,秒
  period: 10

参数:

  • period(重复周期(间隔),秒)

调度执行器

调度执行器会对所有使用调度执行器的任务进行排队执行,在使用 Title,ActionBar 时有必要使用该方式来执行任务。

例子:

# 使用调度器
type: SCHEDULER
# 参数
properties:
  # 优先级
  priority: 1

参数:

  • priority(优先级)

倒计时器

TIP

倒计时器可显示进行关闭,设置 enabled: false 即可。

倒计时器用于通知玩家任务倒计时,倒计时器需要一个通知。

例子:

# 倒计时器
countdown_timer:
  # 倒计时秒数
  seconds: '1-60'
  # 倒计时通知
  notification:
    # 倒计时类型
    type: MESSAGE
    # 参数
    properties:
      message: '&a[JulySafe] &c即将清理生物, 倒计时 ${countdown} 秒.'
      stay: 20
      fade_in: 20
      fade_out: 20

参数:

  • seconds(倒计时秒数表达式)

    使用逗号分隔:描述,例如:'1,5,10'

    使用区间:'1-10' 代表 '1,2,3,4,5,6,7,8,9,10'

  • notification(通知

倒计时器提供了 ${countdown} 变量。

完成器

TIP

完成器可显示进行关闭,设置 enabled: false 即可。

完成器用于通知玩家任务完成,完成器同样需要一个通知。

例子:

# 执行器
executor:
  # 使用调度器
  type: SCHEDULER
  # 参数
  properties:
    # 优先级
    priority: 1
  # ...
  # 完成器
  completer:
    notification:
      type: MESSAGE
      properties:
        message: '&a[JulySafe] &b清理完毕, 共计清理 &e${total} &b个生物.'

参数:

完成器中任务也提供了一些变量,请参考默认配置文件。

通知

通知用于倒计时器和完成器中,他们分别在任务倒计时时和任务完成时发挥重要作用。

插件支持以下通知:

  • 消息通知
  • Title 通知
  • ActionBar 通知
  • BossBar 通知

TIP

以下通知均使用倒计时器进行演示。

消息通知

例子:

# 倒计时器
countdown_timer:
  # 倒计时秒数
  seconds: '1-60'
  # 倒计时通知
  notification:
    # 倒计时类型
    type: MESSAGE
    # 参数
    properties:
      message: '&a[JulySafe] &c即将清理生物, 倒计时 &e${countdown} &c秒.'

演示:

参数:

  • message(消息内容)

Title 通知

TIP

[1.8, 1.12) 版本的服务端需要使用 ProtocoLib 作为前置。

例子:

# 倒计时器
countdown_timer:
  # 倒计时秒数
  seconds: '1-60'
  # 倒计时通知
  notification:
    # 倒计时类型
    type: TITLE
    # 参数
    properties:
      title: '&e即将清理生物'
      subtitle: '&c倒计时 ${countdown} 秒'
      stay: 20
      fade_in: 20
      fade_out: 20

notification_titile

参数:

  • title(大标题)
  • subtitle(小标题)
  • stay(停留时间)
  • fade_in(淡入时间)
  • fade_out(淡出时间)

ActionBar 通知

TIP

ActionBar 需要 Protocolibopen in new window 作为前置。

例子:

# 倒计时器
countdown_timer:
  # 倒计时秒数
  seconds: '1-60'
  # 倒计时通知
  notification:
    # 倒计时类型
    type: ACTION_BAR
    # 参数
    properties:
      message: '&c即将清理生物, 倒计时 &e${countdown} &c秒'

演示:

notification_action_bar

参数:

  • message(消息内容)

BossBar 通知

例子:

# 倒计时器
countdown_timer:
  # 倒计时秒数
  seconds: '1-60'
  # 倒计时通知
  notification:
    # 倒计时类型
    type: BOSS_BAR
    # 参数
    properties:
      title: '&c即将清理生物, 倒计时 &e${countdown} &c秒'
      color: 'RED'
      style: 'SOLID'
      progress: 'INCREASING'

演示:

动画

参数:

红石检测器

TIP

使用 /july-safe debugger debug 指令来开启调试模式,当你在红石装置附近时,你会收到一些调试消息,这可以帮助你快速调参。

引用默认配置文件:

# 红石限制
redstone_limit:
  # 是否开启
  enabled: true
  # 世界集
  world_set:
    # 包含的世界正则表达式
    includes:
      - '.*'
    # 排除的世界正则表达式
    excludes:
      - 'excluded_world'
  # 检测器类型
  # BLOCK_COUNTER 单方块计次器
  # CHUNK_COUNTER 区块计次器
  # BLOCK_TIMER 单方块计时器
  # CHUNK_TIMER 区块计时器
  detector_type: CHUNK_COUNTER
  # 方块白名单
  block_whitelist:
    - 'DAYLIGHT_DETECTOR'
  # 检测重置周期(秒)
  reset_period: 10
  # 阈值
  threshold: 5
  # 封禁时间,秒
  ban_duration: 120
  # 通知附近玩家的范围(x,y,z)
  notify_player_range: '15,255,15'
  # 封禁通知间隔
  notify_player_interval: 10
  # 是否破坏红石装置
  destroy_block: true

检测原理

当玩家在 T 激活红石信号时,则开始进行阈值记录操作了,如果当前阈值记录超过了阈值则进行临时封禁操作,如果 (当前时间 - T) 大于 reset_period 则对阈值记录进行重置。

检测单位

方块计时器或方块计次器是以单个方块作为单位来计算的,区块计时器或区块计次器同理。

以区块为单位进行检测这对低频红石会有明显效果。

检测方式

计时计算的是红石运行的时间,这对低频红石会有明显效果,而计次计算的是红石激活的次数。

实体过滤器

TIP

使用 /july-safe debugger debug 指令来开启调试模式,当你右键实体时,你会收到一些调试消息,这可以帮助你快速调参。

实体过滤器用于过滤实体,应用于多个实体相关的模块中。

枚举过滤器

Bukkit 自带的实体枚举参考:https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/EntityType.html

例子:

'entity_filter_3':
  # 枚举过滤器
  type: ENUM
  properties:
    regexes:
      - 'ENDER_DRAGON'
      - 'ZOMBIE_VILLAGER'

这里过滤了末影龙和僵尸村民。

参数:

  • regexes(正则表达式列表)

类过滤器

该过滤器用于过滤一类实体,Bukkit 自带的实体类参考:https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/entity/package-summary.html

例子:

'entity_filter_1':
  # 类过滤器
  type: CLASS
  properties:
    classes:
      - 'org.bukkit.entity.Monster'

这里匹配了所有怪物。

参数:

  • classes(类名列表)

自定义名匹配器

TIP

过滤时不会自动翻译颜色符号。

该过滤器用于过滤头顶有指定名字的实体。

例子:

'entity_filter_2':
  # 自定义名过滤器(头顶的名字)
  type: CUSTOM_NAME
  properties:
    regexes:
      - '.*'

这里匹配了所有有名字的实体。

参数:

  • regexes(正则表达式列表)

实体名过滤器

TIP

过滤时不会自动翻译颜色符号。

该过滤器主要用于过滤 Mod 实体。

例子:

'entity_filter_2':
  # 自定义名过滤器(头顶的名字)
  type: NAME
  properties:
    regexes:
      - 'Nemo'

这里匹配了名称为 Nemo 的实体。

参数:

  • regexes(正则表达式列表)

元数据过滤器

该过滤器主要用于过滤一些插件生成的实体。

例子:

'entity_filter_1':
  # METADATA 过滤器
  type: METADATA
  properties:
    keys:
      - 'MyPet' # 宠物插件生物
      - 'NPC' # Citizens 插件生物

这里过滤了 MyPetCitizens 插件的实体。

参数:

  • keys

Groovy 过滤器

当其他的过滤器无法满足需求时,可以使用该过滤器,该过滤器使用 Groovy 脚本进行过滤。

例子:

'entity_filter_1':
  # Groovy 过滤器
  type: GROOVY
  properties:
    file: 'scripts/Example.groovy'  

参数:

  • file(脚本相对路径)

scripts/Example.groovy

import com.github.julyss2019.bukkit.julysafe.api.ItemFilter;
import org.bukkit.entity.Entity;

public class SimpleEntityFilter implements ItemFilter {
    @Override
    public boolean filter(Item item) {
        return item.getItemStack().getType().isBlock();
    }
}

掉落物过滤器

枚举过滤器

Bukkit 自带的物品枚举参考:https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/Material.html

例子:

'item_filter_4':
  # 枚举过滤器
  type: ENUM
  properties:
    regexes:
      - '.*_BOX'
      - 'DIAMOND'

这里过滤了潜影盒和钻石。

参数:

  • regexes(正则表达式列表)

展示名过滤器

该过滤器根据自定义的物品展示名进行过滤。

例子:

'item_filter_2':
  # 自定义名过滤器
  type: DISPLAY_NAME
  properties:
    regexes:
      - '.*'

这里过滤了带名字的物品。

参数:

  • regexes(正则表达式列表)

Lore 过滤器

TIP

过滤时不会自动翻译颜色符号。

该过滤器根据物品 Lore 进行过滤。

例子:

'item_filter_3':
  # LORE 过滤器
  type: LORE
  properties:
    regexes:
      - '已绑定'

这里过滤了包含 已绑定 Lore 的物品。

参数:

  • regexes(正则表达式列表)

附魔匹配器

该过滤器根据物品附魔进行过滤。

例子:

'item_filter_1':
  # 附魔过滤器
  type: ENCHANTMENT
  properties:
    regexes:
      - 'DAMAGE_ALL'

这里过滤了包含锋利附魔的物品。

参数:

  • regexes(正则表达式列表)

Groovy 过滤器

当其他的过滤器无法满足需求时,可以使用该过滤器,该过滤器使用 Groovy 脚本进行过滤。

例子:

'entity_filter_1':
  # Groovy 过滤器
  type: GROOVY
  properties:
    file: 'scripts/Example.groovy'  

参数:

  • file(脚本相对路径)

scripts/Example.groovy

import com.github.julyss2019.bukkit.julysafe.api.EntityFilter;
import org.bukkit.entity.Entity;

public class SimpleEntityFilter implements EntityFilter {
    @Override
    public boolean filter(Entity entity) {
        return entity.isOnGround();
    }
}
最后更新:
作者: void, july_ss_2019