Citizens2/main/src/main/java/net/citizensnpcs/trait/versioned/BossBarTrait.java

129 lines
3.4 KiB
Java
Raw Normal View History

package net.citizensnpcs.trait.versioned;
2019-04-24 15:01:22 +02:00
import java.util.Collection;
import java.util.List;
import org.bukkit.Bukkit;
2019-04-24 15:01:22 +02:00
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarFlag;
import org.bukkit.boss.BarStyle;
2019-04-24 15:01:22 +02:00
import org.bukkit.boss.BossBar;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
2019-04-24 15:01:22 +02:00
import com.google.common.collect.Lists;
import net.citizensnpcs.Settings.Setting;
2019-04-24 15:01:22 +02:00
import net.citizensnpcs.api.persistence.Persist;
import net.citizensnpcs.api.trait.Trait;
import net.citizensnpcs.api.trait.TraitName;
import net.citizensnpcs.util.NMS;
2019-04-24 15:01:22 +02:00
@TraitName("bossbar")
public class BossBarTrait extends Trait {
private BossBar barCache;
2019-04-24 15:01:22 +02:00
@Persist("color")
private BarColor color = BarColor.PURPLE;
2019-04-24 15:01:22 +02:00
@Persist("flags")
private List<BarFlag> flags = Lists.newArrayList();
@Persist("style")
private BarStyle style = BarStyle.SOLID;
2019-04-24 15:01:22 +02:00
@Persist("title")
private String title = "";
2019-04-24 15:01:22 +02:00
@Persist("visible")
private boolean visible = true;
public BossBarTrait() {
super("bossbar");
}
2020-10-07 13:16:41 +02:00
public BarColor getColor() {
return color;
}
public List<BarFlag> getFlags() {
return flags;
}
public BarStyle getStyle() {
return style;
}
2020-10-07 13:16:41 +02:00
public String getTitle() {
return title;
}
2019-04-24 15:01:22 +02:00
private boolean isBoss(Entity entity) {
boolean isBoss = entity.getType() == EntityType.ENDER_DRAGON || entity.getType() == EntityType.WITHER
2019-04-24 15:01:22 +02:00
|| entity.getType() == EntityType.GUARDIAN;
if (isBoss) {
barCache = null;
}
return isBoss;
2019-04-24 15:01:22 +02:00
}
2020-10-07 13:16:41 +02:00
public boolean isVisible() {
return visible;
}
2019-04-24 15:01:22 +02:00
@Override
public void run() {
if (!npc.isSpawned())
2019-04-24 15:01:22 +02:00
return;
BossBar bar = isBoss(npc.getEntity()) ? (BossBar) NMS.getBossBar(npc.getEntity())
: barCache == null ? barCache = Bukkit.getServer().createBossBar(npc.getFullName(), color, style,
flags.toArray(new BarFlag[flags.size()])) : barCache;
if (bar == null) {
return;
}
bar.setStyle(style);
2019-04-24 15:01:22 +02:00
bar.setVisible(visible);
if (color != null) {
bar.setColor(color);
}
if (title != null) {
bar.setTitle(title);
}
for (BarFlag flag : BarFlag.values()) {
bar.removeFlag(flag);
}
for (BarFlag flag : flags) {
bar.addFlag(flag);
}
if (barCache != null) {
barCache.removeAll();
for (Entity entity : npc.getEntity().getNearbyEntities(Setting.BOSSBAR_RANGE.asInt() / 2,
Setting.BOSSBAR_RANGE.asInt() / 2, Setting.BOSSBAR_RANGE.asInt() / 2)) {
if (entity instanceof Player) {
barCache.addPlayer((Player) entity);
}
}
}
2019-04-24 15:01:22 +02:00
}
public void setColor(BarColor color) {
this.color = color;
}
public void setFlags(Collection<BarFlag> flags) {
this.flags = Lists.newArrayList(flags);
}
2020-10-07 13:16:41 +02:00
public void setFlags(List<BarFlag> flags) {
this.flags = flags;
}
public void setStyle(BarStyle style) {
this.style = style;
}
2019-04-24 15:01:22 +02:00
public void setTitle(String title) {
this.title = title;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
}