Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
ZombieHDGaming committed Aug 22, 2019
2 parents adc3704 + e4edfc1 commit 7ece54f
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(ChunkPrimer.class)
@SuppressWarnings("deprecation")
Expand All @@ -21,9 +24,10 @@ public IBlockState getBlockState(int x, int y, int z) {
return state == null ? DEFAULT_STATE : state;
}

@Overwrite
public void setBlockState(int x, int y, int z, IBlockState state) {
@Inject(method = "setBlockState", at = @At(value = "FIELD", target = "Lnet/minecraft/world/chunk/ChunkPrimer;data:[C"), cancellable = true)
private void setIntBlockState(int x, int y, int z, IBlockState state, CallbackInfo ci) {
intData[getBlockIndex(x, y, z)] = Block.BLOCK_STATE_IDS.get(state);
ci.cancel();
}

@Overwrite
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,30 +4,29 @@
import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk;
import net.minecraft.world.gen.ChunkProviderServer;
import net.minecraft.world.gen.IChunkGenerator;
import org.dimdev.jeid.INewChunk;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;

@Mixin(ChunkProviderServer.class)
public class MixinChunkProviderServer {
@Shadow @Final public WorldServer world;
private Biome[] reusableBiomeList = new Biome[256];

/** @reason Return an empty biome byte array if the chunk is using an int biome array. **/
@Redirect(method = "provideChunk", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/gen/IChunkGenerator;generateChunk(II)Lnet/minecraft/world/chunk/Chunk;"))
private Chunk generateChunk(IChunkGenerator generator, int x, int z) {
Chunk chunk = generator.generateChunk(x, z);
@Inject(method = "provideChunk", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/world/gen/IChunkGenerator;generateChunk(II)Lnet/minecraft/world/chunk/Chunk;"), locals = LocalCapture.CAPTURE_FAILHARD)
private void initializeBiomeArray(int x, int z, CallbackInfoReturnable<Chunk> cir, Chunk chunk) {
Biome[] biomes = world.getBiomeProvider().getBiomes(reusableBiomeList, x * 16, z * 16, 16, 16);

INewChunk newChunk = (INewChunk) chunk;
int[] intBiomeArray = newChunk.getIntBiomeArray();
for (int i = 0; i < intBiomeArray.length; ++i) {
intBiomeArray[i] = Biome.getIdForBiome(biomes[i]);
}
return chunk;
}
}

0 comments on commit 7ece54f

Please sign in to comment.