Initial commit - DimensionAccess 1.0.0

This commit is contained in:
jessy-david-dev
2026-06-11 17:47:01 +02:00
commit 61082d00ef
12 changed files with 496 additions and 0 deletions
@@ -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;
}
}