From ad91575cc6779701adc54c5f729ae0ac48b72b0b Mon Sep 17 00:00:00 2001 From: Mason Hunt Date: Wed, 27 Mar 2024 23:46:32 +1100 Subject: [PATCH] Version 1.2 - Config GUI --- .../com/brittank88/clipshot/ClientProxy.java | 3 -- .../com/brittank88/clipshot/ClipShot.java | 14 ++++-- .../com/brittank88/clipshot/CommonProxy.java | 9 ++++ .../java/com/brittank88/clipshot/Config.java | 22 --------- .../clipshot/ScreenshotHandler.java | 4 +- .../clipshot/client/gui/GuiConfig.java | 22 +++++++++ .../clipshot/client/gui/GuiFactory.java | 32 +++++++++++++ .../clipshot/config/ConfigurationHandler.java | 45 +++++++++++++++++++ .../mixins/client/ScreenShotHelperMixin.java | 4 +- 9 files changed, 123 insertions(+), 32 deletions(-) delete mode 100644 src/main/java/com/brittank88/clipshot/Config.java create mode 100644 src/main/java/com/brittank88/clipshot/client/gui/GuiConfig.java create mode 100644 src/main/java/com/brittank88/clipshot/client/gui/GuiFactory.java create mode 100644 src/main/java/com/brittank88/clipshot/config/ConfigurationHandler.java diff --git a/src/main/java/com/brittank88/clipshot/ClientProxy.java b/src/main/java/com/brittank88/clipshot/ClientProxy.java index 2dd8641..507247b 100644 --- a/src/main/java/com/brittank88/clipshot/ClientProxy.java +++ b/src/main/java/com/brittank88/clipshot/ClientProxy.java @@ -11,8 +11,5 @@ public class ClientProxy extends CommonProxy { @Override public void preInit(FMLPreInitializationEvent event) { super.preInit(event); - - // Synchronize the configuration file. - Config.synchronizeConfiguration(event.getSuggestedConfigurationFile()); } } diff --git a/src/main/java/com/brittank88/clipshot/ClipShot.java b/src/main/java/com/brittank88/clipshot/ClipShot.java index 8c0a36f..28f3203 100644 --- a/src/main/java/com/brittank88/clipshot/ClipShot.java +++ b/src/main/java/com/brittank88/clipshot/ClipShot.java @@ -1,5 +1,7 @@ package com.brittank88.clipshot; +import static com.brittank88.clipshot.ClipShot.GUI_FACTORY; + import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -8,11 +10,17 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; -@Mod(modid = ClipShot.MODID, version = Tags.VERSION, name = "ClipShot", acceptedMinecraftVersions = "[1.7.10]") +@Mod( + modid = ClipShot.MOD_ID, + version = Tags.VERSION, + name = "ClipShot", + acceptedMinecraftVersions = "[1.7.10]", + guiFactory = GUI_FACTORY) public class ClipShot { - public static final String MODID = "clipshot"; - public static final Logger LOG = LogManager.getLogger(MODID); + public static final String GUI_FACTORY = "com.brittank88.clipshot.client.gui.GuiFactory"; + public static final String MOD_ID = "clipshot"; + public static final Logger LOG = LogManager.getLogger(MOD_ID); @SidedProxy(clientSide = "com.brittank88.clipshot.ClientProxy", serverSide = "com.brittank88.clipshot.CommonProxy") @SuppressWarnings("unused") diff --git a/src/main/java/com/brittank88/clipshot/CommonProxy.java b/src/main/java/com/brittank88/clipshot/CommonProxy.java index 9f71dca..60f0f7d 100644 --- a/src/main/java/com/brittank88/clipshot/CommonProxy.java +++ b/src/main/java/com/brittank88/clipshot/CommonProxy.java @@ -3,6 +3,9 @@ import java.awt.HeadlessException; import java.awt.Toolkit; +import com.brittank88.clipshot.config.ConfigurationHandler; + +import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; @@ -15,6 +18,12 @@ public void preInit(FMLPreInitializationEvent event) { if (event.getSide() .isServer()) ClipShot.LOG.warn("ClipShot will do nothing on a dedicated server as it is a client-only mod!"); + + // Initialise the configuration file. + ConfigurationHandler.init(event.getSuggestedConfigurationFile()); + FMLCommonHandler.instance() + .bus() + .register(new ConfigurationHandler()); } // load "Do your mod setup. Build whatever data structures you care about. Register recipes." (Remove if not needed) diff --git a/src/main/java/com/brittank88/clipshot/Config.java b/src/main/java/com/brittank88/clipshot/Config.java deleted file mode 100644 index 5dd3f3e..0000000 --- a/src/main/java/com/brittank88/clipshot/Config.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.brittank88.clipshot; - -import java.io.File; - -import net.minecraftforge.common.config.Configuration; - -public class Config { - - public static Boolean saveFile = true; - - public static void synchronizeConfiguration(File configFile) { - Configuration configuration = new Configuration(configFile); - - saveFile = configuration.getBoolean( - "saveFile", - Configuration.CATEGORY_GENERAL, - saveFile, - "Should the screenshot still be saved as a file?"); - - if (configuration.hasChanged()) configuration.save(); - } -} diff --git a/src/main/java/com/brittank88/clipshot/ScreenshotHandler.java b/src/main/java/com/brittank88/clipshot/ScreenshotHandler.java index 78617b1..ca8eed6 100644 --- a/src/main/java/com/brittank88/clipshot/ScreenshotHandler.java +++ b/src/main/java/com/brittank88/clipshot/ScreenshotHandler.java @@ -1,6 +1,6 @@ package com.brittank88.clipshot; -import static com.brittank88.clipshot.ClipShot.MODID; +import static com.brittank88.clipshot.ClipShot.MOD_ID; import static net.minecraft.client.Minecraft.isRunningOnMac; import java.awt.Toolkit; @@ -16,7 +16,7 @@ public abstract class ScreenshotHandler { - public static final Logger LOG = LogManager.getLogger(MODID + ".DefaultHandler"); + public static final Logger LOG = LogManager.getLogger(MOD_ID + ".DefaultHandler"); public static void handleScreenshot(BufferedImage bufferedImage) { if (isRunningOnMac) { diff --git a/src/main/java/com/brittank88/clipshot/client/gui/GuiConfig.java b/src/main/java/com/brittank88/clipshot/client/gui/GuiConfig.java new file mode 100644 index 0000000..9cb62c2 --- /dev/null +++ b/src/main/java/com/brittank88/clipshot/client/gui/GuiConfig.java @@ -0,0 +1,22 @@ +package com.brittank88.clipshot.client.gui; + +import static com.brittank88.clipshot.config.ConfigurationHandler.*; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.common.config.Configuration; + +import com.brittank88.clipshot.ClipShot; + +public class GuiConfig extends cpw.mods.fml.client.config.GuiConfig { + + public GuiConfig(GuiScreen guiScreen) { + super( + guiScreen, + new ConfigElement<>(getConfiguration().getCategory(Configuration.CATEGORY_GENERAL)).getChildElements(), + ClipShot.MOD_ID, + false, + false, + GuiConfig.getAbridgedConfigPath(getConfiguration().toString())); + } +} diff --git a/src/main/java/com/brittank88/clipshot/client/gui/GuiFactory.java b/src/main/java/com/brittank88/clipshot/client/gui/GuiFactory.java new file mode 100644 index 0000000..9ab8578 --- /dev/null +++ b/src/main/java/com/brittank88/clipshot/client/gui/GuiFactory.java @@ -0,0 +1,32 @@ +package com.brittank88.clipshot.client.gui; + +import java.util.Set; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; + +import cpw.mods.fml.client.IModGuiFactory; + +@SuppressWarnings("unused") +public class GuiFactory implements IModGuiFactory { + + @Override + public void initialize(Minecraft minecraftInstance) { + + } + + @Override + public Class mainConfigGuiClass() { + return GuiConfig.class; + } + + @Override + public Set runtimeGuiCategories() { + return null; + } + + @Override + public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) { + return null; + } +} diff --git a/src/main/java/com/brittank88/clipshot/config/ConfigurationHandler.java b/src/main/java/com/brittank88/clipshot/config/ConfigurationHandler.java new file mode 100644 index 0000000..99ae354 --- /dev/null +++ b/src/main/java/com/brittank88/clipshot/config/ConfigurationHandler.java @@ -0,0 +1,45 @@ +package com.brittank88.clipshot.config; + +import java.io.File; + +import net.minecraftforge.common.config.Configuration; + +import com.brittank88.clipshot.ClipShot; + +import cpw.mods.fml.client.event.ConfigChangedEvent; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; + +public class ConfigurationHandler { + + public static Configuration configuration; + + // Initially acts as the default value, but will be updated from the configuration file. + public static Boolean saveScreenshotsAsFiles = true; + + public static void init(File configFile) { + if (configuration == null) { + configuration = new Configuration(configFile); + loadConfiguration(); + } + } + + private static void loadConfiguration() { + saveScreenshotsAsFiles = configuration.getBoolean( + "Save Screenshots as Files", + Configuration.CATEGORY_GENERAL, + saveScreenshotsAsFiles, + "Determines if screenshots are also saved as files, or ONLY copied to the clipboard."); + + if (configuration.hasChanged()) configuration.save(); + } + + @SubscribeEvent + @SuppressWarnings("unused") + public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) { + if (event.modID.equals(ClipShot.MOD_ID)) loadConfiguration(); + } + + public static Configuration getConfiguration() { + return configuration; + } +} diff --git a/src/main/java/com/brittank88/clipshot/mixins/client/ScreenShotHelperMixin.java b/src/main/java/com/brittank88/clipshot/mixins/client/ScreenShotHelperMixin.java index 06a257b..9648199 100644 --- a/src/main/java/com/brittank88/clipshot/mixins/client/ScreenShotHelperMixin.java +++ b/src/main/java/com/brittank88/clipshot/mixins/client/ScreenShotHelperMixin.java @@ -13,8 +13,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import com.brittank88.clipshot.Config; import com.brittank88.clipshot.ScreenshotHandler; +import com.brittank88.clipshot.config.ConfigurationHandler; import com.llamalad7.mixinextras.sugar.Local; @Mixin(ScreenShotHelper.class) @@ -32,7 +32,7 @@ private static void saveScreenshot(File p_148259_0_, String p_148259_1_, int p_1 ScreenshotHandler.handleScreenshot(bufferedImage); - if (!Config.saveFile) { + if (!ConfigurationHandler.saveScreenshotsAsFiles) { cir.setReturnValue(new ChatComponentTranslation("screenshot.copy_success")); cir.cancel(); }