From df214cdb24c896a1cddf5750a8e79b3c8c23e3e7 Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 20 Nov 2021 20:24:00 +0300 Subject: [PATCH] Biome include lists --- src/main/java/ru/bclib/config/Config.java | 6 +++--- .../java/ru/bclib/config/ConfigKeeper.java | 21 ++++++++++++------- src/main/java/ru/bclib/config/Configs.java | 12 ++++++++++- src/main/java/ru/bclib/config/PathConfig.java | 1 - .../mixin/common/DimensionTypeMixin.java | 2 +- .../world/generator/BCLibEndBiomeSource.java | 8 +++++++ .../generator/BCLibNetherBiomeSource.java | 8 +++++++ .../world/generator/GeneratorOptions.java | 12 +++++++++++ 8 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/main/java/ru/bclib/config/Config.java b/src/main/java/ru/bclib/config/Config.java index ba2c8afb..a883116e 100644 --- a/src/main/java/ru/bclib/config/Config.java +++ b/src/main/java/ru/bclib/config/Config.java @@ -21,8 +21,8 @@ import java.util.List; import java.util.Map; public abstract class Config { + protected final static Map AUTO_SYNC_CONFIGS = new HashMap<>(); public static final String CONFIG_SYNC_PREFIX = "CONFIG_"; - protected final static Map autoSyncConfigs = new HashMap<>(); protected final ConfigKeeper keeper; protected final boolean autoSync; public final String configID; @@ -51,7 +51,7 @@ public abstract class Config { else DataExchangeAPI.addAutoSyncFile(aid.modID, aid.uniqueID, keeper.getConfigFile()); - autoSyncConfigs.put(aid, this); + AUTO_SYNC_CONFIGS.put(aid, this); BCLib.LOGGER.info("Added Config " + configID + " to auto sync (" + (diffContent?"content diff":"file hash") + ")"); } } @@ -70,7 +70,7 @@ public abstract class Config { } public static void reloadSyncedConfig(AutoSyncID aid, File file) { - Config cfg = autoSyncConfigs.get(aid); + Config cfg = AUTO_SYNC_CONFIGS.get(aid); if (cfg != null) { cfg.reload(); } diff --git a/src/main/java/ru/bclib/config/ConfigKeeper.java b/src/main/java/ru/bclib/config/ConfigKeeper.java index f3e6263e..e3711670 100644 --- a/src/main/java/ru/bclib/config/ConfigKeeper.java +++ b/src/main/java/ru/bclib/config/ConfigKeeper.java @@ -23,9 +23,9 @@ import java.util.function.Supplier; public final class ConfigKeeper { private final Map> configEntries = Maps.newHashMap(); - private JsonObject configObject; private final ConfigWriter writer; + private JsonObject configObject; private boolean changed = false; public ConfigKeeper(String modID, String group) { @@ -33,7 +33,7 @@ public final class ConfigKeeper { this.configObject = writer.load(); } - File getConfigFile() { + public File getConfigFile() { return this.writer.getConfigFile(); } @@ -141,7 +141,9 @@ public final class ConfigKeeper { } String paramKey = key.getEntry(); - paramKey += " [default: " + entry.getDefault() + "]"; + if (entry.hasDefaultInName()) { + paramKey += " [default: " + entry.getDefault() + "]"; + } this.changed |= entry.setLocation(obj, paramKey); } @@ -328,7 +330,6 @@ public final class ConfigKeeper { } public static class StringArrayEntry extends ArrayEntry { - public StringArrayEntry(List defaultValue) { super(defaultValue); } @@ -341,10 +342,14 @@ public final class ConfigKeeper { protected void add(JsonArray array, String el){ array.add(el); } + + @Override + protected boolean hasDefaultInName() { + return false; + } } public static class EnumEntry> extends Entry { - private final Type type; public EnumEntry(T defaultValue) { @@ -372,7 +377,6 @@ public final class ConfigKeeper { } public static abstract class RangeEntry> extends Entry { - private final T min, max; public RangeEntry(T defaultValue, T minVal, T maxVal) { @@ -396,7 +400,6 @@ public final class ConfigKeeper { } public static abstract class Entry { - protected final T defaultValue; protected Consumer writer; protected Supplier reader; @@ -448,5 +451,9 @@ public final class ConfigKeeper { public void setDefault() { this.setValue(defaultValue); } + + protected boolean hasDefaultInName() { + return true; + } } } diff --git a/src/main/java/ru/bclib/config/Configs.java b/src/main/java/ru/bclib/config/Configs.java index d5710c28..deac17d2 100644 --- a/src/main/java/ru/bclib/config/Configs.java +++ b/src/main/java/ru/bclib/config/Configs.java @@ -3,6 +3,9 @@ package ru.bclib.config; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import ru.bclib.BCLib; +import ru.bclib.config.ConfigKeeper.StringArrayEntry; + +import java.util.Collections; public class Configs { // Client and Server-Config must be the first entries. They are not part of the Auto-Sync process @@ -13,15 +16,22 @@ public class Configs { public static final PathConfig GENERATOR_CONFIG = new PathConfig(BCLib.MOD_ID, "generator", false); public static final PathConfig MAIN_CONFIG = new PathConfig(BCLib.MOD_ID, "main", true, true); - public static final String MAIN_PATCH_CATEGORY = "patches"; public static final PathConfig RECIPE_CONFIG = new PathConfig(BCLib.MOD_ID, "recipes"); public static final PathConfig BIOMES_CONFIG = new PathConfig(BCLib.MOD_ID, "biomes", false); + public static final String MAIN_PATCH_CATEGORY = "patches"; + public static void save() { MAIN_CONFIG.saveChanges(); RECIPE_CONFIG.saveChanges(); GENERATOR_CONFIG.saveChanges(); + initForcedConfig(); + } + + private static void initForcedConfig() { + BIOMES_CONFIG.keeper.registerEntry(new ConfigKey("end_biomes", "force_include"), new StringArrayEntry(Collections.EMPTY_LIST)); + BIOMES_CONFIG.keeper.registerEntry(new ConfigKey("nether_biomes", "force_include"), new StringArrayEntry(Collections.EMPTY_LIST)); BIOMES_CONFIG.saveChanges(); } } diff --git a/src/main/java/ru/bclib/config/PathConfig.java b/src/main/java/ru/bclib/config/PathConfig.java index 062e60ec..0bf8d1d3 100644 --- a/src/main/java/ru/bclib/config/PathConfig.java +++ b/src/main/java/ru/bclib/config/PathConfig.java @@ -6,7 +6,6 @@ import ru.bclib.config.ConfigKeeper.FloatRange; import ru.bclib.config.ConfigKeeper.IntegerRange; public class PathConfig extends Config { - public PathConfig(String modID, String group, boolean autoSync, boolean diffContent) { super(modID, group, autoSync, diffContent); } diff --git a/src/main/java/ru/bclib/mixin/common/DimensionTypeMixin.java b/src/main/java/ru/bclib/mixin/common/DimensionTypeMixin.java index 2826a052..7772d7f9 100644 --- a/src/main/java/ru/bclib/mixin/common/DimensionTypeMixin.java +++ b/src/main/java/ru/bclib/mixin/common/DimensionTypeMixin.java @@ -14,7 +14,7 @@ import ru.bclib.world.generator.BCLibEndBiomeSource; import ru.bclib.world.generator.BCLibNetherBiomeSource; import ru.bclib.world.generator.GeneratorOptions; -@Mixin(value = DimensionType.class, priority = 100) +@Mixin(value = DimensionType.class, priority = 10) public class DimensionTypeMixin { @Inject(method = "defaultNetherGenerator", at = @At("HEAD"), cancellable = true) private static void be_replaceNetherBiomeSource(Registry biomeRegistry, Registry chunkGeneratorSettingsRegistry, long seed, CallbackInfoReturnable info) { diff --git a/src/main/java/ru/bclib/world/generator/BCLibEndBiomeSource.java b/src/main/java/ru/bclib/world/generator/BCLibEndBiomeSource.java index 63f212f5..13d61a76 100644 --- a/src/main/java/ru/bclib/world/generator/BCLibEndBiomeSource.java +++ b/src/main/java/ru/bclib/world/generator/BCLibEndBiomeSource.java @@ -14,6 +14,7 @@ import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.synth.SimplexNoise; import ru.bclib.BCLib; import ru.bclib.api.BiomeAPI; +import ru.bclib.config.ConfigKeeper.StringArrayEntry; import ru.bclib.config.Configs; import ru.bclib.noise.OpenSimplexNoise; import ru.bclib.world.biomes.BCLBiome; @@ -87,8 +88,15 @@ public class BCLibEndBiomeSource extends BiomeSource { } private static List getBiomes(Registry biomeRegistry) { + List include = Configs.BIOMES_CONFIG.getEntry("force_include", "end_biomes", StringArrayEntry.class).getValue(); + return biomeRegistry.stream().filter(biome -> { ResourceLocation key = biomeRegistry.getKey(biome); + + if (include.contains(key.toString())) { + return true; + } + BCLBiome bclBiome = BiomeAPI.getBiome(key); if (bclBiome != BiomeAPI.EMPTY_BIOME) { if (bclBiome.hasParentBiome()) { diff --git a/src/main/java/ru/bclib/world/generator/BCLibNetherBiomeSource.java b/src/main/java/ru/bclib/world/generator/BCLibNetherBiomeSource.java index e8399e4e..82a981a0 100644 --- a/src/main/java/ru/bclib/world/generator/BCLibNetherBiomeSource.java +++ b/src/main/java/ru/bclib/world/generator/BCLibNetherBiomeSource.java @@ -10,6 +10,7 @@ import net.minecraft.world.level.biome.Biome.BiomeCategory; import net.minecraft.world.level.biome.BiomeSource; import ru.bclib.BCLib; import ru.bclib.api.BiomeAPI; +import ru.bclib.config.ConfigKeeper.StringArrayEntry; import ru.bclib.config.Configs; import ru.bclib.world.biomes.BCLBiome; @@ -65,8 +66,15 @@ public class BCLibNetherBiomeSource extends BiomeSource { } private static List getBiomes(Registry biomeRegistry) { + List include = Configs.BIOMES_CONFIG.getEntry("force_include", "nether_biomes", StringArrayEntry.class).getValue(); + return biomeRegistry.stream().filter(biome -> { ResourceLocation key = biomeRegistry.getKey(biome); + + if (include.contains(key.toString())) { + return true; + } + BCLBiome bclBiome = BiomeAPI.getBiome(key); if (bclBiome != BiomeAPI.EMPTY_BIOME) { if (bclBiome.hasParentBiome()) { diff --git a/src/main/java/ru/bclib/world/generator/GeneratorOptions.java b/src/main/java/ru/bclib/world/generator/GeneratorOptions.java index a2b80ad4..af5c084d 100644 --- a/src/main/java/ru/bclib/world/generator/GeneratorOptions.java +++ b/src/main/java/ru/bclib/world/generator/GeneratorOptions.java @@ -14,6 +14,8 @@ public class GeneratorOptions { private static boolean farEndBiomes = true; private static boolean customNetherBiomeSource = true; private static boolean customEndBiomeSource = true; + private static boolean addNetherBiomesByCategory = false; + private static boolean addEndBiomesByCategory = false; public static void init() { biomeSizeNether = Configs.GENERATOR_CONFIG.getInt("nether.biomeMap", "biomeSize", 256); @@ -21,6 +23,8 @@ public class GeneratorOptions { biomeSizeEndVoid = Configs.GENERATOR_CONFIG.getInt("end.biomeMap", "biomeSizeVoid", 256); customNetherBiomeSource = Configs.GENERATOR_CONFIG.getBoolean("options", "customNetherBiomeSource", true); customEndBiomeSource = Configs.GENERATOR_CONFIG.getBoolean("options", "customEndBiomeSource", true); + addNetherBiomesByCategory = Configs.GENERATOR_CONFIG.getBoolean("options", "addNetherBiomesByCategory", false); + addEndBiomesByCategory = Configs.GENERATOR_CONFIG.getBoolean("options", "addEndBiomesByCategory", false); } public static int getBiomeSizeNether() { @@ -58,4 +62,12 @@ public class GeneratorOptions { public static boolean customEndBiomeSource() { return customEndBiomeSource; } + + public static boolean addNetherBiomesByCategory() { + return addNetherBiomesByCategory; + } + + public static boolean addEndBiomesByCategory() { + return addEndBiomesByCategory; + } }