From 7fa2370498786b9e13bf5ec70dad3168b9fc3d58 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Fri, 5 Aug 2022 22:17:53 +0200 Subject: [PATCH] Made boosters load and save properly --- .../boosterapi/BoosterImplementation.java | 1 + .../boosterapi/config/BoosterStorage.java | 19 ++++++++++++++++--- .../com/alttd/boosterapi/config/Config.java | 5 +++++ .../storage/ServerBoosterStorage.java | 2 +- .../com/alttd/vboosters/VelocityBoosters.java | 3 +++ .../vboosters/commands/BoosterCommand.java | 3 ++- .../vboosters/managers/BoosterManager.java | 4 ++-- .../storage/VelocityBoosterStorage.java | 11 ++++++++++- 8 files changed, 40 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/com/alttd/boosterapi/BoosterImplementation.java b/api/src/main/java/com/alttd/boosterapi/BoosterImplementation.java index 8c28699..e886556 100644 --- a/api/src/main/java/com/alttd/boosterapi/BoosterImplementation.java +++ b/api/src/main/java/com/alttd/boosterapi/BoosterImplementation.java @@ -1,6 +1,7 @@ package com.alttd.boosterapi; import com.alttd.boosterapi.config.Config; +import com.alttd.boosterapi.config.ServerConfig; import com.alttd.boosterapi.database.Database; import net.luckperms.api.LuckPerms; import net.luckperms.api.LuckPermsProvider; diff --git a/api/src/main/java/com/alttd/boosterapi/config/BoosterStorage.java b/api/src/main/java/com/alttd/boosterapi/config/BoosterStorage.java index 5558676..71598fc 100644 --- a/api/src/main/java/com/alttd/boosterapi/config/BoosterStorage.java +++ b/api/src/main/java/com/alttd/boosterapi/config/BoosterStorage.java @@ -18,6 +18,7 @@ public abstract class BoosterStorage { private File CONFIG_FILE; private final Map boosters; protected BoosterStorage() { + ALogger.info("Loading boosters..."); init(); boosters = loadBoosters(); } @@ -43,7 +44,7 @@ public abstract class BoosterStorage { public void reload() { boosters.clear(); - loadBoosters(); + boosters.putAll(loadBoosters()); } public Map getBoosters() { @@ -55,13 +56,24 @@ public abstract class BoosterStorage { try { JsonParser parser = new JsonFactory().createParser(CONFIG_FILE); - if (parser == null) + if (parser == null) { + ALogger.warn("Unable to load in boosters from storage file."); return boosters; - while (parser.hasCurrentToken()) { + } + parser.nextToken(); + while (parser.currentToken() != null && parser.currentToken().isStructStart()) { Booster booster = loadBooster(parser); + if (Config.DEBUG) + ALogger.info("Loading booster [" + booster.getType() + "] activated by [" + booster.getActivator()+ "]."); boosters.put(booster.getUUID(), booster); + if (parser.nextToken() != null && !parser.currentToken().isStructEnd()) { + ALogger.warn("Last loaded booster had more data than expected, skipping it..."); + while (!parser.nextToken().isStructEnd()) + ; + } parser.nextToken(); } + parser.close(); } catch (IOException e) { throw new RuntimeException(e); } @@ -77,6 +89,7 @@ public abstract class BoosterStorage { for (Booster booster : boosters) { saveBooster(booster, generator); } + generator.close(); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/api/src/main/java/com/alttd/boosterapi/config/Config.java b/api/src/main/java/com/alttd/boosterapi/config/Config.java index 59fcd0c..a2defbc 100755 --- a/api/src/main/java/com/alttd/boosterapi/config/Config.java +++ b/api/src/main/java/com/alttd/boosterapi/config/Config.java @@ -200,4 +200,9 @@ public final class Config { DEMOTE_MESSAGE = getString("messages.demote", DEMOTE_MESSAGE); PROMOTE_MESSAGE = getString("messages.promote", PROMOTE_MESSAGE); } + + public static boolean DEBUG = false; + private static void loadSettings() { + DEBUG = getBoolean("settings.debug", DEBUG); + } } diff --git a/plugin/src/main/java/com/alttd/boosters/storage/ServerBoosterStorage.java b/plugin/src/main/java/com/alttd/boosters/storage/ServerBoosterStorage.java index bf636e8..8ac6333 100644 --- a/plugin/src/main/java/com/alttd/boosters/storage/ServerBoosterStorage.java +++ b/plugin/src/main/java/com/alttd/boosters/storage/ServerBoosterStorage.java @@ -26,7 +26,7 @@ public class ServerBoosterStorage extends BoosterStorage { @Override public Booster loadBooster(JsonParser parser) throws IOException { - JsonToken jsonToken = parser.nextToken(); + JsonToken jsonToken = parser.currentToken(); if (!jsonToken.isStructStart()) return error("Didn't find struct start"); diff --git a/velocity/src/main/java/com/alttd/vboosters/VelocityBoosters.java b/velocity/src/main/java/com/alttd/vboosters/VelocityBoosters.java index c05c457..560af7d 100644 --- a/velocity/src/main/java/com/alttd/vboosters/VelocityBoosters.java +++ b/velocity/src/main/java/com/alttd/vboosters/VelocityBoosters.java @@ -2,6 +2,8 @@ package com.alttd.vboosters; import com.alttd.boosterapi.BoosterAPI; import com.alttd.boosterapi.BoosterImplementation; +import com.alttd.boosterapi.config.Config; +import com.alttd.boosterapi.config.ServerConfig; import com.alttd.boosterapi.util.ALogger; import com.alttd.proxydiscordlink.DiscordLink; import com.alttd.proxydiscordlink.bot.api.DiscordSendMessage; @@ -55,6 +57,7 @@ public class VelocityBoosters { server.getEventManager().register(this, new PluginMessageListener(channelIdentifier)); loadCommands(); + reloadConfig(); VelocityBoosterStorage.getVelocityBoosterStorage(); //this loads the boosters in } diff --git a/velocity/src/main/java/com/alttd/vboosters/commands/BoosterCommand.java b/velocity/src/main/java/com/alttd/vboosters/commands/BoosterCommand.java index c54391c..9c6fa8f 100755 --- a/velocity/src/main/java/com/alttd/vboosters/commands/BoosterCommand.java +++ b/velocity/src/main/java/com/alttd/vboosters/commands/BoosterCommand.java @@ -64,7 +64,7 @@ public class BoosterCommand { "420", "480", "540", "600", "660", "720", "780", "840", "900", "960", "1020", "1080", "1140", "1200", "1260", "1320", "1380", "1440"))) .then(RequiredArgumentBuilder.argument("multiplier", DoubleArgumentType.doubleArg(0, 10)) .suggests((context, builder) -> buildRemainingString(builder, List.of("0.5", "1", "1.5", "2"))) - .executes(context -> { + .executes(context -> { //TODO make messages configurable String username = context.getArgument("username", String.class); BoosterType boosterType = BoosterType.getByName(context.getArgument("booster", String.class)); long duration = context.getArgument("time", Integer.class) * 60; @@ -74,6 +74,7 @@ public class BoosterCommand { String msg = "[" + username + "] activated booster of type [" + Utils.capitalize(boosterType.getBoosterName()) + "] until %date%."; //TODO check if there was a booster active already and change message based on that DiscordSendMessage.sendEmbed(Config.BOOST_ANNOUNCE_CHANNEL, "Booster Activated", msg.replaceAll("%date%", "")); String mcMessage = msg.replaceAll("%date%", DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT).format(expiryTime)); + mcMessage += " [UTC]"; VelocityBoosters.getPlugin().getProxy().sendMessage(MiniMessage.markdown().parse(mcMessage)); VelocityBoosters.getPlugin().getLogger().info(mcMessage); return 1; diff --git a/velocity/src/main/java/com/alttd/vboosters/managers/BoosterManager.java b/velocity/src/main/java/com/alttd/vboosters/managers/BoosterManager.java index d197d9c..bd1a5f4 100644 --- a/velocity/src/main/java/com/alttd/vboosters/managers/BoosterManager.java +++ b/velocity/src/main/java/com/alttd/vboosters/managers/BoosterManager.java @@ -142,8 +142,8 @@ public class BoosterManager { for (Booster b : queuedBoosters) { b.saveBooster(); } - activeBoosters = null; - queuedBoosters = null; + activeBoosters.clear(); + queuedBoosters.clear(); } } diff --git a/velocity/src/main/java/com/alttd/vboosters/storage/VelocityBoosterStorage.java b/velocity/src/main/java/com/alttd/vboosters/storage/VelocityBoosterStorage.java index 30c7e9b..824e728 100644 --- a/velocity/src/main/java/com/alttd/vboosters/storage/VelocityBoosterStorage.java +++ b/velocity/src/main/java/com/alttd/vboosters/storage/VelocityBoosterStorage.java @@ -3,6 +3,7 @@ package com.alttd.vboosters.storage; import com.alttd.boosterapi.Booster; import com.alttd.boosterapi.BoosterType; import com.alttd.boosterapi.config.BoosterStorage; +import com.alttd.boosterapi.config.Config; import com.alttd.boosterapi.util.ALogger; import com.alttd.vboosters.data.VelocityBooster; import com.fasterxml.jackson.core.JsonParser; @@ -27,48 +28,56 @@ public class VelocityBoosterStorage extends BoosterStorage { @Override public Booster loadBooster(JsonParser parser) throws IOException { - JsonToken jsonToken = parser.nextToken(); + JsonToken jsonToken = parser.getCurrentToken(); if (!jsonToken.isStructStart()) return error("Didn't find struct start"); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"uuid".equals(parser.getCurrentName())) return error("Didn't find uuid at expected location"); + parser.nextValue(); UUID uuid = UUID.fromString(parser.getValueAsString()); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"activator".equals(parser.getCurrentName())) return error("Didn't find activator at expected location"); + parser.nextValue(); String activator = parser.getValueAsString(); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"type".equals(parser.getCurrentName())) return error("Didn't find type at expected location"); + parser.nextValue(); BoosterType boosterType = BoosterType.getByName(parser.getValueAsString()); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"startingTime".equals(parser.getCurrentName())) return error("Didn't find startingTime at expected location"); + parser.nextValue(); long startingTime = parser.getValueAsLong(); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"duration".equals(parser.getCurrentName())) return error("Didn't find duration at expected location"); + parser.nextValue(); long duration = parser.getValueAsLong(); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"multiplier".equals(parser.getCurrentName())) return error("Didn't find multiplier at expected location"); + parser.nextValue(); double multiplier = parser.getValueAsDouble(); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"active".equals(parser.getCurrentName())) return error("Didn't find active at expected location"); + parser.nextValue(); boolean active = parser.getValueAsBoolean(); jsonToken = parser.nextToken(); if (jsonToken != JsonToken.FIELD_NAME || !"finished".equals(parser.getCurrentName())) return error("Didn't find finished at expected location"); + parser.nextValue(); boolean finished = parser.getValueAsBoolean(); return new VelocityBooster(uuid, activator, boosterType, startingTime, duration, multiplier, active, finished); }