diff --git a/pom.xml b/pom.xml
index d84021b..615a02e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,7 @@
jitpack.io
https://jitpack.io
+
diff --git a/src/main/java/nl/martenm/servertutorialplus/objects/TutorialController.java b/src/main/java/nl/martenm/servertutorialplus/objects/TutorialController.java
index 4b28577..7c66188 100644
--- a/src/main/java/nl/martenm/servertutorialplus/objects/TutorialController.java
+++ b/src/main/java/nl/martenm/servertutorialplus/objects/TutorialController.java
@@ -9,6 +9,8 @@
import nl.martenm.servertutorialplus.helpers.dataholders.OldValuesPlayer;
import nl.martenm.servertutorialplus.points.IPlayPoint;
import org.bukkit.Bukkit;
+import org.bukkit.NamespacedKey;
+import org.bukkit.boss.BossBar;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@@ -105,6 +107,11 @@ private void restorePlayer(boolean originalLocation){
if (originalLocation) {
player.teleport(oldValuesPlayer.getLoc());
}
+
+ BossBar bossBar = Bukkit.getBossBar(new NamespacedKey(plugin, "bossbar"));
+ if (bossBar != null) {
+ bossBar.removeAll();
+ }
// });
}
}
diff --git a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java
index 2ff449e..19d7df6 100644
--- a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java
+++ b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java
@@ -12,9 +12,10 @@
import net.md_5.bungee.api.chat.TextComponent;
import nl.martenm.servertutorialplus.points.editor.PointArg;
import nl.martenm.servertutorialplus.points.editor.args.*;
-import org.bukkit.Bukkit;
-import org.bukkit.Location;
-import org.bukkit.Sound;
+import org.bukkit.*;
+import org.bukkit.boss.BarColor;
+import org.bukkit.boss.BarStyle;
+import org.bukkit.boss.BossBar;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Firework;
import org.bukkit.entity.Player;
@@ -37,11 +38,19 @@ public abstract class ServerTutorialPoint{
protected ServerTutorialPlus plugin;
protected PointType type;
+ protected BukkitTask bossbarRunnable = null;
+
protected Location loc;
protected List message_chat;
protected List commands;
protected List fireworks;
protected String message_actionBar;
+ protected String bossBarTitle;
+ protected double bossBarProgress;
+ protected BarColor bossBarColor;
+ protected BarStyle bossBarStyle;
+ protected double bossBarShowAfter;
+ protected double bossBarHideAfter;
protected PlayerTitle titleInfo;
protected PlayerSound soundInfo;
protected List pointionEffects;
@@ -89,6 +98,7 @@ public void run() {
@Override
public void stop() {
if(timerTask != null) timerTask.cancel();
+ if (bossbarRunnable != null) bossbarRunnable.cancel();
}
};
}
@@ -157,6 +167,42 @@ protected void playDefault(Player player, OldValuesPlayer oldValuesPlayer, boole
}
//endregion
+ if (bossBarTitle != null && bossBarHideAfter > bossBarShowAfter) {
+
+ BossBar oldBar = Bukkit.getBossBar(new NamespacedKey(plugin, "bossbar"));
+ if (oldBar != null) {
+ oldBar.removeAll();
+ }
+
+ bossbarRunnable = new BukkitRunnable() {
+ final BossBar bossBar = Bukkit.getServer().createBossBar(new NamespacedKey(plugin, "bossbar"),
+ ChatColor.translateAlternateColorCodes('&', bossBarTitle), bossBarColor, bossBarStyle);
+ final int showAfterTicks = (int) (bossBarShowAfter * 20);
+ final int hideAfterTicks = (int) (bossBarHideAfter * 20);
+ int ticksPassed = 0;
+ {
+ if (bossBarProgress > 1.0) {
+ bossBarProgress = 1.0;
+ }
+ if (bossBarProgress < 0.0) {
+ bossBarProgress = 0.0;
+ }
+ bossBar.setProgress(bossBarProgress);
+ }
+ @Override
+ public void run() {
+ if (ticksPassed >= showAfterTicks && !bossBar.getPlayers().contains(player)) {
+ bossBar.addPlayer(player);
+ }
+ if (ticksPassed >= hideAfterTicks || ticksPassed > time * 20) {
+ bossBar.removePlayer(player);
+ this.cancel();
+ }
+ ticksPassed += 2;
+ }
+ }.runTaskTimer(plugin, 0, 2);
+ }
+
//region commands
for (String command : commands) {
Bukkit.getServer().dispatchCommand(Bukkit.getConsoleSender(), PluginUtils.replaceVariables(plugin.placeholderAPI, player, command));
@@ -198,9 +244,28 @@ public void readSaveData(Config tutorialSaves, String ID, String i) {
commands = tutorialSaves.getStringList("tutorials." + ID + ".points." + i + ".commands");
message_actionBar = tutorialSaves.getString("tutorials." + ID + ".points." + i + ".actionbar");
+ bossBarTitle = tutorialSaves.getString("tutorials." + ID + ".points." + i + ".bossbar.title");
+ bossBarProgress = tutorialSaves.getDouble("tutorials." + ID + ".points." + i + ".bossbar.progress", 1.0);
+ bossBarShowAfter = tutorialSaves.getDouble("tutorials." + ID + ".points." + i + ".bossbar.show-after", 0.0);
+ bossBarHideAfter = tutorialSaves.getDouble("tutorials." + ID + ".points." + i + ".bossbar.hide-after", time);
lockPlayer = tutorialSaves.getBoolean("tutorials." + ID + ".points." + i + ".locplayer");
lockView = tutorialSaves.getBoolean("tutorials." + ID + ".points." + i + ".locview");
flying = tutorialSaves.getBoolean("tutorials." + ID + ".points." + i + ".setFly");
+
+ try {
+ String bossBarStyleString = tutorialSaves.getString("tutorials." + ID + ".points." + i + ".bossbar.style", "SOLID");
+ bossBarStyle = BarStyle.valueOf(bossBarStyleString.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ bossBarStyle = BarStyle.SOLID;
+ }
+
+ try {
+ String bossBarColorString = tutorialSaves.getString("tutorials." + ID + ".points." + i + ".bossbar.color", "WHITE");
+ bossBarColor = BarColor.valueOf(bossBarColorString.toUpperCase());
+ } catch (IllegalArgumentException e) {
+ bossBarColor = BarColor.WHITE;
+ }
+
/*
Fire work meta!
*/
@@ -267,6 +332,15 @@ public void saveData(Config tutorialSaves, String key, String i){
tutorialSaves.set("tutorials." + key + ".points." + i + ".commands", commands);
if(flying) tutorialSaves.set("tutorials." + key + ".points." + i + ".setFly", flying);
+ if (bossBarTitle != null) {
+ tutorialSaves.set("tutorials." + key + ".points." + i + ".bossbar.title", bossBarTitle);
+ tutorialSaves.set("tutorials." + key + ".points." + i + ".bossbar.color", bossBarColor.name());
+ tutorialSaves.set("tutorials." + key + ".points." + i + ".bossbar.style", bossBarStyle.name());
+ tutorialSaves.set("tutorials." + key + ".points." + i + ".bossbar.progress", bossBarProgress);
+ tutorialSaves.set("tutorials." + key + ".points." + i + ".bossbar.show-after", bossBarShowAfter);
+ tutorialSaves.set("tutorials." + key + ".points." + i + ".bossbar.hide-after", bossBarHideAfter);
+ }
+
if(titleInfo != null){
tutorialSaves.set("tutorials." + key + ".points." + i + ".title.title", titleInfo.title);
tutorialSaves.set("tutorials." + key + ".points." + i + ".title.subtitle", titleInfo.subtitle);
@@ -317,6 +391,7 @@ public List getArgs(){
args.add(new MessagesArg());
args.add(new CommandsArg());
args.add(new ActionbarArg());
+ args.add(new BossBarArg());
args.add(new FireworkArg());
args.add(new PotionEffectArg());
args.add(new SoundArg());
@@ -439,4 +514,28 @@ public boolean isSetFlying() {
public void setFlying(boolean setFlying) {
this.flying = setFlying;
}
+
+ public void setBossBarTitle(String bossBarTitle) {
+ this.bossBarTitle = bossBarTitle;
+ }
+
+ public void setBossBarProgress(double bossBarProgress) {
+ this.bossBarProgress = bossBarProgress;
+ }
+
+ public void setBossBarColor(BarColor bossBarColor) {
+ this.bossBarColor = bossBarColor;
+ }
+
+ public void setBossBarStyle(BarStyle bossBarStyle) {
+ this.bossBarStyle = bossBarStyle;
+ }
+
+ public void setBossBarShowAfter(double bossBarShowAfter) {
+ this.bossBarShowAfter = bossBarShowAfter;
+ }
+
+ public void setBossBarHideAfter(double bossBarHideAfter) {
+ this.bossBarHideAfter = bossBarHideAfter;
+ }
}
diff --git a/src/main/java/nl/martenm/servertutorialplus/points/editor/args/BossBarArg.java b/src/main/java/nl/martenm/servertutorialplus/points/editor/args/BossBarArg.java
new file mode 100644
index 0000000..01101e0
--- /dev/null
+++ b/src/main/java/nl/martenm/servertutorialplus/points/editor/args/BossBarArg.java
@@ -0,0 +1,95 @@
+package nl.martenm.servertutorialplus.points.editor.args;
+
+import nl.martenm.servertutorialplus.language.Lang;
+import nl.martenm.servertutorialplus.objects.ServerTutorial;
+import nl.martenm.servertutorialplus.points.ServerTutorialPoint;
+import nl.martenm.servertutorialplus.points.editor.PointArg;
+import org.apache.commons.lang3.StringUtils;
+import org.bukkit.boss.BarColor;
+import org.bukkit.boss.BarStyle;
+import org.bukkit.command.CommandSender;
+
+public class BossBarArg extends PointArg {
+
+ public BossBarArg() {
+ super("bossbar");
+ }
+
+ @Override
+ public boolean run(ServerTutorial serverTutorial, ServerTutorialPoint point, CommandSender sender, String[] args) {
+ if(args.length < 1){
+ sender.sendMessage(Lang.WRONG_COMMAND_FORMAT + "/st editpoint bossbar
");
+ return false;
+ }
+
+ if (args.length < 2) {
+ sender.sendMessage(Lang.ERROR_ATLEAST_ONE_WORD.toString());
+ return false;
+ }
+
+ switch (args[0]) {
+ case "title":
+ String title = StringUtils.join(args, ' ', 1, args.length);
+ point.setBossBarTitle(title);
+ break;
+ case "progress":
+ double progress;
+ try {
+ progress = Double.parseDouble(args[1]);
+ if (progress > 1.0 || progress < 0.0) {
+ sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString());
+ return false;
+ }
+ } catch (NumberFormatException e) {
+ sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString());
+ return false;
+ }
+ point.setBossBarProgress(progress);
+ break;
+ case "color":
+ BarColor color;
+ try {
+ color = BarColor.valueOf(args[1]);
+ } catch (IllegalArgumentException e) {
+ sender.sendMessage(Lang.INVALID_ARGS.toString());
+ return false;
+ }
+ point.setBossBarColor(color);
+ break;
+ case "style":
+ BarStyle style;
+ try {
+ style = BarStyle.valueOf(args[1]);
+ } catch (IllegalArgumentException e) {
+ sender.sendMessage(Lang.INVALID_ARGS.toString());
+ return false;
+ }
+ point.setBossBarStyle(style);
+ break;
+ case "show-after":
+ double showAfter;
+ try {
+ showAfter = Double.parseDouble(args[1]);
+ } catch (NumberFormatException e) {
+ sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString());
+ return false;
+ }
+ point.setBossBarShowAfter(showAfter);
+ break;
+ case "hide-after":
+ double hideAfter;
+ try {
+ hideAfter = Double.parseDouble(args[1]);
+ } catch (NumberFormatException e) {
+ sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString());
+ return false;
+ }
+ point.setBossBarHideAfter(hideAfter);
+ break;
+ default:
+ sender.sendMessage(Lang.WRONG_COMMAND_FORMAT + "/st editpoint bossbar
");
+ return false;
+ }
+ return true;
+ }
+}