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.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;
@ -21,6 +22,8 @@ public class Chunk
* logical segment of 16x16x16 blocks, stacked vertically. * logical segment of 16x16x16 blocks, stacked vertically.
*/ */
private ExtendedBlockStorage[] storageArrays; 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. * 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; int var10 = var8 >> 4;
if (this.storageArrays[var10] == null) getBlockStorage(var10).setExtBlockID(var6, var8 & 15, var7, var9);
{
this.storageArrays[var10] = new ExtendedBlockStorage(var10 << 4);
}
this.storageArrays[var10].setExtBlockID(var6, var8 & 15, var7, var9);
} }
} }
} }
@ -178,7 +176,21 @@ public class Chunk
{ {
return this.storageArrays; 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 * Generates the height map for a chunk from scratch
*/ */
@ -510,15 +522,8 @@ public class Chunk
*/ */
public int getBlockID(int par1, int par2, int par3) public int getBlockID(int par1, int par2, int par3)
{ {
if (par2 >> 4 >= this.storageArrays.length) ExtendedBlockStorage var4 = this.getBlockStorage(par2 >> 4);
{ return var4 != null ? var4.getExtBlockID(par1, par2 & 15, par3) : 0;
return 0;
}
else
{
ExtendedBlockStorage var4 = this.storageArrays[par2 >> 4];
return var4 != null ? var4.getExtBlockID(par1, par2 & 15, par3) : 0;
}
} }
/** /**
@ -526,15 +531,8 @@ public class Chunk
*/ */
public int getBlockMetadata(int par1, int par2, int par3) public int getBlockMetadata(int par1, int par2, int par3)
{ {
if (par2 >> 4 >= this.storageArrays.length) ExtendedBlockStorage var4 = this.getBlockStorage(par2 >> 4);
{ return var4 != null ? var4.getExtBlockMetadata(par1, par2 & 15, par3) : 0;
return 0;
}
else
{
ExtendedBlockStorage var4 = this.storageArrays[par2 >> 4];
return var4 != null ? var4.getExtBlockMetadata(par1, par2 & 15, par3) : 0;
}
} }
/** /**
@ -567,7 +565,7 @@ public class Chunk
} }
else else
{ {
ExtendedBlockStorage var10 = this.storageArrays[par2 >> 4]; ExtendedBlockStorage var10 = this.getBlockStorage(par2 >> 4);
boolean var11 = false; boolean var11 = false;
if (var10 == null) if (var10 == null)
@ -678,7 +676,7 @@ public class Chunk
*/ */
public boolean setBlockMetadata(int par1, int par2, int par3, int par4) 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) if (var5 == null)
{ {
@ -719,7 +717,7 @@ public class Chunk
*/ */
public int getSavedLightValue(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4) 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)); 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) 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) if (var6 == null)
{ {
@ -757,7 +755,7 @@ public class Chunk
*/ */
public int getBlockLightValue(int par1, int par2, int par3, int par4) 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) if (var5 == null)
{ {
@ -1197,19 +1195,9 @@ public class Chunk
*/ */
public boolean getAreLevelsEmpty(int par1, int par2) 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) 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()) if (var4 != null && !var4.isEmpty())
{ {

@ -57,28 +57,17 @@ public class ChunkCache implements IBlockAccess
*/ */
public int getBlockId(BigInteger par1, int par2, BigInteger par3) public int getBlockId(BigInteger par1, int par2, BigInteger par3)
{ {
if (par2 < 0) int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
{ int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
return 0;
} if (var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length)
else if (par2 >= 256)
{ {
return 0; Chunk var6 = this.chunkArray[var4][var5];
return var6 == null ? 0 : var6.getBlockID(par1.intValue() & 15, par2, par3.intValue() & 15);
} }
else else
{ {
int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact(); return 0;
int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
if (var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length)
{
Chunk var6 = this.chunkArray[var4][var5];
return var6 == null ? 0 : var6.getBlockID(par1.intValue() & 15, par2, par3.intValue() & 15);
}
else
{
return 0;
}
} }
} }
@ -209,20 +198,9 @@ public class ChunkCache implements IBlockAccess
*/ */
public int getBlockMetadata(BigInteger par1, int par2, BigInteger par3) public int getBlockMetadata(BigInteger par1, int par2, BigInteger par3)
{ {
if (par2 < 0) int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
{ int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
return 0; return this.chunkArray[var4][var5].getBlockMetadata(par1.intValue() & 15, par2, par3.intValue() & 15);
}
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);
}
} }
/** /**

@ -5,7 +5,7 @@ public class ExtendedBlockStorage
/** /**
* Contains the bottom-most Y block represented by this ExtendedBlockStorage. Typically a multiple of 16. * 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. * 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; return false;
} }
else if (par5 == 255 && Block.blocksList[this.blockID].blockMaterial.isSolid()) /*else if (par5 == 255 && Block.blocksList[this.blockID].blockMaterial.isSolid())
{ {
return false; return false;
} }*/
else if (par3World.canPlaceEntityOnSide(this.blockID, par4, par5, par6, false, par7, par2EntityPlayer)) else if (par3World.canPlaceEntityOnSide(this.blockID, par4, par5, par6, false, par7, par2EntityPlayer))
{ {
Block var12 = Block.blocksList[this.blockID]; Block var12 = Block.blocksList[this.blockID];

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

@ -551,9 +551,17 @@ public class RenderGlobal implements IWorldAccess
// this.maxBlockZ = var10; // this.maxBlockZ = var10;
// } // }
int sdfvhsdbvfhsdhkbdkjsakjdb = this.renderChunksTall * 16;
int kshdjiajdfjosjofjsdhvfssd = sdfvhsdbvfhsdhkbdkjsakjdb / 2;
for (int var12 = 0; var12 < this.renderChunksTall; ++var12) for (int var12 = 0; var12 < this.renderChunksTall; ++var12)
{ {
int var13 = var12 * 16; 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) // if (var13 < this.minBlockY)
// { // {
@ -567,7 +575,7 @@ public class RenderGlobal implements IWorldAccess
WorldRenderer var14 = this.worldRenderers[(var9 * this.renderChunksTall + var12) * this.renderChunksWide + var6]; WorldRenderer var14 = this.worldRenderers[(var9 * this.renderChunksTall + var12) * this.renderChunksWide + var6];
boolean var15 = var14.needsUpdate; boolean var15 = var14.needsUpdate;
var14.setPosition(x, var13, z); var14.setPosition(x, y, z);
if (!var15 && var14.needsUpdate) if (!var15 && var14.needsUpdate)
{ // WTF this is a unreachable code. { // 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) 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); return this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4)).getBlockID(par1.intValue() & 0xF, par2, par3.intValue() & 0xF);
} }
@ -345,29 +344,18 @@ public abstract class World implements IBlockAccess
*/ */
public boolean setBlockAndMetadataWithUpdate(BigInteger par1, int par2, BigInteger par3, int par4, int par5, boolean par6) public boolean setBlockAndMetadataWithUpdate(BigInteger par1, int par2, BigInteger par3, int par4, int par5, boolean par6)
{ {
if (par2 < 0) Chunk var7 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
{ boolean var8 = var7.setBlockIDWithMetadata(par1.intValue() & 0xF, par2, par3.intValue() & 0xF, par4, par5);
return false; this.theProfiler.startSection("checkLight");
} this.updateAllLightTypes(par1, par2, par3);
else if (par2 >= 256) this.theProfiler.endSection();
if (par6 && var8 && (this.isRemote || var7.deferRender))
{ {
return false; this.markBlockNeedsUpdate(par1, par2, par3);
} }
else
{
Chunk var7 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
boolean var8 = var7.setBlockIDWithMetadata(par1.intValue() & 0xF, par2, par3.intValue() & 0xF, par4, par5);
this.theProfiler.startSection("checkLight");
this.updateAllLightTypes(par1, par2, par3);
this.theProfiler.endSection();
if (par6 && var8 && (this.isRemote || var7.deferRender))
{
this.markBlockNeedsUpdate(par1, par2, par3);
}
return var8; return var8;
}
} }
/** /**
@ -375,29 +363,18 @@ public abstract class World implements IBlockAccess
*/ */
public boolean setBlock(BigInteger par1, int par2, BigInteger par3, int par4) public boolean setBlock(BigInteger par1, int par2, BigInteger par3, int par4)
{ {
if (par2 < 0) Chunk var5 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
{ boolean var6 = var5.setBlockID(par1.intValue() & 0xF, par2, par3.intValue() & 0xF, par4);
return false; this.theProfiler.startSection("checkLight");
} this.updateAllLightTypes(par1, par2, par3);
else if (par2 >= 256) this.theProfiler.endSection();
if (var6 && (this.isRemote || var5.deferRender))
{ {
return false; this.markBlockNeedsUpdate(par1, par2, par3);
} }
else
{
Chunk var5 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
boolean var6 = var5.setBlockID(par1.intValue() & 0xF, par2, par3.intValue() & 0xF, par4);
this.theProfiler.startSection("checkLight");
this.updateAllLightTypes(par1, par2, par3);
this.theProfiler.endSection();
if (var6 && (this.isRemote || var5.deferRender)) return var6;
{
this.markBlockNeedsUpdate(par1, par2, par3);
}
return var6;
}
} }
/** /**
@ -414,19 +391,8 @@ public abstract class World implements IBlockAccess
*/ */
public int getBlockMetadata(BigInteger par1, int par2, BigInteger par3) public int getBlockMetadata(BigInteger par1, int par2, BigInteger par3)
{ {
if (par2 < 0) Chunk var4 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
{ return var4.getBlockMetadata(par1.intValue() & 0xF, par2, par3.intValue() & 0xF);
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);
}
} }
/** /**
@ -445,28 +411,17 @@ public abstract class World implements IBlockAccess
*/ */
public boolean setBlockMetadata(BigInteger par1, int par2, BigInteger par3, int par4) public boolean setBlockMetadata(BigInteger par1, int par2, BigInteger par3, int par4)
{ {
if (par2 < 0) Chunk var5 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
{ int var6 = par1.intValue() & 0xF;
return false; int var7 = par3.intValue() & 0xF;
} boolean var8 = var5.setBlockMetadata(var6, par2, var7, par4);
else if (par2 >= 256)
if (var8 && (this.isRemote || var5.deferRender && Block.requiresSelfNotify[var5.getBlockID(var6, par2, var7) & 4095]))
{ {
return false; this.markBlockNeedsUpdate(par1, par2, par3);
} }
else
{
Chunk var5 = this.getChunkFromChunkCoords(par1.shiftRight(4), par3.shiftRight(4));
int var6 = par1.intValue() & 0xF;
int var7 = par3.intValue() & 0xF;
boolean var8 = var5.setBlockMetadata(var6, par2, var7, par4);
if (var8 && (this.isRemote || var5.deferRender && Block.requiresSelfNotify[var5.getBlockID(var6, par2, var7) & 4095]))
{
this.markBlockNeedsUpdate(par1, par2, par3);
}
return var8; return var8;
}
} }
/** /**

Loading…
Cancel
Save