mirror of
https://github.com/PolyhedralDev/Terra.git
synced 2026-04-23 00:29:51 +00:00
remove ChunkLocalCachingBiomeProvider
This commit is contained in:
@@ -17,12 +17,8 @@
|
||||
|
||||
package com.dfsek.terra.bukkit.generator;
|
||||
|
||||
import com.dfsek.terra.api.world.biome.generation.ChunkLocalCachingBiomeProvider;
|
||||
import com.dfsek.terra.api.world.info.WorldProperties;
|
||||
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.generator.BiomeProvider;
|
||||
import org.bukkit.generator.BlockPopulator;
|
||||
@@ -51,14 +47,6 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
|
||||
private final BlockState air;
|
||||
private ChunkGenerator delegate;
|
||||
private ConfigPack pack;
|
||||
private final LoadingCache<SeededVector, ChunkLocalCachingBiomeProvider> biomeProviderCache = CacheBuilder.newBuilder()
|
||||
.maximumSize(128)
|
||||
.build(new CacheLoader<>() {
|
||||
@Override
|
||||
public @NotNull ChunkLocalCachingBiomeProvider load(@NotNull SeededVector key) {
|
||||
return pack.getBiomeProvider().caching(key.worldProperties, key.x, key.z);
|
||||
}
|
||||
});
|
||||
|
||||
private record SeededVector(int x, int z, WorldProperties worldProperties) {
|
||||
@Override
|
||||
@@ -95,7 +83,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
|
||||
@Override
|
||||
public void generateNoise(@NotNull WorldInfo worldInfo, @NotNull Random random, int x, int z, @NotNull ChunkData chunkData) {
|
||||
BukkitWorldProperties properties = new BukkitWorldProperties(worldInfo);
|
||||
delegate.generateChunkData(new BukkitProtoChunk(chunkData), properties, biomeProviderCache.getUnchecked(new SeededVector(x, z, new BukkitWorldProperties(worldInfo))), x, z);
|
||||
delegate.generateChunkData(new BukkitProtoChunk(chunkData), properties, pack.getBiomeProvider(), x, z);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -106,7 +94,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
|
||||
@Override
|
||||
public void populate(@NotNull WorldInfo worldInfo, @NotNull Random random, int x, int z,
|
||||
@NotNull LimitedRegion limitedRegion) {
|
||||
generationStage.populate(new BukkitProtoWorld(limitedRegion, air, biomeProviderCache.getUnchecked(new SeededVector(x, z, new BukkitWorldProperties(worldInfo)))));
|
||||
generationStage.populate(new BukkitProtoWorld(limitedRegion, air, pack.getBiomeProvider()));
|
||||
}
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package com.dfsek.terra.bukkit.world;
|
||||
|
||||
import com.dfsek.terra.api.world.biome.generation.ChunkLocalCachingBiomeProvider;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.generator.LimitedRegion;
|
||||
import org.slf4j.Logger;
|
||||
|
||||
@@ -141,7 +141,7 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
|
||||
public int getBaseHeight(int x, int z, Heightmap.@NotNull Types heightmap, @NotNull LevelHeightAccessor world) {
|
||||
WorldProperties properties = new NMSWorldProperties(seed, world);
|
||||
int y = properties.getMaxHeight();
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties);
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider();
|
||||
while(y >= getMinY() && !heightmap.isOpaque().test(
|
||||
((CraftBlockData) delegate.getBlock(properties, x, y - 1, z, biomeProvider).getHandle()).getState())) {
|
||||
y--;
|
||||
|
||||
@@ -121,7 +121,7 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
|
||||
public int getBaseHeight(int x, int z, @NotNull Types heightmap, @NotNull LevelHeightAccessor world, @NotNull RandomState noiseConfig) {
|
||||
WorldProperties properties = new NMSWorldProperties(seed, world);
|
||||
int y = properties.getMaxHeight();
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties);
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider();
|
||||
while(y >= getMinY() && !heightmap.isOpaque().test(
|
||||
((CraftBlockData) delegate.getBlock(properties, x, y - 1, z, biomeProvider).getHandle()).getState())) {
|
||||
y--;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package com.dfsek.terra.cli.world;
|
||||
|
||||
import com.dfsek.terra.api.world.biome.generation.ChunkLocalCachingBiomeProvider;
|
||||
|
||||
import com.google.common.collect.Streams;
|
||||
import net.jafama.FastMath;
|
||||
import net.querz.mca.MCAFile;
|
||||
@@ -87,7 +85,7 @@ public class CLIWorld implements ServerWorld, NBTSerializable<Stream<Pair<Vector
|
||||
try {
|
||||
int num = amount.getAndIncrement();
|
||||
CLIChunk chunk = getChunkAt(finalX, finalZ);
|
||||
ChunkLocalCachingBiomeProvider cachingBiomeProvider = pack.getBiomeProvider().caching(this, finalX, finalZ);
|
||||
BiomeProvider cachingBiomeProvider = pack.getBiomeProvider();
|
||||
chunkGenerator.generateChunkData(chunk, this, cachingBiomeProvider, finalX, finalZ);
|
||||
CLIProtoWorld protoWorld = new CLIProtoWorld(this, cachingBiomeProvider, finalX, finalZ);
|
||||
pack.getStages().forEach(stage -> stage.populate(protoWorld));
|
||||
|
||||
@@ -95,9 +95,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
|
||||
if(chunk instanceof net.minecraft.world.chunk.ProtoChunk) {
|
||||
ChunkPos pos = chunk.getPos();
|
||||
((BiomeProviderHolder) chunk)
|
||||
.terra$setHeldBiomeProvider(pack.getBiomeProvider()
|
||||
.caching((ProtoWorld) ((StructureAccessorAccessor) structureAccessor).getWorld(), pos.x,
|
||||
pos.z));
|
||||
.terra$setHeldBiomeProvider(pack.getBiomeProvider());
|
||||
}
|
||||
return super.populateBiomes(biomeRegistry, executor, noiseConfig, blender, structureAccessor, chunk);
|
||||
}
|
||||
@@ -142,10 +140,10 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
|
||||
if(chunk instanceof BiomeProviderHolder providerHolder) {
|
||||
biomeProvider = providerHolder.terra$getHeldBiomeProvider();
|
||||
if(biomeProvider == null) {
|
||||
biomeProvider = pack.getBiomeProvider().caching(world, chunk.getPos().x, chunk.getPos().z);
|
||||
biomeProvider = pack.getBiomeProvider();
|
||||
}
|
||||
} else {
|
||||
biomeProvider = pack.getBiomeProvider().caching(world, chunk.getPos().x, chunk.getPos().z);
|
||||
biomeProvider = pack.getBiomeProvider();
|
||||
}
|
||||
delegate.generateChunkData((ProtoChunk) chunk, world, biomeProvider, chunk.getPos().x, chunk.getPos().z);
|
||||
|
||||
@@ -208,7 +206,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
|
||||
@Override
|
||||
public int getHeight(int x, int z, Type heightmap, HeightLimitView height, NoiseConfig noiseConfig) {
|
||||
WorldProperties properties = FabricAdapter.adapt(height, noiseConfig.getLegacyWorldSeed());
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties);
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider();
|
||||
int min = height.getBottomY();
|
||||
for(int y = height.getTopY() - 1; y >= min; y--) {
|
||||
if(heightmap
|
||||
@@ -222,7 +220,7 @@ public class FabricChunkGeneratorWrapper extends net.minecraft.world.gen.chunk.C
|
||||
public VerticalBlockSample getColumnSample(int x, int z, HeightLimitView height, NoiseConfig noiseConfig) {
|
||||
BlockState[] array = new BlockState[height.getHeight()];
|
||||
WorldProperties properties = FabricAdapter.adapt(height, noiseConfig.getLegacyWorldSeed());
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties);
|
||||
BiomeProvider biomeProvider = pack.getBiomeProvider();
|
||||
for(int y = height.getTopY() - 1; y >= height.getBottomY(); y--) {
|
||||
array[y - height.getBottomY()] = (BlockState) delegate.getBlock(properties, x, y, z, biomeProvider);
|
||||
}
|
||||
|
||||
@@ -75,26 +75,13 @@ public abstract class ChunkRegionMixin {
|
||||
@Final
|
||||
private MultiTickScheduler<Fluid> fluidTickScheduler;
|
||||
|
||||
@Shadow
|
||||
public abstract net.minecraft.server.world.ServerWorld toServerWorld();
|
||||
|
||||
@Shadow
|
||||
public abstract Chunk getChunk(int chunkX, int chunkZ);
|
||||
|
||||
private Lazy<BiomeProvider> caching;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Inject(at = @At("RETURN"),
|
||||
method = "<init>(Lnet/minecraft/server/world/ServerWorld;Ljava/util/List;Lnet/minecraft/world/chunk/ChunkStatus;I)V")
|
||||
public void injectConstructor(net.minecraft.server.world.ServerWorld world, List<net.minecraft.world.chunk.Chunk> list,
|
||||
ChunkStatus chunkStatus, int i,
|
||||
CallbackInfo ci) {
|
||||
this.terra$config = ((ServerWorld) world).getPack();
|
||||
this.caching = Lazy.lazy(() -> ((TerraBiomeSource) ((ChunkRegion) (Object) this)
|
||||
.toServerWorld()
|
||||
.getChunkManager()
|
||||
.getChunkGenerator()
|
||||
.getBiomeSource()).getProvider().caching((ProtoWorld) this));
|
||||
}
|
||||
|
||||
|
||||
@@ -137,11 +124,7 @@ public abstract class ChunkRegionMixin {
|
||||
}
|
||||
|
||||
public BiomeProvider terraWorld$getBiomeProvider() {
|
||||
BiomeProvider provider = ((BiomeProviderHolder) this).terra$getHeldBiomeProvider();
|
||||
if(provider != null) {
|
||||
return provider;
|
||||
}
|
||||
return caching.value();
|
||||
return terra$config.getBiomeProvider();
|
||||
}
|
||||
|
||||
public Entity terraWorld$spawnEntity(double x, double y, double z, EntityType entityType) {
|
||||
|
||||
Reference in New Issue
Block a user