diff options
author | Glease <4586901+Glease@users.noreply.github.com> | 2023-03-16 00:40:02 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-15 17:40:02 +0100 |
commit | 48cd6c2b85c2c11d0394b2c38b02e85c97f38f1d (patch) | |
tree | a5b849e8c020fb4107953a5e10757bfd6828d82d /src/main | |
parent | 7ed458d8b0b94676f336734b0328843084d93b38 (diff) | |
download | GT5-Unofficial-48cd6c2b85c2c11d0394b2c38b02e85c97f38f1d.tar.gz GT5-Unofficial-48cd6c2b85c2c11d0394b2c38b02e85c97f38f1d.tar.bz2 GT5-Unofficial-48cd6c2b85c2c11d0394b2c38b02e85c97f38f1d.zip |
fix ghost chunk loading caused by ore blocks (#1797)
* fix ghost chunk loading caused by ore blocks
* style update
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java | 52 |
1 files changed, 46 insertions, 6 deletions
diff --git a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java index 56a59e7ab3..92596a6c1a 100644 --- a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java +++ b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java @@ -30,6 +30,7 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit public short mMetaData = 0; public boolean mNatural = false; public boolean mBlocked = true; + public boolean mBlockedChecked = false; public static byte getHarvestData(short aMetaData, int aBaseBlockHarvestLevel) { Materials aMaterial = GregTech_API.sGeneratedMaterials[(aMetaData % 1000)]; @@ -159,12 +160,8 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit @Override public Packet getDescriptionPacket() { if (!this.worldObj.isRemote) { - if (!(this.mBlocked = (GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord + 1, this.yCoord, this.zCoord) - && GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord - 1, this.yCoord, this.zCoord) - && GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord + 1, this.zCoord) - && GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord - 1, this.zCoord) - && GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord, this.zCoord + 1) - && GT_Utility.isOpaqueBlock(this.worldObj, this.xCoord, this.yCoord, this.zCoord - 1)))) { + boolean sendUpdate = mBlockedChecked ? !mBlocked : checkBlocked(); + if (sendUpdate) { GT_Values.NW.sendPacketToAllPlayersInRange( this.worldObj, new GT_Packet_Ores(this.xCoord, (short) this.yCoord, this.zCoord, this.mMetaData), @@ -175,6 +172,49 @@ public class GT_TileEntity_Ores extends TileEntity implements ITexturedTileEntit return null; } + private boolean checkBlocked() { + // this is called very frequently and is performance critical. unroll the loop. + mBlockedChecked = true; + if (!worldObj.blockExists(xCoord + 1, yCoord, zCoord)) { + mBlockedChecked = false; + } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord + 1, yCoord, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord - 1, yCoord, zCoord)) { + mBlockedChecked = false; + } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord - 1, yCoord, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord + 1, zCoord)) { + mBlockedChecked = false; + } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord + 1, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord - 1, zCoord)) { + mBlockedChecked = false; + } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord - 1, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord, zCoord + 1)) { + mBlockedChecked = false; + } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord, zCoord + 1)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord, zCoord - 1)) { + mBlockedChecked = false; + } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord, zCoord - 1)) { + mBlocked = false; + return true; + } + mBlocked = true; + return false; + } + public void overrideOreBlockMaterial(Block aOverridingStoneBlock, byte aOverridingStoneMeta) { if (this.worldObj == null || blockType == null) return; this.mMetaData = ((short) (int) (this.mMetaData % 1000L + this.mMetaData / 16000L * 16000L)); |