refactor biome layers to match vanilla's new 1.15 system (#1571)

This commit is contained in:
SuperCoder79 2020-04-21 07:23:54 -04:00 committed by GitHub
parent 21ae14f67b
commit 7bca7e9707
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 15 additions and 96 deletions

View File

@ -39,7 +39,7 @@ public class BOPBiomeProvider extends OverworldBiomeProvider
super(settingsProvider);
this.possibleBiomes = Sets.newHashSet(super.possibleBiomes);
this.possibleBiomes.addAll(BOPClimates.getOverworldBiomes());
this.noiseBiomeLayer = BOPLayerUtil.createGenLayers(settingsProvider.getSeed(), settingsProvider.getGeneratorType(), (BOPOverworldGenSettings)settingsProvider.getGeneratorSettings())[0];
this.noiseBiomeLayer = BOPLayerUtil.createGenLayers(settingsProvider.getSeed(), settingsProvider.getGeneratorType(), (BOPOverworldGenSettings)settingsProvider.getGeneratorSettings());
}
@Override

View File

@ -9,13 +9,10 @@ package biomesoplenty.common.world;
import biomesoplenty.common.world.layer.*;
import biomesoplenty.common.world.layer.traits.LazyAreaLayerContextBOP;
import biomesoplenty.core.BiomesOPlenty;
import com.google.common.collect.ImmutableList;
import net.minecraft.util.registry.Registry;
import net.minecraft.world.WorldType;
import net.minecraft.world.biome.Biomes;
import net.minecraft.world.gen.IExtendedNoiseRandom;
import net.minecraft.world.gen.OverworldGenSettings;
import net.minecraft.world.gen.area.IArea;
import net.minecraft.world.gen.area.IAreaFactory;
import net.minecraft.world.gen.area.LazyArea;
@ -111,7 +108,7 @@ public class BOPLayerUtil
return biomeFactory;
}
public static <T extends IArea, C extends IExtendedNoiseRandom<T>> ImmutableList<IAreaFactory<T>> createAreaFactories(WorldType worldType, BOPOverworldGenSettings settings, LongFunction<C> contextFactory)
public static <T extends IArea, C extends IExtendedNoiseRandom<T>> IAreaFactory<T> createAreaFactories(WorldType worldType, BOPOverworldGenSettings settings, LongFunction<C> contextFactory)
{
// Create the initial land and sea layer. Is also responsible for adding deep oceans
// and mushroom islands
@ -123,7 +120,8 @@ public class BOPLayerUtil
int biomeSize = 4;
int riverSize = biomeSize;
if (settings != null) {
if (settings != null)
{
biomeSize = settings.getBiomeSize();
riverSize = settings.getRiverSize();
}
@ -169,23 +167,16 @@ public class BOPLayerUtil
climateFactory = LayerUtil.zoom(2001L, ZoomLayer.NORMAL, climateFactory, 6, contextFactory);
biomesFactory = BOPMixOceansLayer.INSTANCE.run(contextFactory.apply(100L), biomesFactory, oceanBiomeFactory, climateFactory);
// Finish biomes with Voroni zoom
IAreaFactory<T> voroniZoomBiomesFactory = VoroniZoomLayer.INSTANCE.run(contextFactory.apply(10L), biomesFactory);
return ImmutableList.of(biomesFactory, voroniZoomBiomesFactory, biomesFactory);
return biomesFactory;
}
public static Layer[] createGenLayers(long seed, WorldType worldType, BOPOverworldGenSettings settings)
public static Layer createGenLayers(long seed, WorldType worldType, BOPOverworldGenSettings settings)
{
ImmutableList<IAreaFactory<LazyArea>> factoryList = createAreaFactories(worldType, settings, (seedModifier) ->
IAreaFactory<LazyArea> factory = createAreaFactories(worldType, settings, (seedModifier) ->
{
return new LazyAreaLayerContextBOP(1, seed, seedModifier);
});
Layer biomesLayer = new Layer(factoryList.get(0));
Layer voroniZoomBiomesLayer = new Layer(factoryList.get(1));
Layer biomesLayer2 = new Layer(factoryList.get(2));
return new Layer[]{biomesLayer, voroniZoomBiomesLayer, biomesLayer2};
return new Layer(factory);
}
public static boolean isOcean(int biomeIn)

View File

@ -10,9 +10,7 @@ package biomesoplenty.common.world;
import biomesoplenty.common.world.layer.LandLayer;
import biomesoplenty.common.world.layer.NetherBiomeLayer;
import biomesoplenty.common.world.layer.BOPShoreLayer;
import biomesoplenty.common.world.layer.VoroniZoomLayer;
import biomesoplenty.common.world.layer.traits.LazyAreaLayerContextBOP;
import com.google.common.collect.ImmutableList;
import net.minecraft.world.WorldType;
import net.minecraft.world.gen.IExtendedNoiseRandom;
import net.minecraft.world.gen.OverworldGenSettings;
@ -33,7 +31,7 @@ public class BOPNetherLayerUtil
return biomeFactory;
}
public static <T extends IArea, C extends IExtendedNoiseRandom<T>> ImmutableList<IAreaFactory<T>> createAreaFactories(WorldType worldType, OverworldGenSettings settings, LongFunction<C> contextFactory)
public static <T extends IArea, C extends IExtendedNoiseRandom<T>> IAreaFactory<T> createAreaFactories(WorldType worldType, OverworldGenSettings settings, LongFunction<C> contextFactory)
{
int biomeSize = 3;
@ -52,21 +50,16 @@ public class BOPNetherLayerUtil
}
biomesFactory = SmoothLayer.INSTANCE.run(contextFactory.apply(1000L), biomesFactory);
// Finish biomes with Voroni zoom
IAreaFactory<T> voroniZoomBiomesFactory = VoroniZoomLayer.INSTANCE.run(contextFactory.apply(10L), biomesFactory);
return ImmutableList.of(biomesFactory, voroniZoomBiomesFactory, biomesFactory);
return biomesFactory;
}
public static Layer[] createGenLayers(long seed, WorldType worldType, OverworldGenSettings settings)
public static Layer createGenLayers(long seed, WorldType worldType, OverworldGenSettings settings)
{
ImmutableList<IAreaFactory<LazyArea>> factoryList = createAreaFactories(worldType, settings, (seedModifier) ->
IAreaFactory<LazyArea> factory = createAreaFactories(worldType, settings, (seedModifier) ->
{
return new LazyAreaLayerContextBOP(1, seed, seedModifier);
});
Layer biomesLayer = new Layer(factoryList.get(0));
Layer voroniZoomBiomesLayer = new Layer(factoryList.get(1));
Layer biomesLayer2 = new Layer(factoryList.get(2));
return new Layer[]{biomesLayer, voroniZoomBiomesLayer, biomesLayer2};
return new Layer(factory);
}
}

View File

@ -38,7 +38,7 @@ public class NetherBiomeProvider extends BiomeProvider
public NetherBiomeProvider(OverworldBiomeProviderSettings settingsProvider)
{
super(BOPClimates.NETHER.getLandBiomes().stream().map(weightedBiomeEntry -> weightedBiomeEntry.biome).collect(Collectors.toSet()));
this.noiseBiomeLayer = BOPNetherLayerUtil.createGenLayers(settingsProvider.getSeed(), settingsProvider.getGeneratorType(), settingsProvider.getGeneratorSettings())[0];
this.noiseBiomeLayer = BOPNetherLayerUtil.createGenLayers(settingsProvider.getSeed(), settingsProvider.getGeneratorType(), settingsProvider.getGeneratorSettings());
}
@Override

View File

@ -1,65 +0,0 @@
/*******************************************************************************
* Copyright 2014-2019, the Biomes O' Plenty Team
*
* This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License.
*
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
******************************************************************************/
package biomesoplenty.common.world.layer;
import net.minecraft.world.gen.IExtendedNoiseRandom;
import net.minecraft.world.gen.area.IArea;
import net.minecraft.world.gen.layer.traits.IAreaTransformer1;
public enum VoroniZoomLayer implements IAreaTransformer1
{
INSTANCE;
@Override
public int applyPixel(IExtendedNoiseRandom<?> context, IArea area, int x, int y)
{
int i = x - 2;
int j = y - 2;
int k = i >> 2;
int l = j >> 2;
int i1 = k << 2;
int j1 = l << 2;
context.initRandom((long)i1, (long)j1);
double d0 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D;
double d1 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D;
context.initRandom((long)(i1 + 4), (long)j1);
double d2 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D;
double d3 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D;
context.initRandom((long)i1, (long)(j1 + 4));
double d4 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D;
double d5 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D;
context.initRandom((long)(i1 + 4), (long)(j1 + 4));
double d6 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D;
double d7 = ((double)context.nextRandom(1024) / 1024.0D - 0.5D) * 3.6D + 4.0D;
int k1 = i & 3;
int l1 = j & 3;
double d8 = ((double)l1 - d1) * ((double)l1 - d1) + ((double)k1 - d0) * ((double)k1 - d0);
double d9 = ((double)l1 - d3) * ((double)l1 - d3) + ((double)k1 - d2) * ((double)k1 - d2);
double d10 = ((double)l1 - d5) * ((double)l1 - d5) + ((double)k1 - d4) * ((double)k1 - d4);
double d11 = ((double)l1 - d7) * ((double)l1 - d7) + ((double)k1 - d6) * ((double)k1 - d6);
if (d8 < d9 && d8 < d10 && d8 < d11) {
return area.get(this.getParentX(i1), this.getParentY(j1));
} else if (d9 < d8 && d9 < d10 && d9 < d11) {
return area.get(this.getParentX(i1 + 4), this.getParentY(j1)) & 255;
} else {
return d10 < d8 && d10 < d9 && d10 < d11 ? area.get(this.getParentX(i1), this.getParentY(j1 + 4)) : area.get(this.getParentX(i1 + 4), this.getParentY(j1 + 4)) & 255;
}
}
@Override
public int getParentX(int x)
{
return x >> 2;
}
@Override
public int getParentY(int y)
{
return y >> 2;
}
}