add tempban punishment type and swap localdatetime zoneddatetime, as well as reload timezone on /plex reload

This commit is contained in:
Taah
2022-04-19 14:49:45 -07:00
parent bae1e49c5e
commit a00c6926c4
21 changed files with 134 additions and 62 deletions

View File

@ -2,6 +2,8 @@ package dev.plex.util;
import com.google.gson.annotations.SerializedName;
import java.time.LocalDateTime;
import java.time.ZonedDateTime;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@ -25,7 +27,7 @@ public class AshconInfo
{
private String username;
@SerializedName("changed_at")
private LocalDateTime localDateTime;
private ZonedDateTime zonedDateTime;
}
@Getter

View File

@ -7,8 +7,11 @@ import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import dev.plex.Plex;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
@ -37,16 +40,16 @@ public class MojangUtils
return null;
}
client.close();
AshconInfo ashconInfo = new GsonBuilder().registerTypeAdapter(LocalDateTime.class, (JsonDeserializer<LocalDateTime>)(json1, typeOfT, context) ->
LocalDateTime.ofInstant(Instant.from(DateTimeFormatter.ISO_INSTANT.parse(json1.getAsJsonPrimitive().getAsString())), ZoneId.systemDefault())).create().fromJson(json, AshconInfo.class);
AshconInfo ashconInfo = new GsonBuilder().registerTypeAdapter(ZonedDateTime.class, (JsonDeserializer<ZonedDateTime>)(json1, typeOfT, context) ->
ZonedDateTime.ofInstant(Instant.from(DateTimeFormatter.ISO_INSTANT.parse(json1.getAsJsonPrimitive().getAsString())), ZoneId.of(Plex.get().config.getString("server.timezone")))).create().fromJson(json, AshconInfo.class);
Arrays.sort(ashconInfo.getUsernameHistories(), (o1, o2) ->
{
if (o1.getLocalDateTime() == null || o2.getLocalDateTime() == null)
if (o1.getZonedDateTime() == null || o2.getZonedDateTime() == null)
{
return 1;
}
return o1.getLocalDateTime().compareTo(o2.getLocalDateTime());
return o1.getZonedDateTime().compareTo(o2.getZonedDateTime());
});
return ashconInfo;

View File

@ -8,6 +8,8 @@ import java.sql.Connection;
import java.sql.SQLException;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@ -20,6 +22,7 @@ import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
import net.kyori.adventure.text.minimessage.tag.standard.StandardTags;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.apache.commons.lang.time.DateUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@ -133,7 +136,7 @@ public class PlexUtils implements PlexBase
{
aprilFools = plugin.config.getBoolean("april_fools");
}
LocalDateTime date = LocalDateTime.now();
ZonedDateTime date = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
if (aprilFools && date.getMonth() == Month.APRIL && date.getDayOfMonth() == 1)
{
Component component = MiniMessage.miniMessage().deserialize(input); // removes existing tags

View File

@ -3,9 +3,9 @@ package dev.plex.util;
import dev.plex.Plex;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
@ -13,7 +13,7 @@ import org.apache.commons.lang.math.NumberUtils;
public class TimeUtils
{
private static String TIMEZONE = Plex.get().config.getString("server.timezone");
public static String TIMEZONE = Plex.get().config.getString("server.timezone");
private static final DateTimeFormatter DATE_FORMAT = DateTimeFormatter.ofPattern("MM/dd/yyyy 'at' hh:mm:ss a z");
private static final Set<String> TIMEZONES = Set.of(TimeZone.getAvailableIDs());
private static final List<String> timeUnits = new ArrayList<>()
@ -36,9 +36,9 @@ public class TimeUtils
return Integer.parseInt(s);
}
public static LocalDateTime createDate(String arg)
public static ZonedDateTime createDate(String arg)
{
LocalDateTime time = LocalDateTime.now();
ZonedDateTime time = ZonedDateTime.now(ZoneId.of(TimeUtils.TIMEZONE));
for (String unit : timeUnits)
{
if (arg.endsWith(unit))
@ -68,4 +68,14 @@ public class TimeUtils
}
return DATE_FORMAT.withZone(ZoneId.of(TIMEZONE)).format(date);
}
public static String useTimezone(ZonedDateTime date)
{
// Use UTC if the timezone is null or not set correctly
if (TIMEZONE == null || !TIMEZONES.contains(TIMEZONE))
{
TIMEZONE = "Etc/UTC";
}
return DATE_FORMAT.withZone(ZoneId.of(TIMEZONE)).format(date);
}
}

View File

@ -4,17 +4,21 @@ import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import dev.plex.Plex;
import java.lang.reflect.Type;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class LocalDateTimeDeserializer implements JsonDeserializer<LocalDateTime>
public class ZonedDateTimeDeserializer implements JsonDeserializer<ZonedDateTime>
{
private static String TIMEZONE = Plex.get().config.getString("server.timezone");
@Override
public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
public ZonedDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
Instant instant = Instant.ofEpochMilli(json.getAsJsonPrimitive().getAsLong());
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
return ZonedDateTime.ofInstant(instant, ZoneId.of(TIMEZONE));
}
}

View File

@ -4,16 +4,20 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import dev.plex.Plex;
import java.lang.reflect.Type;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class LocalDateTimeSerializer implements JsonSerializer<LocalDateTime>
public class ZonedDateTimeSerializer implements JsonSerializer<ZonedDateTime>
{
private static String TIMEZONE = Plex.get().config.getString("server.timezone");
@Override
public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context)
public JsonElement serialize(ZonedDateTime src, Type typeOfSrc, JsonSerializationContext context)
{
return new JsonPrimitive(src.toInstant(ZoneId.systemDefault().getRules().getOffset(Instant.now())).toEpochMilli());
return new JsonPrimitive(src.toInstant().toEpochMilli());
}
}