Mountsins and shaders

This commit is contained in:
paulevsGitch 2020-10-07 00:19:36 +03:00
parent eb71045d34
commit 7af3f5f981
48 changed files with 578 additions and 5 deletions

View file

@ -1,17 +1,23 @@
package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.At;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.ChunkRegion;
import net.minecraft.world.gen.StructureAccessor;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import ru.betterend.registry.DefaultBiomeFeatures;
@Mixin(ChunkGenerator.class)
public class ChunkGeneratorMixin {
/*@Inject(method = "generateFeatures", at = @At("RETURN"))
/*@Inject(method = "generateFeatures", at = @At("HEAD"))
private void fixerPass(ChunkRegion region, StructureAccessor accessor, CallbackInfo info) {
int chunkX = region.getCenterChunkX();
int chunkZ = region.getCenterChunkZ();
BlockPos start = new BlockPos(chunkX << 4, 16, chunkZ << 4);
BlockPos end = start.add(15, 64, 15);
BlocksHelper.fixBlocks(region, start, end);
DefaultBiomeFeatures.MOUNTAINS.getFeature()
}*/
}

View file

@ -0,0 +1,32 @@
package ru.betterend.mixin.common;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.DefaultBiomeCreator;
import net.minecraft.world.biome.GenerationSettings;
import net.minecraft.world.gen.GenerationStep;
import net.minecraft.world.gen.feature.ConfiguredFeatures;
import net.minecraft.world.gen.feature.ConfiguredStructureFeatures;
import net.minecraft.world.gen.surfacebuilder.ConfiguredSurfaceBuilders;
import ru.betterend.registry.DefaultBiomeFeatures;
@Mixin(DefaultBiomeCreator.class)
public class DefaultBiomeCreatorMixin {
@Shadow
private static Biome composeEndSpawnSettings(GenerationSettings.Builder builder) {
return null;
};
@Overwrite
public static Biome createEndHighlands() {
GenerationSettings.Builder builder = (new GenerationSettings.Builder())
.surfaceBuilder(ConfiguredSurfaceBuilders.END).structureFeature(ConfiguredStructureFeatures.END_CITY)
.feature(GenerationStep.Feature.SURFACE_STRUCTURES, ConfiguredFeatures.END_GATEWAY)
.feature(GenerationStep.Feature.VEGETAL_DECORATION, ConfiguredFeatures.CHORUS_PLANT)
.feature(DefaultBiomeFeatures.MOUNTAINS.getFeatureStep(), DefaultBiomeFeatures.MOUNTAINS.getFeatureConfigured());
return composeEndSpawnSettings(builder);
}
}

View file

@ -26,7 +26,7 @@ public class BiomeRegistry {
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_HIGHLANDS = registerBiome(BiomeKeys.END_HIGHLANDS, BiomeType.LAND, true);
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);

View file

@ -0,0 +1,8 @@
package ru.betterend.registry;
import ru.betterend.world.features.EndFeature;
import ru.betterend.world.features.MountainFeature;
public class DefaultBiomeFeatures {
public static final EndFeature MOUNTAINS = EndFeature.makeChunkFeature("mountains", new MountainFeature());
}

View file

@ -5,6 +5,7 @@ import ru.betterend.world.features.DoublePlantFeature;
import ru.betterend.world.features.EndFeature;
import ru.betterend.world.features.EndLakeFeature;
import ru.betterend.world.features.MossyGlowshroomFeature;
import ru.betterend.world.features.MountainFeature;
import ru.betterend.world.features.SinglePlantFeature;
import ru.betterend.world.features.VineFeature;

View file

@ -0,0 +1,73 @@
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.BlockPos.Mutable;
import net.minecraft.world.StructureWorldAccess;
import net.minecraft.world.gen.chunk.ChunkGenerator;
import net.minecraft.world.gen.feature.DefaultFeatureConfig;
import ru.betterend.registry.BiomeRegistry;
import ru.betterend.util.BlocksHelper;
public class MountainFeature extends DefaultFeature {
private static final Mutable POS = new Mutable();
@Override
public boolean generate(StructureWorldAccess world, ChunkGenerator chunkGenerator, Random random, BlockPos blockPos, DefaultFeatureConfig featureConfig) {
int px = (blockPos.getX() >> 4) << 4;
int pz = (blockPos.getZ() >> 4) << 4;
for (int x = 0; x < 16; x++) {
POS.setX(px | x);
for (int z = 0; z < 16; z++) {
POS.setZ(pz | z);
int min = this.getPosOnSurfaceWG(world, POS).getY();
if (min > 50) {
double max = getHeightSmooth(world, 7) * 10 + min;
for (int y = min; y < max; y++) {
POS.setY(y);
BlocksHelper.setWithoutUpdate(world, POS, Blocks.END_STONE);
}
}
}
}
return true;
}
private int getHeight(StructureWorldAccess world) {
if (BiomeRegistry.getFromBiome(world.getBiome(POS)) != BiomeRegistry.END_HIGHLANDS) {
return -4;
}
int h = this.getPosOnSurfaceWG(world, POS).getY();
if (h < 57) {
return 0;
}
return h - 57;
}
private double getHeightSmooth(StructureWorldAccess world, int radius) {
int sx = POS.getX();
int sz = POS.getZ();
int r2 = radius * radius;
double height = 0;
double max = 0;
for (int x = -radius; x <= radius; x++) {
POS.setX(sx + x);
int x2 = x * x;
for (int z = -radius; z <= radius; z++) {
POS.setZ(sz + z);
int z2 = z * z;
if (x2 + z2 < r2) {
double mult = 1 - Math.sqrt(x2 + z2) / radius;
max += mult;
height += getHeight(world) * mult;
}
}
}
POS.setX(sx);
POS.setZ(sz);
return height / max;
}
}