Skip to content

Commit

Permalink
Create the only singleton in the code, MinecraftEmote
Browse files Browse the repository at this point in the history
  • Loading branch information
Vinrobot committed Aug 10, 2023
1 parent edd8087 commit 70bdeaa
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package net.vinrobot.mcemote.client;

import net.fabricmc.api.ClientModInitializer;
import net.vinrobot.mcemote.MinecraftEmote;
import net.vinrobot.mcemote.MinecraftEmoteMod;
import net.vinrobot.mcemote.client.font.Emote;
import net.vinrobot.mcemote.client.helpers.ListHelper;
import net.vinrobot.mcemote.client.providers.IEmoteProvider;
import net.vinrobot.mcemote.client.text.EmotesManager;
import net.vinrobot.mcemote.config.Configuration;
import net.vinrobot.mcemote.config.ConfigurationService;
import webpdecoderjn.WebPLoader;

import java.io.IOException;
Expand All @@ -27,7 +27,7 @@ public void onInitializeClient() {
MinecraftEmoteMod.LOGGER.error("Failed to initialize WebPDecoder", e);
}

final Configuration config = loadConfiguration(MinecraftEmoteMod.getConfigService());
final Configuration config = MinecraftEmote.getInstance().getConfigManager().getConfig();
final ServiceLoader<IEmoteProvider> serviceLoader = ServiceLoader.load(IEmoteProvider.class);
final List<IEmoteProvider> providers = ListHelper.sort(serviceLoader);

Expand All @@ -52,14 +52,4 @@ public void onInitializeClient() {
}
}
}

private Configuration loadConfiguration(final ConfigurationService service) {
try {
MinecraftEmoteMod.LOGGER.info("Loading config");
return service.load();
} catch (final IOException e) {
MinecraftEmoteMod.LOGGER.error("Failed to load config", e);
return service.create();
}
}
}
27 changes: 27 additions & 0 deletions src/main/java/net/vinrobot/mcemote/MinecraftEmote.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package net.vinrobot.mcemote;

import net.fabricmc.loader.api.FabricLoader;
import net.vinrobot.mcemote.config.ConfigurationManager;
import net.vinrobot.mcemote.config.ConfigurationService;
import net.vinrobot.mcemote.config.impl.file.FileConfigurationService;

import java.nio.file.Path;

public class MinecraftEmote {
public static MinecraftEmote getInstance() {
return MinecraftEmoteMod.getMinecraftEmote();
}

private final ConfigurationManager configManager;

protected MinecraftEmote() {
final Path configDir = FabricLoader.getInstance().getConfigDir();
final Path configFile = configDir.resolve("mcemote.json");
final ConfigurationService configService = new FileConfigurationService(configFile);
this.configManager = new ConfigurationManager(configService);
}

public ConfigurationManager getConfigManager() {
return this.configManager;
}
}
18 changes: 5 additions & 13 deletions src/main/java/net/vinrobot/mcemote/MinecraftEmoteMod.java
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
package net.vinrobot.mcemote;

import net.fabricmc.api.ModInitializer;
import net.fabricmc.loader.api.FabricLoader;
import net.vinrobot.mcemote.config.ConfigurationService;
import net.vinrobot.mcemote.config.impl.file.FileConfigurationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.nio.file.Path;

public class MinecraftEmoteMod implements ModInitializer {
// This logger is used to write text to the console and the log file.
// It is considered best practice to use your mod id as the logger's name.
// That way, it's clear which mod wrote info, warnings, and errors.
public static final Logger LOGGER = LoggerFactory.getLogger("MCEmote");

private static ConfigurationService configService;
private static MinecraftEmote MINECRAFT_EMOTE;

public static ConfigurationService getConfigService() {
ConfigurationService ret = configService;
public static MinecraftEmote getMinecraftEmote() {
final MinecraftEmote ret = MINECRAFT_EMOTE;
if (ret == null) {
throw new RuntimeException("Configuration service not yet available!");
throw new RuntimeException("Minecraft Emote not yet available!");
}
return ret;
}
Expand All @@ -32,9 +27,6 @@ public void onInitialize() {
// Proceed with mild caution.

LOGGER.info("Hello Fabric world!");

final Path configDir = FabricLoader.getInstance().getConfigDir();
final Path configFile = configDir.resolve("mcemote.json");
configService = new FileConfigurationService(configFile);
MINECRAFT_EMOTE = new MinecraftEmote();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package net.vinrobot.mcemote.config;

import java.io.IOException;

import static net.vinrobot.mcemote.MinecraftEmoteMod.LOGGER;

public class ConfigurationManager {
private final ConfigurationService configService;
private Configuration configuration;

public ConfigurationManager(final ConfigurationService configService) {
this.configService = configService;
}

public Configuration getConfig() {
final Configuration config = this.configuration;
return config != null ? config : this.load();
}

public Configuration load() {
final ConfigurationService service = this.configService;
try {
LOGGER.info("Loading config");
return this.configuration = service.load();
} catch (final IOException e) {
LOGGER.error("Failed to load config", e);
return this.configuration = service.create();
}
}

public void save() {
final Configuration config = this.configuration;
if (config != null) {
try {
this.configService.save(config);
} catch (final IOException e) {
LOGGER.error("Failed to save config", e);
}
}
}

public void reset() {
this.configuration = this.configService.create();
}
}

0 comments on commit 70bdeaa

Please sign in to comment.