From f19cc6e533437409e7763b2db0604fa01ef5a129 Mon Sep 17 00:00:00 2001 From: mckuhei Date: Tue, 9 May 2023 13:09:51 +0800 Subject: [PATCH] It's time to break y axis. --- src/minecraft/net/minecraft/src/Chunk.java | 70 +++++------- .../net/minecraft/src/ChunkCache.java | 42 ++------ .../minecraft/src/ExtendedBlockStorage.java | 2 +- .../net/minecraft/src/ItemBlock.java | 4 +- .../net/minecraft/src/NetServerHandler.java | 12 +-- .../net/minecraft/src/RenderGlobal.java | 10 +- src/minecraft/net/minecraft/src/World.java | 101 +++++------------- 7 files changed, 85 insertions(+), 156 deletions(-) diff --git a/src/minecraft/net/minecraft/src/Chunk.java b/src/minecraft/net/minecraft/src/Chunk.java index bde37d5..3312d87 100644 --- a/src/minecraft/net/minecraft/src/Chunk.java +++ b/src/minecraft/net/minecraft/src/Chunk.java @@ -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; @@ -21,6 +22,8 @@ public class Chunk * logical segment of 16x16x16 blocks, stacked vertically. */ private ExtendedBlockStorage[] storageArrays; + + private LinkedList[] 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); } } } @@ -178,7 +176,21 @@ public class Chunk { return this.storageArrays; } - + + public ExtendedBlockStorage getBlockStorage(int yBase) { + if(yBase < 0 || yBase >= storageArrays.length) { + LinkedList 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,15 +522,8 @@ 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]; - return var4 != null ? var4.getExtBlockID(par1, par2 & 15, par3) : 0; - } + ExtendedBlockStorage var4 = this.getBlockStorage(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) { - if (par2 >> 4 >= this.storageArrays.length) - { - return 0; - } - else - { - ExtendedBlockStorage var4 = this.storageArrays[par2 >> 4]; - return var4 != null ? var4.getExtBlockMetadata(par1, par2 & 15, par3) : 0; - } + ExtendedBlockStorage var4 = this.getBlockStorage(par2 >> 4); + return var4 != null ? var4.getExtBlockMetadata(par1, par2 & 15, par3) : 0; } /** @@ -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()) { diff --git a/src/minecraft/net/minecraft/src/ChunkCache.java b/src/minecraft/net/minecraft/src/ChunkCache.java index 035548f..f6daf1a 100644 --- a/src/minecraft/net/minecraft/src/ChunkCache.java +++ b/src/minecraft/net/minecraft/src/ChunkCache.java @@ -57,28 +57,17 @@ public class ChunkCache implements IBlockAccess */ public int getBlockId(BigInteger par1, int par2, BigInteger par3) { - if (par2 < 0) - { - return 0; - } - else if (par2 >= 256) + int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact(); + int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact(); + + if (var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length) { - return 0; + Chunk var6 = this.chunkArray[var4][var5]; + return var6 == null ? 0 : var6.getBlockID(par1.intValue() & 15, par2, par3.intValue() & 15); } else { - int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact(); - 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; - } + return 0; } } @@ -209,20 +198,9 @@ public class ChunkCache implements IBlockAccess */ 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); - } + 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); } /** diff --git a/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java b/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java index 6b86a7a..b1184f8 100644 --- a/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java +++ b/src/minecraft/net/minecraft/src/ExtendedBlockStorage.java @@ -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. diff --git a/src/minecraft/net/minecraft/src/ItemBlock.java b/src/minecraft/net/minecraft/src/ItemBlock.java index 7d2aa3d..a24b8c3 100644 --- a/src/minecraft/net/minecraft/src/ItemBlock.java +++ b/src/minecraft/net/minecraft/src/ItemBlock.java @@ -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]; diff --git a/src/minecraft/net/minecraft/src/NetServerHandler.java b/src/minecraft/net/minecraft/src/NetServerHandler.java index 25a1aad..25c3814 100644 --- a/src/minecraft/net/minecraft/src/NetServerHandler.java +++ b/src/minecraft/net/minecraft/src/NetServerHandler.java @@ -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(); diff --git a/src/minecraft/net/minecraft/src/RenderGlobal.java b/src/minecraft/net/minecraft/src/RenderGlobal.java index 03abf38..24c9403 100644 --- a/src/minecraft/net/minecraft/src/RenderGlobal.java +++ b/src/minecraft/net/minecraft/src/RenderGlobal.java @@ -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. diff --git a/src/minecraft/net/minecraft/src/World.java b/src/minecraft/net/minecraft/src/World.java index bbdedd2..3a09671 100644 --- a/src/minecraft/net/minecraft/src/World.java +++ b/src/minecraft/net/minecraft/src/World.java @@ -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); } @@ -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) { - if (par2 < 0) - { - return false; - } - else if (par2 >= 256) + 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)) { - 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) { - if (par2 < 0) - { - return false; - } - else if (par2 >= 256) + 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 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)) - { - this.markBlockNeedsUpdate(par1, par2, par3); - } - - return var6; - } + return var6; } /** @@ -414,19 +391,8 @@ public abstract class World implements IBlockAccess */ 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); - } + 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) { - if (par2 < 0) - { - return false; - } - else if (par2 >= 256) + 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])) { - 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; } /**