From 92284c7520ea27ee442527a311a499ca5d51bfbb Mon Sep 17 00:00:00 2001 From: Alexander Noyle Date: Tue, 24 Mar 2026 11:31:07 -0400 Subject: [PATCH] Fix config loading to be read-only and file-backed --- .../GameModeInventories.java | 29 +++++++++++++++++++ .../GameModeInventoriesConfig.java | 13 +++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventories.java b/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventories.java index 7c0039a..ab2d2e3 100644 --- a/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventories.java +++ b/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventories.java @@ -1,6 +1,7 @@ package me.eccentric_nz.gamemodeinventories; import com.zaxxer.hikari.HikariDataSource; +import java.io.File; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; @@ -15,6 +16,8 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.World; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitTask; @@ -36,6 +39,7 @@ public class GameModeInventories extends JavaPlugin { private GMIDebug db_level; private String prefix; private HikariDataSource dataSource; + private FileConfiguration canonicalConfig; @Override public void onDisable() { @@ -54,6 +58,11 @@ public class GameModeInventories extends JavaPlugin { public void onEnable() { plugin = this; PluginManager pm = Bukkit.getServer().getPluginManager(); + loadCanonicalConfig(); + if (canonicalConfig == null) { + pm.disablePlugin(this); + return; + } Version bukkitversion = getServerVersion(getServer().getVersion()); Version minversion = new Version("1.13"); // check CraftBukkit version @@ -122,6 +131,26 @@ public class GameModeInventories extends JavaPlugin { } } + private void loadCanonicalConfig() { + File configFile = new File(getDataFolder(), "config.yml"); + if (!configFile.exists()) { + getLogger() + .log( + Level.SEVERE, + "config.yml was not found at " + + configFile.getAbsolutePath() + + ". This plugin only reads config.yml and will not generate or modify it."); + canonicalConfig = null; + return; + } + canonicalConfig = YamlConfiguration.loadConfiguration(configFile); + } + + @Override + public FileConfiguration getConfig() { + return (canonicalConfig != null) ? canonicalConfig : super.getConfig(); + } + private Version getServerVersion(String s) { Pattern pat = Pattern.compile("\\((.+?)\\)", Pattern.DOTALL); Matcher mat = pat.matcher(s); diff --git a/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventoriesConfig.java b/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventoriesConfig.java index 743782a..f10ec62 100644 --- a/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventoriesConfig.java +++ b/src/main/java/me/eccentric_nz/gamemodeinventories/GameModeInventoriesConfig.java @@ -10,7 +10,6 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; import org.bukkit.configuration.file.FileConfiguration; -import org.bukkit.configuration.file.YamlConfiguration; /** * @author eccentric_nz @@ -18,7 +17,6 @@ import org.bukkit.configuration.file.YamlConfiguration; public class GameModeInventoriesConfig { private final GameModeInventories plugin; - private final FileConfiguration config; private final File configFile; HashMap strOptions = new HashMap<>(); HashMap intOptions = new HashMap<>(); @@ -32,7 +30,6 @@ public class GameModeInventoriesConfig { public GameModeInventoriesConfig(GameModeInventories plugin) { this.plugin = plugin; configFile = new File(plugin.getDataFolder(), "config.yml"); - config = YamlConfiguration.loadConfiguration(configFile); // string strOptions.put("debug_level", "ERROR"); strOptions.put("storage.mysql.server", "localhost"); @@ -142,6 +139,16 @@ public class GameModeInventoriesConfig { } public void checkConfig() { + if (!configFile.exists()) { + plugin.getLogger() + .log( + Level.SEVERE, + "config.yml was not found at " + + configFile.getAbsolutePath() + + ". This plugin only reads config.yml and will not generate or modify it."); + return; + } + FileConfiguration config = plugin.getConfig(); int missing = 0; // string values for (Map.Entry entry : strOptions.entrySet()) { -- 2.47.3