Adapted StructureAPI for 1.19
This commit is contained in:
parent
c7117fa180
commit
b7a74e971b
8 changed files with 102 additions and 42 deletions
|
@ -14,15 +14,9 @@ import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.EntityType;
|
import net.minecraft.world.entity.EntityType;
|
||||||
import net.minecraft.world.entity.Mob;
|
import net.minecraft.world.entity.Mob;
|
||||||
import net.minecraft.world.level.biome.AmbientAdditionsSettings;
|
import net.minecraft.world.level.biome.*;
|
||||||
import net.minecraft.world.level.biome.AmbientMoodSettings;
|
|
||||||
import net.minecraft.world.level.biome.AmbientParticleSettings;
|
|
||||||
import net.minecraft.world.level.biome.Biome;
|
|
||||||
import net.minecraft.world.level.biome.Biome.BiomeBuilder;
|
import net.minecraft.world.level.biome.Biome.BiomeBuilder;
|
||||||
import net.minecraft.world.level.biome.Biome.Precipitation;
|
import net.minecraft.world.level.biome.Biome.Precipitation;
|
||||||
import net.minecraft.world.level.biome.BiomeGenerationSettings;
|
|
||||||
import net.minecraft.world.level.biome.BiomeSpecialEffects;
|
|
||||||
import net.minecraft.world.level.biome.MobSpawnSettings;
|
|
||||||
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
|
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
|
||||||
import net.minecraft.world.level.block.Block;
|
import net.minecraft.world.level.block.Block;
|
||||||
import net.minecraft.world.level.block.state.BlockState;
|
import net.minecraft.world.level.block.state.BlockState;
|
||||||
|
@ -67,6 +61,8 @@ public class BCLBiomeBuilder {
|
||||||
private Precipitation precipitation;
|
private Precipitation precipitation;
|
||||||
private ResourceLocation biomeID;
|
private ResourceLocation biomeID;
|
||||||
|
|
||||||
|
private List<Climate.ParameterPoint> parameters = Lists.newArrayList();
|
||||||
|
|
||||||
//BiomeTags.IS_NETHER
|
//BiomeTags.IS_NETHER
|
||||||
private float temperature;
|
private float temperature;
|
||||||
private float fogDensity;
|
private float fogDensity;
|
||||||
|
@ -99,8 +95,14 @@ public class BCLBiomeBuilder {
|
||||||
INSTANCE.vertical = false;
|
INSTANCE.vertical = false;
|
||||||
INSTANCE.edge = null;
|
INSTANCE.edge = null;
|
||||||
INSTANCE.carvers.clear();
|
INSTANCE.carvers.clear();
|
||||||
|
INSTANCE.parameters.clear();
|
||||||
return INSTANCE;
|
return INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BCLBiomeBuilder addNetherClimateParamater(float temperature, float humidity){
|
||||||
|
parameters.add(Climate.parameters(temperature, humidity, 0,0,0,0,0));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set biome {@link Precipitation}. Affect biome visual effects (rain, snow, none).
|
* Set biome {@link Precipitation}. Affect biome visual effects (rain, snow, none).
|
||||||
|
@ -695,6 +697,7 @@ public class BCLBiomeBuilder {
|
||||||
final T res = biomeConstructor.apply(biomeID, biome, settings);
|
final T res = biomeConstructor.apply(biomeID, biome, settings);
|
||||||
res.attachStructures(structureTags);
|
res.attachStructures(structureTags);
|
||||||
res.setSurface(surfaceRule);
|
res.setSurface(surfaceRule);
|
||||||
|
res.addClimateParameters(parameters);
|
||||||
|
|
||||||
//carvers.forEach(cfg -> BiomeAPI.addBiomeCarver(biome, cfg.second, cfg.first));
|
//carvers.forEach(cfg -> BiomeAPI.addBiomeCarver(biome, cfg.second, cfg.first));
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -192,20 +192,9 @@ public class BiomeAPI {
|
||||||
public static BCLBiome registerNetherBiome(BCLBiome biome) {
|
public static BCLBiome registerNetherBiome(BCLBiome biome) {
|
||||||
registerBiome(biome);
|
registerBiome(biome);
|
||||||
NETHER_BIOME_PICKER.addBiome(biome);
|
NETHER_BIOME_PICKER.addBiome(biome);
|
||||||
Random random = new Random(biome.getID().hashCode());
|
|
||||||
|
|
||||||
//temperature, humidity, continentalness, erosion, depth, weirdness, offset
|
|
||||||
Climate.ParameterPoint parameters = Climate.parameters(
|
|
||||||
MHelper.randRange(-1.5F, 1.5F, random),
|
|
||||||
MHelper.randRange(-1.5F, 1.5F, random),
|
|
||||||
MHelper.randRange(-1.5F, 1.5F, random), //new in 1.18
|
|
||||||
MHelper.randRange(-1.5F, 1.5F, random), //new in 1.18
|
|
||||||
MHelper.randRange(-1.5F, 1.5F, random),
|
|
||||||
MHelper.randRange(-1.5F, 1.5F, random),
|
|
||||||
random.nextFloat()
|
|
||||||
);
|
|
||||||
ResourceKey<Biome> key = BiomeAPI.getBiomeKeyOrThrow(biome.getBiomeHolder());
|
ResourceKey<Biome> key = BiomeAPI.getBiomeKeyOrThrow(biome.getBiomeHolder());
|
||||||
NetherBiomeData.addNetherBiome(key, parameters);
|
|
||||||
|
biome.forEachClimateParameter(p -> NetherBiomeData.addNetherBiome(key, p));
|
||||||
return biome;
|
return biome;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.server.MinecraftServer;
|
import net.minecraft.server.MinecraftServer;
|
||||||
import net.minecraft.server.WorldStem;
|
import net.minecraft.server.WorldStem;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.server.level.progress.ChunkProgressListener;
|
||||||
import net.minecraft.server.level.progress.ChunkProgressListenerFactory;
|
import net.minecraft.server.level.progress.ChunkProgressListenerFactory;
|
||||||
import net.minecraft.server.packs.repository.PackRepository;
|
import net.minecraft.server.packs.repository.PackRepository;
|
||||||
import net.minecraft.server.players.GameProfileCache;
|
import net.minecraft.server.players.GameProfileCache;
|
||||||
|
@ -61,4 +62,9 @@ public class MinecraftServerMixin {
|
||||||
accessor.bclib_setRecipesByName(BCLRecipeManager.getMapByName(accessor.bclib_getRecipesByName()));
|
accessor.bclib_setRecipesByName(BCLRecipeManager.getMapByName(accessor.bclib_getRecipesByName()));
|
||||||
accessor.bclib_setRecipes(BCLRecipeManager.getMap(accessor.bclib_getRecipes()));
|
accessor.bclib_setRecipes(BCLRecipeManager.getMap(accessor.bclib_getRecipes()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "createLevels", at = @At(value = "HEAD"))
|
||||||
|
private void bcl_createLevel(ChunkProgressListener chunkProgressListener, CallbackInfo ci){
|
||||||
|
System.out.println(this.worldData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import ru.bclib.api.LifeCycleAPI;
|
import ru.bclib.api.LifeCycleAPI;
|
||||||
import ru.bclib.api.biomes.BiomeAPI;
|
import ru.bclib.api.biomes.BiomeAPI;
|
||||||
|
import ru.bclib.world.generator.BCLBiomeSource;
|
||||||
import ru.bclib.world.generator.BCLibNetherBiomeSource;
|
import ru.bclib.world.generator.BCLibNetherBiomeSource;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -63,6 +64,9 @@ public abstract class ServerLevelMixin extends Level {
|
||||||
if (level.dimension() == Level.NETHER) {
|
if (level.dimension() == Level.NETHER) {
|
||||||
BCLibNetherBiomeSource.setWorldHeight(level.getChunkSource().getGenerator().getGenDepth());
|
BCLibNetherBiomeSource.setWorldHeight(level.getChunkSource().getGenerator().getGenDepth());
|
||||||
}
|
}
|
||||||
|
if (levelStem.generator().getBiomeSource() instanceof BCLBiomeSource source){
|
||||||
|
source.setSeed(level.getSeed());
|
||||||
|
}
|
||||||
|
|
||||||
if (bclib_lastWorld != null && bclib_lastWorld.equals(levelStorageAccess.getLevelId())) {
|
if (bclib_lastWorld != null && bclib_lastWorld.equals(levelStorageAccess.getLevelId())) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.spongepowered.asm.mixin.injection.ModifyArg;
|
||||||
import org.spongepowered.asm.mixin.injection.ModifyArgs;
|
import org.spongepowered.asm.mixin.injection.ModifyArgs;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
import ru.bclib.BCLib;
|
import ru.bclib.BCLib;
|
||||||
|
import ru.bclib.api.LifeCycleAPI;
|
||||||
import ru.bclib.world.generator.BCLibEndBiomeSource;
|
import ru.bclib.world.generator.BCLibEndBiomeSource;
|
||||||
import ru.bclib.world.generator.BCLibNetherBiomeSource;
|
import ru.bclib.world.generator.BCLibNetherBiomeSource;
|
||||||
|
|
||||||
|
@ -52,12 +53,15 @@ public abstract class WorldPresetsBootstrapMixin {
|
||||||
|
|
||||||
@ModifyArg(method="run", at=@At(value="INVOKE", ordinal = 0, target="Lnet/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap;registerCustomOverworldPreset(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/LevelStem;)Lnet/minecraft/core/Holder;"))
|
@ModifyArg(method="run", at=@At(value="INVOKE", ordinal = 0, target="Lnet/minecraft/world/level/levelgen/presets/WorldPresets$Bootstrap;registerCustomOverworldPreset(Lnet/minecraft/resources/ResourceKey;Lnet/minecraft/world/level/dimension/LevelStem;)Lnet/minecraft/core/Holder;"))
|
||||||
private LevelStem bcl_getOverworldStem(LevelStem overworldStem){
|
private LevelStem bcl_getOverworldStem(LevelStem overworldStem){
|
||||||
|
BCLibNetherBiomeSource netherSource = new BCLibNetherBiomeSource(this.biomes);
|
||||||
|
BCLibEndBiomeSource endSource = new BCLibEndBiomeSource(this.biomes);
|
||||||
|
|
||||||
LevelStem bclNether = new LevelStem(
|
LevelStem bclNether = new LevelStem(
|
||||||
this.netherDimensionType,
|
this.netherDimensionType,
|
||||||
new NoiseBasedChunkGenerator(
|
new NoiseBasedChunkGenerator(
|
||||||
this.structureSets,
|
this.structureSets,
|
||||||
this.noises,
|
this.noises,
|
||||||
new BCLibNetherBiomeSource(this.biomes),
|
netherSource,
|
||||||
this.netherNoiseSettings)
|
this.netherNoiseSettings)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -66,7 +70,7 @@ public abstract class WorldPresetsBootstrapMixin {
|
||||||
new NoiseBasedChunkGenerator(
|
new NoiseBasedChunkGenerator(
|
||||||
this.structureSets,
|
this.structureSets,
|
||||||
this.noises,
|
this.noises,
|
||||||
new BCLibEndBiomeSource(this.biomes),
|
endSource,
|
||||||
this.endNoiseSettings)
|
this.endNoiseSettings)
|
||||||
);
|
);
|
||||||
WorldPreset preset = new WorldPreset(Map.of(LevelStem.OVERWORLD, overworldStem, LevelStem.NETHER, bclNether, LevelStem.END, bclEnd));
|
WorldPreset preset = new WorldPreset(Map.of(LevelStem.OVERWORLD, overworldStem, LevelStem.NETHER, bclNether, LevelStem.END, bclEnd));
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.bclib.world.biomes;
|
package ru.bclib.world.biomes;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
|
@ -9,6 +10,7 @@ import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
import net.minecraft.world.level.biome.Biome;
|
import net.minecraft.world.level.biome.Biome;
|
||||||
|
import net.minecraft.world.level.biome.Climate;
|
||||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||||
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -31,6 +33,8 @@ public class BCLBiome extends BCLBiomeSettings {
|
||||||
private final Map<String, Object> customData = Maps.newHashMap();
|
private final Map<String, Object> customData = Maps.newHashMap();
|
||||||
private final ResourceLocation biomeID;
|
private final ResourceLocation biomeID;
|
||||||
private final Biome biome;
|
private final Biome biome;
|
||||||
|
|
||||||
|
private final List<Climate.ParameterPoint> parameterPoints = Lists.newArrayList();
|
||||||
|
|
||||||
private Consumer<Holder<Biome>> surfaceInit;
|
private Consumer<Holder<Biome>> surfaceInit;
|
||||||
private BCLBiome biomeParent;
|
private BCLBiome biomeParent;
|
||||||
|
@ -287,6 +291,18 @@ public class BCLBiome extends BCLBiomeSettings {
|
||||||
public void attachStructures(List<TagKey<Biome>> structures) {
|
public void attachStructures(List<TagKey<Biome>> structures) {
|
||||||
this.structureTags.addAll(structures);
|
this.structureTags.addAll(structures);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds structures to this biome. For internal use only.
|
||||||
|
* Used inside {@link ru.bclib.api.biomes.BCLBiomeBuilder}.
|
||||||
|
*/
|
||||||
|
public void addClimateParameters(List<Climate.ParameterPoint> params) {
|
||||||
|
this.parameterPoints.addAll(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void forEachClimateParameter(Consumer<Climate.ParameterPoint> consumer){
|
||||||
|
this.parameterPoints.forEach(consumer);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets biome surface rule.
|
* Sets biome surface rule.
|
||||||
|
|
|
@ -2,15 +2,17 @@ package ru.bclib.world.generator;
|
||||||
|
|
||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
import com.mojang.serialization.codecs.RecordCodecBuilder;
|
||||||
|
|
||||||
|
import net.minecraft.core.DefaultedRegistry;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.core.MappedRegistry;
|
||||||
import net.minecraft.core.Registry;
|
import net.minecraft.core.Registry;
|
||||||
|
import net.minecraft.data.BuiltinRegistries;
|
||||||
import net.minecraft.resources.RegistryOps;
|
import net.minecraft.resources.RegistryOps;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.tags.BiomeTags;
|
import net.minecraft.tags.BiomeTags;
|
||||||
import net.minecraft.world.level.biome.Biome;
|
import net.minecraft.world.level.biome.*;
|
||||||
import net.minecraft.world.level.biome.BiomeSource;
|
|
||||||
import net.minecraft.world.level.biome.Biomes;
|
|
||||||
import net.minecraft.world.level.biome.Climate;
|
|
||||||
import org.apache.commons.lang3.function.TriFunction;
|
import org.apache.commons.lang3.function.TriFunction;
|
||||||
import ru.bclib.BCLib;
|
import ru.bclib.BCLib;
|
||||||
import ru.bclib.api.biomes.BiomeAPI;
|
import ru.bclib.api.biomes.BiomeAPI;
|
||||||
|
@ -60,7 +62,6 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource {
|
||||||
public static void setWorldHeight(int worldHeight) {
|
public static void setWorldHeight(int worldHeight) {
|
||||||
BCLibNetherBiomeSource.worldHeight = worldHeight;
|
BCLibNetherBiomeSource.worldHeight = worldHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BCLibNetherBiomeSource(Registry<Biome> biomeRegistry) {
|
public BCLibNetherBiomeSource(Registry<Biome> biomeRegistry) {
|
||||||
super(biomeRegistry, getBiomes(biomeRegistry));
|
super(biomeRegistry, getBiomes(biomeRegistry));
|
||||||
|
|
||||||
|
@ -87,16 +88,18 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource {
|
||||||
|
|
||||||
BiomeAPI.NETHER_BIOME_PICKER.getBiomes().forEach(biome -> biome.updateActualBiomes(biomeRegistry));
|
BiomeAPI.NETHER_BIOME_PICKER.getBiomes().forEach(biome -> biome.updateActualBiomes(biomeRegistry));
|
||||||
BiomeAPI.NETHER_BIOME_PICKER.rebuild();
|
BiomeAPI.NETHER_BIOME_PICKER.rebuild();
|
||||||
|
|
||||||
//initMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
initMap(0);
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void setSeed(long seed) {
|
public void setSeed(long seed) {
|
||||||
|
seed = 0;
|
||||||
super.setSeed(seed);
|
super.setSeed(seed);
|
||||||
initMap(seed);
|
initMap(seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private static List<Holder<Biome>> getBiomes(Registry<Biome> biomeRegistry) {
|
private static List<Holder<Biome>> getBiomes(Registry<Biome> biomeRegistry) {
|
||||||
List<String> include = Configs.BIOMES_CONFIG.getEntry("force_include", "nether_biomes", StringArrayEntry.class).getValue();
|
List<String> include = Configs.BIOMES_CONFIG.getEntry("force_include", "nether_biomes", StringArrayEntry.class).getValue();
|
||||||
|
|
||||||
|
@ -138,7 +141,13 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource {
|
||||||
if ((biomeX & 63) == 0 && (biomeZ & 63) == 0) {
|
if ((biomeX & 63) == 0 && (biomeZ & 63) == 0) {
|
||||||
biomeMap.clearCache();
|
biomeMap.clearCache();
|
||||||
}
|
}
|
||||||
return biomeMap.getBiome(biomeX << 2, biomeY << 2, biomeZ << 2).getActualBiome();
|
BCLBiome bb = biomeMap.getBiome(biomeX << 2, biomeY << 2, biomeZ << 2);
|
||||||
|
if(biomeRegistry.getId(bb.getActualBiome().value())<0) debug(bb, biomeRegistry);
|
||||||
|
return bb.getActualBiome();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static<T> void debug(Object el, Registry<T> reg){
|
||||||
|
System.out.println("Unknown " + el + " in " + reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,30 +1,33 @@
|
||||||
package ru.bclib.world.structures;
|
package ru.bclib.world.structures;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import net.minecraft.core.BlockPos;
|
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.*;
|
||||||
import net.minecraft.core.QuartPos;
|
import net.minecraft.data.BuiltinRegistries;
|
||||||
import net.minecraft.core.Registry;
|
|
||||||
import net.minecraft.data.worldgen.StructureSets;
|
import net.minecraft.data.worldgen.StructureSets;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.tags.TagKey;
|
import net.minecraft.tags.TagKey;
|
||||||
|
import net.minecraft.world.entity.MobCategory;
|
||||||
import net.minecraft.world.level.biome.Biome;
|
import net.minecraft.world.level.biome.Biome;
|
||||||
import net.minecraft.world.level.levelgen.GenerationStep;
|
import net.minecraft.world.level.levelgen.GenerationStep;
|
||||||
import net.minecraft.world.level.levelgen.structure.Structure;
|
import net.minecraft.world.level.levelgen.structure.*;
|
||||||
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
|
||||||
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration;
|
||||||
import net.minecraft.world.level.levelgen.structure.StructureSet;
|
|
||||||
import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier;
|
import net.minecraft.world.level.levelgen.structure.pieces.PieceGeneratorSupplier;
|
||||||
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement;
|
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadStructurePlacement;
|
||||||
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType;
|
import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType;
|
||||||
|
|
||||||
|
import com.mojang.serialization.Codec;
|
||||||
import ru.bclib.api.tag.TagAPI;
|
import ru.bclib.api.tag.TagAPI;
|
||||||
import ru.bclib.mixin.common.StructuresAccessor;
|
import ru.bclib.mixin.common.StructuresAccessor;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
public class BCLStructure {
|
public class BCLStructure<S extends Structure> {
|
||||||
private static final Random RANDOM = new Random(354);
|
private static final Random RANDOM = new Random(354);
|
||||||
|
|
||||||
private final Holder<Structure> structure;
|
private final Holder<Structure> structure;
|
||||||
|
@ -33,13 +36,37 @@ public class BCLStructure {
|
||||||
private final ResourceLocation id;
|
private final ResourceLocation id;
|
||||||
public final TagKey<Biome> biomeTag;
|
public final TagKey<Biome> biomeTag;
|
||||||
public final ResourceKey<Structure> structureKey;
|
public final ResourceKey<Structure> structureKey;
|
||||||
|
public final S baseStructure;
|
||||||
public final ResourceKey<StructureSet> structureSetKey;
|
public final ResourceKey<StructureSet> structureSetKey;
|
||||||
public final RandomSpreadStructurePlacement spreadConfig;
|
public final RandomSpreadStructurePlacement spreadConfig;
|
||||||
|
|
||||||
public BCLStructure(ResourceLocation id, Structure structure, GenerationStep.Decoration step, int spacing, int separation) {
|
public final StructureType<S> structureType;
|
||||||
this(id, structure, step, spacing, separation, false);
|
|
||||||
|
|
||||||
|
private static HolderSet<Biome> biomes(TagKey<Biome> tagKey) {
|
||||||
|
return BuiltinRegistries.BIOME.getOrCreateTag(tagKey);
|
||||||
}
|
}
|
||||||
public BCLStructure(ResourceLocation id, Structure structure, GenerationStep.Decoration step, int spacing, int separation, boolean adaptNoise) {
|
private static Structure.StructureSettings structure(TagKey<Biome> tagKey, Map<MobCategory, StructureSpawnOverride> map, GenerationStep.Decoration decoration, TerrainAdjustment terrainAdjustment) {
|
||||||
|
return new Structure.StructureSettings(biomes(tagKey), map, decoration, terrainAdjustment);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Structure.StructureSettings structure(TagKey<Biome> tagKey, GenerationStep.Decoration decoration, TerrainAdjustment terrainAdjustment) {
|
||||||
|
return structure(tagKey, Map.of(), decoration, terrainAdjustment);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <S extends Structure> StructureType<S> registerStructureType(ResourceLocation id, Codec<S> codec) {
|
||||||
|
return Registry.register(Registry.STRUCTURE_TYPES, id, () -> codec);
|
||||||
|
}
|
||||||
|
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, Codec<S> codec) {
|
||||||
|
this(id, structureBuilder, step, spacing, separation, false, codec);
|
||||||
|
}
|
||||||
|
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, boolean adaptNoise, Codec<S> codec) {
|
||||||
|
this(id, structureBuilder, step, spacing, separation, adaptNoise, registerStructureType(id, codec));
|
||||||
|
}
|
||||||
|
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, StructureType<S> structureType) {
|
||||||
|
this(id, structureBuilder, step, spacing, separation, false, structureType);
|
||||||
|
}
|
||||||
|
public BCLStructure(ResourceLocation id, Function<Structure.StructureSettings, S> structureBuilder, GenerationStep.Decoration step, int spacing, int separation, boolean adaptNoise, StructureType<S> structureType) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.featureStep = step;
|
this.featureStep = step;
|
||||||
//parts from vanilla for Structure generation
|
//parts from vanilla for Structure generation
|
||||||
|
@ -56,9 +83,11 @@ public class BCLStructure {
|
||||||
this.spreadConfig = new RandomSpreadStructurePlacement(spacing, separation, RandomSpreadType.LINEAR, RANDOM.nextInt(8192));
|
this.spreadConfig = new RandomSpreadStructurePlacement(spacing, separation, RandomSpreadType.LINEAR, RANDOM.nextInt(8192));
|
||||||
this.structureKey = ResourceKey.create(Registry.STRUCTURE_REGISTRY, id);
|
this.structureKey = ResourceKey.create(Registry.STRUCTURE_REGISTRY, id);
|
||||||
this.structureSetKey = ResourceKey.create(Registry.STRUCTURE_SET_REGISTRY, id);
|
this.structureSetKey = ResourceKey.create(Registry.STRUCTURE_SET_REGISTRY, id);
|
||||||
|
this.structureType = structureType;
|
||||||
|
|
||||||
this.biomeTag = TagAPI.makeBiomeTag(id.getNamespace(), "has_structure/"+id.getPath());
|
this.biomeTag = TagAPI.makeBiomeTag(id.getNamespace(), "has_structure/"+id.getPath());
|
||||||
this.structure = StructuresAccessor.callRegister(structureKey, structure);
|
this.baseStructure = structureBuilder.apply(structure(biomeTag, featureStep, TerrainAdjustment.NONE));
|
||||||
|
this.structure = StructuresAccessor.callRegister(structureKey, this.baseStructure);
|
||||||
StructureSets.register(structureSetKey, this.structure, spreadConfig);
|
StructureSets.register(structureSetKey, this.structure, spreadConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue