Structures

This commit is contained in:
paulevsGitch 2020-09-23 15:42:30 +03:00
parent 2fdad6aee8
commit 35d8c14d20
9 changed files with 134 additions and 48 deletions

View file

@ -2,6 +2,7 @@ package ru.betterend;
import net.fabricmc.api.ModInitializer;
import ru.betterend.registry.BiomeRegistry;
import ru.betterend.registry.FeatureRegistry;
import ru.betterend.util.Logger;
import ru.betterend.world.generator.BetterEndBiomeSource;
@ -11,6 +12,7 @@ public class BetterEnd implements ModInitializer {
@Override
public void onInitialize() {
FeatureRegistry.register();
BiomeRegistry.register();
BetterEndBiomeSource.register();
}

View file

@ -1,6 +1,7 @@
package ru.betterend.mixin.client;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@ -30,6 +31,14 @@ public class BackgroundRendererMixin {
private static final float SKY_RED = 21F / 255F;
private static final float SKY_GREEN = 16F / 255F;
private static final float SKY_BLUE = 20F / 255F;
//private static final float NORMAL = 0.12757292F;
@Shadow
private static float red;
@Shadow
private static float green;
@Shadow
private static float blue;
@Inject(method = "render", at = @At("RETURN"))
private static void onRender(Camera camera, float tickDelta, ClientWorld world, int i, float f, CallbackInfo info) {
@ -39,6 +48,9 @@ public class BackgroundRendererMixin {
FluidState fluidState = camera.getSubmergedFluidState();
if (fluidState.isEmpty() && world.getDimension().hasEnderDragonFight()) {
RenderSystem.clearColor(SKY_RED, SKY_GREEN, SKY_BLUE, 0);
//red /= NORMAL;
//green /= NORMAL;
//blue /= NORMAL;
}
}

View file

@ -11,7 +11,7 @@ import net.minecraft.util.registry.Registry;
import net.minecraft.util.registry.RegistryKey;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeKeys;
import ru.betterend.world.biome.BiomeDefinition;
import ru.betterend.world.biome.BiomeFoggyMushroomland;
import ru.betterend.world.biome.EndBiome;
import ru.betterend.world.generator.BiomePicker;
import ru.betterend.world.generator.BiomeType;
@ -22,12 +22,12 @@ public class BiomeRegistry {
public static final BiomePicker LAND_BIOMES = new BiomePicker();
public static final BiomePicker VOID_BIOMES = new BiomePicker();
public static final EndBiome END = registerBiome(BiomeKeys.THE_END, BiomeType.LAND);
public static final EndBiome END_BARRENS = registerBiome(BiomeKeys.END_BARRENS, BiomeType.VOID);
public static final EndBiome END_HIGHLANDS = registerBiome(BiomeKeys.END_HIGHLANDS, BiomeType.LAND);
public static final EndBiome END_MIDLANDS = registerBiome(BiomeKeys.END_MIDLANDS, BiomeType.LAND);
public static final EndBiome SMALL_END_ISLANDS = registerBiome(BiomeKeys.SMALL_END_ISLANDS, BiomeType.VOID);
public static final EndBiome TEST = registerBiome(new EndBiome(new BiomeDefinition("test").setFogColor(255, 0, 0).setFogDensity(10)), BiomeType.VOID);
public static final EndBiome END = registerBiome(BiomeKeys.THE_END, BiomeType.LAND, true);
public static final EndBiome END_BARRENS = registerBiome(BiomeKeys.END_BARRENS, BiomeType.VOID, true);
public static final EndBiome END_HIGHLANDS = registerBiome(BiomeKeys.END_HIGHLANDS, BiomeType.LAND, false);
public static final EndBiome END_MIDLANDS = registerBiome(BiomeKeys.END_MIDLANDS, BiomeType.LAND, false);
public static final EndBiome SMALL_END_ISLANDS = registerBiome(BiomeKeys.SMALL_END_ISLANDS, BiomeType.VOID, true);
public static final EndBiome FOGGY_MUSHROOMLAND = registerBiome(new BiomeFoggyMushroomland(), BiomeType.LAND);
public static void register() {}
@ -39,9 +39,9 @@ public class BiomeRegistry {
BiomeRegistry.MUTABLE.put(biomeRegistry.getOrThrow(BiomeRegistry.getBiomeKey(biome)), biome);
}
public static EndBiome registerBiome(RegistryKey<Biome> key, BiomeType type) {
public static EndBiome registerBiome(RegistryKey<Biome> key, BiomeType type, boolean addToGen) {
EndBiome endBiome = new EndBiome(BuiltinRegistries.BIOME.get(key));
addToPicker(endBiome, type);
if (addToGen) addToPicker(endBiome, type);
makeLink(endBiome);
return endBiome;
}

View file

@ -0,0 +1,10 @@
package ru.betterend.registry;
import ru.betterend.world.features.EndFeature;
import ru.betterend.world.features.StoneSpiralFeature;
public class FeatureRegistry {
public static final EndFeature STONE_SPIRAL = new EndFeature("stone_spiral", new StoneSpiralFeature());
public static void register() {}
}

View file

@ -26,6 +26,7 @@ import net.minecraft.world.gen.feature.ConfiguredStructureFeature;
import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilders;
import ru.betterend.BetterEnd;
import ru.betterend.util.MHelper;
import ru.betterend.world.features.EndFeature;
public class BiomeDefinition {
private final List<ConfiguredStructureFeature<?, ?>> structures = Lists.newArrayList();
@ -43,41 +44,12 @@ public class BiomeDefinition {
private int fogColor = 3344392;
private float fogDensity = 1F;
private boolean stalactites = true;
private boolean bnStructures = true;
private final Identifier id;
public BiomeDefinition(String name) {
this.id = new Identifier(BetterEnd.MOD_ID, name);
}
public BiomeDefinition setStalactites(boolean value) {
stalactites = value;
return this;
}
public BiomeDefinition setBNStructures(boolean value) {
bnStructures = value;
return this;
}
public BiomeDefinition setDefaultOres(boolean value) {
return this;
}
public BiomeDefinition setDefaultStructureFeatures(boolean value) {
return this;
}
public BiomeDefinition setDefaultFeatures(boolean value) {
return this;
}
public BiomeDefinition setDefaultMobs(boolean value) {
return this;
}
public BiomeDefinition setParticleConfig(BiomeParticleConfig config) {
this.particleConfig = config;
return this;
@ -97,10 +69,17 @@ public class BiomeDefinition {
}
public BiomeDefinition addStructureFeature(ConfiguredStructureFeature<?, ?> feature) {
System.out.println("Structure " + feature);
structures.add(feature);
return this;
}
public BiomeDefinition addFeature(EndFeature feature) {
FeatureInfo info = new FeatureInfo();
info.featureStep = feature.getFeatureStep();
info.feature = feature.getFeatureConfigured();
features.add(info);
return this;
}
public BiomeDefinition addFeature(Feature featureStep, ConfiguredFeature<?, ?> feature) {
FeatureInfo info = new FeatureInfo();
@ -208,12 +187,4 @@ public class BiomeDefinition {
public float getFodDensity() {
return fogDensity;
}
public boolean hasStalactites() {
return stalactites;
}
public boolean hasBNStructures() {
return bnStructures;
}
}

View file

@ -0,0 +1,12 @@
package ru.betterend.world.biome;
import ru.betterend.registry.FeatureRegistry;
public class BiomeFoggyMushroomland extends EndBiome {
public BiomeFoggyMushroomland() {
super(new BiomeDefinition("foggy_mushroomland")
.setFogColor(41, 122, 173)
.setFogDensity(5)
.addFeature(FeatureRegistry.STONE_SPIRAL));
}
}

View file

@ -0,0 +1,46 @@
package ru.betterend.world.features;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.BuiltinRegistries;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.decorator.ChanceDecoratorConfig;
import net.minecraft.world.gen.decorator.ConfiguredDecorator;
import net.minecraft.world.gen.decorator.Decorator;
import net.minecraft.world.gen.feature.ConfiguredFeature;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature;
import net.minecraft.world.gen.feature.FeatureConfig;
import ru.betterend.BetterEnd;
public class EndFeature {
private final Feature<DefaultFeatureConfig> feature;
private final ConfiguredFeature<?, ?> featureConfigured;
private final GenerationStep.Feature featureStep;
public EndFeature(String name, Feature<DefaultFeatureConfig> feature, GenerationStep.Feature featureStep, ConfiguredDecorator<?> configuredDecorator) {
Identifier id = new Identifier(BetterEnd.MOD_ID, name);
this.featureStep = featureStep;
this.feature = Registry.register(Registry.FEATURE, id, feature);
this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(configuredDecorator));
}
public EndFeature(String name, Feature<DefaultFeatureConfig> feature) {
Identifier id = new Identifier(BetterEnd.MOD_ID, name);
this.featureStep = GenerationStep.Feature.VEGETAL_DECORATION;
this.feature = Registry.register(Registry.FEATURE, id, feature);
this.featureConfigured = Registry.register(BuiltinRegistries.CONFIGURED_FEATURE, id, feature.configure(FeatureConfig.DEFAULT).decorate(Decorator.CHANCE.configure(new ChanceDecoratorConfig(100))));
}
public Feature<DefaultFeatureConfig> getFeature() {
return feature;
}
public ConfiguredFeature<?, ?> getFeatureConfigured() {
return featureConfigured;
}
public GenerationStep.Feature getFeatureStep() {
return featureStep;
}
}

View file

@ -0,0 +1,33 @@
package ru.betterend.world.features;
import java.util.Random;
import net.minecraft.block.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.Heightmap.Type;
import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import net.minecraft.world.gen.feature.Feature;
public class StoneSpiralFeature extends Feature<DefaultFeatureConfig> {
public StoneSpiralFeature() {
super(DefaultFeatureConfig.CODEC);
}
@Override
public boolean generate(StructureWorldAccess world, ChunkGenerator generator, Random random, BlockPos pos, DefaultFeatureConfig config) {
BlockPos topPos = world.getTopPosition(Type.WORLD_SURFACE, pos);
Direction offset = Direction.NORTH;
System.out.println(topPos);
for (int y = 1; y <= 15; y++) {
offset = offset.rotateYClockwise();
world.setBlockState(topPos.up(y).offset(offset), Blocks.STONE.getDefaultState(), 3);
}
return true;
}
}

View file

@ -57,7 +57,7 @@ public class BetterEndBiomeSource extends BiomeSource {
float height = TheEndBiomeSource.getNoiseAt(noise, (int) i * 2 + 1, (int) j * 2 + 1);
EndBiome netherBiome = height < 20.0F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2);
EndBiome netherBiome = height < -20.0F ? mapVoid.getBiome(biomeX << 2, biomeZ << 2) : mapLand.getBiome(biomeX << 2, biomeZ << 2);
if (biomeX == 0 && biomeZ == 0) {
mapLand.clearCache();
mapVoid.clearCache();