配置
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个生物.'
参数:
- notification(通知)
完成器中任务也提供了一些变量,请参考默认配置文件。
通知
通知用于倒计时器和完成器中,他们分别在任务倒计时时和任务完成时发挥重要作用。
插件支持以下通知:
- 消息通知
- 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
参数:
title
(大标题)subtitle
(小标题)stay
(停留时间)fade_in
(淡入时间)fade_out
(淡出时间)
ActionBar 通知
TIP
ActionBar 需要 Protocolib 作为前置。
例子:
# 倒计时器
countdown_timer:
# 倒计时秒数
seconds: '1-60'
# 倒计时通知
notification:
# 倒计时类型
type: ACTION_BAR
# 参数
properties:
message: '&c即将清理生物, 倒计时 &e${countdown} &c秒'
演示:
参数:
message
(消息内容)
BossBar 通知
例子:
# 倒计时器
countdown_timer:
# 倒计时秒数
seconds: '1-60'
# 倒计时通知
notification:
# 倒计时类型
type: BOSS_BAR
# 参数
properties:
title: '&c即将清理生物, 倒计时 &e${countdown} &c秒'
color: 'RED'
style: 'SOLID'
progress: 'INCREASING'
演示:
参数:
title
(标题)color
(颜色)以 BarColor 中的枚举名称为准。
style
(样式)以 BarStyle 中的枚举名称为准。
progress(进度条)
INCREASING
递增,DECRASING
递减。
红石检测器
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 插件生物
这里过滤了 MyPet
和 Citizens
插件的实体。
参数:
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();
}
}