From 8bebac01c3c9599e52b543d722b41eb6395e22cb Mon Sep 17 00:00:00 2001 From: Nicolai Date: Sun, 21 Apr 2024 13:01:06 +0200 Subject: [PATCH 1/5] Added bossbar function --- pom.xml | 12 +++ .../objects/TutorialController.java | 7 ++ .../points/ServerTutorialPoint.java | 77 ++++++++++++++++++- 3 files changed, 93 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index d84021b..c78e474 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,11 @@ jitpack.io https://jitpack.io + + + minebench-repo + https://repo.minebench.de/ + @@ -77,6 +82,13 @@ compile + + de.themoep + minedown + 1.7.1-SNAPSHOT + compile + + 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..b919f55 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; @@ -42,6 +43,12 @@ public abstract class ServerTutorialPoint{ 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; @@ -157,6 +164,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(); + } + + new BukkitRunnable() { + final BossBar bossBar = Bukkit.getServer().createBossBar(new NamespacedKey(plugin, "bossbar"), 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 +241,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 +329,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); From aa3d171e937a39931718f4b53c28225b80f2976a Mon Sep 17 00:00:00 2001 From: Nicolai Date: Sun, 21 Apr 2024 13:01:54 +0200 Subject: [PATCH 2/5] removed MineDown dependency --- pom.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/pom.xml b/pom.xml index c78e474..615a02e 100644 --- a/pom.xml +++ b/pom.xml @@ -26,10 +26,6 @@ https://jitpack.io - - minebench-repo - https://repo.minebench.de/ - @@ -82,13 +78,6 @@ compile - - de.themoep - minedown - 1.7.1-SNAPSHOT - compile - - From ecbbf21342b4b46efc9c879ff1b2aad0fc90ab89 Mon Sep 17 00:00:00 2001 From: Nicolai Date: Sun, 21 Apr 2024 22:17:31 +0200 Subject: [PATCH 3/5] Added support for '&' color codes --- .../servertutorialplus/points/ServerTutorialPoint.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java index b919f55..2ea330c 100644 --- a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java +++ b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java @@ -172,8 +172,8 @@ protected void playDefault(Player player, OldValuesPlayer oldValuesPlayer, boole } new BukkitRunnable() { - final BossBar bossBar = Bukkit.getServer().createBossBar(new NamespacedKey(plugin, "bossbar"), bossBarTitle, - bossBarColor, bossBarStyle); + 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; From ecdcf5bc5d786691a6b1a9c7e513b61e34778ed5 Mon Sep 17 00:00:00 2001 From: Nicolai Date: Mon, 22 Apr 2024 22:13:18 +0200 Subject: [PATCH 4/5] Added command to adjust bossbar attributes --- .../points/ServerTutorialPoint.java | 25 +++++ .../points/editor/args/BossBarArg.java | 95 +++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 src/main/java/nl/martenm/servertutorialplus/points/editor/args/BossBarArg.java diff --git a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java index 2ea330c..b63b57f 100644 --- a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java +++ b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java @@ -388,6 +388,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()); @@ -510,4 +511,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..4162dd1 --- /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 <args>"); + 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 + "/st editpoint <t> <p> bossbar progress <progress 0.0-1.0>"); + return false; + } + } catch (NumberFormatException e) { + sender.sendMessage(Lang.ERROR_INVALID_NUMBNER + "/st editpoint <t> <p> bossbar progress <progress 0.0 - 1.0>"); + return false; + } + point.setBossBarProgress(progress); + break; + case "color": + BarColor color; + try { + color = BarColor.valueOf(args[1]); + } catch (IllegalArgumentException e) { + sender.sendMessage(Lang.INVALID_ARGS + "/st editpoint <t> <p> bossbar color <BarColor>"); + return false; + } + point.setBossBarColor(color); + break; + case "style": + BarStyle style; + try { + style = BarStyle.valueOf(args[1]); + } catch (IllegalArgumentException e) { + sender.sendMessage(Lang.INVALID_ARGS + "/st editpoint <t> <p> bossbar style <BarStyle>"); + 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 + "/st editpoint <t> <p> bossbar show-after <show-after seconds>"); + 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 + "/st editpoint <t> <p> bossbar hide-after <hide-after seconds>"); + return false; + } + point.setBossBarHideAfter(hideAfter); + break; + default: + sender.sendMessage(Lang.WRONG_COMMAND_FORMAT + "/st editpoint <t> <p> bossbar <title/progress/color/style/show-after/hide-after> <args>"); + return false; + } + return true; + } +} From 2d727bfd343977ecd711074fb5272175752f6c7d Mon Sep 17 00:00:00 2001 From: Nicolai <nicolaigreeven@gmail.com> Date: Mon, 22 Apr 2024 22:41:20 +0200 Subject: [PATCH 5/5] Fixed runnable not cancelling properly --- .../points/ServerTutorialPoint.java | 5 ++++- .../points/editor/args/BossBarArg.java | 12 ++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java index b63b57f..19d7df6 100644 --- a/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java +++ b/src/main/java/nl/martenm/servertutorialplus/points/ServerTutorialPoint.java @@ -38,6 +38,8 @@ public abstract class ServerTutorialPoint{ protected ServerTutorialPlus plugin; protected PointType type; + protected BukkitTask bossbarRunnable = null; + protected Location loc; protected List<String> message_chat; protected List<String> commands; @@ -96,6 +98,7 @@ public void run() { @Override public void stop() { if(timerTask != null) timerTask.cancel(); + if (bossbarRunnable != null) bossbarRunnable.cancel(); } }; } @@ -171,7 +174,7 @@ protected void playDefault(Player player, OldValuesPlayer oldValuesPlayer, boole oldBar.removeAll(); } - new BukkitRunnable() { + bossbarRunnable = new BukkitRunnable() { final BossBar bossBar = Bukkit.getServer().createBossBar(new NamespacedKey(plugin, "bossbar"), ChatColor.translateAlternateColorCodes('&', bossBarTitle), bossBarColor, bossBarStyle); final int showAfterTicks = (int) (bossBarShowAfter * 20); 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 index 4162dd1..01101e0 100644 --- a/src/main/java/nl/martenm/servertutorialplus/points/editor/args/BossBarArg.java +++ b/src/main/java/nl/martenm/servertutorialplus/points/editor/args/BossBarArg.java @@ -37,11 +37,11 @@ public boolean run(ServerTutorial serverTutorial, ServerTutorialPoint point, Com try { progress = Double.parseDouble(args[1]); if (progress > 1.0 || progress < 0.0) { - sender.sendMessage(Lang.ERROR_INVALID_NUMBNER + "/st editpoint <t> <p> bossbar progress <progress 0.0-1.0>"); + sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString()); return false; } } catch (NumberFormatException e) { - sender.sendMessage(Lang.ERROR_INVALID_NUMBNER + "/st editpoint <t> <p> bossbar progress <progress 0.0 - 1.0>"); + sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString()); return false; } point.setBossBarProgress(progress); @@ -51,7 +51,7 @@ public boolean run(ServerTutorial serverTutorial, ServerTutorialPoint point, Com try { color = BarColor.valueOf(args[1]); } catch (IllegalArgumentException e) { - sender.sendMessage(Lang.INVALID_ARGS + "/st editpoint <t> <p> bossbar color <BarColor>"); + sender.sendMessage(Lang.INVALID_ARGS.toString()); return false; } point.setBossBarColor(color); @@ -61,7 +61,7 @@ public boolean run(ServerTutorial serverTutorial, ServerTutorialPoint point, Com try { style = BarStyle.valueOf(args[1]); } catch (IllegalArgumentException e) { - sender.sendMessage(Lang.INVALID_ARGS + "/st editpoint <t> <p> bossbar style <BarStyle>"); + sender.sendMessage(Lang.INVALID_ARGS.toString()); return false; } point.setBossBarStyle(style); @@ -71,7 +71,7 @@ public boolean run(ServerTutorial serverTutorial, ServerTutorialPoint point, Com try { showAfter = Double.parseDouble(args[1]); } catch (NumberFormatException e) { - sender.sendMessage(Lang.ERROR_INVALID_NUMBNER + "/st editpoint <t> <p> bossbar show-after <show-after seconds>"); + sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString()); return false; } point.setBossBarShowAfter(showAfter); @@ -81,7 +81,7 @@ public boolean run(ServerTutorial serverTutorial, ServerTutorialPoint point, Com try { hideAfter = Double.parseDouble(args[1]); } catch (NumberFormatException e) { - sender.sendMessage(Lang.ERROR_INVALID_NUMBNER + "/st editpoint <t> <p> bossbar hide-after <hide-after seconds>"); + sender.sendMessage(Lang.ERROR_INVALID_NUMBNER.toString()); return false; } point.setBossBarHideAfter(hideAfter);