Skip to content

Commit

Permalink
feat: Add micro-opimisation for populating biomes in chunk sections
Browse files Browse the repository at this point in the history
This optimisations swaps the order of the Y and Z axis `fori` loops. This is taken from [Rho](https://github.com/jaskarth/rho/blob/main/src/main/java/supercoder79/rho/mixin/MixinNoiseChunkGenerator.java).
  • Loading branch information
Steveplays28 committed Nov 12, 2023
1 parent 9233fcf commit d407c92
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.github.steveplays28.noisium.mixin;

import net.minecraft.registry.entry.RegistryEntry;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.source.BiomeSupplier;
import net.minecraft.world.biome.source.util.MultiNoiseUtil;
import net.minecraft.world.chunk.ChunkSection;
import net.minecraft.world.chunk.PalettedContainer;
import net.minecraft.world.chunk.ReadableContainer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;

@Mixin(ChunkSection.class)
public class ChunkSectionMixin {
@Unique
private static final int sliceSize = 4;

@Shadow
private ReadableContainer<RegistryEntry<Biome>> biomeContainer;

/**
* @author Steveplays28
* @reason Axis order micro-optimisation
*/
@Overwrite
public void populateBiomes(BiomeSupplier biomeSupplier, MultiNoiseUtil.MultiNoiseSampler sampler, int x, int y, int z) {
PalettedContainer<RegistryEntry<Biome>> palettedContainer = this.biomeContainer.slice();

for (int posX = 0; posX < sliceSize; ++posX) {
for (int posZ = 0; posZ < sliceSize; ++posZ) {
for (int posY = 0; posY < sliceSize; ++posY) {
palettedContainer.swapUnsafe(posX, posY, posZ, biomeSupplier.getBiome(x + posX, y + posY, z + posZ, sampler));
}
}
}

this.biomeContainer = palettedContainer;
}
}
1 change: 1 addition & 0 deletions src/main/resources/noisium.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"compatibilityLevel": "JAVA_17",
"mixins": [
"ChainedBlockSourceMixin",
"ChunkSectionMixin",
"NoiseChunkGeneratorMixin"
],
"client": [
Expand Down

0 comments on commit d407c92

Please sign in to comment.