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;
}
}

View file

@ -0,0 +1,3 @@
{
"defaultMaterial": "betterend:wave_glow_all"
}

View file

@ -0,0 +1,3 @@
{
"defaultMaterial": "betterend:glow_all"
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_10.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_33.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_50.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_all.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_all_half.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_inc.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "betterend:shaders/material/glow_transparent.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave_large.vert",
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave_large.vert",
"fragmentSource": "betterend:shaders/material/glow_inc.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "canvas:shaders/material/default.vert",
"fragmentSource": "canvas:shaders/material/default.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/offset_floor.vert",
"fragmentSource": "canvas:shaders/material/default.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/small_wave.vert",
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave.vert",
"fragmentSource": "betterend:shaders/material/glow_33.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave.vert",
"fragmentSource": "betterend:shaders/material/glow_33_half.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave.vert",
"fragmentSource": "betterend:shaders/material/glow_50_half.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave.vert",
"fragmentSource": "betterend:shaders/material/glow_all.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave.vert",
"fragmentSource": "betterend:shaders/material/glow_inc.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave.vert",
"fragmentSource": "canvas:shaders/material/default.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave_floor.vert",
"fragmentSource": "canvas:shaders/material/default.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wave_large.vert",
"fragmentSource": "canvas:shaders/material/default.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/small_wave.vert",
"fragmentSource": "canvas:shaders/material/default.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wall_wave.vert",
"fragmentSource": "canvas:shaders/material/default.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,10 @@
{
"layers": [
{
"vertexSource": "betterend:shaders/material/wall_wave.vert",
"fragmentSource": "canvas:shaders/material/glow_all.frag",
"disableAo": true,
"disableDiffuse": true
}
]
}

View file

@ -0,0 +1,6 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.1 ? 1 : 0;
}

View file

@ -0,0 +1,6 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.33 ? 1 : 0;
}

View file

@ -0,0 +1,6 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.33 ? 0.5 : 0;
}

View file

@ -0,0 +1,6 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.5 ? 1 : 0;
}

View file

@ -0,0 +1,6 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = frx_luminance(fragData.spriteColor.rgb) > 0.5 ? 0.5 : 0;
}

View file

@ -0,0 +1,6 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = 1;
}

View file

@ -0,0 +1,6 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = 0.5;
}

View file

@ -0,0 +1,7 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
float light = frx_luminance(fragData.spriteColor.rgb) * 2 - 0.3;
fragData.emissivity = clamp(light, 0, 1);
}

View file

@ -0,0 +1,8 @@
#include frex:shaders/api/fragment.glsl
#include frex:shaders/lib/math.glsl
void frx_startFragment(inout frx_FragmentData fragData) {
fragData.emissivity = 1;
fragData.ao = false;
fragData.diffuse = false;
}

View file

@ -0,0 +1,18 @@
#include frex:shaders/api/vertex.glsl
#include frex:shaders/api/world.glsl
#include frex:shaders/lib/math.glsl
#include frex:shaders/lib/noise/noise4d.glsl
/******************************************************
Based on "GPU-Generated Procedural Wind Animations for Trees"
by Renaldas Zioma in GPU Gems 3, 2007
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
Remake of canvas default shader for the Nether
******************************************************/
#define NOISE_SCALE 0.125
void frx_startVertex(inout frx_VertexData data) {
data.vertex.xz += data.normal.xz * data.spriteUV.y * 0.02;
}

View file

@ -0,0 +1,24 @@
#include frex:shaders/api/vertex.glsl
#include frex:shaders/api/world.glsl
#include frex:shaders/lib/math.glsl
#include frex:shaders/lib/noise/noise4d.glsl
/******************************************************
Based on "GPU-Generated Procedural Wind Animations for Trees"
by Renaldas Zioma in GPU Gems 3, 2007
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
Remake of canvas default shader for the Nether
******************************************************/
void frx_startVertex(inout frx_VertexData data) {
#ifdef ANIMATED_FOLIAGE
float t = frx_renderSeconds() * 0.05;
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * 0.5;
float wind = snoise(vec4(pos, t)) * 0.02;
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
data.vertex.z += sin(t * 19) * wind;
#endif
}

View file

@ -0,0 +1,30 @@
#include frex:shaders/api/vertex.glsl
#include frex:shaders/api/world.glsl
#include frex:shaders/lib/math.glsl
#include frex:shaders/lib/noise/noise4d.glsl
/******************************************************
Based on "GPU-Generated Procedural Wind Animations for Trees"
by Renaldas Zioma in GPU Gems 3, 2007
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
Remake of canvas default shader for the Nether
******************************************************/
void frx_startVertex(inout frx_VertexData data) {
#ifdef ANIMATED_FOLIAGE
float t = frx_renderSeconds() * 0.05;
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * 0.5;
float wind = snoise(vec4(pos, t)) * 0.1;
//vec3 center = frx_modelOriginWorldPos() + vec3(0.5);
//vec3 absDist = abs(pos - center) * 2;
//wind *= clamp(1 - absDist.x + absDist.y + absDist.z, 0, 1);
wind *= 1 - data.spriteUV.y;
data.vertex.y += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
data.vertex.x += cos(t * 14) * wind;
data.vertex.z += sin(t * 19) * wind;
#endif
}

View file

@ -0,0 +1,26 @@
#include frex:shaders/api/vertex.glsl
#include frex:shaders/api/world.glsl
#include frex:shaders/lib/math.glsl
#include frex:shaders/lib/noise/noise4d.glsl
/******************************************************
Based on "GPU-Generated Procedural Wind Animations for Trees"
by Renaldas Zioma in GPU Gems 3, 2007
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
Remake of canvas default shader for the Nether
******************************************************/
#define NOISE_SCALE 0.125
void frx_startVertex(inout frx_VertexData data) {
#ifdef ANIMATED_FOLIAGE
float t = frx_renderSeconds() * 0.05;
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * NOISE_SCALE;
float wind = snoise(vec4(pos, t)) * 0.1;
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
data.vertex.z += sin(t * 19) * wind;
#endif
}

View file

@ -0,0 +1,27 @@
#include frex:shaders/api/vertex.glsl
#include frex:shaders/api/world.glsl
#include frex:shaders/lib/math.glsl
#include frex:shaders/lib/noise/noise4d.glsl
/******************************************************
Based on "GPU-Generated Procedural Wind Animations for Trees"
by Renaldas Zioma in GPU Gems 3, 2007
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
Remake of canvas default shader for the Nether
******************************************************/
#define NOISE_SCALE 0.125
void frx_startVertex(inout frx_VertexData data) {
#ifdef ANIMATED_FOLIAGE
float t = frx_renderSeconds() * 0.05;
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * NOISE_SCALE;
float wind = snoise(vec4(pos, t)) * 0.2;
wind *= 1 - data.spriteUV.y;
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
data.vertex.z += sin(t * 19) * wind;
#endif
}

View file

@ -0,0 +1,24 @@
#include frex:shaders/api/vertex.glsl
#include frex:shaders/api/world.glsl
#include frex:shaders/lib/math.glsl
#include frex:shaders/lib/noise/noise4d.glsl
/******************************************************
Based on "GPU-Generated Procedural Wind Animations for Trees"
by Renaldas Zioma in GPU Gems 3, 2007
https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-6-gpu-generated-procedural-wind-animations-trees
Remake of canvas default shader for the Nether
******************************************************/
void frx_startVertex(inout frx_VertexData data) {
#ifdef ANIMATED_FOLIAGE
float t = frx_renderSeconds() * 0.05;
vec3 pos = (data.vertex.xyz + frx_modelOriginWorldPos()) * 0.0625;
float wind = snoise(vec4(pos, t)) * 0.25;
data.vertex.x += (cos(t) * cos(t * 3) * cos(t * 5) * cos(t * 7) + sin(t * 25)) * wind;
data.vertex.z += sin(t * 19) * wind;
#endif
}

View file

@ -15,7 +15,8 @@
"LivingEntityMixin",
"BiomeMixin",
"SlimeEntityMixin",
"LocateCommandMixin"
"LocateCommandMixin",
"DefaultBiomeCreatorMixin"
],
"injectors": {
"defaultRequire": 1