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

View File

@@ -93,7 +93,7 @@ public class BukkitChunkGeneratorWrapper extends org.bukkit.generator.ChunkGener
@Override
public boolean shouldGenerateDecorations() {
return false;
return true;
}

View File

@@ -45,8 +45,8 @@ public class NMSBiomeInjector {
public static IRegistryWritable<BiomeBase> getBiomeRegistry() {
CraftServer craftserver = (CraftServer) Bukkit.getServer();
DedicatedServer dedicatedserver = craftserver.getServer();
return (IRegistryWritable<BiomeBase>) dedicatedserver
return (IRegistryWritable<BiomeBase>) dedicatedserver
.aU() // getRegistryManager
.b( // getRegistry
IRegistry.aP // biome registry key
@@ -62,7 +62,6 @@ public class NMSBiomeInjector {
Field frozen = RegistryMaterials.class.getDeclaredField("bL"); // registry frozen field
frozen.setAccessible(true);
frozen.set(biomeRegistry, false);
configRegistry.forEach(pack -> pack.getRegistry(Biome.class).forEach((key, biome) -> {
@@ -80,7 +79,7 @@ public class NMSBiomeInjector {
RegistryGeneration.a(RegistryGeneration.i, delegateKey, platform);
biomeRegistry.a(delegateKey, platform, Lifecycle.stable());
platformBiome.setResourceKey(delegateKey);
terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.a());
LOGGER.debug("Registered biome: " + delegateKey);
@@ -90,7 +89,6 @@ public class NMSBiomeInjector {
}));
frozen.set(biomeRegistry, true); // freeze registry again :)
} catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException exception) {
@@ -107,43 +105,36 @@ public class NMSBiomeInjector {
(map, pair) ->
map.put(pair.getFirst(), new ArrayList<>(pair.getSecond().a().toList())),
HashMap::putAll);
terraBiomeMap
.forEach((vb, terraBiomes) ->
getEntry(biomeRegistry, vb)
.ifPresentOrElse(vanilla -> terraBiomes
.forEach(tb ->
getEntry(biomeRegistry, tb)
.ifPresentOrElse(
terra -> {
LOGGER.debug(
vanilla.e()
.orElseThrow()
.a() +
" (vanilla for " +
terra.e()
.orElseThrow()
.a() +
": " +
vanilla.c()
.toList());
vanilla.c()
.forEach(
tag -> collect
.computeIfAbsent(
tag,
t -> new ArrayList<>())
.add(terra));
},
() -> LOGGER.error(
"No such biome: {}",
tb))),
() -> LOGGER.error("No vanilla biome: {}", vb)));
.ifPresentOrElse(
vanilla -> terraBiomes
.forEach(tb -> getEntry(biomeRegistry, tb)
.ifPresentOrElse(
terra -> {
LOGGER.debug(vanilla.e().orElseThrow().a() +
" (vanilla for " +
terra.e().orElseThrow().a() +
": " +
vanilla.c().toList());
vanilla.c()
.forEach(
tag -> collect
.computeIfAbsent(tag,
t -> new ArrayList<>())
.add(terra));
},
() -> LOGGER.error(
"No such biome: {}",
tb))),
() -> LOGGER.error("No vanilla biome: {}", vb)));
biomeRegistry.k(); // clearTags
biomeRegistry.a(ImmutableMap.copyOf(collect)); // populateTags
}
public static <T> Optional<Holder<T>> getEntry(IRegistry<T> registry, MinecraftKey identifier) {
@@ -170,9 +161,9 @@ public class NMSBiomeInjector {
BiomeSettingsGeneration.a generationBuilder = new BiomeSettingsGeneration.a(); // builder
builder.a(generationBuilder.a())
.a(vanilla.c())
.b(vanilla.h()) // precipitation
.a(vanilla.i()); // temp
.a(vanilla.c())
.b(vanilla.h()) // precipitation
.a(vanilla.i()); // temp
BiomeFog.a effects = new BiomeFog.a(); // Builder

View File

@@ -1,23 +1,13 @@
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 net.minecraft.core.BlockPosition;
import net.minecraft.core.IRegistry;
import net.minecraft.core.IRegistryWritable;
import net.minecraft.server.dedicated.DedicatedServer;
import net.minecraft.server.level.RegionLimitedWorldAccess;
import net.minecraft.world.level.BlockColumn;
import net.minecraft.world.level.GeneratorAccessSeed;
import net.minecraft.world.level.LevelHeightAccessor;
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.Climate;
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 org.bukkit.Bukkit;
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 java.util.List;
@@ -39,9 +28,12 @@ import java.util.Optional;
import java.util.concurrent.CompletableFuture;
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 {
private final NMSBiomeProvider biomeSource;
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();
DedicatedServer dedicatedserver = craftserver.getServer();
return dedicatedserver
return dedicatedserver
.aU() // getRegistryManager
.b( // getRegistry
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
protected Codec<? extends ChunkGenerator> b() {
return ChunkGeneratorAbstract.a;
@@ -110,7 +97,8 @@ public class NMSChunkGeneratorDelegate extends ChunkGenerator {
WorldProperties properties = new NMSWorldProperties(seed, height);
BiomeProvider biomeProvider = pack.getBiomeProvider().caching(properties);
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);
}