mirror of
https://github.com/plexusorg/Plex.git
synced 2024-12-23 01:27:37 +00:00
add tempban punishment system and redo the way tempbans parse duration
This commit is contained in:
parent
953f1813d3
commit
98c487c639
@ -201,7 +201,7 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (PlayerNotFoundException | CommandFailException | ConsoleOnlyException |
|
catch (PlayerNotFoundException | CommandFailException | ConsoleOnlyException |
|
||||||
ConsoleMustDefinePlayerException | PlayerNotBannedException ex)
|
ConsoleMustDefinePlayerException | PlayerNotBannedException | NumberFormatException ex)
|
||||||
{
|
{
|
||||||
send(sender, PlexUtils.mmDeserialize(ex.getMessage()));
|
send(sender, PlexUtils.mmDeserialize(ex.getMessage()));
|
||||||
}
|
}
|
||||||
|
@ -12,16 +12,19 @@ import dev.plex.punishment.Punishment;
|
|||||||
import dev.plex.punishment.PunishmentType;
|
import dev.plex.punishment.PunishmentType;
|
||||||
import dev.plex.rank.enums.Rank;
|
import dev.plex.rank.enums.Rank;
|
||||||
import dev.plex.util.PlexUtils;
|
import dev.plex.util.PlexUtils;
|
||||||
import java.util.List;
|
|
||||||
import java.util.UUID;
|
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.commons.lang.math.NumberUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
@CommandParameters(name = "tempban", usage = "/<command> <player> <time> [reason]", description = "Temporarily ban a player")
|
@CommandParameters(name = "tempban", usage = "/<command> <player> <time> [reason]", description = "Temporarily ban a player")
|
||||||
@CommandPermissions(level = Rank.ADMIN, permission = "plex.tempban", source = RequiredCommandSource.ANY)
|
@CommandPermissions(level = Rank.ADMIN, permission = "plex.tempban", source = RequiredCommandSource.ANY)
|
||||||
|
|
||||||
@ -64,18 +67,17 @@ public class TempbanCMD extends PlexCommand
|
|||||||
return messageComponent("playerBanned");
|
return messageComponent("playerBanned");
|
||||||
}
|
}
|
||||||
Punishment punishment = new Punishment(targetUUID, getUUID(sender));
|
Punishment punishment = new Punishment(targetUUID, getUUID(sender));
|
||||||
punishment.setType(PunishmentType.BAN);
|
punishment.setType(PunishmentType.TEMPBAN);
|
||||||
if (args.length > 2)
|
if (args.length > 2)
|
||||||
{
|
{
|
||||||
reason = StringUtils.join(args, " ", 2, args.length);
|
reason = StringUtils.join(args, " ", 2, args.length);
|
||||||
punishment.setReason(reason);
|
punishment.setReason(reason);
|
||||||
}
|
} else
|
||||||
else
|
|
||||||
{
|
{
|
||||||
punishment.setReason("No reason provided.");
|
punishment.setReason("No reason provided.");
|
||||||
}
|
}
|
||||||
punishment.setPunishedUsername(plexPlayer.getName());
|
punishment.setPunishedUsername(plexPlayer.getName());
|
||||||
punishment.setEndDate(PlexUtils.parseDateOffset(args[1]));
|
punishment.setEndDate(PlexUtils.createDate(args[1]));
|
||||||
punishment.setCustomTime(false);
|
punishment.setCustomTime(false);
|
||||||
punishment.setActive(!isAdmin(plexPlayer));
|
punishment.setActive(!isAdmin(plexPlayer));
|
||||||
if (player != null)
|
if (player != null)
|
||||||
|
@ -129,7 +129,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
{
|
{
|
||||||
PlexPlayer player = DataUtils.getPlayer(uuid);
|
PlexPlayer player = DataUtils.getPlayer(uuid);
|
||||||
player.loadPunishments();
|
player.loadPunishments();
|
||||||
return player.getPunishments().stream().anyMatch(punishment -> punishment.getType() == PunishmentType.BAN && punishment.isActive());
|
return player.getPunishments().stream().anyMatch(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}*/
|
}*/
|
||||||
return DataUtils.getPlayer(uuid).getPunishments().stream().anyMatch(punishment -> punishment.getType() == PunishmentType.BAN && punishment.isActive());
|
return DataUtils.getPlayer(uuid).getPunishments().stream().anyMatch(punishment -> (punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN) && punishment.isActive());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBanned(PlexPlayer player)
|
public boolean isBanned(PlexPlayer player)
|
||||||
@ -154,7 +154,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
return CompletableFuture.supplyAsync(() ->
|
return CompletableFuture.supplyAsync(() ->
|
||||||
{
|
{
|
||||||
List<PlexPlayer> players = Plex.get().getMongoPlayerData().getPlayers();
|
List<PlexPlayer> players = Plex.get().getMongoPlayerData().getPlayers();
|
||||||
return players.stream().map(PlexPlayer::getPunishments).flatMap(Collection::stream).filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN).toList();
|
return players.stream().map(PlexPlayer::getPunishments).flatMap(Collection::stream).filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN).toList();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -164,7 +164,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
Plex.get().getSqlPunishment().getPunishments().whenComplete((punishments, throwable) ->
|
Plex.get().getSqlPunishment().getPunishments().whenComplete((punishments, throwable) ->
|
||||||
{
|
{
|
||||||
PlexLog.debug("Received Punishments");
|
PlexLog.debug("Received Punishments");
|
||||||
List<Punishment> punishmentList = punishments.stream().filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN).toList();
|
List<Punishment> punishmentList = punishments.stream().filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN).toList();
|
||||||
PlexLog.debug("Completing with {0} punishments", punishmentList.size());
|
PlexLog.debug("Completing with {0} punishments", punishmentList.size());
|
||||||
future.complete(punishmentList);
|
future.complete(punishmentList);
|
||||||
});
|
});
|
||||||
@ -184,7 +184,7 @@ public class PunishmentManager implements PlexBase
|
|||||||
return CompletableFuture.runAsync(() ->
|
return CompletableFuture.runAsync(() ->
|
||||||
{
|
{
|
||||||
PlexPlayer plexPlayer = DataUtils.getPlayer(uuid);
|
PlexPlayer plexPlayer = DataUtils.getPlayer(uuid);
|
||||||
plexPlayer.setPunishments(plexPlayer.getPunishments().stream().filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN)
|
plexPlayer.setPunishments(plexPlayer.getPunishments().stream().filter(Punishment::isActive).filter(punishment -> punishment.getType() == PunishmentType.BAN || punishment.getType() == PunishmentType.TEMPBAN)
|
||||||
.peek(punishment -> punishment.setActive(false)).collect(Collectors.toList()));
|
.peek(punishment -> punishment.setActive(false)).collect(Collectors.toList()));
|
||||||
DataUtils.update(plexPlayer);
|
DataUtils.update(plexPlayer);
|
||||||
});
|
});
|
||||||
|
@ -2,5 +2,5 @@ package dev.plex.punishment;
|
|||||||
|
|
||||||
public enum PunishmentType
|
public enum PunishmentType
|
||||||
{
|
{
|
||||||
MUTE, FREEZE, BAN, KICK, SMITE
|
MUTE, FREEZE, BAN, KICK, SMITE, TEMPBAN
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ import org.json.simple.parser.ParseException;
|
|||||||
public class PlexUtils implements PlexBase
|
public class PlexUtils implements PlexBase
|
||||||
{
|
{
|
||||||
private static final Random RANDOM;
|
private static final Random RANDOM;
|
||||||
private static final List<String> regxList = new ArrayList<>()
|
public static final List<String> timeUnits = new ArrayList<>()
|
||||||
{{
|
{{
|
||||||
add("y");
|
add("y");
|
||||||
add("mo");
|
add("mo");
|
||||||
@ -290,7 +290,7 @@ public class PlexUtils implements PlexBase
|
|||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
||||||
regxList.forEach(obj ->
|
timeUnits.forEach(obj ->
|
||||||
{
|
{
|
||||||
if (parse.endsWith(obj))
|
if (parse.endsWith(obj))
|
||||||
{
|
{
|
||||||
@ -301,27 +301,36 @@ public class PlexUtils implements PlexBase
|
|||||||
return Long.parseLong(sb.toString());
|
return Long.parseLong(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static TimeUnit verify(String arg)
|
public static int parseInteger(String s) throws NumberFormatException
|
||||||
{
|
{
|
||||||
TimeUnit unit = null;
|
if (!NumberUtils.isNumber(s))
|
||||||
for (String c : regxList)
|
|
||||||
{
|
{
|
||||||
if (arg.endsWith(c))
|
throw new NumberFormatException(messageString("unableToParseNumber", s));
|
||||||
|
}
|
||||||
|
return Integer.parseInt(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LocalDateTime createDate(String arg)
|
||||||
|
{
|
||||||
|
LocalDateTime time = LocalDateTime.now();
|
||||||
|
for (String unit : PlexUtils.timeUnits)
|
||||||
|
{
|
||||||
|
if (arg.endsWith(unit))
|
||||||
{
|
{
|
||||||
switch (c)
|
int duration = parseInteger(arg.replace(unit, ""));
|
||||||
|
switch (unit)
|
||||||
{
|
{
|
||||||
case "y" -> unit = TimeUnit.YEAR;
|
case "y" -> time = time.plusYears(duration);
|
||||||
case "mo" -> unit = TimeUnit.MONTH;
|
case "mo" -> time = time.plusMonths(duration);
|
||||||
case "w" -> unit = TimeUnit.WEEK;
|
case "w" -> time = time.plusWeeks(duration);
|
||||||
case "d" -> unit = TimeUnit.DAY;
|
case "d" -> time = time.plusDays(duration);
|
||||||
case "h" -> unit = TimeUnit.HOUR;
|
case "h" -> time = time.plusHours(duration);
|
||||||
case "m" -> unit = TimeUnit.MINUTE;
|
case "m" -> time = time.plusMinutes(duration);
|
||||||
case "s" -> unit = TimeUnit.SECOND;
|
case "s" -> time = time.plusSeconds(duration);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (unit != null) ? unit : TimeUnit.DAY;
|
return time;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String useTimezone(LocalDateTime date)
|
public static String useTimezone(LocalDateTime date)
|
||||||
@ -334,16 +343,6 @@ public class PlexUtils implements PlexBase
|
|||||||
return DATE_FORMAT.withZone(ZoneId.of(TIMEZONE)).format(date);
|
return DATE_FORMAT.withZone(ZoneId.of(TIMEZONE)).format(date);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LocalDateTime parseDateOffset(String... time)
|
|
||||||
{
|
|
||||||
Instant instant = Instant.now();
|
|
||||||
for (String arg : time)
|
|
||||||
{
|
|
||||||
instant = instant.plusSeconds(verify(arg).get() * a(arg));
|
|
||||||
}
|
|
||||||
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault().getRules().getOffset(instant));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ChatColor getChatColorFromConfig(Config config, ChatColor def, String path)
|
public static ChatColor getChatColorFromConfig(Config config, ChatColor def, String path)
|
||||||
{
|
{
|
||||||
ChatColor color;
|
ChatColor color;
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
package dev.plex.util;
|
|
||||||
|
|
||||||
public enum TimeUnit
|
|
||||||
{
|
|
||||||
SECOND(1L),
|
|
||||||
MINUTE(SECOND.get() * 60L),
|
|
||||||
HOUR(MINUTE.get() * 60L),
|
|
||||||
DAY(HOUR.get() * 24L),
|
|
||||||
WEEK(DAY.get() * 7L),
|
|
||||||
MONTH(DAY.get() * 30L),
|
|
||||||
YEAR(MONTH.get() * 12L);
|
|
||||||
|
|
||||||
private final long time;
|
|
||||||
|
|
||||||
TimeUnit(long time)
|
|
||||||
{
|
|
||||||
this.time = time;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long get()
|
|
||||||
{
|
|
||||||
return time;
|
|
||||||
}
|
|
||||||
}
|
|
@ -173,4 +173,6 @@ commandBlocked: "<gray>That command is blocked."
|
|||||||
sayMessage: "<blue>[Server: {0}] {1}"
|
sayMessage: "<blue>[Server: {0}] {1}"
|
||||||
# 0 - The command sender
|
# 0 - The command sender
|
||||||
# 1 - The message being said
|
# 1 - The message being said
|
||||||
consoleSayMessage: "<gray>[Console: {0}] <white>{1}"
|
consoleSayMessage: "<gray>[Console: {0}] <white>{1}"
|
||||||
|
# 0 - The number attempted to be parsed
|
||||||
|
unableToParseNumber: "<red>Unable to parse {0} as a number!"
|
Loading…
Reference in New Issue
Block a user