This commit is contained in:
dfsek
2022-05-31 16:43:43 -07:00
parent b93ff99b2e
commit 68ac277471
3 changed files with 39 additions and 60 deletions
@@ -93,7 +93,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
@Override @Override
public boolean shouldGenerateDecorations() { public boolean shouldGenerateDecorations() {
return false; return true;
} }
@@ -46,7 +46,7 @@ public class NMSBiomeInjector {
CraftServer craftserver = (CraftServer) Bukkit.getServer(); CraftServer craftserver = (CraftServer) Bukkit.getServer();
DedicatedServer dedicatedserver = craftserver.getServer(); DedicatedServer dedicatedserver = craftserver.getServer();
return (IRegistryWritable<BiomeBase>) dedicatedserver return (IRegistryWritable<BiomeBase>) dedicatedserver
.aU() // getRegistryManager .aU() // getRegistryManager
.b( // getRegistry .b( // getRegistry
IRegistry.aP // biome registry key IRegistry.aP // biome registry key
@@ -64,7 +64,6 @@ public class NMSBiomeInjector {
frozen.set(biomeRegistry, false); frozen.set(biomeRegistry, false);
configRegistry.forEach(pack -> pack.getRegistry(Biome.class).forEach((key, biome) -> { configRegistry.forEach(pack -> pack.getRegistry(Biome.class).forEach((key, biome) -> {
try { try {
BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome(); BukkitPlatformBiome platformBiome = (BukkitPlatformBiome) biome.getPlatformBiome();
@@ -92,7 +91,6 @@ public class NMSBiomeInjector {
frozen.set(biomeRegistry, true); // freeze registry again :) frozen.set(biomeRegistry, true); // freeze registry again :)
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException exception) { } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException exception) {
throw new RuntimeException(exception); throw new RuntimeException(exception);
} }
@@ -111,35 +109,28 @@ public class NMSBiomeInjector {
terraBiomeMap terraBiomeMap
.forEach((vb, terraBiomes) -> .forEach((vb, terraBiomes) ->
getEntry(biomeRegistry, vb) getEntry(biomeRegistry, vb)
.ifPresentOrElse(vanilla -> terraBiomes .ifPresentOrElse(
.forEach(tb -> vanilla -> terraBiomes
getEntry(biomeRegistry, tb) .forEach(tb -> getEntry(biomeRegistry, tb)
.ifPresentOrElse( .ifPresentOrElse(
terra -> { terra -> {
LOGGER.debug( LOGGER.debug(vanilla.e().orElseThrow().a() +
vanilla.e() " (vanilla for " +
.orElseThrow() terra.e().orElseThrow().a() +
.a() + ": " +
" (vanilla for " + vanilla.c().toList());
terra.e()
.orElseThrow()
.a() +
": " +
vanilla.c()
.toList());
vanilla.c() vanilla.c()
.forEach( .forEach(
tag -> collect tag -> collect
.computeIfAbsent( .computeIfAbsent(tag,
tag, t -> new ArrayList<>())
t -> new ArrayList<>()) .add(terra));
.add(terra)); },
}, () -> LOGGER.error(
() -> LOGGER.error( "No such biome: {}",
"No such biome: {}", tb))),
tb))), () -> LOGGER.error("No vanilla biome: {}", vb)));
() -> LOGGER.error("No vanilla biome: {}", vb)));
biomeRegistry.k(); // clearTags biomeRegistry.k(); // clearTags
biomeRegistry.a(ImmutableMap.copyOf(collect)); // populateTags biomeRegistry.a(ImmutableMap.copyOf(collect)); // populateTags
@@ -170,9 +161,9 @@ public class NMSBiomeInjector {
BiomeSettingsGeneration.a generationBuilder = new BiomeSettingsGeneration.a(); // builder BiomeSettingsGeneration.a generationBuilder = new BiomeSettingsGeneration.a(); // builder
builder.a(generationBuilder.a()) builder.a(generationBuilder.a())
.a(vanilla.c()) .a(vanilla.c())
.b(vanilla.h()) // precipitation .b(vanilla.h()) // precipitation
.a(vanilla.i()); // temp .a(vanilla.i()); // temp
BiomeFog.a effects = new BiomeFog.a(); // Builder BiomeFog.a effects = new BiomeFog.a(); // Builder
@@ -1,23 +1,13 @@
package com.dfsek.terra.bukkit.nms; package com.dfsek.terra.bukkit.nms;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.info.WorldProperties;
import com.dfsek.terra.bukkit.world.BukkitAdapter;
import com.dfsek.terra.bukkit.world.block.data.BukkitBlockState;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import net.minecraft.core.BlockPosition; import net.minecraft.core.BlockPosition;
import net.minecraft.core.IRegistry; import net.minecraft.core.IRegistry;
import net.minecraft.core.IRegistryWritable;
import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.server.level.RegionLimitedWorldAccess; import net.minecraft.server.level.RegionLimitedWorldAccess;
import net.minecraft.world.level.BlockColumn; import net.minecraft.world.level.BlockColumn;
import net.minecraft.world.level.GeneratorAccessSeed;
import net.minecraft.world.level.LevelHeightAccessor; import net.minecraft.world.level.LevelHeightAccessor;
import net.minecraft.world.level.StructureManager; import net.minecraft.world.level.StructureManager;
import net.minecraft.world.level.biome.BiomeBase;
import net.minecraft.world.level.biome.BiomeManager; import net.minecraft.world.level.biome.BiomeManager;
import net.minecraft.world.level.biome.Climate; import net.minecraft.world.level.biome.Climate;
import net.minecraft.world.level.biome.Climate.Sampler; import net.minecraft.world.level.biome.Climate.Sampler;
@@ -31,7 +21,6 @@ import net.minecraft.world.level.levelgen.blending.Blender;
import net.minecraft.world.level.levelgen.structure.StructureSet; import net.minecraft.world.level.levelgen.structure.StructureSet;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_18_R2.CraftServer; import org.bukkit.craftbukkit.v1_18_R2.CraftServer;
import org.bukkit.craftbukkit.v1_18_R2.CraftWorld;
import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData; import org.bukkit.craftbukkit.v1_18_R2.block.data.CraftBlockData;
import java.util.List; import java.util.List;
@@ -39,9 +28,12 @@ import java.util.Optional;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import com.dfsek.terra.api.config.ConfigPack;
import com.dfsek.terra.api.world.biome.generation.BiomeProvider;
import com.dfsek.terra.api.world.info.WorldProperties;
public class NMSChunkGeneratorDelegate extends ChunkGenerator { public class NMSChunkGeneratorDelegate extends ChunkGenerator {
private final NMSBiomeProvider biomeSource; private final NMSBiomeProvider biomeSource;
private final com.dfsek.terra.api.world.chunk.generation.ChunkGenerator delegate; private final com.dfsek.terra.api.world.chunk.generation.ChunkGenerator delegate;
@@ -54,7 +46,7 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
CraftServer craftserver = (CraftServer) Bukkit.getServer(); CraftServer craftserver = (CraftServer) Bukkit.getServer();
DedicatedServer dedicatedserver = craftserver.getServer(); DedicatedServer dedicatedserver = craftserver.getServer();
return dedicatedserver return dedicatedserver
.aU() // getRegistryManager .aU() // getRegistryManager
.b( // getRegistry .b( // getRegistry
IRegistry.aM // biome registry key IRegistry.aM // biome registry key
@@ -94,11 +86,6 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
} }
@Override
public void a(GeneratorAccessSeed gas, StructureManager manager, IChunkAccess ica) {
vanilla.a(gas, manager, ica);
}
@Override @Override
protected Codec<? extends ChunkGenerator> b() { protected Codec<? extends ChunkGenerator> b() {
return ChunkGeneratorAbstract.a; return ChunkGeneratorAbstract.a;
@@ -110,7 +97,8 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
WorldProperties properties = new NMSWorldProperties(seed, height); WorldProperties properties = new NMSWorldProperties(seed, height);
BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties); BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties);
for(int y = properties.getMaxHeight() - 1; y >= properties.getMinHeight(); y--) { for(int y = properties.getMaxHeight() - 1; y >= properties.getMinHeight(); y--) {
array[y - properties.getMinHeight()] = ((CraftBlockData) delegate.getBlock(properties, x, y, z, biomeProvider).getHandle()).getState(); array[y - properties.getMinHeight()] = ((CraftBlockData) delegate.getBlock(properties, x, y, z, biomeProvider)
.getHandle()).getState();
} }
return new BlockColumn(getMinimumY(), array); return new BlockColumn(getMinimumY(), array);
} }