parent
23f3c0f133
commit
c947c887a1
4 changed files with 70 additions and 37 deletions
|
@ -9,13 +9,9 @@ import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.time.temporal.ChronoUnit;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import static buttondevteam.core.MainPlugin.permission;
|
@CommandClass(path = "member", helpText = { //
|
||||||
|
|
||||||
@CommandClass(modOnly = true, path = "member", helpText = { //
|
|
||||||
"Member command", //
|
"Member command", //
|
||||||
"Add or remove server members.", //
|
"Add or remove server members.", //
|
||||||
})
|
})
|
||||||
|
@ -27,12 +23,12 @@ public class MemberCommand extends ICommand2MC {
|
||||||
this.component = component;
|
this.component = component;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command2.Subcommand
|
@Command2.Subcommand(permGroup = Command2.Subcommand.MOD_GROUP)
|
||||||
public boolean add(CommandSender sender, OfflinePlayer player) {
|
public boolean add(CommandSender sender, OfflinePlayer player) {
|
||||||
return addRemove(sender, player, true);
|
return addRemove(sender, player, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command2.Subcommand
|
@Command2.Subcommand(permGroup = Command2.Subcommand.MOD_GROUP)
|
||||||
public boolean remove(CommandSender sender, OfflinePlayer player) {
|
public boolean remove(CommandSender sender, OfflinePlayer player) {
|
||||||
return addRemove(sender, player, false);
|
return addRemove(sender, player, false);
|
||||||
}
|
}
|
||||||
|
@ -53,17 +49,25 @@ public class MemberCommand extends ICommand2MC {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command2.Subcommand
|
@Command2.Subcommand
|
||||||
public void def(CommandSender sender) {
|
public void def(Player player) {
|
||||||
if(!(sender instanceof Player)) {
|
|
||||||
sender.sendMessage("§cYou need to be a player to use this command.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player= (Player) sender;
|
|
||||||
String msg;
|
String msg;
|
||||||
if (component.checkMember(player))
|
if (!component.checkNotMember(player))
|
||||||
msg="You are a member.";
|
msg = "You are a member.";
|
||||||
else {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,37 +62,60 @@ public class MemberComponent extends Component<MainPlugin> implements Listener {
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||||
if (checkMember(event.getPlayer()) && (checkRegTime(event.getPlayer()) || checkPlayTime(event.getPlayer()))) {
|
if (checkNotMember(event.getPlayer()) && (checkRegTime(event.getPlayer()) || checkPlayTime(event.getPlayer()))) {
|
||||||
try {
|
addPlayerAsMember(event.getPlayer());
|
||||||
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.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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());
|
return permission != null && !permission.playerInGroup(player, memberGroup().get());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean checkRegTime(Player player) {
|
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) {
|
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) {
|
public long getRegTime(Player player) {
|
||||||
Instant date = new Date(player.getFirstPlayed()).toInstant().plus(registeredForDays().get(), ChronoUnit.DAYS);
|
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 date.toEpochMilli() - Instant.now().toEpochMilli();
|
||||||
return -1;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,8 @@ import org.bukkit.boss.BossBar;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull;
|
||||||
|
|
||||||
@CommandClass(modOnly = true, path = "schrestart", helpText = {
|
@CommandClass(modOnly = true, path = "schrestart", helpText = {
|
||||||
"Scheduled restart", //
|
"Scheduled restart", //
|
||||||
"This command restarts the server 1 minute after it's executed, warning players every 10 seconds.", //
|
"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 BukkitTask restarttask;
|
||||||
private volatile BossBar restartbar;
|
private volatile BossBar restartbar;
|
||||||
@Getter
|
@Getter
|
||||||
|
@Nonnull
|
||||||
private final RestartComponent component;
|
private final RestartComponent component;
|
||||||
|
|
||||||
@Command2.Subcommand
|
@Command2.Subcommand
|
||||||
|
|
|
@ -60,6 +60,7 @@ public class Command2MC extends Command2<ICommand2MC, Command2MCSender> implemen
|
||||||
|
|
||||||
public boolean hasPermission(CommandSender sender, ICommand2MC command, Method method) {
|
public boolean hasPermission(CommandSender sender, ICommand2MC command, Method method) {
|
||||||
if (sender instanceof ConsoleCommandSender) return true; //Always allow the console
|
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;
|
String pg;
|
||||||
boolean p = true;
|
boolean p = true;
|
||||||
String[] perms = {
|
String[] perms = {
|
||||||
|
@ -89,10 +90,12 @@ public class Command2MC extends Command2<ICommand2MC, Command2MCSender> implemen
|
||||||
* @return The permission group for the subcommand or empty string
|
* @return The permission group for the subcommand or empty string
|
||||||
*/
|
*/
|
||||||
private String permGroup(ICommand2MC command, Method method) {
|
private String permGroup(ICommand2MC command, Method method) {
|
||||||
|
if (method != null) {
|
||||||
val sc = method.getAnnotation(Subcommand.class);
|
val sc = method.getAnnotation(Subcommand.class);
|
||||||
if (sc != null && sc.permGroup().length() > 0) {
|
if (sc != null && sc.permGroup().length() > 0) {
|
||||||
return sc.permGroup();
|
return sc.permGroup();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (getAnnForValue(command.getClass(), CommandClass.class, CommandClass::modOnly, false))
|
if (getAnnForValue(command.getClass(), CommandClass.class, CommandClass::modOnly, false))
|
||||||
return Subcommand.MOD_GROUP;
|
return Subcommand.MOD_GROUP;
|
||||||
return getAnnForValue(command.getClass(), CommandClass.class, CommandClass::permGroup, "");
|
return getAnnForValue(command.getClass(), CommandClass.class, CommandClass::permGroup, "");
|
||||||
|
@ -131,14 +134,14 @@ public class Command2MC extends Command2<ICommand2MC, Command2MCSender> implemen
|
||||||
/*var cmds = subcommands.values().stream().map(sd -> sd.command).filter(cmd -> plugin.equals(cmd.getPlugin())).toArray(ICommand2MC[]::new);
|
/*var cmds = subcommands.values().stream().map(sd -> sd.command).filter(cmd -> plugin.equals(cmd.getPlugin())).toArray(ICommand2MC[]::new);
|
||||||
for (var cmd : cmds)
|
for (var cmd : cmds)
|
||||||
unregisterCommand(cmd);*/
|
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) {
|
public void unregisterCommands(Component<?> component) {
|
||||||
/*var cmds = subcommands.values().stream().map(sd -> sd.command).filter(cmd -> component.equals(cmd.getComponent())).toArray(ICommand2MC[]::new);
|
/*var cmds = subcommands.values().stream().map(sd -> sd.command).filter(cmd -> component.equals(cmd.getComponent())).toArray(ICommand2MC[]::new);
|
||||||
for (var cmd : cmds)
|
for (var cmd : cmds)
|
||||||
unregisterCommand(cmd);*/
|
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));
|
.map(comp -> component.getClass().getSimpleName().equals(comp.getClass().getSimpleName())).orElse(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue