Skip to content

Commit bc5fb49

Browse files
Fix "Unregistered holder" exception when setting biome (#4237)
1 parent 0a75cbc commit bc5fb49

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

src/main/java/org/spongepowered/common/world/volume/VolumeStreamUtils.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import net.minecraft.core.SectionPos;
3232
import net.minecraft.core.registries.Registries;
3333
import net.minecraft.nbt.CompoundTag;
34+
import net.minecraft.resources.ResourceKey;
3435
import net.minecraft.server.level.ServerLevel;
3536
import net.minecraft.util.Tuple;
3637
import net.minecraft.world.entity.Entity;
@@ -60,6 +61,7 @@
6061
import org.spongepowered.api.world.volume.stream.StreamOptions;
6162
import org.spongepowered.api.world.volume.stream.VolumeElement;
6263
import org.spongepowered.api.world.volume.stream.VolumeStream;
64+
import org.spongepowered.common.SpongeCommon;
6365
import org.spongepowered.common.accessor.client.multiplayer.ClientLevelAccessor;
6466
import org.spongepowered.common.accessor.server.level.ServerLevelAccessor;
6567
import org.spongepowered.common.accessor.world.level.block.entity.BlockEntityAccessor;
@@ -177,7 +179,11 @@ public static boolean setBiomeOnNativeChunk(final int x, final int y, final int
177179
final int maskedX = x & 3;
178180
final int maskedY = y & 3;
179181
final int maskedZ = z & 3;
180-
final var old = ((PalettedContainer<Holder<Biome>>) section.getBiomes()).getAndSet(maskedX, maskedY, maskedZ, Holder.direct((Biome) (Object) biome));
182+
final Registry<Biome> biomeRegistry = SpongeCommon.vanillaRegistry(Registries.BIOME);
183+
final ResourceKey<Biome> biomeResourceKey = biomeRegistry.getResourceKey((Biome) (Object) biome)
184+
.orElseThrow(() -> new IllegalStateException("Missing resource in " + biomeRegistry.key() + ": " + biome));
185+
final Holder.Reference<Biome> biomeHolder = biomeRegistry.getHolderOrThrow(biomeResourceKey);
186+
final var old = ((PalettedContainer<Holder<Biome>>) section.getBiomes()).getAndSet(maskedX, maskedY, maskedZ, biomeHolder);
181187
if (old.value() == (Object) biome) {
182188
return false;
183189
}

0 commit comments

Comments
 (0)