Feature API usage
This commit is contained in:
parent
823108aa62
commit
6a6f29bf99
9 changed files with 62 additions and 170 deletions
|
@ -4,6 +4,7 @@ import net.fabricmc.api.ModInitializer;
|
|||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import ru.bclib.api.WorldDataAPI;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.util.Logger;
|
||||
import ru.betterend.api.BetterEndPlugin;
|
||||
import ru.betterend.config.Configs;
|
||||
|
@ -66,6 +67,11 @@ public class BetterEnd implements ModInitializer {
|
|||
ru.bclib.world.generator.GeneratorOptions.setFarEndBiomes(GeneratorOptions.getIslandDistBlock() > 250000L);
|
||||
ru.bclib.world.generator.GeneratorOptions.setEndLandFunction((pos) -> TerrainGenerator.isLand(pos.x, pos.y));
|
||||
}
|
||||
|
||||
BiomeAPI.registerEndBiomeModification((biomeID, biome) -> {
|
||||
EndStructures.addBiomeStructures(biomeID, biome);
|
||||
EndFeatures.addBiomeFeatures(biomeID, biome);
|
||||
});
|
||||
}
|
||||
|
||||
public static ResourceLocation makeID(String path) {
|
||||
|
|
|
@ -33,8 +33,8 @@ import net.minecraft.world.level.Level;
|
|||
import net.minecraft.world.level.LevelAccessor;
|
||||
import net.minecraft.world.level.ServerLevelAccessor;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.api.TagAPI;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.util.BlocksHelper;
|
||||
import ru.bclib.util.MHelper;
|
||||
import ru.bclib.world.biomes.BCLBiome;
|
||||
|
|
|
@ -1,12 +1,7 @@
|
|||
package ru.betterend.integration.byg;
|
||||
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import ru.bclib.api.TagAPI;
|
||||
import ru.bclib.integration.ModIntegration;
|
||||
import ru.betterend.integration.EndBiomeIntegration;
|
||||
import ru.betterend.integration.Integrations;
|
||||
import ru.betterend.integration.byg.biomes.BYGBiomes;
|
||||
import ru.betterend.integration.byg.features.BYGFeatures;
|
||||
|
||||
public class BYGIntegration extends ModIntegration implements EndBiomeIntegration {
|
||||
public BYGIntegration() {
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
package ru.betterend.mixin.common;
|
||||
|
||||
import net.minecraft.world.level.biome.BiomeGenerationSettings;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
@Deprecated(forRemoval = true)
|
||||
@Mixin(BiomeGenerationSettings.class)
|
||||
public interface BiomeGenerationSettingsAccessor {
|
||||
@Accessor("features")
|
||||
@Deprecated(forRemoval = true)
|
||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> be_getFeatures();
|
||||
|
||||
@Accessor("features")
|
||||
@Deprecated(forRemoval = true)
|
||||
void be_setFeatures(List<List<Supplier<ConfiguredFeature<?, ?>>>> features);
|
||||
|
||||
@Accessor("structureStarts")
|
||||
@Deprecated(forRemoval = true)
|
||||
List<Supplier<ConfiguredStructureFeature<?, ?>>> be_getStructures();
|
||||
|
||||
@Accessor("structureStarts")
|
||||
@Deprecated(forRemoval = true)
|
||||
void be_setStructures(List<Supplier<ConfiguredStructureFeature<?, ?>>> structures);
|
||||
}
|
|
@ -3,12 +3,11 @@ package ru.betterend.registry;
|
|||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import ru.bclib.api.BiomeAPI;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.world.biomes.BCLBiome;
|
||||
import ru.bclib.world.generator.BiomeMap;
|
||||
import ru.bclib.world.generator.BiomePicker;
|
||||
import ru.bclib.world.generator.map.hex.HexBiomeMap;
|
||||
import ru.betterend.config.Configs;
|
||||
import ru.betterend.util.FeaturesHelper;
|
||||
import ru.betterend.world.biome.EndBiome;
|
||||
import ru.betterend.world.biome.air.BiomeIceStarfield;
|
||||
import ru.betterend.world.biome.cave.EmptyAuroraCaveBiome;
|
||||
|
@ -41,7 +40,8 @@ import ru.betterend.world.generator.GeneratorOptions;
|
|||
|
||||
public class EndBiomes {
|
||||
public static final BiomePicker CAVE_BIOMES = new BiomePicker();
|
||||
private static BiomeMap caveBiomeMap;
|
||||
private static HexBiomeMap caveBiomeMap;
|
||||
private static long lastSeed;
|
||||
|
||||
// Better End Land
|
||||
public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new FoggyMushroomlandBiome(), BiomeType.LAND);
|
||||
|
@ -79,10 +79,10 @@ public class EndBiomes {
|
|||
public static void onWorldLoad(long seed, Registry<Biome> registry) {
|
||||
CAVE_BIOMES.getBiomes().forEach(biome -> biome.updateActualBiomes(registry));
|
||||
CAVE_BIOMES.rebuild();
|
||||
if (caveBiomeMap == null || caveBiomeMap.getSeed() != seed) {
|
||||
caveBiomeMap = new BiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES);
|
||||
if (caveBiomeMap == null || lastSeed != seed) {
|
||||
caveBiomeMap = new HexBiomeMap(seed, GeneratorOptions.getBiomeSizeCaves(), CAVE_BIOMES);
|
||||
lastSeed = seed;
|
||||
}
|
||||
FeaturesHelper.addFeatures(registry);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,21 +1,20 @@
|
|||
package ru.betterend.registry;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.Feature;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.CountConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||
import net.minecraft.world.level.levelgen.placement.FeatureDecorator;
|
||||
import ru.bclib.api.BiomeAPI;
|
||||
import net.minecraft.world.level.levelgen.placement.CountPlacement;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
|
||||
import net.minecraft.world.level.levelgen.placement.PlacementModifier;
|
||||
import ru.bclib.api.biomes.BCLBiomeBuilder;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.world.biomes.BCLBiome;
|
||||
import ru.bclib.world.biomes.BCLBiomeDef;
|
||||
import ru.bclib.world.features.BCLFeature;
|
||||
import ru.bclib.world.features.DefaultFeature;
|
||||
import ru.betterend.BetterEnd;
|
||||
|
@ -81,12 +80,8 @@ import ru.betterend.world.features.trees.MossyGlowshroomFeature;
|
|||
import ru.betterend.world.features.trees.PythadendronTreeFeature;
|
||||
import ru.betterend.world.features.trees.TenaneaFeature;
|
||||
import ru.betterend.world.features.trees.UmbrellaTreeFeature;
|
||||
import ru.betterend.world.generator.GeneratorOptions;
|
||||
import ru.betterend.world.surface.UmbraSurfaceBuilder;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class EndFeatures {
|
||||
// Trees //
|
||||
public static final BCLFeature MOSSY_GLOWSHROOM = redisterVegetation("mossy_glowshroom", new MossyGlowshroomFeature(), 3);
|
||||
|
@ -295,9 +290,7 @@ public class EndFeatures {
|
|||
|
||||
private static BCLFeature registerLayer(String name, Block block, float radius, int minY, int maxY, int count) {
|
||||
OreLayerFeature layer = new OreLayerFeature(block.defaultBlockState(), radius, minY, maxY);
|
||||
ConfiguredFeature<?, ?> configured = layer
|
||||
.configured(FeatureConfiguration.NONE)
|
||||
.decorated(FeatureDecorator.COUNT.configured(new CountConfiguration(count)));
|
||||
PlacedFeature configured = layer.configured(FeatureConfiguration.NONE).placed(new PlacementModifier[]{CountPlacement.of(count)});
|
||||
return new BCLFeature(BetterEnd.makeID(name), layer, GenerationStep.Decoration.UNDERGROUND_ORES, configured);
|
||||
}
|
||||
|
||||
|
@ -305,75 +298,46 @@ public class EndFeatures {
|
|||
return registerLayer(name, material.stone, radius, minY, maxY, count);
|
||||
}
|
||||
|
||||
public static void registerBiomeFeatures(ResourceLocation id, Biome biome, List<List<Supplier<ConfiguredFeature<?, ?>>>> features) {
|
||||
public static void addBiomeFeatures(ResourceLocation id, Biome biome) {
|
||||
if (id.getNamespace().equals(BetterEnd.MOD_ID)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (GeneratorOptions.removeChorusFromVanillaBiomes()) {
|
||||
if (id.getNamespace().equals("minecraft")) {
|
||||
String path = id.getPath();
|
||||
if (path.equals("end_highlands") || path.equals("end_midlands") || path.equals("small_end_islands")) {
|
||||
int pos = GenerationStep.Decoration.VEGETAL_DECORATION.ordinal();
|
||||
if (pos < features.size()) {
|
||||
List<Supplier<ConfiguredFeature<?, ?>>> list = features.get(pos);
|
||||
// If only chorus plants are enabled
|
||||
if (list.size() == 1) {
|
||||
features.get(pos).clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
addFeature(FLAVOLITE_LAYER, features);
|
||||
addFeature(THALLASIUM_ORE, features);
|
||||
addFeature(ENDER_ORE, features);
|
||||
addFeature(CRASHED_SHIP, features);
|
||||
BiomeAPI.addBiomeFeatures(biome, FLAVOLITE_LAYER, THALLASIUM_ORE, ENDER_ORE, CRASHED_SHIP);
|
||||
|
||||
BCLBiome bclbiome = BiomeAPI.getBiome(id);
|
||||
boolean hasCaves = bclbiome.getCustomData("has_caves", true) && !(bclbiome instanceof EndCaveBiome);
|
||||
if (hasCaves && !BiomeAPI.END_VOID_BIOME_PICKER.containsImmutable(id)) {
|
||||
if (Configs.BIOME_CONFIG.getBoolean(id, "hasCaves", true)) {
|
||||
addFeature(ROUND_CAVE, features);
|
||||
addFeature(TUNEL_CAVE, features);
|
||||
// TODO replace caves with carvers
|
||||
BiomeAPI.addBiomeFeatures(biome, ROUND_CAVE, TUNEL_CAVE);
|
||||
}
|
||||
}
|
||||
|
||||
BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature();
|
||||
// TODO restore biome structures
|
||||
/*BCLFeature feature = BiomeAPI.getBiome(id).getStructuresFeature();
|
||||
if (feature != null) {
|
||||
addFeature(feature, features);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public static void addDefaultFeatures(BCLBiomeDef def) {
|
||||
def.addFeature(FLAVOLITE_LAYER);
|
||||
def.addFeature(THALLASIUM_ORE);
|
||||
def.addFeature(ENDER_ORE);
|
||||
def.addFeature(CRASHED_SHIP);
|
||||
public static BCLBiomeBuilder addDefaultFeatures(ResourceLocation biomeID, BCLBiomeBuilder builder, boolean hasCaves) {
|
||||
builder.feature(FLAVOLITE_LAYER);
|
||||
builder.feature(THALLASIUM_ORE);
|
||||
builder.feature(ENDER_ORE);
|
||||
builder.feature(CRASHED_SHIP);
|
||||
|
||||
if (def.getID().getPath().endsWith("_cave")) {
|
||||
return;
|
||||
if (biomeID.getPath().endsWith("_cave")) {
|
||||
return builder;
|
||||
}
|
||||
|
||||
boolean hasCaves = def.getCustomData("has_caves", true);
|
||||
hasCaves = Configs.BIOME_CONFIG.getBoolean(def.getID(), "hasCaves", hasCaves);
|
||||
// TODO replace cave features with carvers
|
||||
if (hasCaves) {
|
||||
def.addFeature(ROUND_CAVE);
|
||||
def.addFeature(TUNEL_CAVE);
|
||||
}
|
||||
builder.feature(ROUND_CAVE);
|
||||
builder.feature(TUNEL_CAVE);
|
||||
}
|
||||
|
||||
private static void addFeature(BCLFeature feature, List<List<Supplier<ConfiguredFeature<?, ?>>>> features) {
|
||||
int index = feature.getFeatureStep().ordinal();
|
||||
if (features.size() > index) {
|
||||
features.get(index).add(() -> feature.getFeatureConfigured());
|
||||
}
|
||||
else {
|
||||
List<Supplier<ConfiguredFeature<?, ?>>> newFeature = Lists.newArrayList();
|
||||
newFeature.add(() -> feature.getFeatureConfigured());
|
||||
features.add(newFeature);
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
||||
public static void register() {}
|
||||
|
|
|
@ -4,8 +4,8 @@ import net.minecraft.core.Registry;
|
|||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.StructurePieceType;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.world.structures.BCLStructureFeature;
|
||||
import ru.betterend.BetterEnd;
|
||||
import ru.betterend.world.structures.features.EternalPortalStructure;
|
||||
|
@ -22,22 +22,21 @@ import ru.betterend.world.structures.piece.NBTPiece;
|
|||
import ru.betterend.world.structures.piece.PaintedMountainPiece;
|
||||
import ru.betterend.world.structures.piece.VoxelPiece;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class EndStructures {
|
||||
public static final StructurePieceType VOXEL_PIECE = register("voxel", VoxelPiece::new);
|
||||
public static final StructurePieceType MOUNTAIN_PIECE = register("mountain_piece", CrystalMountainPiece::new);
|
||||
public static final StructurePieceType CAVE_PIECE = register("cave_piece", CavePiece::new);
|
||||
public static final StructurePieceType LAKE_PIECE = register("lake_piece", LakePiece::new);
|
||||
public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register(
|
||||
"painted_mountain_piece",
|
||||
PaintedMountainPiece::new
|
||||
);
|
||||
public static final StructurePieceType PAINTED_MOUNTAIN_PIECE = register("painted_mountain_piece", PaintedMountainPiece::new);
|
||||
public static final StructurePieceType NBT_PIECE = register("nbt_piece", NBTPiece::new);
|
||||
|
||||
public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature(BetterEnd.makeID(
|
||||
"giant_mossy_glowshroom"), new GiantMossyGlowshroomStructure(), Decoration.SURFACE_STRUCTURES, 16, 8);
|
||||
public static final BCLStructureFeature GIANT_MOSSY_GLOWSHROOM = new BCLStructureFeature(
|
||||
BetterEnd.makeID("giant_mossy_glowshroom"),
|
||||
new GiantMossyGlowshroomStructure(),
|
||||
Decoration.SURFACE_STRUCTURES,
|
||||
16,
|
||||
8
|
||||
);
|
||||
public static final BCLStructureFeature MEGALAKE = new BCLStructureFeature(
|
||||
BetterEnd.makeID("megalake"),
|
||||
new MegaLakeStructure(),
|
||||
|
@ -59,8 +58,13 @@ public class EndStructures {
|
|||
3,
|
||||
2
|
||||
);
|
||||
public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature(BetterEnd.makeID(
|
||||
"painted_mountain"), new PaintedMountainStructure(), Decoration.RAW_GENERATION, 3, 2);
|
||||
public static final BCLStructureFeature PAINTED_MOUNTAIN = new BCLStructureFeature(
|
||||
BetterEnd.makeID("painted_mountain"),
|
||||
new PaintedMountainStructure(),
|
||||
Decoration.RAW_GENERATION,
|
||||
3,
|
||||
2
|
||||
);
|
||||
public static final BCLStructureFeature ETERNAL_PORTAL = new BCLStructureFeature(
|
||||
BetterEnd.makeID("eternal_portal"),
|
||||
new EternalPortalStructure(),
|
||||
|
@ -76,22 +80,15 @@ public class EndStructures {
|
|||
8
|
||||
);
|
||||
|
||||
public static void register() {
|
||||
}
|
||||
public static void register() {}
|
||||
|
||||
private static StructurePieceType register(String id, StructurePieceType pieceType) {
|
||||
return Registry.register(Registry.STRUCTURE_PIECE, BetterEnd.makeID(id), pieceType);
|
||||
}
|
||||
|
||||
public static void registerBiomeStructures(ResourceLocation id, Biome biome, Collection<Supplier<ConfiguredStructureFeature<?, ?>>> structures) {
|
||||
if (!id.getPath().contains("mountain") && !id.getPath().contains("lake")) {
|
||||
addStructure(ETERNAL_PORTAL, structures);
|
||||
public static void addBiomeStructures(ResourceLocation biomeID, Biome biome) {
|
||||
if (!biomeID.getPath().contains("mountain") && !biomeID.getPath().contains("lake")) {
|
||||
BiomeAPI.addBiomeStructure(BiomeAPI.getBiomeKey(biome), ETERNAL_PORTAL);
|
||||
}
|
||||
}
|
||||
|
||||
private static void addStructure(BCLStructureFeature feature, Collection<Supplier<ConfiguredStructureFeature<?, ?>>> structures) {
|
||||
structures.add(() -> {
|
||||
return feature.getFeatureConfigured();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,12 +13,10 @@ import net.minecraft.world.food.FoodProperties;
|
|||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.Items;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.biome.Biome.BiomeCategory;
|
||||
import net.minecraft.world.level.block.Block;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.block.LeavesBlock;
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour.Properties;
|
||||
import net.minecraft.world.level.levelgen.surfacebuilders.SurfaceBuilderConfiguration;
|
||||
import net.minecraft.world.level.material.Material;
|
||||
import ru.bclib.api.BonemealAPI;
|
||||
import ru.bclib.api.ComposterAPI;
|
||||
|
@ -133,8 +131,9 @@ public class EndTags {
|
|||
TagAPI.addTag(ALLOYING_COPPER, Items.COPPER_ORE, Items.DEEPSLATE_COPPER_ORE, Items.RAW_COPPER);
|
||||
}
|
||||
|
||||
// TODO make getter for biome top blocks
|
||||
public static void addTerrainTags(Registry<Biome> biomeRegistry) {
|
||||
biomeRegistry.forEach((biome) -> {
|
||||
/*biomeRegistry.forEach((biome) -> {
|
||||
if (biome.getBiomeCategory() == BiomeCategory.THEEND) {
|
||||
SurfaceBuilderConfiguration config = biome.getGenerationSettings().getSurfaceBuilderConfig();
|
||||
Block under = config.getUnderMaterial().getBlock();
|
||||
|
@ -143,6 +142,6 @@ public class EndTags {
|
|||
TagAPI.addTag(TagAPI.BLOCK_END_GROUND, surface);
|
||||
}
|
||||
});
|
||||
TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround);
|
||||
TagAPI.BLOCK_END_STONES.getValues().forEach(TagAPI::addEndGround);*/
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
package ru.betterend.util;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import net.minecraft.core.Registry;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.biome.Biome;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
|
||||
import net.minecraft.world.level.levelgen.feature.ConfiguredStructureFeature;
|
||||
import ru.bclib.api.BiomeAPI;
|
||||
import ru.betterend.config.Configs;
|
||||
import ru.betterend.mixin.common.BiomeGenerationSettingsAccessor;
|
||||
import ru.betterend.registry.EndFeatures;
|
||||
import ru.betterend.registry.EndStructures;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class FeaturesHelper {
|
||||
public static void addFeatures(Registry<Biome> biomeRegistry) {
|
||||
biomeRegistry.forEach((biome) -> {
|
||||
ResourceLocation key = biomeRegistry.getKey(biome);
|
||||
if (BiomeAPI.isEndBiome(key)) {
|
||||
BiomeGenerationSettingsAccessor accessor = (BiomeGenerationSettingsAccessor) biome.getGenerationSettings();
|
||||
List<Supplier<ConfiguredStructureFeature<?, ?>>> structures = Lists.newArrayList(accessor.be_getStructures());
|
||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> preFeatures = accessor.be_getFeatures();
|
||||
List<List<Supplier<ConfiguredFeature<?, ?>>>> features = new ArrayList<>(preFeatures.size());
|
||||
preFeatures.forEach((list) -> features.add(Lists.newArrayList(list)));
|
||||
|
||||
EndFeatures.registerBiomeFeatures(key, biome, features);
|
||||
EndStructures.registerBiomeStructures(key, biome, structures);
|
||||
|
||||
accessor.be_setFeatures(features);
|
||||
accessor.be_setStructures(structures);
|
||||
}
|
||||
});
|
||||
Configs.BIOME_CONFIG.saveChanges();
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue