Compare commits

...
2 Commits
6 changed files with 190 additions and 7 deletions
+1 -1
View File
@@ -8,7 +8,7 @@ yarn_mappings=1.16.5+build.5
loader_version=0.11.2
# Mod Properties
mod_version=1.0.2
mod_version=1.0.4
maven_group=draylar
archives_base_name=omega-config
@@ -103,7 +103,7 @@ public class OmegaConfig {
// Cursed time.
List<String> lines = new ArrayList<>(Arrays.asList(json.split("\n")));
Map<Integer, String> insertions = new HashMap<>();
Map<Integer, String> insertions = new TreeMap<>();
Map<String, String> keyToComments = new HashMap<>();
// populate key -> comments map
@@ -136,14 +136,20 @@ public class OmegaConfig {
}
// insertions -> list
insertions.forEach(lines::add);
for (Map.Entry<Integer, String> entry : insertions.entrySet()) {
Integer key = entry.getKey();
String value = entry.getValue();
lines.add(key, value);
}
// list -> string
StringBuilder res = new StringBuilder();
lines.forEach(str -> res.append(String.format("%s%n", str)));
try {
Files.write(getConfigPath(instance), res.toString().getBytes());
Path configPath = getConfigPath(instance);
configPath.toFile().getParentFile().mkdirs();
Files.write(configPath, res.toString().getBytes());
} catch (IOException ioException) {
LOGGER.error(ioException);
LOGGER.info(String.format("Write error, using default values for config %s.", configClass.toString()));
@@ -195,7 +201,7 @@ public class OmegaConfig {
}
public static Path getConfigPath(Config config) {
return Paths.get(FabricLoader.getInstance().getConfigDir().toString(), String.format("%s.json", config.getName()));
return Paths.get(FabricLoader.getInstance().getConfigDir().toString(), config.getDirectory(), String.format("%s.%s", config.getName(), config.getExtension()));
}
public static boolean configExists(Config config) {
@@ -78,7 +78,33 @@ public interface Config {
return null;
}
default boolean hasMenu() {
return true;
/**
* Returns the file extension of this config.
*
* <p>
* The file extension is used while serializing this config to a local file.
* The primary use-case of switching this would be supporting existing config files
* when porting from other json5 config libraries.
*
* @return the file extension of this config
*/
default String getExtension() {
return "json";
}
/**
* Returns the directory of this config, assuming the base directory is the instance config directory.
*
* <p>
* By default, a config such as 'my_config' will appear at /config/my_config.json.
* If this method specifies a directory, such as 'configurations',
* the config file will appear at /config/configurations/my_config.json.
*
* Nested directories can be specified by using a string such as 'configurations/client'.
*
* @return the directory of this config
*/
default String getDirectory() {
return "";
}
}
@@ -0,0 +1,18 @@
package draylar.omegatest;
import draylar.omegaconfig.api.Config;
public class NestedConfig implements Config {
public boolean test = false;
@Override
public String getName() {
return "nested";
}
@Override
public String getDirectory() {
return "test";
}
}
@@ -0,0 +1,131 @@
package draylar.omegatest;
import draylar.omegaconfig.api.Comment;
import draylar.omegaconfig.api.Config;
public class NewTestConfig implements Config {
@Comment("Mo' Structures feature toggles.")
public Features features = new Features();
@Comment("Chances are once per the number of chunks. A Chance 500 makes a feature spawn every 500 chunks. Affected by biomes it spawns in and the chunk, so not all are proportional.")
public FeatureChances feature_chances = new FeatureChances();
@Comment("Structure toggles. These do not have chances, but in the future they may. ")
public Structures structures = new Structures();
@Comment("Structure chances. Seperation is the least amount of chunks that a structure will spawn from itself. Spacing is the maximum amount of chunks, and both are used to randomly spawn structures and can be tweaked.")
public StructureChances structureChances = new StructureChances();
@Override
public String getName() {
return "mostructures-config-v2";
}
public static class Features {
@Comment("Airplanes & Air Balloons")
public boolean air_features = true;
@Comment("Fallen Trees")
public boolean fallen_trees = true;
@Comment("Desert Features")
public boolean desert_features = true;
@Comment("Ruins")
public boolean ruins = true;
@Comment("Lamppost")
public boolean lamppost = true;
@Comment("Boulder")
public boolean boulder = true;
@Comment("Volcanic Vent")
public boolean volcanic_vent = true;
@Comment("Beach Features")
public boolean beach_features = true;
@Comment("Boats")
public boolean boats = true;
}
public static class FeatureChances {
@Comment("Airplanes & Air Balloons")
public int air_feature_chance = 4600;
@Comment("Fallen Trees")
public int fallen_trees_chance = 17;
@Comment("Desert Features")
public int desert_features_chance = 555;
@Comment("Ruins")
public int ruins_chance = 3500;
@Comment("Lamppost")
public int lamppost_chance = 100;
@Comment("Boulder")
public int boulder_chance = 4000;
@Comment("Volcanic Vent")
public int volcanic_vent_chance = 85;
@Comment("Beach Features")
public int beach_features_chance = 75;
@Comment("Boats")
public int boats_chance = 4000;
}
public static class Structures {
@Comment("Barnhouse")
public boolean barn_house = true;
@Comment("Jungle Pyramid")
public boolean jungle_pyramid = true;
@Comment("Big Pyramid")
public boolean big_pyramid = true;
@Comment("The Castle In The Sky")
public boolean the_castle_in_the_sky = true;
@Comment("Villager Tower")
public boolean villager_tower = true;
@Comment("Abandoned Churches")
public boolean abandoned_churches = true;
@Comment("Villager Market")
public boolean villager_market = true;
@Comment("Pillager Factory")
public boolean pillager_factory = true;
@Comment("Ice Tower")
public boolean ice_tower = true;
@Comment("Boar Hat Tavern")
public boolean tavern = true;
@Comment("Killer Bunny Castle")
public boolean killer_bunny_castle = true;
}
public static class StructureChances {
@Comment("Barn House")
public int barn_house_seperation = 16;
public int barn_house_spacing = 40;
@Comment("Big Pyramid")
public int big_pyramid_seperation = 5;
public int big_pyramid_spacing = 25;
@Comment("Jungle Pyramid")
public int jungle_pyramid_seperation = 5;
public int jungle_pyramid_spacing = 25;
@Comment("The Castle In The Sky")
public int the_castle_in_the_sky_seperation = 8;
public int the_castle_in_the_sky_spacing = 32;
@Comment("Villager Tower")
public int villager_tower_seperation = 16;
public int villager_tower_spacing = 40;
@Comment("Abandoned Church")
public int abandoned_church_seperation = 16;
public int abandoned_church_spacing = 40;
@Comment("Villager Market")
public int villager_market_seperation = 27;
public int villager_market_spacing = 50;
@Comment("Pillager Factory")
public int pillager_factory_seperation = 27;
public int pillager_factory_spacing = 50;
@Comment("Ice Tower")
public int ice_tower_seperation = 8;
public int ice_tower_spacing = 32;
@Comment("Boar Hat Tavern")
public int tavern_seperation = 16;
public int tavern_spacing = 46;
@Comment("Killer Bunny Castle")
public int killer_bunny_castle_seperation = 25;
public int killer_bunny_castle_spacing = 50;
}
@Override
public String getExtension() {
return "json5";
}
}
@@ -6,6 +6,8 @@ import net.fabricmc.api.ModInitializer;
public class OmegaTestMain implements ModInitializer {
public static final TestConfig CONFIG = OmegaConfig.register(TestConfig.class);
public static final NewTestConfig MO_CONFIG = OmegaConfig.register(NewTestConfig.class);
public static final NestedConfig NESTED = OmegaConfig.register(NestedConfig.class);
@Override
public void onInitialize() {