diff --git a/build.gradle b/build.gradle index f691edb..34b9192 100644 --- a/build.gradle +++ b/build.gradle @@ -74,4 +74,8 @@ tasks { build { dependsOn(shadowJar) } + + javadoc { + options.memberLevel = JavadocMemberLevel.PRIVATE + } } diff --git a/src/main/java/dev/plex/admin/Admin.java b/src/main/java/dev/plex/admin/Admin.java index 81ee553..ffa5e6f 100644 --- a/src/main/java/dev/plex/admin/Admin.java +++ b/src/main/java/dev/plex/admin/Admin.java @@ -6,18 +6,46 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; +/** + * Admin object to handle cached admins + */ @Getter @Setter public class Admin { + /** + * Gets the unique ID of an admin (immutable) + */ @Setter(AccessLevel.NONE) private UUID uuid; + /** + * Gets the rank of the admin + *
+ * Contains a #setRank and #getRank by lombok + */ private Rank rank; + /** + * Returns if the admin has command spy or not + *
+ * Contains a #isCommandSpy and #setCommandSpy by lombok + */ private boolean commandSpy = true; + + /** + * Returns if the admin has staff chat toggled or not + *
+ * Contains a #isStaffChat and #setStaffChat by lombok + */ private boolean staffChat = false; + /** + * Creates an admin with the startig ADMIN rank + * @param uuid + * @see UUID + * @see Rank + */ public Admin(UUID uuid) { this.uuid = uuid; diff --git a/src/main/java/dev/plex/admin/AdminList.java b/src/main/java/dev/plex/admin/AdminList.java index 95fcfa8..6de674c 100644 --- a/src/main/java/dev/plex/admin/AdminList.java +++ b/src/main/java/dev/plex/admin/AdminList.java @@ -15,21 +15,43 @@ import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.stream.Collectors; + +/** + * Cached storage for Admin objects + * @see Admin + */ public class AdminList { + /** + * Key/Value storage, where the key is the unique ID of the admin + */ private final Map admins = Maps.newHashMap(); + /** + * Adds the admin to cache + * @param admin The admin object + */ public void addToCache(Admin admin) { admins.put(admin.getUuid(), admin); } + /** + * Removes an admin from the cache + * @param uuid The unique ID of the admin + * @see UUID + */ public void removeFromCache(UUID uuid) { admins.remove(uuid); } + /** + * Gathers every admin's username (cached and databsed) + * @return An array list of the names of every admin + */ public List getAllAdmins() { List admins = Lists.newArrayList(); @@ -37,13 +59,7 @@ public class AdminList { Datastore store = Plex.get().getMongoConnection().getDatastore(); Query query = store.find(PlexPlayer.class); - for (PlexPlayer player : query) - { - if (player.getRankFromString().isAtLeast(Rank.ADMIN)) - { - admins.add(player.getName()); - } - } + admins.addAll(query.stream().filter(plexPlayer -> plexPlayer.getRankFromString().isAtLeast(Rank.ADMIN)).map(PlexPlayer::getName).collect(Collectors.toList())); } else { diff --git a/src/main/java/dev/plex/banning/Ban.java b/src/main/java/dev/plex/banning/Ban.java index b5e26db..4dca457 100644 --- a/src/main/java/dev/plex/banning/Ban.java +++ b/src/main/java/dev/plex/banning/Ban.java @@ -4,6 +4,8 @@ import dev.morphia.annotations.Entity; import dev.morphia.annotations.Id; import dev.morphia.annotations.IndexOptions; import dev.morphia.annotations.Indexed; + +import java.time.LocalDateTime; import java.util.Date; import java.util.UUID; import lombok.AccessLevel; @@ -11,43 +13,90 @@ import lombok.Getter; import lombok.Setter; import org.apache.commons.lang.RandomStringUtils; +/** + * The ban object + * @see BanManager + */ @Getter @Setter @Entity(value = "bans", useDiscriminator = false) public class Ban { - public Ban() + /** + * A constructor for Morphia, can't be used + */ + private Ban() { } + /** + * Gets the id of the ban (first 8 characters of a UUID + random 6 letters) + */ @Setter(AccessLevel.NONE) @Id private String id; + /** + * The unique ID of the player who was banned + */ @Setter(AccessLevel.NONE) @Indexed(options = @IndexOptions(unique = true)) private UUID uuid; + /** + * The unique ID of the person who banned the player (can be null) + */ @Indexed // have the banner be indexed in the future to get bans issued by a person private UUID banner; + /** + * The IP of the banned player + */ private String ip; + + /** + * The reason for the ban + */ private String reason; - private Date endDate; + + /** + * The end date for the ban + */ + private LocalDateTime endDate; + + /** + * Whether the ban is active or not + */ private boolean active; - public Ban(UUID uuid, UUID banner, String ip, String reason, Date endDate) + /** + * Creates a ban object + * @param uuid The unique ID of the player being banned + * @param banner The unique ID of the sender banning the player + * @param ip The IP of the player being banned + * @param reason The reason for the ban + * @param endDate When the ban will expire + */ + public Ban(UUID uuid, UUID banner, String ip, String reason, LocalDateTime endDate) { - this.uuid = uuid; - this.id = uuid.toString().substring(0, 8) + "-" + RandomStringUtils.randomAlphabetic(6); - this.banner = banner; - this.ip = ip; - this.reason = reason; - this.endDate = endDate; - this.active = true; + this(uuid.toString().substring(0, 8) + "-" + RandomStringUtils.randomAlphabetic(6), + uuid, + banner, + ip, + reason, + endDate); } - public Ban(String id, UUID uuid, UUID banner, String ip, String reason, Date endDate) + /** + * Creates a ban object + * @param id The custom ID of the ban + * @param uuid The unique ID of the player being banned + * @param banner The unique ID of the sender banning the player + * @param ip The IP of the player being banned + * @param reason The reason for the ban + * @param endDate When the ban will expire + */ + public Ban(String id, UUID uuid, UUID banner, String ip, String reason, LocalDateTime endDate) { this.uuid = uuid; this.id = id; diff --git a/src/main/java/dev/plex/banning/BanManager.java b/src/main/java/dev/plex/banning/BanManager.java index 76bf121..2e4725b 100644 --- a/src/main/java/dev/plex/banning/BanManager.java +++ b/src/main/java/dev/plex/banning/BanManager.java @@ -6,11 +6,15 @@ import dev.morphia.query.experimental.filters.Filters; import dev.morphia.query.experimental.updates.UpdateOperators; import dev.plex.Plex; import dev.plex.storage.StorageType; + import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Date; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; import java.util.List; import java.util.UUID; @@ -19,6 +23,10 @@ public class BanManager private final String SELECT = "SELECT * FROM `bans` WHERE uuid=?"; private final String INSERT = "INSERT INTO `bans` (`banID`, `uuid`, `banner`, `ip`, `reason`, `enddate`, `active`) VALUES (?, ?, ?, ?, ?, ?, ?);"; + /** + * Adds the ban to the database + * @param ban The ban object + */ public void executeBan(Ban ban) { if (Plex.get().getStorageType() == StorageType.MONGODB) @@ -35,7 +43,7 @@ public class BanManager statement.setString(3, ban.getBanner() == null ? "" : ban.getBanner().toString()); statement.setString(4, ban.getIp()); statement.setString(5, ban.getReason()); - statement.setLong(6, ban.getEndDate().toInstant().toEpochMilli()); + statement.setLong(6, ban.getEndDate().toInstant(ZoneOffset.of(ZoneId.systemDefault().getId())).toEpochMilli()); statement.setBoolean(7, ban.isActive()); statement.execute(); @@ -47,6 +55,11 @@ public class BanManager } } + /** + * Checks if the unique ID has an active ban in the database + * @param uuid The unique ID of the player + * @return true if the unique ID is banned + */ public boolean isBanned(UUID uuid) { if (Plex.get().getStorageType() == StorageType.MONGODB) @@ -81,6 +94,10 @@ public class BanManager return false; } + /** + * Unbans a player if they have an active ban on record + * @param uuid The unique ID of the player + */ public void unban(UUID uuid) { if (Plex.get().getStorageType() == StorageType.MONGODB) @@ -95,9 +112,10 @@ public class BanManager { try (Connection con = Plex.get().getSqlConnection().getCon()) { - PreparedStatement statement = con.prepareStatement("UPDATE `bans` SET active=? WHERE uuid=?"); + PreparedStatement statement = con.prepareStatement("UPDATE `bans` SET active=? WHERE uuid=? AND active=?"); statement.setBoolean(1, false); statement.setString(2, uuid.toString()); + statement.setBoolean(3, true); statement.executeUpdate(); } catch (SQLException throwables) @@ -107,6 +125,10 @@ public class BanManager } } + /** + * Unbans a player if they have an active ban on record + * @param id Custom ID of the ban + */ public void unban(String id) { if (Plex.get().getStorageType() == StorageType.MONGODB) @@ -133,6 +155,10 @@ public class BanManager } } + /** + * Gets a list of all the current bans active + * @return An arraylist of bans + */ public List getActiveBans() { List bans = Lists.newArrayList(); @@ -158,7 +184,7 @@ public class BanManager UUID banner = set.getString("banner").isEmpty() ? null : UUID.fromString(set.getString("banner")); String ip = set.getString("ip"); String reason = set.getString("reason"); - Date endDate = set.getLong("enddate") != 0 ? new Date(set.getLong("enddate")) : null; + LocalDateTime endDate = set.getLong("enddate") != 0 ? LocalDateTime.ofInstant(Instant.ofEpochMilli(set.getLong("enddate")), ZoneId.systemDefault()) : null; Ban ban = new Ban(id, uuid, banner, ip, reason, endDate); bans.add(ban); } diff --git a/src/main/java/dev/plex/cache/DataUtils.java b/src/main/java/dev/plex/cache/DataUtils.java index f11016b..fab0319 100644 --- a/src/main/java/dev/plex/cache/DataUtils.java +++ b/src/main/java/dev/plex/cache/DataUtils.java @@ -6,10 +6,16 @@ import dev.plex.storage.StorageType; import java.util.UUID; import org.bukkit.Bukkit; +/** + * Parent cache class + */ public class DataUtils { - /* PLEX PLAYER METHODS */ - + /** + * Checks if the player has been on the server before + * @param uuid The unique ID of the player + * @return true if the player is registered in the database + */ public static boolean hasPlayedBefore(UUID uuid) { if (Plex.get().getStorageType() == StorageType.MONGODB) @@ -22,6 +28,12 @@ public class DataUtils } } + /** + * Gets a player from cache or from the database + * @param uuid The unique ID of the player + * @return a PlexPlayer object + * @see PlexPlayer + */ public static PlexPlayer getPlayer(UUID uuid) { if (PlayerCache.getPlexPlayerMap().containsKey(uuid)) @@ -39,11 +51,22 @@ public class DataUtils } } + /** + * Gets a player from cache or from the database + * @param name Username of the player + * @return a PlexPlayer object + * @see PlexPlayer + */ public static PlexPlayer getPlayer(String name) { return getPlayer(Bukkit.getPlayer(name).getUniqueId()); } + /** + * Updates a player's information in the database + * @param plexPlayer The PlexPlayer to update + * @see PlexPlayer + */ public static void update(PlexPlayer plexPlayer) { if (Plex.get().getStorageType() == StorageType.MONGODB) @@ -56,6 +79,11 @@ public class DataUtils } } + /** + * Inserts a player's information in the database + * @param plexPlayer The PlexPlayer to insert + * @see PlexPlayer + */ public static void insert(PlexPlayer plexPlayer) { if (Plex.get().getStorageType() == StorageType.MONGODB) diff --git a/src/main/java/dev/plex/cache/MongoPlayerData.java b/src/main/java/dev/plex/cache/MongoPlayerData.java index e03343d..9803a64 100644 --- a/src/main/java/dev/plex/cache/MongoPlayerData.java +++ b/src/main/java/dev/plex/cache/MongoPlayerData.java @@ -9,15 +9,29 @@ import dev.plex.Plex; import dev.plex.player.PlexPlayer; import java.util.UUID; +/** + * Mongo fetching utilities for players + */ public class MongoPlayerData { + /** + * The datastore object / database + */ private final Datastore datastore; + /** + * Creates an instance of the player data + */ public MongoPlayerData() { this.datastore = Plex.get().getMongoConnection().getDatastore(); } + /** + * Checks whether the player exists in mongo's database + * @param uuid The unique ID of the player + * @return true if the player was found + */ public boolean exists(UUID uuid) { Query query = datastore.find(PlexPlayer.class) @@ -26,6 +40,12 @@ public class MongoPlayerData return query.first() != null; } + /** + * Gets the player from cache or from mongo's database + * @param uuid The unique ID of the player + * @return a PlexPlayer object + * @see PlexPlayer + */ public PlexPlayer getByUUID(UUID uuid) { if (PlayerCache.getPlexPlayerMap().containsKey(uuid)) @@ -37,6 +57,11 @@ public class MongoPlayerData return query2.first(); } + /** + * Updates a player's information in the mongo database + * @param player The PlexPlayer object + * @see PlexPlayer + */ public void update(PlexPlayer player) { Query filter = datastore.find(PlexPlayer.class) @@ -56,6 +81,11 @@ public class MongoPlayerData } + /** + * Saves the player's information in the database + * @param plexPlayer The PlexPlayer object + * @see PlexPlayer + */ public void save(PlexPlayer plexPlayer) { datastore.save(plexPlayer); diff --git a/src/main/java/dev/plex/cache/PlayerCache.java b/src/main/java/dev/plex/cache/PlayerCache.java index 6b39fa3..b2fafdd 100644 --- a/src/main/java/dev/plex/cache/PlayerCache.java +++ b/src/main/java/dev/plex/cache/PlayerCache.java @@ -6,9 +6,20 @@ import dev.plex.player.PunishedPlayer; import java.util.Map; import java.util.UUID; +/** + * Cache storage + */ + public class PlayerCache { + /** + * A key/value pair where the key is the unique ID of the Plex Player + */ private static final Map plexPlayerMap = Maps.newHashMap(); + + /** + * A key/value pair where the key is the unique ID of the Punished Player + */ private static final Map punishedPlayerMap = Maps.newHashMap(); public static Map getPunishedPlayerMap() diff --git a/src/main/java/dev/plex/cache/SQLPlayerData.java b/src/main/java/dev/plex/cache/SQLPlayerData.java index 1964737..037db06 100644 --- a/src/main/java/dev/plex/cache/SQLPlayerData.java +++ b/src/main/java/dev/plex/cache/SQLPlayerData.java @@ -11,12 +11,20 @@ import java.sql.SQLException; import java.util.List; import java.util.UUID; +/** + * SQL fetching utilities for players + */ public class SQLPlayerData { private final String SELECT = "SELECT * FROM `players` WHERE uuid=?"; private final String UPDATE = "UPDATE `players` SET name=?, login_msg=?, prefix=?, rank=?, ips=?, coins=?, vanished=? WHERE uuid=?"; private final String INSERT = "INSERT INTO `players` (`uuid`, `name`, `login_msg`, `prefix`, `rank`, `ips`, `coins`, `vanished`) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"; + /** + * Checks if a player exists in the SQL database + * @param uuid The unique ID of the player + * @return true if the player was found in the database + */ public boolean exists(UUID uuid) { try (Connection con = Plex.get().getSqlConnection().getCon()) @@ -33,6 +41,12 @@ public class SQLPlayerData return false; } + /** + * Gets the player from cache or from the SQL database + * @param uuid The unique ID of the player + * @return a PlexPlayer object + * @see PlexPlayer + */ public PlexPlayer getByUUID(UUID uuid) { if (PlayerCache.getPlexPlayerMap().containsKey(uuid)) @@ -74,6 +88,11 @@ public class SQLPlayerData return null; } + /** + * Updates a player's information in the SQL database + * @param player The PlexPlayer object + * @see PlexPlayer + */ public void update(PlexPlayer player) { try (Connection con = Plex.get().getSqlConnection().getCon()) @@ -95,6 +114,11 @@ public class SQLPlayerData } } + /** + * Inserts the player's information in the database + * @param player The PlexPlayer object + * @see PlexPlayer + */ public void insert(PlexPlayer player) { try (Connection con = Plex.get().getSqlConnection().getCon()) diff --git a/src/main/java/dev/plex/command/PlexCommand.java b/src/main/java/dev/plex/command/PlexCommand.java index 5a3946c..d116322 100644 --- a/src/main/java/dev/plex/command/PlexCommand.java +++ b/src/main/java/dev/plex/command/PlexCommand.java @@ -26,16 +26,39 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.UUID; +/** + * Superclass for all commands + */ public abstract class PlexCommand extends Command implements PluginIdentifiableCommand { + /** + * Returns the instance of the plugin + */ protected static Plex plugin = Plex.get(); + /** + * The parameters for the command + */ private final CommandParameters params; + + /** + * The permissions for the command + */ private final CommandPermissions perms; + /** + * Minimum required rank fetched from the permissions + */ private final Rank level; + + /** + * Required command source fetched from the permissions + */ private final RequiredCommandSource commandSource; + /** + * Creates an instance of the command + */ public PlexCommand() { super(""); @@ -56,9 +79,19 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC getMap().register("plex", this); } + /** + * Executes the command + * @param sender The sender of the command + * @param playerSender The player who executed the command (null if command source is console or if command source is any but console executed) + * @param args A Kyori Component to send to the sender (can be null) + * @return + */ protected abstract Component execute(@NotNull CommandSender sender, @Nullable Player playerSender, @NotNull String[] args); + /** + * @hidden + */ @Override public boolean execute(@NotNull CommandSender sender, @NotNull String label, String[] args) { @@ -158,6 +191,11 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC } + /** + * Checks if the string given is a command string + * @param label The string to check + * @return true if the string is a command name or alias + */ private boolean matches(String label) { if (params.aliases().split(",").length > 0) @@ -176,31 +214,63 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return false; } + /** + * Gets a PlexPlayer from Player object + * @param player The player object + * @return PlexPlayer Object + * @see PlexPlayer + */ protected PlexPlayer getPlexPlayer(@NotNull Player player) { return DataUtils.getPlayer(player.getUniqueId()); } + /** + * Sends a message to an audience + * @param audience The audience to send the message to + * @param s The message to send + */ protected void send(Audience audience, String s) { audience.sendMessage(componentFromString(s)); } + /** + * Sends a message to an audience + * @param audience The audience to send the message to + * @param component The component to send + */ protected void send(Audience audience, Component component) { audience.sendMessage(component); } + /** + * Checks whether a sender has enough permissions or is high enough a rank + * @param sender A command sender + * @param rank The rank to check (if the server is using ranks) + * @param permission The permission to check (if the server is using permissions) + * @return true if the sender has enough permissions + * @see Rank + */ protected boolean checkRank(CommandSender sender, Rank rank, String permission) { if (!isConsole(sender)) { - checkRank((Player) sender, rank, permission); - return true; + return checkRank((Player) sender, rank, permission); +// return true; } return true; } + /** + * Checks whether a player has enough permissions or is high enough a rank + * @param player The player object + * @param rank The rank to check (if the server is using ranks) + * @param permission The permission to check (if the server is using permissions) + * @return true if the sender has enough permissions + * @see Rank + */ protected boolean checkRank(Player player, Rank rank, String permission) { PlexPlayer plexPlayer = getPlexPlayer(player); @@ -220,11 +290,22 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return true; } + /** + * Checks if a player is an admin + * @param plexPlayer The PlexPlayer object + * @return true if the player is an admin + * @see PlexPlayer + */ protected boolean isAdmin(PlexPlayer plexPlayer) { return Plex.get().getRankManager().isAdmin(plexPlayer); } + /** + * Checks if a sender is an admin + * @param sender A command sender + * @return true if the sender is an admin or if console + */ protected boolean isAdmin(CommandSender sender) { if (!(sender instanceof Player player)) @@ -235,12 +316,22 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return plugin.getRankManager().isAdmin(plexPlayer); } + /** + * Checks if a username is an admin + * @param name The username + * @return true if the username is an admin + */ protected boolean isAdmin(String name) { PlexPlayer plexPlayer = DataUtils.getPlayer(name); return plugin.getRankManager().isAdmin(plexPlayer); } + /** + * Checks if a sender is a senior admin + * @param sender A command sender + * @return true if the sender is a senior admin or if console + */ protected boolean isSeniorAdmin(CommandSender sender) { if (!(sender instanceof Player player)) @@ -251,6 +342,12 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return plugin.getRankManager().isSeniorAdmin(plexPlayer); } + /** + * Gets the UUID of the sender + * @param sender A command sender + * @return A unique ID or null if the sender is console + * @see UUID + */ protected UUID getUUID(CommandSender sender) { if (!(sender instanceof Player player)) @@ -260,23 +357,43 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return player.getUniqueId(); } + /** + * The plugin + * @return The instance of the plugin + * @see Plex + */ @Override - public @NotNull Plugin getPlugin() + public @NotNull Plex getPlugin() { return plugin; } - + /** + * Checks whether a sender is console + * @param sender A command sender + * @return true if the sender is console + */ protected boolean isConsole(CommandSender sender) { return !(sender instanceof Player); } + /** + * Converts a message entry from the "messages.yml" to a component + * @param s The message entry + * @param objects Any objects to replace in order + * @return A kyori component + */ protected Component tl(String s, Object... objects) { return componentFromString(PlexUtils.tl(s, objects)); } + /** + * Converts usage to a component + * @param s The usage to convert + * @return A kyori component stating the usage + */ protected Component usage(String s) { return componentFromString(ChatColor.YELLOW + "Correct Usage: " + ChatColor.GRAY + s); @@ -323,6 +440,11 @@ public abstract class PlexCommand extends Command implements PluginIdentifiableC return world; } + /** + * Converts a string to a legacy kyori component + * @param s The string to convert + * @return A kyori component + */ protected Component componentFromString(String s) { return LegacyComponentSerializer.legacyAmpersand().deserialize(s); diff --git a/src/main/java/dev/plex/command/annotation/CommandParameters.java b/src/main/java/dev/plex/command/annotation/CommandParameters.java index 5070a45..e9318d5 100644 --- a/src/main/java/dev/plex/command/annotation/CommandParameters.java +++ b/src/main/java/dev/plex/command/annotation/CommandParameters.java @@ -3,14 +3,33 @@ package dev.plex.command.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +/** + * Storage for a command's parameters + */ @Retention(RetentionPolicy.RUNTIME) public @interface CommandParameters { + /** + * The name + * @return Name of the command + */ String name(); + /** + * The description + * @return Description of the command + */ String description() default ""; + /** + * The usage (optional) + * @return The usage of the command + */ String usage() default "/"; + /** + * The aliases (optional) + * @return The aliases of the command + */ String aliases() default ""; } \ No newline at end of file diff --git a/src/main/java/dev/plex/command/annotation/CommandPermissions.java b/src/main/java/dev/plex/command/annotation/CommandPermissions.java index 0ed34d9..523bb43 100644 --- a/src/main/java/dev/plex/command/annotation/CommandPermissions.java +++ b/src/main/java/dev/plex/command/annotation/CommandPermissions.java @@ -5,12 +5,29 @@ import dev.plex.rank.enums.Rank; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +/** + * Storage for the command's permissions + */ @Retention(RetentionPolicy.RUNTIME) public @interface CommandPermissions { + /** + * Minimum rank required + * @return Minimum rank required for the command + * @see Rank + */ Rank level() default Rank.IMPOSTOR; + /** + * Required command source + * @return The required command source of the command + * @see RequiredCommandSource + */ RequiredCommandSource source() default RequiredCommandSource.ANY; + /** + * The permission + * @return Permission of the command + */ String permission() default ""; // No idea what to put here } \ No newline at end of file diff --git a/src/main/java/dev/plex/command/impl/BanCMD.java b/src/main/java/dev/plex/command/impl/BanCMD.java index 099adc4..15f3f62 100644 --- a/src/main/java/dev/plex/command/impl/BanCMD.java +++ b/src/main/java/dev/plex/command/impl/BanCMD.java @@ -15,6 +15,8 @@ import dev.plex.punishment.PunishmentType; import dev.plex.rank.enums.Rank; import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; + +import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; @@ -75,8 +77,8 @@ public class BanCMD extends PlexCommand punishment.setReason("No reason provided."); } punishment.setPunishedUsername(plexPlayer.getName()); - Date date = new Date(); - punishment.setEndDate(DateUtils.addDays(date, 1)); + LocalDateTime date = LocalDateTime.now(); + punishment.setEndDate(date.plusDays(1)); punishment.setCustomTime(false); plugin.getPunishmentManager().doPunishment(punishedPlayer, punishment); PlexUtils.broadcast(tl("banningPlayer", sender.getName(), plexPlayer.getName())); diff --git a/src/main/java/dev/plex/command/impl/FreezeCMD.java b/src/main/java/dev/plex/command/impl/FreezeCMD.java index 03842d8..cae3e22 100644 --- a/src/main/java/dev/plex/command/impl/FreezeCMD.java +++ b/src/main/java/dev/plex/command/impl/FreezeCMD.java @@ -11,6 +11,8 @@ import dev.plex.punishment.Punishment; import dev.plex.punishment.PunishmentType; import dev.plex.rank.enums.Rank; import dev.plex.util.PlexUtils; + +import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; @@ -36,8 +38,8 @@ public class FreezeCMD extends PlexCommand PunishedPlayer punishedPlayer = PlayerCache.getPunishedPlayer(player.getUniqueId()); Punishment punishment = new Punishment(UUID.fromString(punishedPlayer.getUuid()), getUUID(sender)); punishment.setCustomTime(false); - Date date = new Date(); - punishment.setEndDate(DateUtils.addMinutes(date, 5)); + LocalDateTime date = LocalDateTime.now(); + punishment.setEndDate(date.plusMinutes(5)); punishment.setType(PunishmentType.FREEZE); punishment.setPunishedUsername(player.getName()); punishment.setReason(""); diff --git a/src/main/java/dev/plex/punishment/Punishment.java b/src/main/java/dev/plex/punishment/Punishment.java index 96fd007..a1365f9 100644 --- a/src/main/java/dev/plex/punishment/Punishment.java +++ b/src/main/java/dev/plex/punishment/Punishment.java @@ -2,6 +2,8 @@ package dev.plex.punishment; import com.google.common.collect.Lists; import com.google.gson.Gson; + +import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.UUID; @@ -22,7 +24,7 @@ public class Punishment private PunishmentType type; private String reason; private boolean customTime; - private Date endDate; + private LocalDateTime endDate; public Punishment(UUID punished, UUID punisher) { diff --git a/src/main/java/dev/plex/punishment/PunishmentManager.java b/src/main/java/dev/plex/punishment/PunishmentManager.java index 36f1194..518cbf0 100644 --- a/src/main/java/dev/plex/punishment/PunishmentManager.java +++ b/src/main/java/dev/plex/punishment/PunishmentManager.java @@ -13,6 +13,10 @@ import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.temporal.ChronoUnit; import java.util.Date; import java.util.List; import java.util.Map; @@ -101,9 +105,9 @@ public class PunishmentManager extends PlexBase else if (punishment.getType() == PunishmentType.FREEZE) { player.setFrozen(true); - Date now = new Date(); - Date then = punishment.getEndDate(); - long seconds = TimeUnit.MILLISECONDS.toSeconds(then.getTime() - now.getTime()); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime then = punishment.getEndDate(); + long seconds = ChronoUnit.SECONDS.between(now, then); new BukkitRunnable() { @Override @@ -123,9 +127,9 @@ public class PunishmentManager extends PlexBase else if (punishment.getType() == PunishmentType.MUTE) { player.setMuted(true); - Date now = new Date(); - Date then = punishment.getEndDate(); - long seconds = TimeUnit.MILLISECONDS.toSeconds(then.getTime() - now.getTime()); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime then = punishment.getEndDate(); + long seconds = ChronoUnit.SECONDS.between(now, then); new BukkitRunnable() { @Override diff --git a/src/main/java/dev/plex/services/impl/BanService.java b/src/main/java/dev/plex/services/impl/BanService.java index 12d07d6..b3fc881 100644 --- a/src/main/java/dev/plex/services/impl/BanService.java +++ b/src/main/java/dev/plex/services/impl/BanService.java @@ -3,6 +3,8 @@ package dev.plex.services.impl; import dev.plex.Plex; import dev.plex.banning.Ban; import dev.plex.services.AbstractService; + +import java.time.LocalDateTime; import java.util.Date; import org.bukkit.Bukkit; @@ -18,7 +20,7 @@ public class BanService extends AbstractService { for (Ban ban : Plex.get().getBanManager().getActiveBans()) { - if (new Date().after(ban.getEndDate())) + if (LocalDateTime.now().isAfter(ban.getEndDate())) { Plex.get().getBanManager().unban(ban.getId()); Bukkit.broadcastMessage("Plex - Unbanned " + Bukkit.getOfflinePlayer(ban.getUuid()).getName());