mirror of
https://github.com/GTMEGA/EndlessIDs.git
synced 2026-11-12 08:27:49 +00:00
BIDE porting... (chunk and worldgen stuff)
This commit is contained in:
6 files changed
+200
-45
No files matched your search
@@ -5,5 +5,4 @@ import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
|
||||
public interface IChunkMixin {
|
||||
short[] getBiomeShortArray();
|
||||
void setBiomeShortArray(short[] data);
|
||||
ExtendedBlockStorage _getBlockStorageArray(int index);
|
||||
}
|
||||
+10
@@ -73,4 +73,14 @@ public abstract class ChunkMixin implements IChunkMixin {
|
||||
|
||||
return BiomeGenBase.getBiome(id) == null ? BiomeGenBase.plains : BiomeGenBase.getBiome(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public short[] getBiomeShortArray() {
|
||||
return blockBiomeShortArray;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiomeShortArray(short[] data) {
|
||||
blockBiomeShortArray = data;
|
||||
}
|
||||
}
|
||||
+13
-14
@@ -31,22 +31,21 @@ public abstract class ChunkProviderEndMixin {
|
||||
* @reason Direct port from decompiled code
|
||||
*/
|
||||
@Overwrite
|
||||
public Chunk provideChunk(int p_73154_1_, int p_73154_2_) {
|
||||
this.endRNG.setSeed((long)p_73154_1_ * 341873128712L + (long)p_73154_2_ * 132897987541L);
|
||||
Block[] var3 = new Block[32768];
|
||||
byte[] var4 = new byte[var3.length];
|
||||
this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, p_73154_1_ * 16, p_73154_2_ * 16, 16, 16);
|
||||
this.func_147420_a(p_73154_1_, p_73154_2_, var3, this.biomesForGeneration);
|
||||
this.replaceBiomeBlocks(p_73154_1_, p_73154_2_, var3, this.biomesForGeneration, var4);
|
||||
Chunk var5 = new Chunk(this.endWorld, var3, var4, p_73154_1_, p_73154_2_);
|
||||
@SuppressWarnings("ConstantConditions") //Mixin moment
|
||||
short[] var6 = ((IChunkMixin)var5).getBiomeShortArray();
|
||||
public Chunk provideChunk(int x, int z) {
|
||||
this.endRNG.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
|
||||
Block[] blocks = new Block[32768];
|
||||
byte[] metadatas = new byte[blocks.length];
|
||||
this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, x * 16, z * 16, 16, 16);
|
||||
this.func_147420_a(x, z, blocks, this.biomesForGeneration);
|
||||
this.replaceBiomeBlocks(x, z, blocks, this.biomesForGeneration, metadatas);
|
||||
Chunk chunk = new Chunk(this.endWorld, blocks, metadatas, x, z);
|
||||
short[] biomes = ((IChunkMixin)chunk).getBiomeShortArray();
|
||||
|
||||
for(int var7 = 0; var7 < var6.length; ++var7) {
|
||||
var6[var7] = (short)this.biomesForGeneration[var7].biomeID;
|
||||
for(int i = 0; i < biomes.length; ++i) {
|
||||
biomes[i] = (short)this.biomesForGeneration[i].biomeID;
|
||||
}
|
||||
|
||||
var5.generateSkylightMap();
|
||||
return var5;
|
||||
chunk.generateSkylightMap();
|
||||
return chunk;
|
||||
}
|
||||
}
|
||||
+41
-30
@@ -1,64 +1,75 @@
|
||||
package com.falsepattern.endlessids.mixin.mixins.common.vanilla.worldgen;
|
||||
|
||||
import com.sk89q.worldedit.world.chunk.Chunk;
|
||||
import com.falsepattern.endlessids.mixin.helpers.IChunkMixin;
|
||||
import com.falsepattern.endlessids.mixin.helpers.IExtendedBlockStorageMixin;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.chunk.IChunkProvider;
|
||||
import net.minecraft.world.chunk.storage.ExtendedBlockStorage;
|
||||
import net.minecraft.world.gen.ChunkProviderFlat;
|
||||
import net.minecraft.world.gen.MapGenBase;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
@Mixin(ChunkProviderFlat.class)
|
||||
public abstract class ChunkProviderFlatMixin {
|
||||
public abstract class ChunkProviderFlatMixin implements IChunkProvider {
|
||||
@Shadow private World worldObj;
|
||||
|
||||
@Shadow @Final private Block[] cachedBlockIDs;
|
||||
|
||||
@Overwrite
|
||||
public Chunk provideChunk(int var1, int var2) {
|
||||
Chunk var3 = new Chunk(this.worldObj, var1, var2);
|
||||
@Shadow @Final private byte[] cachedBlockMetadata;
|
||||
|
||||
int var6;
|
||||
for(int var4 = 0; var4 < this.cachedBlockIDs.length; ++var4) {
|
||||
Block var5 = this.cachedBlockIDs[var4];
|
||||
if (var5 != null) {
|
||||
var6 = var4 >> 4;
|
||||
ExtendedBlockStorage var7 = var3.getBlockStorageArray()[var6];
|
||||
if (var7 == null) {
|
||||
var7 = new ExtendedBlockStorage(var4, !this.worldObj.provider.hasNoSky);
|
||||
var3.getBlockStorageArray()[var6] = var7;
|
||||
@Shadow @Final private List structureGenerators;
|
||||
|
||||
/**
|
||||
* @author FalsePattern
|
||||
* @reason Direct port from dumped code
|
||||
*/
|
||||
@Overwrite
|
||||
public Chunk provideChunk(int x, int z) {
|
||||
Chunk chunk = new Chunk(this.worldObj, x, z);
|
||||
|
||||
for(int Y = 0; Y < this.cachedBlockIDs.length; ++Y) {
|
||||
Block block = this.cachedBlockIDs[Y];
|
||||
if (block != null) {
|
||||
int ebsID = Y >> 4;
|
||||
ExtendedBlockStorage ebs = chunk.getBlockStorageArray()[ebsID];
|
||||
if (ebs == null) {
|
||||
ebs = new ExtendedBlockStorage(Y, !this.worldObj.provider.hasNoSky);
|
||||
chunk.getBlockStorageArray()[ebsID] = ebs;
|
||||
}
|
||||
|
||||
for(int var8 = 0; var8 < 16; ++var8) {
|
||||
for(int var9 = 0; var9 < 16; ++var9) {
|
||||
var7.setExtBlockID(var8, var4 & 15, var9, var5);
|
||||
var7.setExtBlockMetadata(var8, var4 & 15, var9, this.cachedBlockMetadata[var4]);
|
||||
for(int X = 0; X < 16; ++X) {
|
||||
for(int Z = 0; Z < 16; ++Z) {
|
||||
ebs.func_150818_a(X, Y & 15, Z, block);
|
||||
ebs.setExtBlockMetadata(X, Y & 15, Z, this.cachedBlockMetadata[Y]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var3.generateSkylightMap();
|
||||
BiomeGenBase[] var10 = this.worldObj.getWorldChunkManager().loadBlockGeneratorData((BiomeGenBase[])null, var1 * 16, var2 * 16, 16, 16);
|
||||
short[] var11 = var3.getBiomeShortArray();
|
||||
chunk.generateSkylightMap();
|
||||
BiomeGenBase[] bgb = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(null, x * 16, z * 16, 16, 16);
|
||||
short[] biomeArray = ((IChunkMixin)chunk).getBiomeShortArray();
|
||||
|
||||
for(var6 = 0; var6 < var11.length; ++var6) {
|
||||
var11[var6] = (short)var10[var6].biomeID;
|
||||
for(int i = 0; i < biomeArray.length; ++i) {
|
||||
biomeArray[i] = (short)bgb[i].biomeID;
|
||||
}
|
||||
|
||||
Iterator var12 = this.structureGenerators.iterator();
|
||||
|
||||
while(var12.hasNext()) {
|
||||
MapGenBase var13 = (MapGenBase)var12.next();
|
||||
var13.generate(this, this.worldObj, var1, var2, (Block[])null);
|
||||
for (Object o : this.structureGenerators) {
|
||||
MapGenBase structureGenerator = (MapGenBase) o;
|
||||
structureGenerator.func_151539_a(this, this.worldObj, x, z, null);
|
||||
}
|
||||
|
||||
var3.generateSkylightMap();
|
||||
return var3;
|
||||
chunk.generateSkylightMap();
|
||||
return chunk;
|
||||
}
|
||||
|
||||
}
|
||||
+79
@@ -0,0 +1,79 @@
|
||||
package com.falsepattern.endlessids.mixin.mixins.common.vanilla.worldgen;
|
||||
|
||||
import com.falsepattern.endlessids.mixin.helpers.IChunkMixin;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.chunk.IChunkProvider;
|
||||
import net.minecraft.world.gen.ChunkProviderGenerate;
|
||||
import net.minecraft.world.gen.MapGenBase;
|
||||
import net.minecraft.world.gen.structure.MapGenMineshaft;
|
||||
import net.minecraft.world.gen.structure.MapGenScatteredFeature;
|
||||
import net.minecraft.world.gen.structure.MapGenStronghold;
|
||||
import net.minecraft.world.gen.structure.MapGenVillage;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
@Mixin(ChunkProviderGenerate.class)
|
||||
public abstract class ChunkProviderGenerateMixin implements IChunkProvider {
|
||||
@Shadow public abstract void func_147424_a(int p_147424_1_, int p_147424_2_, Block[] p_147424_3_);
|
||||
|
||||
@Shadow private Random rand;
|
||||
|
||||
@Shadow private BiomeGenBase[] biomesForGeneration;
|
||||
|
||||
@Shadow private World worldObj;
|
||||
|
||||
@Shadow public abstract void replaceBlocksForBiome(int p_147422_1_, int p_147422_2_, Block[] p_147422_3_, byte[] p_147422_4_, BiomeGenBase[] p_147422_5_);
|
||||
|
||||
@Shadow private MapGenBase caveGenerator;
|
||||
|
||||
@Shadow private MapGenBase ravineGenerator;
|
||||
|
||||
@Shadow @Final private boolean mapFeaturesEnabled;
|
||||
|
||||
@Shadow private MapGenMineshaft mineshaftGenerator;
|
||||
|
||||
@Shadow private MapGenVillage villageGenerator;
|
||||
|
||||
@Shadow private MapGenStronghold strongholdGenerator;
|
||||
|
||||
@Shadow private MapGenScatteredFeature scatteredFeatureGenerator;
|
||||
|
||||
/**
|
||||
* @author FalsePattern
|
||||
* @reason Direct port from dumped code
|
||||
*/
|
||||
@Overwrite
|
||||
public Chunk provideChunk(int x, int z) {
|
||||
this.rand.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
|
||||
Block[] blocks = new Block[65536];
|
||||
byte[] metadata = new byte[65536];
|
||||
this.func_147424_a(x, z, blocks);
|
||||
this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, x * 16, z * 16, 16, 16);
|
||||
this.replaceBlocksForBiome(x, z, blocks, metadata, this.biomesForGeneration);
|
||||
this.caveGenerator.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
this.ravineGenerator.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
if (this.mapFeaturesEnabled) {
|
||||
this.mineshaftGenerator.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
this.villageGenerator.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
this.strongholdGenerator.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
this.scatteredFeatureGenerator.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
}
|
||||
|
||||
Chunk chunk = new Chunk(this.worldObj, blocks, metadata, x, z);
|
||||
short[] biomes = ((IChunkMixin)chunk).getBiomeShortArray();
|
||||
|
||||
for(int i = 0; i < biomes.length; ++i) {
|
||||
biomes[i] = (short)this.biomesForGeneration[i].biomeID;
|
||||
}
|
||||
|
||||
chunk.generateSkylightMap();
|
||||
return chunk;
|
||||
}
|
||||
}
|
||||
+57
@@ -0,0 +1,57 @@
|
||||
package com.falsepattern.endlessids.mixin.mixins.common.vanilla.worldgen;
|
||||
|
||||
import com.falsepattern.endlessids.mixin.helpers.IChunkMixin;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.biome.BiomeGenBase;
|
||||
import net.minecraft.world.chunk.Chunk;
|
||||
import net.minecraft.world.chunk.IChunkProvider;
|
||||
import net.minecraft.world.gen.ChunkProviderHell;
|
||||
import net.minecraft.world.gen.MapGenBase;
|
||||
import net.minecraft.world.gen.structure.MapGenNetherBridge;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
@Mixin(ChunkProviderHell.class)
|
||||
public abstract class ChunkProviderHellMixin implements IChunkProvider {
|
||||
|
||||
@Shadow private Random hellRNG;
|
||||
|
||||
@Shadow private World worldObj;
|
||||
|
||||
@Shadow public abstract void func_147419_a(int p_147419_1_, int p_147419_2_, Block[] p_147419_3_);
|
||||
|
||||
@Shadow public abstract void replaceBiomeBlocks(int p_147418_1_, int p_147418_2_, Block[] p_147418_3_, byte[] meta, BiomeGenBase[] biomes);
|
||||
|
||||
@Shadow private MapGenBase netherCaveGenerator;
|
||||
|
||||
@Shadow public MapGenNetherBridge genNetherBridge;
|
||||
|
||||
/**
|
||||
* @author FalsePattern
|
||||
* @reason Direct port from dumped code
|
||||
*/
|
||||
@Overwrite
|
||||
public Chunk provideChunk(int x, int z) {
|
||||
this.hellRNG.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
|
||||
Block[] blocks = new Block[32768];
|
||||
byte[] metadata = new byte[blocks.length];
|
||||
BiomeGenBase[] bgb = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(null, x * 16, z * 16, 16, 16);
|
||||
this.func_147419_a(x, z, blocks);
|
||||
this.replaceBiomeBlocks(x, z, blocks, metadata, bgb);
|
||||
this.netherCaveGenerator.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
this.genNetherBridge.func_151539_a(this, this.worldObj, x, z, blocks);
|
||||
Chunk chunk = new Chunk(this.worldObj, blocks, metadata, x, z);
|
||||
short[] biomes = ((IChunkMixin)chunk).getBiomeShortArray();
|
||||
|
||||
for(int i = 0; i < biomes.length; ++i) {
|
||||
biomes[i] = (short)bgb[i].biomeID;
|
||||
}
|
||||
|
||||
chunk.resetRelightChecks();
|
||||
return chunk;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user