Repository: spongepowered/sponge
Issue: setBiome uses incorrect math

### Affected Product(s)

SpongeForge, SpongeVanilla

### Version

spongevanilla-1.16.5-8.1.0-RC1134

### Operating System

Linux

### Java Version

17.0.3

### Plugins/Mods

```shell
WorldEdit
```


### Describe the bug

setBiome uses incorrect math, specifically in `VolumeStreamUtils#setBiomeOnNativeChunk` it takes block positions but does not shift them `>> 2` to convert them to "quad" positions, as e.g. `BiomeManager#getNoiseBiomeAtPosition` does.

### Link to logs

_No response_

Changed files:
src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/LevelMixin_API.java
src/main/java/org/spongepowered/common/world/volume/VolumeStreamUtils.java

diff --git a/src/main/java/org/spongepowered/common/world/volume/VolumeStreamUtils.java b/src/main/java/org/spongepowered/common/world/volume/VolumeStreamUtils.java
index abf748d92..1f49ee52e 100644
--- a/src/main/java/org/spongepowered/common/world/volume/VolumeStreamUtils.java
+++ b/src/main/java/org/spongepowered/common/world/volume/VolumeStreamUtils.java
@@ -160,17 +160,17 @@ public static Function<ChunkAccess, Stream<Map.Entry<BlockPos, BlockState>>> get
         return VolumeStreamUtils.getElementByPosition(VolumeStreamUtils.chunkSectionBlockStateGetter(), min, max);
     }
 
-    public static boolean setBiomeOnNativeChunk(final int x, final int y, final int z, final
-        org.spongepowered.api.world.biome.Biome biome, final Supplier<@Nullable ChunkBiomeContainerAccessor> accessor,
+    public static boolean setBiomeOnNativeChunk(final int x, final int y, final int z,
+        final org.spongepowered.api.world.biome.Biome biome, final Supplier<@Nullable ChunkBiomeContainerAccessor> accessor,
         final Runnable finalizer
-        ) {
+    ) {
         @Nullable final ChunkBiomeContainerAccessor chunkBiomeContainerAccessor = accessor.get();
         if (chunkBiomeContainerAccessor == null) {
             return false;
         }
-        final int maskedX = x & ChunkBiomeContainer.HORIZONTAL_MASK;
-        final int maskedY = Mth.clamp(y, 0, ChunkBiomeContainer.VERTICAL_MASK);
-        final int maskedZ = z & ChunkBiomeContainer.HORIZONTAL_MASK;
+        final int maskedX = (x >> 2) & ChunkBiomeContainer.HORIZONTAL_MASK;
+        final int maskedY = Mth.clamp((y >> 2), 0, ChunkBiomeContainer.VERTICAL_MASK);
+        final int maskedZ = (z >> 2) & ChunkBiomeContainer.HORIZONTAL_MASK;
         final int WIDTH_BITS = ChunkBiomeContainerAccessor.accessor$WIDTH_BITS();
         final int posKey = maskedY << WIDTH_BITS + WIDTH_BITS | maskedZ << WIDTH_BITS | maskedX;
         final Biome[] biomes = chunkBiomeContainerAccessor.accessor$biomes();
diff --git a/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/LevelMixin_API.java b/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/LevelMixin_API.java
index 4a834f244..e7d0f19b6 100644
--- a/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/LevelMixin_API.java
+++ b/src/mixins/java/org/spongepowered/common/mixin/api/minecraft/world/level/LevelMixin_API.java
@@ -453,7 +453,7 @@ public VolumeStream<W, Entity> entityStream(final Vector3i min, final Vector3i m
     @SuppressWarnings("rawtypes")
     @Override
     public boolean setBiome(final int x, final int y, final int z, final Biome biome) {
-        if (!((Level) (Object) this).hasChunk(x << 4, z << 4)) {
+        if (!((Level) (Object) this).hasChunk(x >> 4, z >> 4)) {
             return false;
         }
         final LevelChunk levelChunk = this.shadow$getChunkAt(new BlockPos(x, y, z));