Skip to content

Instantly share code, notes, and snippets.

@CorgiTaco
Created December 14, 2020 02:33
Show Gist options
  • Save CorgiTaco/2d02381af6ed61ae89f7e0485e77e025 to your computer and use it in GitHub Desktop.
Save CorgiTaco/2d02381af6ed61ae89f7e0485e77e025 to your computer and use it in GitHub Desktop.
package corgiaoc.byg.mixin.common.world;
import corgiaoc.byg.util.noise.fastnoise.FastNoise;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.World;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.BiomeManager;
import net.minecraft.world.server.ServerWorld;
import net.minecraftforge.fml.server.ServerLifecycleHooks;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.Optional;
@Mixin(BiomeManager.IBiomeReader.class)
public class MixinIBiomeReader {
private static long seed;
private static FastNoise noise;
private static FastNoise noise2;
@Inject(method = "getNoiseBiome", at = @At("HEAD"), cancellable = true)
private void addRigidRiversToAllBiomeProviders(int x, int y, int z, CallbackInfoReturnable<Biome> cir) {
MinecraftServer currentServer = ServerLifecycleHooks.getCurrentServer();
ServerWorld world = currentServer.getWorld(World.OVERWORLD);
setupRiverNoise(world == null ? 1000 : world.getSeed());
double noiseVal = noise.GetNoise(x, z) * 10;
float noise2Val = noise2.GetNoise(x, z);
if (noiseVal > 5.391 + Math.abs(noise2Val * 0.4) && noiseVal < 5.8 + Math.abs(noise2Val * 0.4)) {
Optional<Biome> optional = currentServer.func_244267_aX().getRegistry(Registry.BIOME_KEY).getOptional(new ResourceLocation("minecraft:river"));
optional.ifPresent(cir::setReturnValue);
}
}
private static void setupRiverNoise(long serverSeed) {
if (seed != serverSeed || noise == null || noise2 == null) {
seed = serverSeed;
noise = new FastNoise((int) seed);
noise.SetFractalType(FastNoise.FractalType.RigidMulti);
noise.SetNoiseType(FastNoise.NoiseType.CubicFractal);
noise.SetGradientPerturbAmp(1);
noise.SetFractalOctaves(5);
noise.SetFractalGain(0.3f);
noise.SetFrequency(0.002F);
noise2 = new FastNoise((int) seed);
noise2.SetFractalType(FastNoise.FractalType.Billow);
noise2.SetNoiseType(FastNoise.NoiseType.SimplexFractal);
noise2.SetGradientPerturbAmp(1);
noise2.SetFractalOctaves(5);
noise2.SetFractalGain(0.3f);
noise2.SetFrequency(0.02F);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment