diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeInjector.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeInjector.java index a40b68439..f9db6aa15 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeInjector.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeInjector.java @@ -74,8 +74,8 @@ public class NMSBiomeInjector { ResourceKey delegateKey = ResourceKey.a(IRegistry.aP, new MinecraftKey("terra", createBiomeID(pack, key))); RegistryGeneration.a(RegistryGeneration.i, delegateKey, platform); - Holder resourceKey = biomeRegistry.a(delegateKey, platform, Lifecycle.stable()); - platformBiome.setResourceKey(resourceKey); + biomeRegistry.a(delegateKey, platform, Lifecycle.stable()); + platformBiome.setResourceKey(delegateKey); terraBiomeMap.computeIfAbsent(vanillaMinecraftKey, i -> new ArrayList<>()).add(delegateKey.a()); @@ -87,6 +87,7 @@ public class NMSBiomeInjector { frozen.set(biomeRegistry, true); // freeze registry again :) + /* LOGGER.info("Doing tag garbage...."); Map, List>> collect = biomeRegistry .g() // streamKeysAndEntries @@ -130,6 +131,8 @@ public class NMSBiomeInjector { biomeRegistry.k(); // clearTags biomeRegistry.a(ImmutableMap.copyOf(collect)); // populateTags + + */ } catch(NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException exception) { throw new RuntimeException(exception); } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeProvider.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeProvider.java index 2d061e5e2..811dd09a5 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeProvider.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSBiomeProvider.java @@ -1,14 +1,20 @@ package com.dfsek.terra.bukkit.nms; +import com.dfsek.terra.api.util.generic.Lazy; import com.dfsek.terra.api.world.biome.generation.BiomeProvider; import com.dfsek.terra.bukkit.world.BukkitPlatformBiome; import com.mojang.serialization.Codec; import net.minecraft.core.Holder; +import net.minecraft.core.IRegistry; +import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.world.level.biome.BiomeBase; import net.minecraft.world.level.biome.Climate.Sampler; import net.minecraft.world.level.biome.WorldChunkManager; +import org.bukkit.Bukkit; +import org.bukkit.craftbukkit.v1_18_R2.CraftServer; +import org.bukkit.craftbukkit.v1_18_R2.block.CraftBlock; public class NMSBiomeProvider extends WorldChunkManager { @@ -16,8 +22,13 @@ public class NMSBiomeProvider extends WorldChunkManager { private final WorldChunkManager vanilla; private final long seed; + private static final Lazy> biomeRegistry = Lazy.lazy(() -> { + DedicatedServer dedicatedserver = ((CraftServer) Bukkit.getServer()).getServer(); + return dedicatedserver.aU().b(IRegistry.aP); + }); + public NMSBiomeProvider(BiomeProvider delegate, WorldChunkManager vanilla, long seed) { - super(vanilla.b().stream()); + super(delegate.stream().map(biome -> biomeRegistry.value().g(((BukkitPlatformBiome) biome.getPlatformBiome()).getResourceKey()))); this.delegate = delegate; this.vanilla = vanilla; this.seed = seed; @@ -39,6 +50,7 @@ public class NMSBiomeProvider extends WorldChunkManager { @Override public Holder getNoiseBiome(int x, int y, int z, Sampler sampler) { - return ((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed).getPlatformBiome()).getResourceKey(); + //return CraftBlock.biomeToBiomeBase(biomeRegistry.value(), ((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed).getPlatformBiome()).getHandle()); + return biomeRegistry.value().g(((BukkitPlatformBiome) delegate.getBiome(x << 2, y << 2, z << 2, seed).getPlatformBiome()).getResourceKey()); } } diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSInjectListener.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSInjectListener.java index 33c159b0b..3f0ebfe87 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSInjectListener.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/nms/NMSInjectListener.java @@ -41,6 +41,7 @@ public class NMSInjectListener implements Listener { custom.conf = vanilla.conf; // world config from Spigot serverWorld.k().a.u = custom; + serverWorld.generator = null; LOGGER.info("Successfully injected into world."); INJECT_LOCK.unlock(); diff --git a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java index 3bfc93d8f..8c30076e4 100644 --- a/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java +++ b/platforms/bukkit/src/main/java/com/dfsek/terra/bukkit/world/BukkitPlatformBiome.java @@ -20,22 +20,23 @@ package com.dfsek.terra.bukkit.world; import com.dfsek.terra.api.world.biome.PlatformBiome; import net.minecraft.core.Holder; +import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.biome.BiomeBase; public class BukkitPlatformBiome implements PlatformBiome { private final org.bukkit.block.Biome biome; - private Holder resourceKey; + private ResourceKey resourceKey; public BukkitPlatformBiome(org.bukkit.block.Biome biome) { this.biome = biome; } - public void setResourceKey(Holder resourceKey) { + public void setResourceKey(ResourceKey resourceKey) { this.resourceKey = resourceKey; } - public Holder getResourceKey() { + public ResourceKey getResourceKey() { return resourceKey; }