
cn.handyplus.lib.util.BossBarUtil Maven / Gradle / Ivy
The newest version!
package cn.handyplus.lib.util;
import cn.handyplus.lib.InitApi;
import cn.handyplus.lib.adapter.HandyRunnable;
import cn.handyplus.lib.adapter.HandySchedulerUtil;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarFlag;
import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar;
import org.bukkit.boss.KeyedBossBar;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
/**
* BossBar封装
*
* @author handy
* @since 2.3.9
*/
public class BossBarUtil {
private BossBarUtil() {
}
/**
* 创建 BossBar
*
* @param title 标题
* @return KeyedBossBar
* @since 2.3.9
*/
public static KeyedBossBar createBossBar(String title) {
KeyedBossBar bossBar = Bukkit.createBossBar(
new NamespacedKey(InitApi.PLUGIN, UUID.randomUUID().toString()),
title,
BarColor.PINK,
BarStyle.SOLID
);
bossBar.setProgress(1.0);
return bossBar;
}
/**
* 设置风格
*
* @param bossBar bossBar
* @param barStyle barStyle
*/
public static void setStyle(KeyedBossBar bossBar, BarStyle barStyle) {
bossBar.setStyle(barStyle);
}
/**
* 设置颜色
*
* @param bossBar bossBar
* @param barColor barColor
*/
public static void setColor(KeyedBossBar bossBar, BarColor barColor) {
bossBar.setColor(barColor);
}
/**
* 设置进度 0.0 - 1.0
*
* @param bossBar bossBar
* @param progress progress
*/
public static void setProgress(KeyedBossBar bossBar, double progress) {
bossBar.setProgress(progress);
}
/**
* 改变进度
*
* @param namespacedKey namespacedKey
* @param delay 时间单位 秒
* @since 3.6.3
*/
public static void setProgress(NamespacedKey namespacedKey, Integer delay) {
BigDecimal bigDecimal = BigDecimal.valueOf(0.1 / delay).setScale(5, RoundingMode.HALF_UP);
final BigDecimal[] one = {BigDecimal.ONE};
HandyRunnable handyRunnable = new HandyRunnable() {
@Override
public void run() {
BossBar bossBar = getBossBar(namespacedKey);
if (bossBar == null || !bossBar.isVisible() || one[0].compareTo(BigDecimal.ZERO) <= 0) {
this.cancel();
return;
}
one[0] = one[0].subtract(bigDecimal);
if (one[0].compareTo(BigDecimal.ZERO) <= 0) {
one[0] = BigDecimal.ZERO;
}
bossBar.setProgress(one[0].doubleValue());
}
};
HandySchedulerUtil.runTaskTimer(handyRunnable, 2, 2);
}
/**
* 创建 BossBar
*
* @param config 配置文件
* @param type 节点
* @param title 标题
* @return KeyedBossBar
* @since 2.3.9
*/
public static KeyedBossBar createBossBar(FileConfiguration config, String type, String title) {
String color = config.getString(type + ".color", "PINK");
String style = config.getString(type + ".style", "SOLID");
BarColor barColor = BarColor.valueOf(color.toUpperCase());
BarStyle barStyle = BarStyle.valueOf(style.toUpperCase());
return createBossBar(title, barColor, barStyle);
}
/**
* 创建 BossBar
*
* @param title 标题
* @param barColor 颜色
* @param barStyle 风格
* @return KeyedBossBar
* @since 2.3.9
*/
public static KeyedBossBar createBossBar(String title, BarColor barColor, BarStyle barStyle) {
KeyedBossBar bossBar = Bukkit.createBossBar(
new NamespacedKey(InitApi.PLUGIN, UUID.randomUUID().toString()),
title,
barColor,
barStyle
);
// 进度
bossBar.setProgress(1.0);
return bossBar;
}
/**
* 创建 BossBar
*
* @param title 标题
* @param barColor 颜色
* @param barStyle 风格
* @param barFlag 样式
* @return KeyedBossBar
* @since 2.3.9
*/
public static KeyedBossBar createBossBar(String title, BarColor barColor, BarStyle barStyle, BarFlag barFlag) {
KeyedBossBar bossBar = Bukkit.createBossBar(
new NamespacedKey(InitApi.PLUGIN, UUID.randomUUID().toString()),
title,
barColor,
barStyle,
barFlag
);
bossBar.setProgress(1.0);
return bossBar;
}
/**
* 添加玩家
*
* @param namespacedKey key
* @param player 玩家
* @since 2.3.9
*/
public static void addPlayer(NamespacedKey namespacedKey, Player player) {
addPlayer(namespacedKey, Collections.singletonList(player));
}
/**
* 添加玩家
*
* @param namespacedKey key
* @param playerName 玩家
* @since 2.3.9
*/
public static void addPlayer(NamespacedKey namespacedKey, String playerName) {
Optional playerOpt = BaseUtil.getOnlinePlayer(playerName);
playerOpt.ifPresent(player -> addPlayer(namespacedKey, player));
}
/**
* 添加玩家
*
* @param namespacedKey key
* @param playerUuid 玩家
* @since 2.3.9
*/
public static void addPlayer(NamespacedKey namespacedKey, UUID playerUuid) {
Optional onlinePlayer = BaseUtil.getOnlinePlayer(playerUuid);
onlinePlayer.ifPresent(player -> addPlayer(namespacedKey, player));
}
/**
* 添加玩家
*
* @param namespacedKey key
* @param playerUuidList 玩家列表
* @since 2.3.9
*/
public static void addPlayerByUuid(NamespacedKey namespacedKey, List playerUuidList) {
for (UUID playerUuid : playerUuidList) {
addPlayer(namespacedKey, playerUuid);
}
}
/**
* 添加玩家
*
* @param namespacedKey key
* @param playerNameList 玩家列表
* @since 2.3.9
*/
public static void addPlayerByName(NamespacedKey namespacedKey, List playerNameList) {
for (String playerName : playerNameList) {
addPlayer(namespacedKey, playerName);
}
}
/**
* 添加玩家
*
* @param namespacedKey key
* @param playerList 玩家列表
* @since 2.3.9
*/
public static void addPlayer(NamespacedKey namespacedKey, List playerList) {
BossBar bossBar = getBossBar(namespacedKey);
if (bossBar == null) {
return;
}
for (Player player : playerList) {
bossBar.addPlayer(player);
}
}
/**
* 添加玩家
*
* @param bossBar bossBar
* @since 3.5.6
*/
public static void addAllPlayer(KeyedBossBar bossBar) {
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
bossBar.addPlayer(onlinePlayer);
}
}
/**
* 移除玩家
*
* @param namespacedKey key
* @param player 玩家
* @since 2.3.9
*/
public static void removePlayer(NamespacedKey namespacedKey, Player player) {
removePlayer(namespacedKey, Collections.singletonList(player));
}
/**
* 移除玩家
*
* @param namespacedKey key
* @param playerName 玩家
* @since 2.3.9
*/
public static void removePlayer(NamespacedKey namespacedKey, String playerName) {
Optional playerOpt = BaseUtil.getOnlinePlayer(playerName);
playerOpt.ifPresent(player -> removePlayer(namespacedKey, player));
}
/**
* 移除玩家
*
* @param namespacedKey key
* @param playerUuid 玩家
* @since 2.3.9
*/
public static void removePlayer(NamespacedKey namespacedKey, UUID playerUuid) {
Optional playerOpt = BaseUtil.getOnlinePlayer(playerUuid);
playerOpt.ifPresent(player -> removePlayer(namespacedKey, player));
}
/**
* 移除玩家
*
* @param namespacedKey key
* @param playerUuidList 玩家列表
* @since 2.3.9
*/
public static void removePlayerByUuid(NamespacedKey namespacedKey, List playerUuidList) {
for (UUID playerUuid : playerUuidList) {
removePlayer(namespacedKey, playerUuid);
}
}
/**
* 移除玩家
*
* @param namespacedKey key
* @param playerNameList 玩家列表
* @since 2.3.9
*/
public static void removePlayerByName(NamespacedKey namespacedKey, List playerNameList) {
for (String playerName : playerNameList) {
removePlayer(namespacedKey, playerName);
}
}
/**
* 移除玩家
*
* @param namespacedKey key
* @param playerList 玩家列表
* @since 2.3.9
*/
public static void removePlayer(NamespacedKey namespacedKey, List playerList) {
BossBar bossBar = getBossBar(namespacedKey);
if (bossBar == null) {
return;
}
for (Player player : playerList) {
bossBar.removePlayer(player);
}
}
/**
* 获取对应BossBar
*
* @param namespacedKey key
* @return BossBar
* @since 2.3.9
*/
public static BossBar getBossBar(NamespacedKey namespacedKey) {
return Bukkit.getBossBar(namespacedKey);
}
/**
* 移除 BossBar
*
* @param namespacedKey key
* @since 2.3.9
*/
public static void removeBossBar(NamespacedKey namespacedKey) {
Bukkit.removeBossBar(namespacedKey);
}
/**
* 定时清理
*
* @param namespacedKey 标识
* @param delay 时间单位 秒
* @since 3.5.6
*/
public static void removeBossBar(NamespacedKey namespacedKey, Integer delay) {
HandySchedulerUtil.runTaskLater(() -> {
BossBar bossBar = getBossBar(namespacedKey);
bossBar.removeAll();
removeBossBar(namespacedKey);
}, delay * 20);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy