From 6a5dda70284c2e6554292d53d4e42b7b5b47bcc6 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 30 Dec 2016 14:38:17 +0100 Subject: [PATCH 1/5] Probably fixed subcommands list --- .../java/buttondevteam/core/CommandCaller.java | 10 ++++------ .../java/buttondevteam/lib/chat/TBMCChatAPI.java | 14 ++++++++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/main/java/buttondevteam/core/CommandCaller.java b/src/main/java/buttondevteam/core/CommandCaller.java index 8d7b86b..29ce030 100644 --- a/src/main/java/buttondevteam/core/CommandCaller.java +++ b/src/main/java/buttondevteam/core/CommandCaller.java @@ -56,20 +56,18 @@ public class CommandCaller implements CommandExecutor { path += " " + arg; TBMCCommandBase cmd = TBMCChatAPI.GetCommands().get(path); int argc = 0; - while (cmd == null && path.contains(" ")) { + String[] subcmds = null; + while (cmd == null && (subcmds = TBMCChatAPI.GetSubCommands(path, sender)).length == 0 && path.contains(" ")) { path = path.substring(0, path.lastIndexOf(' ')); argc++; cmd = TBMCChatAPI.GetCommands().get(path); } if (cmd == null) { - String[] subcmds = TBMCChatAPI.GetSubCommands(path, sender); - if (subcmds.length > 0) + if (subcmds == null || subcmds.length > 0) sender.sendMessage(subcmds); else { - final String errormsg = "§cYou don't have access to any of this command's subcommands."; + final String errormsg = "§cYou don't have access to any of this command's subcommands or it doesn't have any."; sender.sendMessage(errormsg); - if (!(sender instanceof ConsoleCommandSender)) - Bukkit.getConsoleSender().sendMessage(errormsg); } return true; } diff --git a/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java b/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java index 8039c55..3ed861d 100644 --- a/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java +++ b/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Set; +import java.util.function.Consumer; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -42,7 +43,8 @@ public class TBMCChatAPI { } /** - * Returns messages formatted for Minecraft chat listing the subcommands of the command. + * Returns messages formatted for Minecraft chat listing the subcommands of the command.
+ * Returns a header if subcommands were found, otherwise returns an empty array. * * @param command * The command which we want the subcommands of @@ -52,20 +54,24 @@ public class TBMCChatAPI { */ public static String[] GetSubCommands(String command, CommandSender sender) { ArrayList cmds = new ArrayList(); - cmds.add("§6---- Subcommands ----"); + Consumer addToCmds = cmd -> { + if (cmds.size() == 0) + cmds.add("§6---- Subcommands ----"); + cmds.add(cmd); + }; for (TBMCCommandBase cmd : TBMCChatAPI.GetCommands().values()) { if (cmd.GetCommandPath().startsWith(command + " ")) { int ind = cmd.GetCommandPath().indexOf(' ', command.length() + 2); if (ind >= 0) { String newcmd = cmd.GetCommandPath().substring(0, ind); if (!cmds.contains("/" + newcmd)) - cmds.add("/" + newcmd); + addToCmds.accept("/" + newcmd); } if (cmd.GetPlayerOnly() && !(sender instanceof Player)) continue; if (cmd.GetModOnly() && !MainPlugin.permission.has(sender, "tbmc.admin")) continue; - cmds.add("/" + cmd.GetCommandPath()); + addToCmds.accept("/" + cmd.GetCommandPath()); } } return cmds.toArray(new String[cmds.size()]); From b4d4023e9c26fb0905aaa44ed0db1cd8f11cab2b Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 30 Dec 2016 19:46:08 +0100 Subject: [PATCH 2/5] Made the restart bar synchronous --- src/main/java/buttondevteam/core/ScheduledRestartCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/buttondevteam/core/ScheduledRestartCommand.java b/src/main/java/buttondevteam/core/ScheduledRestartCommand.java index dd839c3..780ccf4 100644 --- a/src/main/java/buttondevteam/core/ScheduledRestartCommand.java +++ b/src/main/java/buttondevteam/core/ScheduledRestartCommand.java @@ -36,7 +36,7 @@ public class ScheduledRestartCommand extends TBMCCommandBase { sender.sendMessage("Scheduled restart in " + ticks / 20f); ScheduledServerRestartEvent e = new ScheduledServerRestartEvent(ticks); Bukkit.getPluginManager().callEvent(e); - restarttask = Bukkit.getScheduler().runTaskTimerAsynchronously(MainPlugin.Instance, () -> { + restarttask = Bukkit.getScheduler().runTaskTimer(MainPlugin.Instance, () -> { if (restartcounter < 0) { restarttask.cancel(); restartbar.getPlayers().stream().forEach(p -> restartbar.removePlayer(p)); From ed4cb11b87f6a95c760eacc530bb0997a8595fce Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 30 Dec 2016 22:44:30 +0100 Subject: [PATCH 3/5] Added temporary fix for TBMCPlugins/ButtonChat#56 --- src/main/java/buttondevteam/lib/TBMCPlayer.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/buttondevteam/lib/TBMCPlayer.java b/src/main/java/buttondevteam/lib/TBMCPlayer.java index 3008e94..da1e582 100644 --- a/src/main/java/buttondevteam/lib/TBMCPlayer.java +++ b/src/main/java/buttondevteam/lib/TBMCPlayer.java @@ -6,6 +6,7 @@ import java.util.HashMap; import java.util.Map.Entry; import java.util.Optional; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -30,7 +31,7 @@ import com.palmergames.bukkit.towny.object.TownyUniverse; public class TBMCPlayer implements AutoCloseable { private static final String TBMC_PLAYERS_DIR = "TBMC/players"; - private HashMap data = new HashMap<>(); + private ConcurrentHashMap data = new ConcurrentHashMap<>(); /** *

@@ -254,6 +255,8 @@ public class TBMCPlayer implements AutoCloseable { return uuid; } + private ConcurrentHashMap, TBMCPlayer> playermap = new ConcurrentHashMap<>(); // TODO + /** * Gets the TBMCPlayer object as a specific plugin player, keeping it's data * * @@ -262,12 +265,16 @@ public class TBMCPlayer implements AutoCloseable { * @param cl * The TBMCPlayer subclass */ + @SuppressWarnings("unchecked") public T asPluginPlayer(Class cl) { T obj = null; + if (playermap.containsKey(cl)) + return (T) playermap.get(cl); try { obj = cl.newInstance(); ((TBMCPlayer) obj).uuid = uuid; - ((TBMCPlayer) obj).data.putAll(data); + // ((TBMCPlayer) obj).data.putAll(data); + playermap.put(cl, obj); } catch (Exception e) { e.printStackTrace(); } From 7f45f08b32a0e9f6976091a8888d201a50ac66cd Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Fri, 30 Dec 2016 23:38:47 +0100 Subject: [PATCH 4/5] Fixed subcommands --- .../java/buttondevteam/lib/chat/TBMCChatAPI.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java b/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java index 3ed861d..b6317ee 100644 --- a/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java +++ b/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java @@ -61,17 +61,17 @@ public class TBMCChatAPI { }; for (TBMCCommandBase cmd : TBMCChatAPI.GetCommands().values()) { if (cmd.GetCommandPath().startsWith(command + " ")) { + if (cmd.GetPlayerOnly() && !(sender instanceof Player)) + continue; + if (cmd.GetModOnly() && !MainPlugin.permission.has(sender, "tbmc.admin")) + continue; int ind = cmd.GetCommandPath().indexOf(' ', command.length() + 2); if (ind >= 0) { String newcmd = cmd.GetCommandPath().substring(0, ind); if (!cmds.contains("/" + newcmd)) addToCmds.accept("/" + newcmd); - } - if (cmd.GetPlayerOnly() && !(sender instanceof Player)) - continue; - if (cmd.GetModOnly() && !MainPlugin.permission.has(sender, "tbmc.admin")) - continue; - addToCmds.accept("/" + cmd.GetCommandPath()); + } else + addToCmds.accept("/" + cmd.GetCommandPath()); } } return cmds.toArray(new String[cmds.size()]); From 7fff1ca655740328c090198b96601ad2feb436c6 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 31 Dec 2016 00:05:01 +0100 Subject: [PATCH 5/5] Fixed restart bossbar --- .../buttondevteam/core/ScheduledRestartCommand.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/buttondevteam/core/ScheduledRestartCommand.java b/src/main/java/buttondevteam/core/ScheduledRestartCommand.java index 780ccf4..2bec03b 100644 --- a/src/main/java/buttondevteam/core/ScheduledRestartCommand.java +++ b/src/main/java/buttondevteam/core/ScheduledRestartCommand.java @@ -1,5 +1,7 @@ package buttondevteam.core; +import java.util.stream.Collectors; + import org.bukkit.Bukkit; import org.bukkit.boss.BarColor; import org.bukkit.boss.BarFlag; @@ -32,7 +34,11 @@ public class ScheduledRestartCommand extends TBMCCommandBase { restartbar = Bukkit.createBossBar("Server restart in " + ticks / 20f, BarColor.RED, BarStyle.SOLID, BarFlag.DARKEN_SKY); restartbar.setProgress(1); + // System.out.println("Progress: " + restartbar.getProgress()); Bukkit.getOnlinePlayers().stream().forEach(p -> restartbar.addPlayer(p)); + /* + * System.out.println( "Players: " + restartbar.getPlayers().stream().map(p -> p.getName()).collect(Collectors.joining(", "))); + */ sender.sendMessage("Scheduled restart in " + ticks / 20f); ScheduledServerRestartEvent e = new ScheduledServerRestartEvent(ticks); Bukkit.getPluginManager().callEvent(e); @@ -44,7 +50,11 @@ public class ScheduledRestartCommand extends TBMCCommandBase { } if (restartcounter % 200 == 0) Bukkit.broadcastMessage("§c-- The server is restarting in " + restartcounter / 20 + " seconds!"); - restartbar.setProgress(restartcounter / restarttime); + restartbar.setProgress(restartcounter / (double) restarttime); + restartbar.setTitle("Server restart in " + restartcounter / 20f); + /* + * if (restartcounter % 20 == 0) System.out.println("Progress: " + restartbar.getProgress()); + */ restartcounter--; }, 1, 1); return true;