Initial commit - DimensionAccess 1.0.0
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
package fr.jessydavid.dimension_access.config;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
import fr.jessydavid.dimension_access.DimensionAccessMod;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.Writer;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class DimensionAccessConfig {
|
||||
|
||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
||||
private static final String CONFIG_FILE = "dimension_access.json";
|
||||
|
||||
private final Path configPath;
|
||||
private final Set<String> disabledDimensions = Collections.synchronizedSet(new HashSet<>());
|
||||
|
||||
public DimensionAccessConfig() {
|
||||
this.configPath = FabricLoader.getInstance().getConfigDir().resolve(CONFIG_FILE);
|
||||
}
|
||||
|
||||
public void load() {
|
||||
if (!Files.exists(configPath)) {
|
||||
DimensionAccessMod.LOGGER.info("[DimensionAccess] No config found, creating default at: {}", configPath);
|
||||
save();
|
||||
return;
|
||||
}
|
||||
|
||||
try (Reader reader = Files.newBufferedReader(configPath)) {
|
||||
JsonObject root = JsonParser.parseReader(reader).getAsJsonObject();
|
||||
JsonArray disabled = root.getAsJsonArray("disabled_dimensions");
|
||||
|
||||
synchronized (disabledDimensions) {
|
||||
disabledDimensions.clear();
|
||||
if (disabled != null) {
|
||||
disabled.forEach(el -> disabledDimensions.add(el.getAsString()));
|
||||
}
|
||||
}
|
||||
|
||||
DimensionAccessMod.LOGGER.info("[DimensionAccess] Config loaded: {} dimension(s) disabled.",
|
||||
disabledDimensions.size());
|
||||
} catch (IOException e) {
|
||||
DimensionAccessMod.LOGGER.error("[DimensionAccess] Failed to load config: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public void save() {
|
||||
JsonObject root = new JsonObject();
|
||||
JsonArray disabled = new JsonArray();
|
||||
|
||||
synchronized (disabledDimensions) {
|
||||
disabledDimensions.stream().sorted().forEach(disabled::add);
|
||||
}
|
||||
|
||||
root.add("disabled_dimensions", disabled);
|
||||
|
||||
try {
|
||||
Files.createDirectories(configPath.getParent());
|
||||
try (Writer writer = Files.newBufferedWriter(configPath)) {
|
||||
GSON.toJson(root, writer);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
DimensionAccessMod.LOGGER.error("[DimensionAccess] Failed to save config: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public boolean disableDimension(String dimensionId) {
|
||||
boolean added = disabledDimensions.add(dimensionId);
|
||||
if (added) save();
|
||||
return added;
|
||||
}
|
||||
|
||||
public boolean enableDimension(String dimensionId) {
|
||||
boolean removed = disabledDimensions.remove(dimensionId);
|
||||
if (removed) save();
|
||||
return removed;
|
||||
}
|
||||
|
||||
public boolean isDimensionDisabled(String dimensionId) {
|
||||
return disabledDimensions.contains(dimensionId);
|
||||
}
|
||||
|
||||
public Set<String> getDisabledDimensions() {
|
||||
synchronized (disabledDimensions) {
|
||||
return Collections.unmodifiableSet(new HashSet<>(disabledDimensions));
|
||||
}
|
||||
}
|
||||
|
||||
public Path getConfigPath() {
|
||||
return configPath;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user