阻断器

用于阻挡频繁发生的事件,并对其施加冷却时间。具体表现在 taboolib.common5.Baffle 类中。

/**
 * 按时间阻断
 * 单位:毫秒
 *
 * @param duration 时间数值
 * @param timeUnit 时间单位
 * @return {@link Baffle}
 */
@NotNull
public static Baffle of(long duration, TimeUnit timeUnit)

/**
 * 按次阻断(类似 SimpleCounter)
 *
 * @param count 次数
 * @return {@link Baffle}
 */
@NotNull
public static Baffle of(int count)

/**
 * 重置所有数据
 */
public void resetAll();

/**
 * 重置个体的执行缓存
 *
 * @param id 个体序号
 */
public void reset(String id);

/**
 * 强制个体更新数据
 *
 * @param id 个体序号
 */
public void next(String id);

/**
 * 验证个体的执行结果
 *
 * @param id     个体序号
 * @param update 是否更新数据
 * @return 是否运行
 */
public boolean hasNext(String id, boolean update);

/**
 * 同 {@link Baffle#next(String)},个体序号为(*)
 */
public void reset();

/**
 * 同 {@link Baffle#next(String)},个体序号为(*)
 */
public void next();

/**
 * 同 {@link Baffle#hasNext(String, boolean)},个体序号为(*)
 *
 * @return 是否运行
 */
public boolean hasNext();

/**
 * 同 {@link Baffle#hasNext(String, boolean)}
 *
 * @param id 个体序号
 * @return 是否运行
 */
public boolean hasNext(String id);

具体使用方式可以表现为以下形式:

object Listener {

    /**
     * 声明一个周期为 10 秒的阻断器
     */
    val baffle1 = Baffle.of(10, TimeUnit.SECONDS)

    @SubscribeEvent
    fun onClick(event: PlayerInteractEvent) {
        // 判断玩家是否通过阻断器的等待时间
        // 若玩家在 10 秒内再次触发该事件则结果为否
        if (baffle1.hasNext(event.player.name)) {
            // ...
        }
    }

    @SubscribeEvent
    fun onQuit(event: PlayerQuitEvent) {
        // 当玩家离开服务器时需释放缓存,否则将会造成内存溢出
        baffle1.reset(event.player.name)
    }
}