titivermeesch / CommandTimer

Probably the most complete command scheduling plugin for Spigot
https://www.spigotmc.org/resources/command-timer-easy-gui.24141/
26 stars 9 forks source link

[Bug] Error loading timers #285

Open Miaoyww opened 1 month ago

Miaoyww commented 1 month ago

some gson issues: 2472 2689 error log


[11:46:11 ERROR]: Error occurred while enabling CommandTimer v8.7.5 (Is it up to date?)
com.google.gson.JsonParseException: java.text.ParseException: Unparseable date: "Feb 8, 2023, 9:19:51 PM"
        at commandtimer-java21.jar/me.playbosswar.com.utils.gson.GsonDate.deserialize(GsonDate.java:39) ~[commandtimer-java21.jar:?]
        at commandtimer-java21.jar/me.playbosswar.com.utils.gson.GsonDate.deserialize(GsonDate.java:14) ~[commandtimer-java21.jar:?]
        at com.google.gson.internal.bind.TreeTypeAdapter.read(TreeTypeAdapter.java:76) ~[gson-2.10.1.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.readIntoField(ReflectiveTypeAdapterFactory.java:212) ~[gson-2.10.1.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$FieldReflectionAdapter.readField(ReflectiveTypeAdapterFactory.java:433) ~[gson-2.10.1.jar:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:393) ~[gson-2.10.1.jar:?]
        at com.google.gson.Gson.fromJson(Gson.java:1227) ~[gson-2.10.1.jar:?]
        at com.google.gson.Gson.fromJson(Gson.java:1137) ~[gson-2.10.1.jar:?]
        at com.google.gson.Gson.fromJson(Gson.java:1047) ~[gson-2.10.1.jar:?]
        at com.google.gson.Gson.fromJson(Gson.java:1014) ~[gson-2.10.1.jar:?]
        at commandtimer-java21.jar/me.playbosswar.com.utils.gson.GsonConverter.fromJson(GsonConverter.java:29) ~[commandtimer-java21.jar:?]
        at commandtimer-java21.jar/me.playbosswar.com.utils.Files.deserializeJsonFilesIntoCommandTimers(Files.java:118) ~[commandtimer-java21.jar:?]
        at commandtimer-java21.jar/me.playbosswar.com.tasks.TasksManager.<init>(TasksManager.java:35) ~[commandtimer-java21.jar:?]
        at commandtimer-java21.jar/me.playbosswar.com.CommandTimerPlugin.onEnable(CommandTimerPlugin.java:70) ~[commandtimer-java21.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:288) ~[paper-api-1.20.6-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:202) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:109) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:520) ~[paper-api-1.20.6-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.CraftServer.enablePlugin(CraftServer.java:626) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:575) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at org.bukkit.craftbukkit.CraftServer.reload(CraftServer.java:1117) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at org.bukkit.Bukkit.reload(Bukkit.java:1023) ~[paper-api-1.20.6-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:59) ~[paper-api-1.20.6-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:165) ~[paper-api-1.20.6-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:986) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at org.bukkit.craftbukkit.CraftServer.dispatchServerCommand(CraftServer.java:971) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at net.minecraft.server.dedicated.DedicatedServer.handleConsoleInputs(DedicatedServer.java:521) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at net.minecraft.server.dedicated.DedicatedServer.tickChildren(DedicatedServer.java:468) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1571) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1231) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:323) ~[paper-1.20.6.jar:1.20.6-148-20f5165]
        at java.base/java.lang.Thread.run(Thread.java:1570) ~[?:?]
Caused by: java.text.ParseException: Unparseable date: "Feb 8, 2023, 9:19:51 PM"
        at java.base/java.text.DateFormat.parse(DateFormat.java:403) ~[?:?]
        at commandtimer-java21.jar/me.playbosswar.com.utils.gson.GsonDate.deserialize(GsonDate.java:37) ~[commandtimer-java21.jar:?]
        ... 31 more

i have changed the source code at utils/GsonDate and it solved this problem i do not make sure if it is the best soultion but it solved my problem.

    public Date deserialize(JsonElement jsonElement, Type type,
                            JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
        SimpleDateFormat formatter = new SimpleDateFormat(FORMAT);
        try {
            return formatter.parse(jsonElement.getAsString());
        } catch(ParseException ex1) {
            // Check if maybe it's in the old format
            Bukkit.getLogger().log(Level.WARNING, "Could not parse date in new format, trying old format");
            try {
                SimpleDateFormat oldFormatter = new SimpleDateFormat("MMM d, yyyy, H:mm:ss a");
                return oldFormatter.parse(jsonElement.getAsString());
            } catch(ParseException ex2) {
                Bukkit.getLogger().log(Level.WARNING, "Could not parse date in new format, trying old format");
                try {
                    SimpleDateFormat oldFormatter = new SimpleDateFormat("MMM d, yyyy, hh:mm:ss a", Locale.ENGLISH);
                    return oldFormatter.parse(jsonElement.getAsString());
                } catch(ParseException ex3) {
                    try {
                        SimpleDateFormat oldFormatter = new SimpleDateFormat("MMM d, yyyy, HH:mm:ss");
                        return oldFormatter.parse(jsonElement.getAsString());
                    } catch(ParseException ex4) {
                        throw new JsonParseException(ex4);
                    }
                }
            }
        }
    }
titivermeesch commented 1 month ago

Thanks for submitting your issue. This is indeed a long standing issue where users have old date formats. A few are covered already but looks like some are still missing.