From dfbb9a1c9e32240fc52c0c10d69070ccf1551840 Mon Sep 17 00:00:00 2001 From: Yannick Lamprecht Date: Sat, 10 Nov 2018 20:22:05 +1100 Subject: Add API to manipulate boss bar of entities and those created by commands --- src/main/java/org/bukkit/Bukkit.java | 75 ++++++++++++++++++++++++ src/main/java/org/bukkit/Server.java | 67 +++++++++++++++++++++ src/main/java/org/bukkit/boss/KeyedBossBar.java | 9 +++ src/main/java/org/bukkit/entity/Boss.java | 16 +++++ src/main/java/org/bukkit/entity/EnderDragon.java | 2 +- src/main/java/org/bukkit/entity/Wither.java | 2 +- 6 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/bukkit/boss/KeyedBossBar.java create mode 100644 src/main/java/org/bukkit/entity/Boss.java diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java index 5a4654fd..d16357ea 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -19,6 +19,7 @@ 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.command.CommandException; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; @@ -1194,6 +1195,80 @@ public final class Bukkit { return server.createBossBar(title, color, style, flags); } + /** + * Creates a boss bar instance to display to players. The progress defaults + * to 1.0. + *
+ * This instance is added to the persistent storage of the server and will + * be editable by commands and restored after restart. + * + * @param key the key of the boss bar that is used to access the boss bar + * @param title the title of the boss bar + * @param color the color of the boss bar + * @param style the style of the boss bar + * @param flags an optional list of flags to set on the boss bar + * @return the created boss bar + */ + public static KeyedBossBar createBossBar(NamespacedKey key, String title, BarColor color, BarStyle style, BarFlag... flags) { + return server.createBossBar(key, title, color, style, flags); + } + + /** + * Gets an unmodifiable iterator through all persistent bossbars. + * + * + * e.g. bossbars created using the bossbar command + * + * @return a bossbar iterator + */ + public static Iterator getBossBars() { + return server.getBossBars(); + } + + /** + * Gets the {@link KeyedBossBar} specified by this key. + * + * + * e.g. bossbars created using the bossbar command + * + * @param key unique bossbar key + * @return bossbar or null if not exists + */ + public static KeyedBossBar getBossBar(NamespacedKey key) { + return server.getBossBar(key); + } + + /** + * Removes a {@link KeyedBossBar} specified by this key. + * + * + * e.g. bossbars created using the bossbar command + * + * @param key unique bossbar key + * @return true if removal succeeded or false + */ + public static boolean removeBossBar(NamespacedKey key) { + return server.removeBossBar(key); + } + /** * Gets an entity on the server by its UUID * diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java index 21ed6aeb..23b1344b 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -19,6 +19,7 @@ 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.command.CommandException; import org.bukkit.command.CommandSender; import org.bukkit.command.ConsoleCommandSender; @@ -986,6 +987,72 @@ public interface Server extends PluginMessageRecipient { */ BossBar createBossBar(String title, BarColor color, BarStyle style, BarFlag... flags); + /** + * Creates a boss bar instance to display to players. The progress defaults + * to 1.0. + *
+ * This instance is added to the persistent storage of the server and will + * be editable by commands and restored after restart. + * + * @param key the key of the boss bar that is used to access the boss bar + * @param title the title of the boss bar + * @param color the color of the boss bar + * @param style the style of the boss bar + * @param flags an optional list of flags to set on the boss bar + * @return the created boss bar + */ + KeyedBossBar createBossBar(NamespacedKey key, String title, BarColor color, BarStyle style, BarFlag... flags); + + /** + * Gets an unmodifiable iterator through all persistent bossbars. + * + * + * e.g. bossbars created using the bossbar command + * + * @return a bossbar iterator + */ + Iterator getBossBars(); + + /** + * Gets the {@link KeyedBossBar} specified by this key. + *
    + *
  • not bound to a {@link org.bukkit.entity.Boss}
  • + *
  • + * not created using + * {@link #createBossBar(String, BarColor, BarStyle, BarFlag...)} + *
  • + *
+ * + * e.g. bossbars created using the bossbar command + * + * @param key unique bossbar key + * @return bossbar or null if not exists + */ + KeyedBossBar getBossBar(NamespacedKey key); + + /** + * Removes a {@link KeyedBossBar} specified by this key. + *
    + *
  • not bound to a {@link org.bukkit.entity.Boss}
  • + *
  • + * not created using + * {@link #createBossBar(String, BarColor, BarStyle, BarFlag...)} + *
  • + *
+ * + * e.g. bossbars created using the bossbar command + * + * @param key unique bossbar key + * @return true if removal succeeded or false + */ + boolean removeBossBar(NamespacedKey key); + /** * Gets an entity on the server by its UUID * diff --git a/src/main/java/org/bukkit/boss/KeyedBossBar.java b/src/main/java/org/bukkit/boss/KeyedBossBar.java new file mode 100644 index 00000000..6a1fe5f9 --- /dev/null +++ b/src/main/java/org/bukkit/boss/KeyedBossBar.java @@ -0,0 +1,9 @@ +package org.bukkit.boss; + +import org.bukkit.Keyed; + +/** + * Represents a custom {@link BossBar} that has a + * {@link org.bukkit.NamespacedKey} + */ +public interface KeyedBossBar extends BossBar, Keyed { } diff --git a/src/main/java/org/bukkit/entity/Boss.java b/src/main/java/org/bukkit/entity/Boss.java new file mode 100644 index 00000000..78105359 --- /dev/null +++ b/src/main/java/org/bukkit/entity/Boss.java @@ -0,0 +1,16 @@ +package org.bukkit.entity; + +import org.bukkit.boss.BossBar; + +/** + * Represents the Boss Entity. + */ +public interface Boss extends Entity { + + /** + * Returns the {@link BossBar} of the {@link Boss} + * + * @return the {@link BossBar} of the entity + */ + BossBar getBossBar(); +} diff --git a/src/main/java/org/bukkit/entity/EnderDragon.java b/src/main/java/org/bukkit/entity/EnderDragon.java index 4ea0e44e..7170d37a 100644 --- a/src/main/java/org/bukkit/entity/EnderDragon.java +++ b/src/main/java/org/bukkit/entity/EnderDragon.java @@ -3,7 +3,7 @@ package org.bukkit.entity; /** * Represents an Ender Dragon */ -public interface EnderDragon extends ComplexLivingEntity { +public interface EnderDragon extends ComplexLivingEntity, Boss { /** * Represents a phase or action that an Ender Dragon can perform. diff --git a/src/main/java/org/bukkit/entity/Wither.java b/src/main/java/org/bukkit/entity/Wither.java index 0922c5c6..3bc332ee 100644 --- a/src/main/java/org/bukkit/entity/Wither.java +++ b/src/main/java/org/bukkit/entity/Wither.java @@ -3,5 +3,5 @@ package org.bukkit.entity; /** * Represents a Wither boss */ -public interface Wither extends Monster { +public interface Wither extends Monster, Boss { } -- cgit v1.2.3