It's time to break y axis.

test
mckuhei 2 years ago
parent 5ae837f1f8
commit f19cc6e533

@ -5,6 +5,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
@ -22,6 +23,8 @@ public class Chunk
*/
private ExtendedBlockStorage[] storageArrays;
private LinkedList<ExtendedBlockStorage>[] extraStorageArray = new LinkedList[256];
/**
* Contains a 16x16 mapping on the X/Z plane of the biome ID to which each colum belongs.
*/
@ -127,12 +130,7 @@ public class Chunk
{
int var10 = var8 >> 4;
if (this.storageArrays[var10] == null)
{
this.storageArrays[var10] = new ExtendedBlockStorage(var10 << 4);
}
this.storageArrays[var10].setExtBlockID(var6, var8 & 15, var7, var9);
getBlockStorage(var10).setExtBlockID(var6, var8 & 15, var7, var9);
}
}
}
@ -179,6 +177,20 @@ public class Chunk
return this.storageArrays;
}
public ExtendedBlockStorage getBlockStorage(int yBase) {
if(yBase < 0 || yBase >= storageArrays.length) {
LinkedList<ExtendedBlockStorage> list = extraStorageArray[yBase & 0xFF];
if(list == null) list = extraStorageArray[yBase & 0xFF] = new LinkedList<>();
for(ExtendedBlockStorage blockStorage : list) if(blockStorage.yBase == yBase) return blockStorage;
ExtendedBlockStorage blockStorage = new ExtendedBlockStorage(yBase);
list.add(blockStorage);
return blockStorage;
} else {
ExtendedBlockStorage blockStorage;
return (blockStorage = storageArrays[yBase]) == null ? storageArrays[yBase] = new ExtendedBlockStorage(yBase) : blockStorage;
}
}
/**
* Generates the height map for a chunk from scratch
*/
@ -510,32 +522,18 @@ public class Chunk
*/
public int getBlockID(int par1, int par2, int par3)
{
if (par2 >> 4 >= this.storageArrays.length)
{
return 0;
}
else
{
ExtendedBlockStorage var4 = this.storageArrays[par2 >> 4];
ExtendedBlockStorage var4 = this.getBlockStorage(par2 >> 4);
return var4 != null ? var4.getExtBlockID(par1, par2 & 15, par3) : 0;
}
}
/**
* Return the metadata corresponding to the given coordinates inside a chunk.
*/
public int getBlockMetadata(int par1, int par2, int par3)
{
if (par2 >> 4 >= this.storageArrays.length)
{
return 0;
}
else
{
ExtendedBlockStorage var4 = this.storageArrays[par2 >> 4];
ExtendedBlockStorage var4 = this.getBlockStorage(par2 >> 4);
return var4 != null ? var4.getExtBlockMetadata(par1, par2 & 15, par3) : 0;
}
}
/**
* Sets a blockID for a position in the chunk. Args: x, y, z, blockID
@ -567,7 +565,7 @@ public class Chunk
}
else
{
ExtendedBlockStorage var10 = this.storageArrays[par2 >> 4];
ExtendedBlockStorage var10 = this.getBlockStorage(par2 >> 4);
boolean var11 = false;
if (var10 == null)
@ -678,7 +676,7 @@ public class Chunk
*/
public boolean setBlockMetadata(int par1, int par2, int par3, int par4)
{
ExtendedBlockStorage var5 = this.storageArrays[par2 >> 4];
ExtendedBlockStorage var5 = this.getBlockStorage(par2 >> 4);
if (var5 == null)
{
@ -719,7 +717,7 @@ public class Chunk
*/
public int getSavedLightValue(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4)
{
ExtendedBlockStorage var5 = this.storageArrays[par3 >> 4];
ExtendedBlockStorage var5 = this.getBlockStorage(par3 >> 4);
return var5 == null ? (this.canBlockSeeTheSky(par2, par3, par4) ? par1EnumSkyBlock.defaultLightValue : 0) : (par1EnumSkyBlock == EnumSkyBlock.Sky ? var5.getExtSkylightValue(par2, par3 & 15, par4) : (par1EnumSkyBlock == EnumSkyBlock.Block ? var5.getExtBlocklightValue(par2, par3 & 15, par4) : par1EnumSkyBlock.defaultLightValue));
}
@ -729,7 +727,7 @@ public class Chunk
*/
public void setLightValue(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4, int par5)
{
ExtendedBlockStorage var6 = this.storageArrays[par3 >> 4];
ExtendedBlockStorage var6 = this.getBlockStorage(par3 >> 4);
if (var6 == null)
{
@ -757,7 +755,7 @@ public class Chunk
*/
public int getBlockLightValue(int par1, int par2, int par3, int par4)
{
ExtendedBlockStorage var5 = this.storageArrays[par2 >> 4];
ExtendedBlockStorage var5 = this.getBlockStorage(par2 >> 4);
if (var5 == null)
{
@ -1197,19 +1195,9 @@ public class Chunk
*/
public boolean getAreLevelsEmpty(int par1, int par2)
{
if (par1 < 0)
{
par1 = 0;
}
if (par2 >= 256)
{
par2 = 255;
}
for (int var3 = par1; var3 <= par2; var3 += 16)
{
ExtendedBlockStorage var4 = this.storageArrays[var3 >> 4];
ExtendedBlockStorage var4 = this.getBlockStorage(var3 >> 4);
if (var4 != null && !var4.isEmpty())
{

@ -56,16 +56,6 @@ public class ChunkCache implements IBlockAccess
* Returns the block ID at coords x,y,z
*/
public int getBlockId(BigInteger par1, int par2, BigInteger par3)
{
if (par2 < 0)
{
return 0;
}
else if (par2 >= 256)
{
return 0;
}
else
{
int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
@ -80,7 +70,6 @@ public class ChunkCache implements IBlockAccess
return 0;
}
}
}
/**
* Returns the TileEntity associated with a given block in X,Y,Z coordinates, or null if no TileEntity exists
@ -208,22 +197,11 @@ public class ChunkCache implements IBlockAccess
* Returns the block metadata at coords x,y,z
*/
public int getBlockMetadata(BigInteger par1, int par2, BigInteger par3)
{
if (par2 < 0)
{
return 0;
}
else if (par2 >= 256)
{
return 0;
}
else
{
int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
return this.chunkArray[var4][var5].getBlockMetadata(par1.intValue() & 15, par2, par3.intValue() & 15);
}
}
/**
* Returns the block's material.

@ -5,7 +5,7 @@ public class ExtendedBlockStorage
/**
* Contains the bottom-most Y block represented by this ExtendedBlockStorage. Typically a multiple of 16.
*/
private int yBase;
int yBase;
/**
* A total count of the number of non-air blocks in this block storage's Chunk.

@ -72,10 +72,10 @@ public class ItemBlock extends Item
{
return false;
}
else if (par5 == 255 && Block.blocksList[this.blockID].blockMaterial.isSolid())
/*else if (par5 == 255 && Block.blocksList[this.blockID].blockMaterial.isSolid())
{
return false;
}
}*/
else if (par3World.canPlaceEntityOnSide(this.blockID, par4, par5, par6, false, par7, par2EntityPlayer))
{
Block var12 = Block.blocksList[this.blockID];

@ -398,10 +398,10 @@ public class NetServerHandler extends NetHandler
return;
}
if (var6 >= this.mcServer.getBuildLimit())
{
return;
}
// if (var6 >= this.mcServer.getBuildLimit())
// {
// return;
// }
}
ChunkCoordinates var19 = var2.getSpawnPoint();
@ -479,11 +479,11 @@ public class NetServerHandler extends NetHandler
this.playerEntity.theItemInWorldManager.tryUseItem(this.playerEntity, var2, var3);
}
else if (par1Packet15Place.getYPosition() >= this.mcServer.getBuildLimit() - 1 && (par1Packet15Place.getDirection() == 1 || par1Packet15Place.getYPosition() >= this.mcServer.getBuildLimit()))
/*else if (par1Packet15Place.getYPosition() >= this.mcServer.getBuildLimit() - 1 && (par1Packet15Place.getDirection() == 1 || par1Packet15Place.getYPosition() >= this.mcServer.getBuildLimit()))
{
this.playerEntity.serverForThisPlayer.sendPacketToPlayer(new Packet3Chat("\u00a77Height limit for building is " + this.mcServer.getBuildLimit()));
var4 = true;
}
}*/
else
{
ChunkCoordinates var10 = var2.getSpawnPoint();

@ -551,9 +551,17 @@ public class RenderGlobal implements IWorldAccess
// this.maxBlockZ = var10;
// }
int sdfvhsdbvfhsdhkbdkjsakjdb = this.renderChunksTall * 16;
int kshdjiajdfjosjofjsdhvfssd = sdfvhsdbvfhsdhkbdkjsakjdb / 2;
for (int var12 = 0; var12 < this.renderChunksTall; ++var12)
{
int var13 = var12 * 16;
int var1000000000000000000000000 = var13 + kshdjiajdfjosjofjsdhvfssd - par2;
if (var1000000000000000000000000 < 0) {
var1000000000000000000000000 -= sdfvhsdbvfhsdhkbdkjsakjdb - 1;
}
var1000000000000000000000000 /= sdfvhsdbvfhsdhkbdkjsakjdb;
int y = var13 - var1000000000000000000000000 * sdfvhsdbvfhsdhkbdkjsakjdb;
// if (var13 < this.minBlockY)
// {
@ -567,7 +575,7 @@ public class RenderGlobal implements IWorldAccess
WorldRenderer var14 = this.worldRenderers[(var9 * this.renderChunksTall + var12) * this.renderChunksWide + var6];
boolean var15 = var14.needsUpdate;
var14.setPosition(x, var13, z);
var14.setPosition(x, y, z);
if (!var15 && var14.needsUpdate)
{ // WTF this is a unreachable code.

@ -256,7 +256,6 @@ public abstract class World implements IBlockAccess
*/
public int getBlockId(BigInteger par1, int par2, BigInteger par3)
{
if(par2 > 256 || par2 < 0) return 0;
return this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4)).getBlockID(par1.intValue() & 0xF, par2, par3.intValue() & 0xF);
}
@ -344,16 +343,6 @@ public abstract class World implements IBlockAccess
* metadata, needsUpdate
*/
public boolean setBlockAndMetadataWithUpdate(BigInteger par1, int par2, BigInteger par3, int par4, int par5, boolean par6)
{
if (par2 < 0)
{
return false;
}
else if (par2 >= 256)
{
return false;
}
else
{
Chunk var7 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
boolean var8 = var7.setBlockIDWithMetadata(par1.intValue() & 0xF, par2, par3.intValue() & 0xF, par4, par5);
@ -368,22 +357,11 @@ public abstract class World implements IBlockAccess
return var8;
}
}
/**
* Sets the block to the specified blockID at the block coordinates Args x, y, z, blockID
*/
public boolean setBlock(BigInteger par1, int par2, BigInteger par3, int par4)
{
if (par2 < 0)
{
return false;
}
else if (par2 >= 256)
{
return false;
}
else
{
Chunk var5 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
boolean var6 = var5.setBlockID(par1.intValue() & 0xF, par2, par3.intValue() & 0xF, par4);
@ -398,7 +376,6 @@ public abstract class World implements IBlockAccess
return var6;
}
}
/**
* Returns the block's material.
@ -413,21 +390,10 @@ public abstract class World implements IBlockAccess
* Returns the block metadata at coords x,y,z
*/
public int getBlockMetadata(BigInteger par1, int par2, BigInteger par3)
{
if (par2 < 0)
{
return 0;
}
else if (par2 >= 256)
{
return 0;
}
else
{
Chunk var4 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
return var4.getBlockMetadata(par1.intValue() & 0xF, par2, par3.intValue() & 0xF);
}
}
/**
* Sets the blocks metadata and if set will then notify blocks that this block changed. Args: x, y, z, metadata
@ -444,16 +410,6 @@ public abstract class World implements IBlockAccess
* Set the metadata of a block in global coordinates
*/
public boolean setBlockMetadata(BigInteger par1, int par2, BigInteger par3, int par4)
{
if (par2 < 0)
{
return false;
}
else if (par2 >= 256)
{
return false;
}
else
{
Chunk var5 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
int var6 = par1.intValue() & 0xF;
@ -467,7 +423,6 @@ public abstract class World implements IBlockAccess
return var8;
}
}
/**
* Sets a block and notifies relevant systems with the block change Args: x, y, z, blockID

Loading…
Cancel
Save