Made default flag length (30d by default)
This commit is contained in:
@@ -20,6 +20,8 @@ import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -83,7 +85,7 @@ public class CommandFlagList extends SubCommand {
|
||||
res.addAll(Bukkit.getOnlinePlayers().stream()
|
||||
.map(Player::getName)
|
||||
.filter(name -> args[1].isEmpty() || name.toLowerCase().startsWith(args[1].toLowerCase()))
|
||||
.collect(Collectors.toList()));
|
||||
.toList());
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -111,11 +113,17 @@ public class CommandFlagList extends SubCommand {
|
||||
Placeholder.unparsed("flag_amount", String.valueOf(resultSet.getString("total_flags")))
|
||||
)));
|
||||
}
|
||||
long expireTime = TimeUnit.SECONDS.toMinutes(resultSet.getInt("expire_time"));
|
||||
long timeFlagged = TimeUnit.SECONDS.toMinutes(resultSet.getInt("time_flagged"));
|
||||
long currentTime = TimeUnit.SECONDS.toMinutes(System.currentTimeMillis() / 1000L);
|
||||
int convertedExpireTime = (int) expireTime - (int) currentTime;
|
||||
int convertedFlaggedTime = (int) currentTime - (int) timeFlagged;
|
||||
int dbExpireTime = resultSet.getInt("expire_time");
|
||||
Instant expireTime = dbExpireTime == 0 ? Instant.MIN : Instant.ofEpochSecond(dbExpireTime);
|
||||
// long expireTime = TimeUnit.SECONDS.toMinutes(resultSet.getInt("expire_time"));
|
||||
Instant timeFlagged = Instant.ofEpochSecond(resultSet.getInt("time_flagged"));
|
||||
// long timeFlagged = TimeUnit.SECONDS.toMinutes(resultSet.getInt("time_flagged"));
|
||||
Instant currentTime = Instant.now();
|
||||
// long currentTime = TimeUnit.SECONDS.toMinutes(System.currentTimeMillis() / 1000L);
|
||||
Duration convertedExpireTime = Duration.between(currentTime, expireTime);
|
||||
// int convertedExpireTime = (int) expireTime - (int) currentTime;
|
||||
Duration convertedFlaggedTime = Duration.between(currentTime, timeFlagged);
|
||||
// int convertedFlaggedTime = (int) currentTime - (int) timeFlagged;
|
||||
String id = String.valueOf(resultSet.getInt("id"));
|
||||
TagResolver templates = TagResolver.resolver(Placeholder.unparsed("player", targetPlayer.getName()),
|
||||
Placeholder.unparsed("flag", resultSet.getString("reason")),
|
||||
@@ -132,7 +140,7 @@ public class CommandFlagList extends SubCommand {
|
||||
"<hover:show_text:\"Click to remove this flag\">" +
|
||||
"<click:run_command:/flag remove " + id + " " + targetPlayer.getName() + ">" +
|
||||
"[<red>✖</red>]</click></hover></white>");
|
||||
if (convertedExpireTime < 0 && expireTime != 0L) //Not active
|
||||
if (convertedExpireTime.isNegative() && !expireTime.equals(Instant.MIN)) //Not active
|
||||
str = str.replaceAll("<active>", Config.EXPIRED_FLAGS);
|
||||
else //Active
|
||||
str = str.replaceAll("<active>", Config.ACTIVE_FLAGS);
|
||||
|
||||
@@ -17,9 +17,12 @@ import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class CommandFlagPlayer extends SubCommand {
|
||||
@@ -44,6 +47,10 @@ public class CommandFlagPlayer extends SubCommand {
|
||||
}
|
||||
|
||||
if (args[1].equals("*")) {
|
||||
if (!commandSender.hasPermission(getPermission() + ".variable-time")) {
|
||||
commandSender.sendMiniMessage(Config.VARIABLE_LENGTH_NOT_ALLOWED, null);
|
||||
return true;
|
||||
}
|
||||
permFlag(commandSender, args, target);
|
||||
} else {
|
||||
tempFlag(commandSender, args, target);
|
||||
@@ -83,29 +90,28 @@ public class CommandFlagPlayer extends SubCommand {
|
||||
}
|
||||
|
||||
private void tempFlag(CommandSender commandSender, String[] args, OfflinePlayer target) {
|
||||
if (args[1].length() < 2) {
|
||||
commandSender.sendMiniMessage(Config.INVALID_TIME_ARGUMENT, TagResolver.resolver(Placeholder.unparsed("arg", args[1])));
|
||||
Optional<Duration> flagDurationIfExists = getFlagDurationIfExists(args[1]);
|
||||
Instant expireTime = Instant.now();
|
||||
int firstArg = 2;
|
||||
Duration flagDuration;
|
||||
if (flagDurationIfExists.isPresent() && !commandSender.hasPermission(getPermission() + ".variable-time")) {
|
||||
commandSender.sendMiniMessage(Config.VARIABLE_LENGTH_NOT_ALLOWED, null);
|
||||
return;
|
||||
}
|
||||
|
||||
String time = args[1].substring(0, args[1].length() - 1);
|
||||
String letter = args[1].substring(args[1].length() - 1);
|
||||
String[] validTimes = new String[]{"d", "h", "m"};
|
||||
if (!time.matches("[1-9][0-9]{0,8}") || !Arrays.asList(validTimes).contains(letter)) {
|
||||
commandSender.sendMiniMessage(Config.INVALID_TIME_ARGUMENT, TagResolver.resolver(Placeholder.unparsed("arg", args[1])));
|
||||
return;
|
||||
if (flagDurationIfExists.isEmpty()) {
|
||||
firstArg = 1;
|
||||
flagDuration = Duration.ofDays(Config.DEFAULT_FLAG_LENGTH_DAYS);
|
||||
} else {
|
||||
flagDuration = flagDurationIfExists.get();
|
||||
}
|
||||
expireTime = expireTime.plusSeconds(flagDuration.toSeconds());
|
||||
String reason = String.join(" ", Arrays.copyOfRange(args, firstArg, args.length));
|
||||
|
||||
int number = Integer.parseInt(time);
|
||||
int timeInMin = this.convertTimeToMinutes(number, letter);
|
||||
long currentTime = TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis());
|
||||
int conTime = (int) currentTime + timeInMin;
|
||||
String reason = String.join(" ", Arrays.copyOfRange(args, 2, args.length));
|
||||
|
||||
Instant finalExpireTime = expireTime;
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
Database.addFlag(target.getUniqueId(), (int) TimeUnit.MINUTES.toSeconds(conTime), reason, commandSender.getName(), Utilities.convertTime(timeInMin));
|
||||
Database.addFlag(target.getUniqueId(), finalExpireTime, reason, commandSender.getName(), Utilities.convertTime(flagDuration));
|
||||
}
|
||||
}.runTask(LiteFlags.getInstance());
|
||||
|
||||
@@ -116,7 +122,7 @@ public class CommandFlagPlayer extends SubCommand {
|
||||
Component message = MiniMessage.miniMessage().deserialize(Config.FLAGGED_PLAYER, TagResolver.resolver(List.of(
|
||||
Placeholder.unparsed("staff", commandSender.getName()),
|
||||
Placeholder.unparsed("player", target.getName() == null ? target.getUniqueId().toString() : target.getName()),
|
||||
Placeholder.unparsed("flag_length", Utilities.convertTime(timeInMin)),
|
||||
Placeholder.unparsed("flag_length", Utilities.convertTime(flagDuration)),
|
||||
Placeholder.unparsed("reason", reason)
|
||||
)));
|
||||
|
||||
@@ -125,11 +131,36 @@ public class CommandFlagPlayer extends SubCommand {
|
||||
.forEach(player -> player.sendMessage(message));
|
||||
}
|
||||
|
||||
public int convertTimeToMinutes(int number, String dhm) {
|
||||
if (dhm.equalsIgnoreCase("d")) {
|
||||
return 1440 * number;
|
||||
} else {
|
||||
return dhm.equalsIgnoreCase("h") ? 60 * number : number;
|
||||
Optional<Duration> getFlagDurationIfExists(String timeArg) {
|
||||
if (timeArg.length() < 2) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
String time = timeArg.substring(0, timeArg.length() - 1);
|
||||
String letter = timeArg.substring(timeArg.length() - 1);
|
||||
String[] validTimes = new String[]{"d", "h", "m"};
|
||||
if (!time.matches("[1-9][0-9]{0,8}") || !Arrays.asList(validTimes).contains(letter)) {
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
int number = Integer.parseInt(time);
|
||||
return convertTimeToExpireTime(number, letter);
|
||||
}
|
||||
|
||||
public Optional<Duration> convertTimeToExpireTime(int number, String dhm) {
|
||||
switch (dhm.toLowerCase()) {
|
||||
case "d" -> {
|
||||
return Optional.of(Duration.ofDays(number));
|
||||
}
|
||||
case "h" -> {
|
||||
return Optional.of(Duration.ofHours(number));
|
||||
}
|
||||
case "m" -> {
|
||||
return Optional.of(Duration.ofMinutes(number));
|
||||
}
|
||||
default -> {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,7 +172,7 @@ public class CommandFlagPlayer extends SubCommand {
|
||||
@Override
|
||||
public List<String> getTabComplete(CommandSender commandSender, String[] args) {
|
||||
ArrayList<String> res = new ArrayList<>();
|
||||
if (args.length == 2)
|
||||
if (args.length == 2 && commandSender.hasPermission(getPermission() + ".variable-time"))
|
||||
for (int i = 1; i <= 9; i++) {
|
||||
if (args[1].isEmpty() || args[1].startsWith(String.valueOf(i)))
|
||||
res.add(i + "d");
|
||||
|
||||
@@ -51,6 +51,7 @@ public final class Config extends AbstractConfig {
|
||||
public static String FLAG_CONFIRM = "<white>Are you sure you want to remove the flag <flag_reason> from " +
|
||||
"<yellow><target_name></yellow>'s flag history? " +
|
||||
"<hover:show_text:\"Click to confirm\"><click:run_command:\"/flag remove <id> <target_name> -c\">[<green>Confirm</green>]</click></hover></white>";
|
||||
public static String VARIABLE_LENGTH_NOT_ALLOWED = "<red>You do not have permission to set a flag at a custom length</red>";
|
||||
private static void loadMessages() {
|
||||
ALERT_ACTIVE_FLAGS = config.getString("messages.alert-active-flags", ALERT_ACTIVE_FLAGS);
|
||||
PLAYER_FLAGS_HEADER = config.getString("messages.player-flags-header", PLAYER_FLAGS_HEADER);
|
||||
@@ -79,6 +80,7 @@ public final class Config extends AbstractConfig {
|
||||
NO_FLAG_FOUND = config.getString("messages.no-flag-found", NO_FLAG_FOUND);
|
||||
INVALID_TIME_ARGUMENT = config.getString("messages.invalid-time-argument", INVALID_TIME_ARGUMENT);
|
||||
FLAG_CONFIRM = config.getString("messages.flag-confirm", FLAG_CONFIRM);
|
||||
VARIABLE_LENGTH_NOT_ALLOWED = config.getString("messages.variable-length-not-allowed", VARIABLE_LENGTH_NOT_ALLOWED);
|
||||
}
|
||||
|
||||
public static String HELP_MESSAGE_WRAPPER = "<gold>LiteFlags help:\n<commands></gold>";
|
||||
@@ -121,6 +123,7 @@ public final class Config extends AbstractConfig {
|
||||
public static String TIME_FORMAT = "Days";
|
||||
public static String AUTH_MESSAGE_COMMAND = "cmi titlemessage <player> -keep:80 &7You need to authenticate! <nl>&7Type &6<code> &7in chat to authenticate. (CaSe SeNsiTiVe)";
|
||||
public static String AUTH_SUCCESS_COMMAND = "lp user <player> permission settemp <permission> true <expire_time>";
|
||||
public static int DEFAULT_FLAG_LENGTH_DAYS = 30;
|
||||
private static void loadSettings() {
|
||||
MAX_ACTIVE_FLAGS = config.getInt("settings.max-active-flags", MAX_ACTIVE_FLAGS);
|
||||
MAX_FLAGS_LISTED = config.getInt("settings.max-flags-listed", MAX_FLAGS_LISTED);
|
||||
@@ -130,6 +133,7 @@ public final class Config extends AbstractConfig {
|
||||
TIME_FORMAT = config.getString("settings.time-format", TIME_FORMAT);
|
||||
AUTH_MESSAGE_COMMAND = config.getString("settings.auth-message-command", AUTH_MESSAGE_COMMAND);
|
||||
AUTH_SUCCESS_COMMAND = config.getString("settings.auth-success-command", AUTH_SUCCESS_COMMAND);
|
||||
DEFAULT_FLAG_LENGTH_DAYS = config.getInt("settings.default-flag-length-days", DEFAULT_FLAG_LENGTH_DAYS);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@ import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.time.Instant;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class Database {
|
||||
public static void createTables() {
|
||||
@@ -43,6 +45,26 @@ public class Database {
|
||||
|
||||
}
|
||||
|
||||
public static void addFlag(UUID uuid, Instant expireTime, String reason, String flaggedBy, String flagLength) {
|
||||
int timeFlagged = (int) TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
|
||||
String sql = "INSERT INTO player_flags (uuid, expire_time, reason, flagged_by, time_flagged, flag_length) VALUES (?, ?, ?, ?, ?, ?)";
|
||||
|
||||
try {
|
||||
PreparedStatement statement = DatabaseConnection.getConnection().prepareStatement(sql);
|
||||
|
||||
statement.setString(1, uuid.toString());
|
||||
statement.setLong(2, expireTime.getEpochSecond());
|
||||
statement.setString(3, reason);
|
||||
statement.setString(4, flaggedBy);
|
||||
statement.setInt(5, timeFlagged);
|
||||
statement.setString(6, flagLength);
|
||||
statement.execute();
|
||||
} catch (SQLException var21) {
|
||||
var21.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static boolean removeFlag(UUID uuid, int id) {
|
||||
String sql = "DELETE FROM player_flags WHERE uuid = ? AND id = ?";
|
||||
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
package com.liteflags.util;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.time.Duration;
|
||||
|
||||
public class Utilities {
|
||||
public static String convertTime(int time) {
|
||||
int days = (int) TimeUnit.MINUTES.toDays(time);
|
||||
int hours = (int) (TimeUnit.MINUTES.toHours(time) - TimeUnit.DAYS.toHours(days));
|
||||
int minutes = (int) (TimeUnit.MINUTES.toMinutes(time) - TimeUnit.HOURS.toMinutes(hours) - TimeUnit.DAYS.toMinutes(days));
|
||||
public static String convertTime(Duration time) {
|
||||
int days = Math.abs((int) time.toDaysPart());
|
||||
int hours = Math.abs(time.toHoursPart());
|
||||
int minutes = Math.abs(time.toMinutesPart());
|
||||
|
||||
String timeString = formatTime(days, " day");
|
||||
timeString += (timeString.length() == 0 ? "" : (hours == 0 ? "" : ", ")) + formatTime(hours, " hour");
|
||||
timeString += (timeString.length() == 0 ? "" : (minutes == 0 ? "" : ", ")) + formatTime(minutes, " minute");
|
||||
|
||||
if (timeString.length() == 0) timeString = "0 minutes";
|
||||
if (timeString.length() == 0)
|
||||
timeString = "0 minutes";
|
||||
|
||||
return timeString;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user