From 24b62ec74919b2382d1d94194785e9f77355a7e2 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Wed, 19 Apr 2023 22:17:29 +0200 Subject: [PATCH 01/10] Attempts to properly comment migrated config values Note that for some reason, YamlConfiguration cannot load the output created by StargateYamlConfiguration causing a major crash --- .../java/net/knarcraft/stargate/Stargate.java | 28 +++++++++----- .../stargate/config/StargateConfig.java | 37 +++++++++++++++---- .../config/StargateYamlConfiguration.java | 6 +++ 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index e4ef6c1..0102695 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -25,6 +25,7 @@ import net.knarcraft.stargate.thread.BlockChangeThread; import net.knarcraft.stargate.thread.ChunkUnloadThread; import net.knarcraft.stargate.thread.StarGateThread; import net.knarcraft.stargate.utility.BStatsHelper; +import org.bukkit.Bukkit; import org.bukkit.Server; import org.bukkit.command.PluginCommand; import org.bukkit.configuration.InvalidConfigurationException; @@ -73,7 +74,7 @@ along with this program. If not, see . @SuppressWarnings("unused") public class Stargate extends JavaPlugin { - private static File configFile; + private static final String configFileName = "config.yml"; private static final Queue blockChangeRequestQueue = new LinkedList<>(); private static final Queue chunkUnloadQueue = new PriorityQueue<>(); @@ -247,7 +248,14 @@ public class Stargate extends JavaPlugin { * @param message

The message to log

*/ private static void log(Level severity, String message) { - logger.log(severity, getBackupString("prefix") + message); + if (logger == null) { + logger = Bukkit.getLogger(); + } + if (getInstance() == null) { + logger.log(severity, "[Stargate]: " + message); + } else { + logger.log(severity, getBackupString("prefix") + message); + } } /** @@ -349,9 +357,9 @@ public class Stargate extends JavaPlugin { super.reloadConfig(); this.configuration = new StargateYamlConfiguration(); try { - configuration.load(configFile); + configuration.load(new File(getDataFolder(), configFileName)); } catch (IOException | InvalidConfigurationException e) { - Stargate.logSevere(e.getMessage()); + e.printStackTrace(); } } @@ -359,9 +367,9 @@ public class Stargate extends JavaPlugin { public void saveConfig() { super.saveConfig(); try { - configuration.save(configFile); + configuration.save(new File(getDataFolder(), configFileName)); } catch (IOException e) { - logSevere(e.getMessage()); + e.printStackTrace(); } } @@ -375,16 +383,16 @@ public class Stargate extends JavaPlugin { @Override public void onEnable() { - configFile = new File(this.getDataFolder(), "config.yml"); + this.saveDefaultConfig(); + this.getConfig(); PluginDescriptionFile pluginDescriptionFile = this.getDescription(); pluginManager = getServer().getPluginManager(); configuration = new StargateYamlConfiguration(); try { - configuration.load(configFile); + configuration.load(new File(getDataFolder(), configFileName)); } catch (IOException | InvalidConfigurationException e) { - Stargate.logSevere(e.getMessage()); + getLogger().log(Level.SEVERE, e.getMessage()); } - this.saveDefaultConfig(); configuration.options().copyDefaults(true); logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index ea8598d..a7aecf4 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -15,6 +15,7 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.messaging.Messenger; import org.dynmap.DynmapAPI; @@ -434,18 +435,25 @@ public final class StargateConfig { /** * Changes all configuration values from the old name to the new name * - * @param newConfig

The config to read from and write to

+ * @param currentConfiguration

The current config to back up

*/ - private void migrateConfig(FileConfiguration newConfig) { + private void migrateConfig(FileConfiguration currentConfiguration) { //Save the old config just in case something goes wrong try { - newConfig.save(dataFolderPath + "/config.yml.old"); + currentConfiguration.save(new File(dataFolderPath, "config.yml.old")); } catch (IOException e) { Stargate.debug("Stargate::migrateConfig", "Unable to save old backup and do migration"); e.printStackTrace(); return; } + //Load old and new configuration + Stargate.getInstance().reloadConfig(); + FileConfiguration oldConfiguration = Stargate.getInstance().getConfig(); + YamlConfiguration newConfiguration = StargateYamlConfiguration.loadConfiguration( + FileHelper.getBufferedReaderFromInputStream( + FileHelper.getInputStreamForInternalFile("/config.yml"))); + //Read all available config migrations Map migrationFields; try { @@ -460,15 +468,30 @@ public final class StargateConfig { //Replace old config names with the new ones for (String key : migrationFields.keySet()) { - if (newConfig.contains(key)) { + if (oldConfiguration.contains(key)) { String newPath = migrationFields.get(key); - Object oldValue = newConfig.get(key); + Object oldValue = oldConfiguration.get(key); if (!newPath.trim().isEmpty()) { - newConfig.set(newPath, oldValue); + oldConfiguration.set(newPath, oldValue); } - newConfig.set(key, null); + oldConfiguration.set(key, null); } } + + // Copy all keys to the new config + for (String key : oldConfiguration.getKeys(true)) { + Stargate.logInfo("Setting " + key + " to " + oldConfiguration.get(key)); + newConfiguration.set(key, oldConfiguration.get(key)); + } + + try { + newConfiguration.save(new File(dataFolderPath, "config.yml")); + } catch (IOException e) { + Stargate.debug("Stargate::migrateConfig", "Unable to save migrated config"); + e.printStackTrace(); + } + + Stargate.getInstance().reloadConfig(); } /** diff --git a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java index 2b5f751..4326f81 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java @@ -19,6 +19,12 @@ public class StargateYamlConfiguration extends YamlConfiguration { static public final String END_OF_COMMENT = "_endOfComment_"; static public final String START_OF_COMMENT = "comment_"; + @Override + @SuppressWarnings("deprecation") + protected @NotNull String buildHeader() { + return ""; + } + @Override public @NotNull String saveToString() { return this.convertYAMLMappingsToComments(super.saveToString()); From aa480faef29be5e65cfd8a250653cf8304493e62 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Wed, 19 Apr 2023 23:13:02 +0200 Subject: [PATCH 02/10] Improves behavior if the config cannot be loaded --- .../net/knarcraft/stargate/config/StargateConfig.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index a7aecf4..97b6d81 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -399,7 +399,13 @@ public final class StargateConfig { //Get important folders from the config portalFolder = (String) configOptions.get(ConfigOption.PORTAL_FOLDER); + if (portalFolder.isEmpty()) { + portalFolder = dataFolderPath + "/portals/"; + } gateFolder = (String) configOptions.get(ConfigOption.GATE_FOLDER); + if (gateFolder.isEmpty()) { + gateFolder = dataFolderPath + "/gates/"; + } //If users have an outdated config, assume they also need to update their default gates if (isMigrating) { @@ -480,7 +486,7 @@ public final class StargateConfig { // Copy all keys to the new config for (String key : oldConfiguration.getKeys(true)) { - Stargate.logInfo("Setting " + key + " to " + oldConfiguration.get(key)); + Stargate.debug("Stargate::migrateConfig", "Setting " + key + " to " + oldConfiguration.get(key)); newConfiguration.set(key, oldConfiguration.get(key)); } From 9d981f2cc610e7cb284f095a73d53025ac1ef672 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Thu, 20 Apr 2023 16:02:57 +0200 Subject: [PATCH 03/10] Fixes a crash caused by StargateYamlConfiguration --- .../java/net/knarcraft/stargate/Stargate.java | 12 ++-- .../stargate/config/StargateConfig.java | 44 ++++++++++--- .../stargate/config/StargateGateConfig.java | 6 +- .../config/StargateYamlConfiguration.java | 5 +- .../stargate/portal/property/gate/Gate.java | 4 +- .../portal/property/gate/GateHandler.java | 2 +- src/main/resources/config.yml | 61 +++++++++++-------- 7 files changed, 88 insertions(+), 46 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index 0102695..8e1c68b 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -207,7 +207,7 @@ public class Stargate extends JavaPlugin { * @param message

A message describing what happened

*/ public static void debug(String route, String message) { - if (stargateConfig == null || stargateConfig.isDebuggingEnabled()) { + if (stargateConfig == null || !stargateConfig.isLoaded() || stargateConfig.isDebuggingEnabled()) { logger.info("[Stargate::" + route + "] " + message); } else { logger.log(Level.FINEST, "[Stargate::" + route + "] " + message); @@ -357,7 +357,7 @@ public class Stargate extends JavaPlugin { super.reloadConfig(); this.configuration = new StargateYamlConfiguration(); try { - configuration.load(new File(getDataFolder(), configFileName)); + this.configuration.load(new File(getDataFolder(), configFileName)); } catch (IOException | InvalidConfigurationException e) { e.printStackTrace(); } @@ -367,7 +367,7 @@ public class Stargate extends JavaPlugin { public void saveConfig() { super.saveConfig(); try { - configuration.save(new File(getDataFolder(), configFileName)); + this.configuration.save(new File(getDataFolder(), configFileName)); } catch (IOException e) { e.printStackTrace(); } @@ -387,13 +387,13 @@ public class Stargate extends JavaPlugin { this.getConfig(); PluginDescriptionFile pluginDescriptionFile = this.getDescription(); pluginManager = getServer().getPluginManager(); - configuration = new StargateYamlConfiguration(); + this.configuration = new StargateYamlConfiguration(); try { - configuration.load(new File(getDataFolder(), configFileName)); + this.configuration.load(new File(getDataFolder(), configFileName)); } catch (IOException | InvalidConfigurationException e) { getLogger().log(Level.SEVERE, e.getMessage()); } - configuration.options().copyDefaults(true); + this.configuration.options().copyDefaults(true); logger = Logger.getLogger("Minecraft"); Server server = getServer(); diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index 97b6d81..8d574bb 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -14,6 +14,7 @@ import net.knarcraft.stargate.utility.PortalFileHelper; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.command.CommandSender; +import org.bukkit.configuration.MemorySection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.messaging.Messenger; @@ -48,6 +49,7 @@ public final class StargateConfig { private String gateFolder; private String portalFolder; private String languageName = "en"; + private boolean isLoaded = false; private final Map configOptions; @@ -109,6 +111,17 @@ public final class StargateConfig { DynmapManager.initialize(dynmapAPI); DynmapManager.addAllPortalMarkers(); } + + this.isLoaded = true; + } + + /** + * Gets whether this configuration has been fully loaded + * + * @return

True if fully loaded

+ */ + public boolean isLoaded() { + return this.isLoaded; } /** @@ -365,10 +378,11 @@ public final class StargateConfig { FileConfiguration newConfig = Stargate.getInstance().getConfiguration(); boolean isMigrating = false; - if (newConfig.getString("lang") != null || newConfig.getString("economy.freeGatesGreen") != null || - newConfig.getString("economy.taxAccount") == null) { + if (newConfig.getString("lang") != null || newConfig.getString("economy.taxAccount") == null) { migrateConfig(newConfig); isMigrating = true; + Stargate.getInstance().reloadConfig(); + newConfig = Stargate.getInstance().getConfiguration(); } //Copy missing default values if any values are missing @@ -409,6 +423,7 @@ public final class StargateConfig { //If users have an outdated config, assume they also need to update their default gates if (isMigrating) { + this.createMissingFolders(); GateHandler.writeDefaultGatesToFolder(gateFolder); } @@ -486,6 +501,9 @@ public final class StargateConfig { // Copy all keys to the new config for (String key : oldConfiguration.getKeys(true)) { + if (oldConfiguration.get(key) instanceof MemorySection) { + continue; + } Stargate.debug("Stargate::migrateConfig", "Setting " + key + " to " + oldConfiguration.get(key)); newConfiguration.set(key, oldConfiguration.get(key)); } @@ -527,12 +545,8 @@ public final class StargateConfig { * Creates missing folders */ private void createMissingFolders() { - File newPortalDir = new File(portalFolder); - if (!newPortalDir.exists()) { - if (!newPortalDir.mkdirs()) { - logger.severe("Unable to create portal directory"); - } - } + createMissingFolder(new File(gateFolder), "Unable to create gate directory"); + createMissingFolder(new File(portalFolder), "Unable to create portal directory"); File newFile = new File(portalFolder, Stargate.getInstance().getServer().getWorlds().get(0).getName() + ".db"); if (!newFile.exists() && !newFile.getParentFile().exists()) { @@ -542,6 +556,20 @@ public final class StargateConfig { } } + /** + * Creates the given folder if it's missing + * + * @param folder

The folder to create

+ * @param errorMessage

The error message to display if unable to create the folder

+ */ + private void createMissingFolder(File folder, String errorMessage) { + if (!folder.exists()) { + if (!folder.mkdirs()) { + logger.severe(errorMessage); + } + } + } + /** * Gets the folder all portals are stored in * diff --git a/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java index f1dc7ca..f97cd16 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateGateConfig.java @@ -313,14 +313,16 @@ public final class StargateGateConfig { try { PortalSignDrawer.setMainColor(ChatColor.of(mainSignColor.toUpperCase())); } catch (IllegalArgumentException | NullPointerException exception) { - Stargate.logWarning("You have specified an invalid main sign color in your config.yml. Defaulting to BLACK"); + Stargate.logWarning("You have specified an invalid main sign color in your config.yml (" + mainSignColor + + "). Defaulting to BLACK"); PortalSignDrawer.setMainColor(ChatColor.BLACK); } try { PortalSignDrawer.setHighlightColor(ChatColor.of(highlightSignColor.toUpperCase())); } catch (IllegalArgumentException | NullPointerException exception) { - Stargate.logWarning("You have specified an invalid highlighting sign color in your config.yml. Defaulting to WHITE"); + Stargate.logWarning("You have specified an invalid highlighting sign color in your config.yml (" + + highlightSignColor + "). Defaulting to WHITE"); PortalSignDrawer.setHighlightColor(ChatColor.WHITE); } } diff --git a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java index 4326f81..7a92966 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java @@ -16,6 +16,7 @@ import java.util.List; */ public class StargateYamlConfiguration extends YamlConfiguration { + public static final String START_OF_COMMENT_LINE = "[HASHTAG]"; static public final String END_OF_COMMENT = "_endOfComment_"; static public final String START_OF_COMMENT = "comment_"; @@ -51,7 +52,8 @@ public class StargateYamlConfiguration extends YamlConfiguration { for (String line : configString.split("\n")) { if (line.trim().startsWith("#")) { //Temporarily store the comment line - currentComment.add(line.trim().replaceFirst("#", "")); + currentComment.add(line.trim().replaceFirst(line.trim().startsWith("# ") ? "# " : "{2}#", + START_OF_COMMENT_LINE)); } else { //Write the full formatted comment to the StringBuilder if (!currentComment.isEmpty()) { @@ -119,6 +121,7 @@ public class StargateYamlConfiguration extends YamlConfiguration { //Output the empty line as-is, as it's not part of a comment finalText.append("\n"); } else if (isReadingCommentBlock) { + possibleComment = possibleComment.replace(START_OF_COMMENT_LINE, ""); //Output the comment with correct indentation finalText.append(addIndentation(commentIndentation)).append("# ").append(possibleComment).append("\n"); } else { diff --git a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java index 563a93f..52e34e4 100644 --- a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java +++ b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java @@ -7,6 +7,7 @@ import org.bukkit.Material; import org.bukkit.Tag; import java.io.BufferedWriter; +import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.HashMap; @@ -290,7 +291,7 @@ public class Gate { */ public void save(String gateFolder) { try { - BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(gateFolder + filename)); + BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File(gateFolder, filename))); //Save main material names writeConfig(bufferedWriter, "portal-open", portalOpenBlock.name()); @@ -311,6 +312,7 @@ public class Gate { bufferedWriter.close(); } catch (IOException ex) { Stargate.logSevere(String.format("Could not save Gate %s - %s", filename, ex.getMessage())); + ex.printStackTrace(); } } diff --git a/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java b/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java index aca723a..197fe6b 100644 --- a/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java +++ b/src/main/java/net/knarcraft/stargate/portal/property/gate/GateHandler.java @@ -152,7 +152,7 @@ public class GateHandler { } //Update gate file in case the format has changed between versions - gate.save(parentFolder + "/"); + gate.save(parentFolder); return gate; } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index caeac8f..008f456 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -1,4 +1,4 @@ -# Version: ${project.version} +# Version: ${project.version} # +--------------▄▄▄-- ‚——. -▄--▄-▄--▄-▄-▄▄▄▄▄---------------------------------------------------+ # # | █▄▄▀ (“‡‡”) █▄▄▀ █▄▄▀ █ █ Support available at: sgrewritten.org/discord | # # | █▄▄█ \__/ █ █ █ █ █ █ ‚-. | # @@ -107,6 +107,33 @@ gates: # This is more resource intensive, and should really only be used if verifyPortals is true. # Or if using an easily destroyable open/closed material. protectEntrance: false + + cosmetic: + # Will the destination a networked portal last connected to be listed first in its scroll menu? + rememberDestination: false + + # For networked gates, are destinations listed alphabetically instead of chronologically? + # (This applies to all non-fixed and non-random gates). + sortNetworkDestinations: false + + # What color will StarGate use for the text on gate signs? + # Note that players can override this with DYE and/or GLOW_INK_SAC + mainSignColor: BLACK + + # What color will StarGate use to accent the above text? + highlightSignColor: WHITE + + # Text and highlight colors can be modified on a per-sign basis (below). + # Format: 'SIGN_TYPE:mainSignColor,highlightSignColor' + perSignColors: + - 'ACACIA:default,default' + - 'BIRCH:default,default' + - 'CRIMSON:inverted,inverted' + - 'DARK_OAK:inverted,inverted' + - 'JUNGLE:default,default' + - 'OAK:default,default' + - 'SPRUCE:inverted,inverted' + - 'WARPED:inverted,inverted' # +----------------------------------------------------------------------------------------------+ # # | Economy | # @@ -149,32 +176,12 @@ economy: # https://hub.spigotmc.org/javadocs/spigot/org/bukkit/ChatColor.html freeGatesColor: DARK_GREEN - cosmetic: - # Will the destination a networked portal last connected to be listed first in its scroll menu? - rememberDestination: false - - # For networked gates, are destinations listed alphabetically instead of chronologically? - # (This applies to all non-fixed and non-random gates). - sortNetworkDestinations: false - - # What color will StarGate use for the text on gate signs? - # Note that players can override this with DYE and/or GLOW_INK_SAC - mainSignColor: BLACK - - # What color will StarGate use to accent the above text? - highlightSignColor: WHITE - - # Text and highlight colors can be modified on a per-sign basis (below). - # Format: 'SIGN_TYPE:mainSignColor,highlightSignColor' - perSignColors: - - 'ACACIA:default,default' - - 'BIRCH:default,default' - - 'CRIMSON:inverted,inverted' - - 'DARK_OAK:inverted,inverted' - - 'JUNGLE:default,default' - - 'OAK:default,default' - - 'SPRUCE:inverted,inverted' - - 'WARPED:inverted,inverted' + # Does your server have a tax account (closed economy)? + # If so, please provide the name of your tax account (collected money will be sent to it). + # If not, leave this section blank (collected money will be deleted). + # + # Note that useCost money is excluded from this system when toOwner is true. + taxAccount: '' # +----------------------------------------------------------------------------------------------+ # # | Technical | # From 486149fa01c4583e78359575b7fef27a666a1ccc Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Thu, 20 Apr 2023 18:44:46 +0200 Subject: [PATCH 04/10] Improves performance of StargateYamlConfiguration a bit --- .../config/StargateYamlConfiguration.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java index 7a92966..6ebd9bd 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java @@ -28,11 +28,13 @@ public class StargateYamlConfiguration extends YamlConfiguration { @Override public @NotNull String saveToString() { + // Convert YAML comments to normal comments return this.convertYAMLMappingsToComments(super.saveToString()); } @Override public void loadFromString(@NotNull String contents) throws InvalidConfigurationException { + // Convert normal comments to YAML comments to prevent them from disappearing super.loadFromString(this.convertCommentsToYAMLMappings(contents)); } @@ -50,19 +52,23 @@ public class StargateYamlConfiguration extends YamlConfiguration { int commentId = 0; for (String line : configString.split("\n")) { - if (line.trim().startsWith("#")) { + String trimmed = line.trim(); + if (trimmed.startsWith("#")) { //Temporarily store the comment line - currentComment.add(line.trim().replaceFirst(line.trim().startsWith("# ") ? "# " : "{2}#", - START_OF_COMMENT_LINE)); + if (trimmed.startsWith("# ")) { + currentComment.add(trimmed.replaceFirst("# ", START_OF_COMMENT_LINE)); + } else { + currentComment.add(trimmed.replaceFirst("#", START_OF_COMMENT_LINE)); + } } else { //Write the full formatted comment to the StringBuilder if (!currentComment.isEmpty()) { int indentation = getIndentation(line); generateCommentYAML(yamlBuilder, currentComment, commentId++, indentation); - currentComment = new ArrayList<>(); + currentComment.clear(); } //Add the non-comment line assuming it isn't empty - if (!line.trim().isEmpty()) { + if (!trimmed.isEmpty()) { yamlBuilder.append(line).append("\n"); } } From 50015c29122fec9553385cc6efe2950e459cd848 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 21 Apr 2023 12:53:43 +0200 Subject: [PATCH 05/10] Adds graceful shutdown for CraftBukkit #286 --- .../java/net/knarcraft/stargate/Stargate.java | 23 ++++++++++++++----- .../stargate/config/LanguageLoader.java | 4 ++-- .../stargate/config/StargateConfig.java | 6 ++--- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index 8e1c68b..11c52df 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -207,7 +207,7 @@ public class Stargate extends JavaPlugin { * @param message

A message describing what happened

*/ public static void debug(String route, String message) { - if (stargateConfig == null || !stargateConfig.isLoaded() || stargateConfig.isDebuggingEnabled()) { + if (stargateConfig == null || stargateConfig.isNotLoaded() || stargateConfig.isDebuggingEnabled()) { logger.info("[Stargate::" + route + "] " + message); } else { logger.log(Level.FINEST, "[Stargate::" + route + "] " + message); @@ -220,7 +220,7 @@ public class Stargate extends JavaPlugin { * @param message

The message to log

*/ public static void logInfo(String message) { - logger.info(getBackupString("prefix") + message); + log(Level.INFO, message); } /** @@ -251,7 +251,7 @@ public class Stargate extends JavaPlugin { if (logger == null) { logger = Bukkit.getLogger(); } - if (getInstance() == null) { + if (getInstance() == null || stargateConfig == null || stargateConfig.isNotLoaded()) { logger.log(severity, "[Stargate]: " + message); } else { logger.log(severity, getBackupString("prefix") + message); @@ -377,7 +377,9 @@ public class Stargate extends JavaPlugin { public void onDisable() { PortalHandler.closeAllPortals(); PortalRegistry.clearPortals(); - stargateConfig.clearManagedWorlds(); + if (stargateConfig != null) { + stargateConfig.clearManagedWorlds(); + } getServer().getScheduler().cancelTasks(this); } @@ -399,8 +401,17 @@ public class Stargate extends JavaPlugin { Server server = getServer(); stargate = this; - stargateConfig = new StargateConfig(logger); - stargateConfig.finishSetup(); + try { + stargateConfig = new StargateConfig(logger); + stargateConfig.finishSetup(); + } catch (NoClassDefFoundError exception) { + logSevere("Could not properly load. Class not found: " + + exception.getMessage() + "\nThis is probably because you are using CraftBukkit, or other outdated" + + "Minecraft server software. Minecraft server software based on Spigot or Paper is required. Paper" + + " is recommended, and can be downloaded at: https://papermc.io/downloads/paper"); + this.onDisable(); + return; + } pluginVersion = pluginDescriptionFile.getVersion(); diff --git a/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java b/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java index 0383794..ade33a0 100644 --- a/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java +++ b/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java @@ -45,7 +45,7 @@ public final class LanguageLoader { loadedBackupStrings = load("en", inputStream); } else { loadedBackupStrings = null; - Stargate.getConsoleLogger().severe("[stargate] Error loading backup language. " + + Stargate.logSevere("Error loading backup language. " + "There may be missing text in-game"); } } @@ -226,7 +226,7 @@ public final class LanguageLoader { strings = FileHelper.readKeyValuePairs(bufferedReader, "=", ColorConversion.NORMAL); } catch (Exception e) { if (Stargate.getStargateConfig().isDebuggingEnabled()) { - Stargate.getConsoleLogger().info("[Stargate] Unable to load language " + lang); + Stargate.logInfo("Unable to load language " + lang); } return null; } diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index 8d574bb..bb27d21 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -118,10 +118,10 @@ public final class StargateConfig { /** * Gets whether this configuration has been fully loaded * - * @return

True if fully loaded

+ * @return

True if not fully loaded

*/ - public boolean isLoaded() { - return this.isLoaded; + public boolean isNotLoaded() { + return !this.isLoaded; } /** From 45f3bcc4156c9422389f62988ad1a43b3133a250 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 21 Apr 2023 13:41:42 +0200 Subject: [PATCH 06/10] Improves logging a bit --- src/main/java/net/knarcraft/stargate/Stargate.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index 11c52df..f13d21f 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -251,11 +251,7 @@ public class Stargate extends JavaPlugin { if (logger == null) { logger = Bukkit.getLogger(); } - if (getInstance() == null || stargateConfig == null || stargateConfig.isNotLoaded()) { - logger.log(severity, "[Stargate]: " + message); - } else { - logger.log(severity, getBackupString("prefix") + message); - } + logger.log(severity, message); } /** @@ -385,6 +381,8 @@ public class Stargate extends JavaPlugin { @Override public void onEnable() { + stargate = this; + logger = getLogger(); this.saveDefaultConfig(); this.getConfig(); PluginDescriptionFile pluginDescriptionFile = this.getDescription(); @@ -397,9 +395,7 @@ public class Stargate extends JavaPlugin { } this.configuration.options().copyDefaults(true); - logger = Logger.getLogger("Minecraft"); Server server = getServer(); - stargate = this; try { stargateConfig = new StargateConfig(logger); From fab067c94b9c537d99ccb8655395f217074a3dcf Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 21 Apr 2023 13:56:18 +0200 Subject: [PATCH 07/10] Fixes #287 --- .../net/knarcraft/stargate/config/StargateConfig.java | 9 +++++---- .../stargate/config/StargateYamlConfiguration.java | 8 +++++++- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index bb27d21..208e58a 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -463,7 +463,7 @@ public final class StargateConfig { try { currentConfiguration.save(new File(dataFolderPath, "config.yml.old")); } catch (IOException e) { - Stargate.debug("Stargate::migrateConfig", "Unable to save old backup and do migration"); + Stargate.debug("StargateConfig::migrateConfig", "Unable to save old backup and do migration"); e.printStackTrace(); return; } @@ -482,7 +482,7 @@ public final class StargateConfig { FileHelper.getInputStreamForInternalFile("/config-migrations.txt")), "=", ColorConversion.NORMAL); } catch (IOException e) { - Stargate.debug("Stargate::migrateConfig", "Unable to load config migration file"); + Stargate.debug("StargateConfig::migrateConfig", "Unable to load config migration file"); e.printStackTrace(); return; } @@ -504,14 +504,15 @@ public final class StargateConfig { if (oldConfiguration.get(key) instanceof MemorySection) { continue; } - Stargate.debug("Stargate::migrateConfig", "Setting " + key + " to " + oldConfiguration.get(key)); + Stargate.debug("StargateConfig::migrateConfig", "Setting " + key + " to " + + oldConfiguration.get(key)); newConfiguration.set(key, oldConfiguration.get(key)); } try { newConfiguration.save(new File(dataFolderPath, "config.yml")); } catch (IOException e) { - Stargate.debug("Stargate::migrateConfig", "Unable to save migrated config"); + Stargate.debug("StargateConfig::migrateConfig", "Unable to save migrated config"); e.printStackTrace(); } diff --git a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java index 6ebd9bd..400f5e2 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java @@ -50,10 +50,15 @@ public class StargateYamlConfiguration extends YamlConfiguration { StringBuilder yamlBuilder = new StringBuilder(); List currentComment = new ArrayList<>(); int commentId = 0; + int previousIndentation = 0; for (String line : configString.split("\n")) { String trimmed = line.trim(); if (trimmed.startsWith("#")) { + // Store the indentation of the block + if (currentComment.isEmpty()) { + previousIndentation = getIndentation(line); + } //Temporarily store the comment line if (trimmed.startsWith("# ")) { currentComment.add(trimmed.replaceFirst("# ", START_OF_COMMENT_LINE)); @@ -63,9 +68,10 @@ public class StargateYamlConfiguration extends YamlConfiguration { } else { //Write the full formatted comment to the StringBuilder if (!currentComment.isEmpty()) { - int indentation = getIndentation(line); + int indentation = trimmed.isEmpty() ? previousIndentation : getIndentation(line); generateCommentYAML(yamlBuilder, currentComment, commentId++, indentation); currentComment.clear(); + previousIndentation = 0; } //Add the non-comment line assuming it isn't empty if (!trimmed.isEmpty()) { From 05fadfa55856bb4a286f08d307fcd7e9e682257e Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 21 Apr 2023 14:03:33 +0200 Subject: [PATCH 08/10] Removes stack trace printing --- src/main/java/net/knarcraft/stargate/Stargate.java | 4 ++-- .../knarcraft/stargate/config/LanguageLoader.java | 4 ++-- .../knarcraft/stargate/config/StargateConfig.java | 5 +---- .../stargate/portal/property/gate/Gate.java | 5 ++--- .../knarcraft/stargate/utility/BungeeHelper.java | 13 +++++-------- .../stargate/utility/PortalFileHelper.java | 7 +++---- 6 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index f13d21f..8dd8709 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -355,7 +355,7 @@ public class Stargate extends JavaPlugin { try { this.configuration.load(new File(getDataFolder(), configFileName)); } catch (IOException | InvalidConfigurationException e) { - e.printStackTrace(); + logSevere("Unable to load the configuration! Message: " + e.getMessage()); } } @@ -365,7 +365,7 @@ public class Stargate extends JavaPlugin { try { this.configuration.save(new File(getDataFolder(), configFileName)); } catch (IOException e) { - e.printStackTrace(); + logSevere("Unable to save the configuration! Message: " + e.getMessage()); } } diff --git a/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java b/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java index ade33a0..bd8a335 100644 --- a/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java +++ b/src/main/java/net/knarcraft/stargate/config/LanguageLoader.java @@ -120,8 +120,8 @@ public final class LanguageLoader { try { readChangedLanguageStrings(inputStream, language, currentLanguageValues); - } catch (IOException ex) { - ex.printStackTrace(); + } catch (IOException exception) { + Stargate.logSevere("Unable to read language strings! Message: " + exception.getMessage()); } } diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index 208e58a..fefaf62 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -464,7 +464,6 @@ public final class StargateConfig { currentConfiguration.save(new File(dataFolderPath, "config.yml.old")); } catch (IOException e) { Stargate.debug("StargateConfig::migrateConfig", "Unable to save old backup and do migration"); - e.printStackTrace(); return; } @@ -483,7 +482,6 @@ public final class StargateConfig { ColorConversion.NORMAL); } catch (IOException e) { Stargate.debug("StargateConfig::migrateConfig", "Unable to load config migration file"); - e.printStackTrace(); return; } @@ -511,9 +509,8 @@ public final class StargateConfig { try { newConfiguration.save(new File(dataFolderPath, "config.yml")); - } catch (IOException e) { + } catch (IOException exception) { Stargate.debug("StargateConfig::migrateConfig", "Unable to save migrated config"); - e.printStackTrace(); } Stargate.getInstance().reloadConfig(); diff --git a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java index 52e34e4..d488ca2 100644 --- a/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java +++ b/src/main/java/net/knarcraft/stargate/portal/property/gate/Gate.java @@ -310,9 +310,8 @@ public class Gate { layout.saveLayout(bufferedWriter); bufferedWriter.close(); - } catch (IOException ex) { - Stargate.logSevere(String.format("Could not save Gate %s - %s", filename, ex.getMessage())); - ex.printStackTrace(); + } catch (IOException exception) { + Stargate.logSevere(String.format("Could not save Gate %s - %s", filename, exception.getMessage())); } } diff --git a/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java b/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java index 677e80f..b59bde2 100644 --- a/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/BungeeHelper.java @@ -82,8 +82,7 @@ public final class BungeeHelper { //Send the plugin message player.sendPluginMessage(Stargate.getInstance(), bungeeChannel, byteArrayOutputStream.toByteArray()); } catch (IOException ex) { - Stargate.logSevere("Error sending BungeeCord teleport packet"); - ex.printStackTrace(); + Stargate.logSevere("Error sending BungeeCord teleport packet! Message: " + ex.getMessage()); return false; } return true; @@ -107,9 +106,8 @@ public final class BungeeHelper { //Send the plugin message player.sendPluginMessage(Stargate.getInstance(), bungeeChannel, byteArrayOutputStream.toByteArray()); - } catch (IOException ex) { - Stargate.logSevere("Error sending BungeeCord connect packet"); - ex.printStackTrace(); + } catch (IOException exception) { + Stargate.logSevere("Error sending BungeeCord connect packet! Message: " + exception.getMessage()); return false; } return true; @@ -137,9 +135,8 @@ public final class BungeeHelper { data = new byte[dataLength]; //Read the message to the prepared array dataInputStream.readFully(data); - } catch (IOException ex) { - Stargate.logSevere("Error receiving BungeeCord message"); - ex.printStackTrace(); + } catch (IOException exception) { + Stargate.logSevere("Error receiving BungeeCord message. Message: " + exception.getMessage()); return null; } return new String(data); diff --git a/src/main/java/net/knarcraft/stargate/utility/PortalFileHelper.java b/src/main/java/net/knarcraft/stargate/utility/PortalFileHelper.java index 74741fc..6ba84e7 100644 --- a/src/main/java/net/knarcraft/stargate/utility/PortalFileHelper.java +++ b/src/main/java/net/knarcraft/stargate/utility/PortalFileHelper.java @@ -170,10 +170,9 @@ public final class PortalFileHelper { "Starting post loading tasks", world)); doPostLoadTasks(world, needsToSaveDatabase); return true; - } catch (Exception e) { - Stargate.logSevere(String.format("Exception while reading stargates from %s: %d", database.getName(), - lineIndex)); - e.printStackTrace(); + } catch (Exception exception) { + Stargate.logSevere(String.format("Exception while reading stargates from %s: %d! Message: %s", + database.getName(), lineIndex, exception.getMessage())); } return false; } From e07adacf733049d851073f2c8aa37b91b1e6fd52 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 21 Apr 2023 14:53:23 +0200 Subject: [PATCH 09/10] Reduces the complexity of convertYAMLMappingsToComments --- .../stargate/config/StargateConfig.java | 10 +- .../config/StargateYamlConfiguration.java | 107 ++++++++++++------ 2 files changed, 79 insertions(+), 38 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index fefaf62..dce9109 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -459,11 +459,13 @@ public final class StargateConfig { * @param currentConfiguration

The current config to back up

*/ private void migrateConfig(FileConfiguration currentConfiguration) { + String debugPath = "StargateConfig::migrateConfig"; + //Save the old config just in case something goes wrong try { currentConfiguration.save(new File(dataFolderPath, "config.yml.old")); } catch (IOException e) { - Stargate.debug("StargateConfig::migrateConfig", "Unable to save old backup and do migration"); + Stargate.debug(debugPath, "Unable to save old backup and do migration"); return; } @@ -481,7 +483,7 @@ public final class StargateConfig { FileHelper.getInputStreamForInternalFile("/config-migrations.txt")), "=", ColorConversion.NORMAL); } catch (IOException e) { - Stargate.debug("StargateConfig::migrateConfig", "Unable to load config migration file"); + Stargate.debug(debugPath, "Unable to load config migration file"); return; } @@ -502,7 +504,7 @@ public final class StargateConfig { if (oldConfiguration.get(key) instanceof MemorySection) { continue; } - Stargate.debug("StargateConfig::migrateConfig", "Setting " + key + " to " + + Stargate.debug(debugPath, "Setting " + key + " to " + oldConfiguration.get(key)); newConfiguration.set(key, oldConfiguration.get(key)); } @@ -510,7 +512,7 @@ public final class StargateConfig { try { newConfiguration.save(new File(dataFolderPath, "config.yml")); } catch (IOException exception) { - Stargate.debug("StargateConfig::migrateConfig", "Unable to save migrated config"); + Stargate.debug(debugPath, "Unable to save migrated config"); } Stargate.getInstance().reloadConfig(); diff --git a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java index 400f5e2..9e7bfd0 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java @@ -60,28 +60,54 @@ public class StargateYamlConfiguration extends YamlConfiguration { previousIndentation = getIndentation(line); } //Temporarily store the comment line - if (trimmed.startsWith("# ")) { - currentComment.add(trimmed.replaceFirst("# ", START_OF_COMMENT_LINE)); - } else { - currentComment.add(trimmed.replaceFirst("#", START_OF_COMMENT_LINE)); - } + addComment(currentComment, trimmed); } else { - //Write the full formatted comment to the StringBuilder - if (!currentComment.isEmpty()) { - int indentation = trimmed.isEmpty() ? previousIndentation : getIndentation(line); - generateCommentYAML(yamlBuilder, currentComment, commentId++, indentation); - currentComment.clear(); - previousIndentation = 0; - } - //Add the non-comment line assuming it isn't empty - if (!trimmed.isEmpty()) { - yamlBuilder.append(line).append("\n"); - } + addYamlString(yamlBuilder, currentComment, line, previousIndentation, commentId); + commentId++; + previousIndentation = 0; } } return yamlBuilder.toString(); } + /** + * Adds a YAML string to the given string builder + * + * @param yamlBuilder

The string builder used for building YAML

+ * @param currentComment

The comment to add as a YAML string

+ * @param line

The current line

+ * @param previousIndentation

The indentation of the current block comment

+ * @param commentId

The id of the comment

+ */ + private void addYamlString(StringBuilder yamlBuilder, List currentComment, String line, + int previousIndentation, int commentId) { + String trimmed = line.trim(); + //Write the full formatted comment to the StringBuilder + if (!currentComment.isEmpty()) { + int indentation = trimmed.isEmpty() ? previousIndentation : getIndentation(line); + generateCommentYAML(yamlBuilder, currentComment, commentId, indentation); + currentComment.clear(); + } + //Add the non-comment line assuming it isn't empty + if (!trimmed.isEmpty()) { + yamlBuilder.append(line).append("\n"); + } + } + + /** + * Adds the given comment to the given list + * + * @param commentParts

The list to add to

+ * @param comment

The comment to add

+ */ + private void addComment(List commentParts, String comment) { + if (comment.startsWith("# ")) { + commentParts.add(comment.replaceFirst("# ", START_OF_COMMENT_LINE)); + } else { + commentParts.add(comment.replaceFirst("#", START_OF_COMMENT_LINE)); + } + } + /** * Generates a YAML-compatible string for one comment block * @@ -114,36 +140,49 @@ public class StargateYamlConfiguration extends YamlConfiguration { */ private String convertYAMLMappingsToComments(String yamlString) { StringBuilder finalText = new StringBuilder(); - boolean isReadingCommentBlock = false; - int commentIndentation = 0; - for (String line : yamlString.split("\n")) { + + String[] lines = yamlString.split("\n"); + for (int currentIndex = 0; currentIndex < lines.length; currentIndex++) { + String line = lines[currentIndex]; String possibleComment = line.trim(); - if (isReadingCommentBlock && line.contains(END_OF_COMMENT)) { - //Skip the line signifying the end of a comment - isReadingCommentBlock = false; - } else if (possibleComment.startsWith(START_OF_COMMENT)) { - //Skip the comment start line, and start comment parsing - isReadingCommentBlock = true; - //Get the indentation to use for the comment block - commentIndentation = getIndentation(line); + if (possibleComment.startsWith(START_OF_COMMENT)) { //Add an empty line before every comment block finalText.append("\n"); - } else if (line.isEmpty() && !isReadingCommentBlock) { - //Output the empty line as-is, as it's not part of a comment - finalText.append("\n"); - } else if (isReadingCommentBlock) { - possibleComment = possibleComment.replace(START_OF_COMMENT_LINE, ""); - //Output the comment with correct indentation - finalText.append(addIndentation(commentIndentation)).append("# ").append(possibleComment).append("\n"); + currentIndex = readComment(finalText, lines, currentIndex + 1, getIndentation(line)); } else { //Output the configuration key finalText.append(line).append("\n"); } } + return finalText.toString().trim(); } + /** + * Fully reads a comment + * + * @param builder

The string builder to write to

+ * @param lines

The lines to read from

+ * @param startIndex

The index to start reading from

+ * @param commentIndentation

The indentation of the read comment

+ * @return

The index containing the next non-comment line

+ */ + private int readComment(StringBuilder builder, String[] lines, int startIndex, int commentIndentation) { + for (int currentIndex = startIndex; currentIndex < lines.length; currentIndex++) { + String line = lines[currentIndex]; + String possibleComment = line.trim(); + if (!line.contains(END_OF_COMMENT)) { + possibleComment = possibleComment.replace(START_OF_COMMENT_LINE, ""); + builder.append(addIndentation(commentIndentation)).append("# ").append(possibleComment).append("\n"); + } else { + return currentIndex; + } + } + + return startIndex; + } + /** * Gets a string containing the given indentation * From 9a215a7c119238f68a9847bcc05ba55152d88e43 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Fri, 21 Apr 2023 15:10:20 +0200 Subject: [PATCH 10/10] Attempts to make SonarCloud happier --- src/main/java/net/knarcraft/stargate/Stargate.java | 12 ++++++------ .../knarcraft/stargate/config/StargateConfig.java | 12 ++++-------- .../stargate/config/StargateYamlConfiguration.java | 6 +++++- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/knarcraft/stargate/Stargate.java b/src/main/java/net/knarcraft/stargate/Stargate.java index 8dd8709..1b208ba 100644 --- a/src/main/java/net/knarcraft/stargate/Stargate.java +++ b/src/main/java/net/knarcraft/stargate/Stargate.java @@ -74,7 +74,7 @@ along with this program. If not, see . @SuppressWarnings("unused") public class Stargate extends JavaPlugin { - private static final String configFileName = "config.yml"; + private static final String CONFIG_FILE_NAME = "config.yml"; private static final Queue blockChangeRequestQueue = new LinkedList<>(); private static final Queue chunkUnloadQueue = new PriorityQueue<>(); @@ -353,7 +353,7 @@ public class Stargate extends JavaPlugin { super.reloadConfig(); this.configuration = new StargateYamlConfiguration(); try { - this.configuration.load(new File(getDataFolder(), configFileName)); + this.configuration.load(new File(getDataFolder(), CONFIG_FILE_NAME)); } catch (IOException | InvalidConfigurationException e) { logSevere("Unable to load the configuration! Message: " + e.getMessage()); } @@ -363,7 +363,7 @@ public class Stargate extends JavaPlugin { public void saveConfig() { super.saveConfig(); try { - this.configuration.save(new File(getDataFolder(), configFileName)); + this.configuration.save(new File(getDataFolder(), CONFIG_FILE_NAME)); } catch (IOException e) { logSevere("Unable to save the configuration! Message: " + e.getMessage()); } @@ -381,15 +381,15 @@ public class Stargate extends JavaPlugin { @Override public void onEnable() { - stargate = this; - logger = getLogger(); + Stargate.stargate = this; + Stargate.logger = getLogger(); this.saveDefaultConfig(); this.getConfig(); PluginDescriptionFile pluginDescriptionFile = this.getDescription(); pluginManager = getServer().getPluginManager(); this.configuration = new StargateYamlConfiguration(); try { - this.configuration.load(new File(getDataFolder(), configFileName)); + this.configuration.load(new File(getDataFolder(), CONFIG_FILE_NAME)); } catch (IOException | InvalidConfigurationException e) { getLogger().log(Level.SEVERE, e.getMessage()); } diff --git a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java index dce9109..5569e4d 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateConfig.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateConfig.java @@ -549,10 +549,8 @@ public final class StargateConfig { createMissingFolder(new File(portalFolder), "Unable to create portal directory"); File newFile = new File(portalFolder, Stargate.getInstance().getServer().getWorlds().get(0).getName() + ".db"); - if (!newFile.exists() && !newFile.getParentFile().exists()) { - if (!newFile.getParentFile().mkdirs()) { - logger.severe("Unable to create portal database folder: " + newFile.getParentFile().getPath()); - } + if (!newFile.exists() && !newFile.getParentFile().exists() && !newFile.getParentFile().mkdirs()) { + logger.severe("Unable to create portal database folder: " + newFile.getParentFile().getPath()); } } @@ -563,10 +561,8 @@ public final class StargateConfig { * @param errorMessage

The error message to display if unable to create the folder

*/ private void createMissingFolder(File folder, String errorMessage) { - if (!folder.exists()) { - if (!folder.mkdirs()) { - logger.severe(errorMessage); - } + if (!folder.exists() && !folder.mkdirs()) { + logger.severe(errorMessage); } } diff --git a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java index 9e7bfd0..085c3b2 100644 --- a/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java +++ b/src/main/java/net/knarcraft/stargate/config/StargateYamlConfiguration.java @@ -10,7 +10,11 @@ import java.util.ArrayList; import java.util.List; /** - * A YAML configuration which keeps all comments + * A YAML configuration which retains all comments + * + *

This configuration converts all comments to YAML values when loaded, which all start with comment_. When saved, + * those YAML values are converted to normal text comments. This ensures that the comments aren't removed by the + * YamlConfiguration during its parsing.

* * @author Thorin */