aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorGlease <4586901+Glease@users.noreply.github.com>2023-03-16 00:40:02 +0800
committerGitHub <noreply@github.com>2023-03-15 17:40:02 +0100
commit48cd6c2b85c2c11d0394b2c38b02e85c97f38f1d (patch)
treea5b849e8c020fb4107953a5e10757bfd6828d82d /src/main/java
parent7ed458d8b0b94676f336734b0328843084d93b38 (diff)
downloadGT5-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/java')
-rw-r--r--src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java52
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));