@@ -0,0 +1,165 @@
|
||||
package org.bukkit.craftbukkit.boss;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.minecraft.server.BossBattle;
|
||||
import net.minecraft.server.BossBattleServer;
|
||||
import net.minecraft.server.EntityPlayer;
|
||||
import net.minecraft.server.PacketPlayOutBoss;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class CraftBossBar implements BossBar {
|
||||
|
||||
private final BossBattleServer handle;
|
||||
private final Set<BarFlag> flags;
|
||||
private BarColor color;
|
||||
private BarStyle style;
|
||||
|
||||
public CraftBossBar(String title, BarColor color, BarStyle style, BarFlag... flags) {
|
||||
this.flags = flags.length > 0 ? EnumSet.of(flags[0], flags) : EnumSet.noneOf(BarFlag.class);
|
||||
this.color = color;
|
||||
this.style = style;
|
||||
|
||||
handle = new BossBattleServer(
|
||||
CraftChatMessage.fromString(title, true)[0],
|
||||
convertColor(color),
|
||||
convertStyle(style)
|
||||
);
|
||||
|
||||
updateFlags();
|
||||
}
|
||||
|
||||
private BossBattle.BarColor convertColor(BarColor color) {
|
||||
BossBattle.BarColor nmsColor = BossBattle.BarColor.valueOf(color.name());
|
||||
return (nmsColor == null) ? BossBattle.BarColor.WHITE : nmsColor;
|
||||
}
|
||||
|
||||
private BossBattle.BarStyle convertStyle(BarStyle style) {
|
||||
switch (style) {
|
||||
default:
|
||||
case SOLID:
|
||||
return BossBattle.BarStyle.PROGRESS;
|
||||
case SEGMENTED_6:
|
||||
return BossBattle.BarStyle.NOTCHED_6;
|
||||
case SEGMENTED_10:
|
||||
return BossBattle.BarStyle.NOTCHED_10;
|
||||
case SEGMENTED_12:
|
||||
return BossBattle.BarStyle.NOTCHED_12;
|
||||
case SEGMENTED_20:
|
||||
return BossBattle.BarStyle.NOTCHED_20;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateFlags() {
|
||||
handle.a(hasFlag(BarFlag.DARKEN_SKY));
|
||||
handle.b(hasFlag(BarFlag.PLAY_BOSS_MUSIC));
|
||||
handle.c(hasFlag(BarFlag.CREATE_FOG));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTitle() {
|
||||
return CraftChatMessage.fromComponent(handle.e());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setTitle(String title) {
|
||||
handle.title = CraftChatMessage.fromString(title, true)[0];
|
||||
handle.sendUpdate(PacketPlayOutBoss.Action.UPDATE_NAME);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarColor getColor() {
|
||||
return color;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColor(BarColor color) {
|
||||
this.color = color;
|
||||
handle.color = convertColor(color);
|
||||
handle.sendUpdate(PacketPlayOutBoss.Action.UPDATE_STYLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BarStyle getStyle() {
|
||||
return style;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStyle(BarStyle style) {
|
||||
this.style = style;
|
||||
handle.style = convertStyle(style);
|
||||
handle.sendUpdate(PacketPlayOutBoss.Action.UPDATE_STYLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFlag(BarFlag flag) {
|
||||
flags.remove(flag);
|
||||
updateFlags();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeFlag(BarFlag flag) {
|
||||
flags.add(flag);
|
||||
updateFlags();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasFlag(BarFlag flag) {
|
||||
return flags.contains(flag);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setProgress(double progress) {
|
||||
handle.setProgress((float) progress);
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getProgress() {
|
||||
return handle.getProgress();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPlayer(Player player) {
|
||||
handle.addPlayer(((CraftPlayer) player).getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removePlayer(Player player) {
|
||||
handle.removePlayer(((CraftPlayer) player).getHandle());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Player> getPlayers() {
|
||||
ImmutableList.Builder<Player> players = ImmutableList.builder();
|
||||
for (EntityPlayer p : handle.getPlayers()) {
|
||||
players.add(p.getBukkitEntity());
|
||||
}
|
||||
return players.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void show() {
|
||||
handle.setVisible(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void hide() {
|
||||
handle.setVisible(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAll() {
|
||||
for (Player player : getPlayers()) {
|
||||
removePlayer(player);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user