001package com.ericlam.mc.minigames.core.manager; 002 003import com.ericlam.mc.minigames.core.character.GamePlayer; 004import org.bukkit.Location; 005import org.bukkit.entity.Player; 006 007import java.util.Collection; 008import java.util.List; 009import java.util.function.Consumer; 010 011/** 012 * 遊戲內工具類 013 */ 014public interface GameUtils { 015 016 /** 017 * 根據秒數獲取 時間顯示文字: x 時 x 分 x秒 018 * 019 * @param sec 秒 020 * @return 時間顯示文字 021 */ 022 String getTimeWithUnit(long sec); 023 024 /** 025 * 根據秒數獲取 時間顯示格式: 00:00 026 * 027 * @param sec 秒 028 * @return 時間顯示格式: 00:00 029 */ 030 String getTimer(long sec); 031 032 /** 033 * 播放聲效 034 * <ul> 035 * <li>[0] 為聲效(可自定義)</li> 036 * <li>[1] 為 pitch</li> 037 * <li>[2] 為 volume</li> 038 * </ul> 039 * 040 * @param player 玩家 041 * @param soundString 聲音文字,格式如上 042 */ 043 void playSound(Player player, String[] soundString); 044 045 /** 046 * 逐步循環操作 047 * 048 * @param collection 集合物件 049 * @param task 對每個物件的迭代處理 050 * @param period 每次處理間隔 051 * @param <T> 物件形態 052 */ 053 <T> void unLagIterate(Collection<T> collection, Consumer<T> task, long period); 054 055 /** 056 * 逐步循環傳送 057 * 058 * @param gamePlayers 遊戲玩家列表 059 * @param locations 傳送位置列表 060 * @param period 每次傳送間隔 061 */ 062 void noLagTeleport(List<GamePlayer> gamePlayers, List<Location> locations, long period); 063 064 /** 065 * 逐步循環傳送 066 * 067 * @param gamePlayers 遊戲玩家列表 068 * @param period 傳送位置列表 069 * @param locations 每次傳送間隔 070 */ 071 void noLagTeleport(List<GamePlayer> gamePlayers, long period, Location... locations); 072}