Biome feature modification fixes

This commit is contained in:
paulevsGitch 2021-12-03 13:51:36 +03:00
parent eaba9bf698
commit 8234a1c9dc

View file

@ -32,6 +32,7 @@ import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import ru.bclib.config.Configs; import ru.bclib.config.Configs;
import ru.bclib.mixin.common.BiomeGenerationSettingsAccessor; import ru.bclib.mixin.common.BiomeGenerationSettingsAccessor;
import ru.bclib.util.CollectionsUtil;
import ru.bclib.util.MHelper; import ru.bclib.util.MHelper;
import ru.bclib.world.biomes.BCLBiome; import ru.bclib.world.biomes.BCLBiome;
import ru.bclib.world.biomes.FabricBiomesData; import ru.bclib.world.biomes.FabricBiomesData;
@ -450,9 +451,13 @@ public class BiomeAPI {
*/ */
public static void addBiomeFeature(Biome biome, PlacedFeature feature, Decoration step) { public static void addBiomeFeature(Biome biome, PlacedFeature feature, Decoration step) {
BiomeGenerationSettingsAccessor accessor = (BiomeGenerationSettingsAccessor) biome.getGenerationSettings(); BiomeGenerationSettingsAccessor accessor = (BiomeGenerationSettingsAccessor) biome.getGenerationSettings();
List<List<Supplier<PlacedFeature>>> allFeatures = getMutable(accessor.bclib_getFeatures()); List<List<Supplier<PlacedFeature>>> allFeatures = CollectionsUtil.getMutable(accessor.bclib_getFeatures());
Set<PlacedFeature> set = CollectionsUtil.getMutable(accessor.bclib_getFeatureSet());
List<Supplier<PlacedFeature>> features = getFeaturesList(allFeatures, step); List<Supplier<PlacedFeature>> features = getFeaturesList(allFeatures, step);
features.add(() -> feature); features.add(() -> feature);
set.add(feature);
accessor.bclib_setFeatures(allFeatures);
accessor.bclib_setFeatureSet(set);
} }
/** /**
@ -559,19 +564,12 @@ public class BiomeAPI {
biome.setGenChance(chance).setFogDensity(fog); biome.setGenChance(chance).setFogDensity(fog);
} }
private static <O extends Object> List<O> getMutable(List<O> list) {
if (list instanceof ArrayList) {
return list;
}
return new ArrayList<>(list);
}
private static List<Supplier<PlacedFeature>> getFeaturesList(List<List<Supplier<PlacedFeature>>> features, Decoration step) { private static List<Supplier<PlacedFeature>> getFeaturesList(List<List<Supplier<PlacedFeature>>> features, Decoration step) {
int index = step.ordinal(); int index = step.ordinal();
while (features.size() <= index) { while (features.size() <= index) {
features.add(Lists.newArrayList()); features.add(Lists.newArrayList());
} }
List<Supplier<PlacedFeature>> mutable = getMutable(features.get(index)); List<Supplier<PlacedFeature>> mutable = CollectionsUtil.getMutable(features.get(index));
features.set(index, mutable); features.set(index, mutable);
return mutable; return mutable;
} }