Files
WeatherChanger/common/src/main/java/me/lucaslah/weatherchanger/WeatherChanger.java

154 lines
4.3 KiB
Java

package me.lucaslah.weatherchanger;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import me.lucaslah.weatherchanger.command.CommandManager;
import me.lucaslah.weatherchanger.commands.WeatherChangerCommand;
import me.lucaslah.weatherchanger.config.WcConfig;
import me.lucaslah.weatherchanger.config.WcMode;
import me.lucaslah.weatherchanger.keybinding.KeybindingManager;
import me.lucaslah.weatherchanger.keys.ToggleClearKey;
import me.lucaslah.weatherchanger.keys.ToggleOffKey;
import me.lucaslah.weatherchanger.keys.ToggleRainKey;
import me.lucaslah.weatherchanger.keys.ToggleThunderKey;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.nio.file.Files;
import java.util.Objects;
public class WeatherChanger {
private static final Gson gson = new GsonBuilder().setPrettyPrinting().create();
private static WcMode currentMode = WcMode.OFF;
private static WeatherChangerPlatform platform;
private static KeybindingManager keybindingManager;
private static CommandManager commandManager;
public static void init(WeatherChangerPlatform platform) {
WeatherChanger.platform = platform;
boolean fileCreated = false;
File configPath = getConfigFile();
if (!configPath.exists()) {
try {
fileCreated = configPath.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if (fileCreated) {
writeConfig();
} else {
loadConfig();
}
keybindingManager = new KeybindingManager();
commandManager = new CommandManager();
keybindingManager
.add(new ToggleClearKey())
.add(new ToggleOffKey())
.add(new ToggleRainKey())
.add(new ToggleThunderKey());
commandManager.add(new WeatherChangerCommand());
}
private static void loadConfig() {
Reader reader;
try {
reader = Files.newBufferedReader(getConfigFile().toPath());
} catch (IOException e) {
throw new RuntimeException(e);
}
WcConfig config = gson.fromJson(reader, WcConfig.class);
if (!Objects.equals(config.getVersion(), "1.0.0")) {
throw new RuntimeException("Invalid weather changer config version! Try removing the config file and try again.");
}
currentMode = config.getMode();
try {
reader.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static void writeConfig() {
WcConfig config = new WcConfig();
config.setMode(currentMode);
config.setVersion("1.0.0");
Writer writer;
try {
writer = Files.newBufferedWriter(getConfigFile().toPath());
} catch (IOException e) {
throw new RuntimeException(e);
}
gson.toJson(config, writer);
try {
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static File getConfigFile() {
return platform.getConfigDirectory().resolve("weather-changer.json").toFile();
}
/**
* Reloads the config file from disk
* @return if the reload was successful
*/
public static boolean reloadConfig() {
if (getConfigFile().exists() && getConfigFile().isFile()) {
loadConfig();
return true;
}
return false;
}
/**
* Sets the current mode
* @param mode the mode
*/
public static void setMode(WcMode mode) {
currentMode = mode;
}
public static WcMode getMode() {
return currentMode;
}
/**
* Call on shutdown
*/
public static void shutdown() {
writeConfig();
}
public static KeybindingManager getKeybindingManager() {
return keybindingManager;
}
public static CommandManager getCommandManager() {
return commandManager;
}
public static void sendClientMessage(Text message) {
MinecraftClient.getInstance().inGameHud.getChatHud().addMessage(message);
}
}