From c947c887a139cd6a59b753a8f652fe08a557af24 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sat, 15 Feb 2020 00:22:34 +0100 Subject: [PATCH] Fix found issues, finish /member command #69 --- .../core/component/members/MemberCommand.java | 38 +++++++------ .../component/members/MemberComponent.java | 53 +++++++++++++------ .../restart/ScheduledRestartCommand.java | 3 ++ .../buttondevteam/lib/chat/Command2MC.java | 13 +++-- 4 files changed, 70 insertions(+), 37 deletions(-) diff --git a/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberCommand.java b/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberCommand.java index 395b71c..207e182 100644 --- a/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberCommand.java +++ b/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberCommand.java @@ -9,13 +9,9 @@ import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import java.time.Instant; -import java.time.temporal.ChronoUnit; -import java.util.Date; +import java.util.concurrent.TimeUnit; -import static buttondevteam.core.MainPlugin.permission; - -@CommandClass(modOnly = true, path = "member", helpText = { // +@CommandClass(path = "member", helpText = { // "Member command", // "Add or remove server members.", // }) @@ -27,12 +23,12 @@ public class MemberCommand extends ICommand2MC { this.component = component; } - @Command2.Subcommand + @Command2.Subcommand(permGroup = Command2.Subcommand.MOD_GROUP) public boolean add(CommandSender sender, OfflinePlayer player) { return addRemove(sender, player, true); } - @Command2.Subcommand + @Command2.Subcommand(permGroup = Command2.Subcommand.MOD_GROUP) public boolean remove(CommandSender sender, OfflinePlayer player) { return addRemove(sender, player, false); } @@ -53,17 +49,25 @@ public class MemberCommand extends ICommand2MC { } @Command2.Subcommand - public void def(CommandSender sender) { - if(!(sender instanceof Player)) { - sender.sendMessage("§cYou need to be a player to use this command."); - return; - } - Player player= (Player) sender; + public void def(Player player) { String msg; - if (component.checkMember(player)) - msg="You are a member."; + if (!component.checkNotMember(player)) + msg = "You are a member."; else { - component.getRegTime(player); + double pt = component.getPlayTime(player); + long rt = component.getRegTime(player); + if (pt == -1 || rt == -1) { + Boolean result = component.addPlayerAsMember(player); + if (result == null) + msg = "Can't assign member group because groups are not supported by the permissions plugin."; + else if (result) + msg = "You meet all the requirements."; + else + msg = "You should be a member but failed to add you to the group."; + } else + msg = String.format("You need to play for %.2f hours total or play for %d more days to become a member.", + pt, TimeUnit.MILLISECONDS.toDays(rt)); } + player.sendMessage(msg); } } diff --git a/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberComponent.java b/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberComponent.java index 28d0d06..8151d2e 100644 --- a/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberComponent.java +++ b/Chroma-Core/src/main/java/buttondevteam/core/component/members/MemberComponent.java @@ -62,37 +62,60 @@ public class MemberComponent extends Component implements Listener { @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { - if (checkMember(event.getPlayer()) && (checkRegTime(event.getPlayer()) || checkPlayTime(event.getPlayer()))) { - try { - if (permission.playerAddGroup(null, event.getPlayer(), memberGroup().get())) { - event.getPlayer().sendMessage("§bYou are a member now. YEEHAW"); - MainPlugin.Instance.getLogger().info("Added " + event.getPlayer().getName() + " as a member."); - } else { - MainPlugin.Instance.getLogger().warning("Failed to assign the member role! Please make sure the member group exists or disable the component if it's unused."); - } - } catch (UnsupportedOperationException e) { - MainPlugin.Instance.getLogger().warning("Failed to assign the member role! Groups are not supported by the permissions implementation."); - } + if (checkNotMember(event.getPlayer()) && (checkRegTime(event.getPlayer()) || checkPlayTime(event.getPlayer()))) { + addPlayerAsMember(event.getPlayer()); } } - public boolean checkMember(Player player) { + public Boolean addPlayerAsMember(Player player) { + try { + if (permission.playerAddGroup(null, player, memberGroup().get())) { + player.sendMessage("§bYou are a member now!"); + MainPlugin.Instance.getLogger().info("Added " + player.getName() + " as a member."); + return true; + } else { + MainPlugin.Instance.getLogger().warning("Failed to assign the member role! Please make sure the member group exists or disable the component if it's unused."); + return false; + } + } catch (UnsupportedOperationException e) { + MainPlugin.Instance.getLogger().warning("Failed to assign the member role! Groups are not supported by the permissions implementation."); + return null; + } + } + + public boolean checkNotMember(Player player) { return permission != null && !permission.playerInGroup(player, memberGroup().get()); } public boolean checkRegTime(Player player) { - return new Date(player.getFirstPlayed()).toInstant().plus(registeredForDays().get(), ChronoUnit.DAYS).isBefore(Instant.now()); + return getRegTime(player) == -1; } public boolean checkPlayTime(Player player) { - return player.getStatistic(playtime.getKey()) > playtime.getValue() * playedHours().get(); + return getPlayTime(player) > playtime.getValue() * playedHours().get(); } + /** + * Returns milliseconds + */ public long getRegTime(Player player) { Instant date = new Date(player.getFirstPlayed()).toInstant().plus(registeredForDays().get(), ChronoUnit.DAYS); - if (date.isBefore(Instant.now())) + if (date.isAfter(Instant.now())) return date.toEpochMilli() - Instant.now().toEpochMilli(); return -1; } + public int getPlayTimeTotal(Player player) { + return player.getStatistic(playtime.getKey()); + } + + /** + * Returns hours + */ + public double getPlayTime(Player player) { + double pt = playedHours().get() - (double) getPlayTimeTotal(player) / playtime.getValue(); + if (pt < 0) return -1; + return pt; + } + } diff --git a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.java b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.java index e9fd7c0..1182629 100755 --- a/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.java +++ b/Chroma-Core/src/main/java/buttondevteam/core/component/restart/ScheduledRestartCommand.java @@ -18,6 +18,8 @@ import org.bukkit.boss.BossBar; import org.bukkit.command.CommandSender; import org.bukkit.scheduler.BukkitTask; +import javax.annotation.Nonnull; + @CommandClass(modOnly = true, path = "schrestart", helpText = { "Scheduled restart", // "This command restarts the server 1 minute after it's executed, warning players every 10 seconds.", // @@ -31,6 +33,7 @@ public class ScheduledRestartCommand extends ICommand2MC { private BukkitTask restarttask; private volatile BossBar restartbar; @Getter + @Nonnull private final RestartComponent component; @Command2.Subcommand diff --git a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java index ca7b917..3093f9a 100644 --- a/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java +++ b/Chroma-Core/src/main/java/buttondevteam/lib/chat/Command2MC.java @@ -60,6 +60,7 @@ public class Command2MC extends Command2 implemen public boolean hasPermission(CommandSender sender, ICommand2MC command, Method method) { if (sender instanceof ConsoleCommandSender) return true; //Always allow the console + if (command == null) return true; //Allow viewing the command - it doesn't do anything anyway String pg; boolean p = true; String[] perms = { @@ -89,9 +90,11 @@ public class Command2MC extends Command2 implemen * @return The permission group for the subcommand or empty string */ private String permGroup(ICommand2MC command, Method method) { - val sc = method.getAnnotation(Subcommand.class); - if (sc != null && sc.permGroup().length() > 0) { - return sc.permGroup(); + if (method != null) { + val sc = method.getAnnotation(Subcommand.class); + if (sc != null && sc.permGroup().length() > 0) { + return sc.permGroup(); + } } if (getAnnForValue(command.getClass(), CommandClass.class, CommandClass::modOnly, false)) return Subcommand.MOD_GROUP; @@ -131,14 +134,14 @@ public class Command2MC extends Command2 implemen /*var cmds = subcommands.values().stream().map(sd -> sd.command).filter(cmd -> plugin.equals(cmd.getPlugin())).toArray(ICommand2MC[]::new); for (var cmd : cmds) unregisterCommand(cmd);*/ - subcommands.values().removeIf(sd -> plugin.equals(sd.command.getPlugin())); + subcommands.values().removeIf(sd -> Optional.ofNullable(sd.command).map(ICommand2MC::getPlugin).map(plugin::equals).orElse(false)); } public void unregisterCommands(Component component) { /*var cmds = subcommands.values().stream().map(sd -> sd.command).filter(cmd -> component.equals(cmd.getComponent())).toArray(ICommand2MC[]::new); for (var cmd : cmds) unregisterCommand(cmd);*/ - subcommands.values().removeIf(sd -> Optional.ofNullable(sd.command.getComponent()) + subcommands.values().removeIf(sd -> Optional.ofNullable(sd.command).map(ICommand2MC::getComponent) .map(comp -> component.getClass().getSimpleName().equals(comp.getClass().getSimpleName())).orElse(false)); }