diff options
author | tth05 <36999320+tth05@users.noreply.github.com> | 2024-01-12 21:14:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-12 21:14:43 +0100 |
commit | 0bbd5f72b17f212b4dcdcc5268b8c2dd1ed68e5c (patch) | |
tree | 040b047025aa555d692d45a57f5ac5694d695629 /src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java | |
parent | 321015a62729dadf195427714c9ec7f4e2035648 (diff) | |
download | GT5-Unofficial-0bbd5f72b17f212b4dcdcc5268b8c2dd1ed68e5c.tar.gz GT5-Unofficial-0bbd5f72b17f212b4dcdcc5268b8c2dd1ed68e5c.tar.bz2 GT5-Unofficial-0bbd5f72b17f212b4dcdcc5268b8c2dd1ed68e5c.zip |
Add valid covers bit mask to CoverableTileEntity (#2446)
* Add valid covers bit mask to CoverableTileEntity
Optimization to do as little work as possible in doCoverThings()
* Ensure `coverBehavior` is never null and remove null check from `getCoverBehavior`
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java')
-rw-r--r-- | src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java index dd1eb24960..6adf7d2f1d 100644 --- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -80,6 +80,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov // New Cover Information protected final CoverInfo[] coverInfos = new CoverInfo[] { null, null, null, null, null, null }; + private byte validCoversMask; protected byte[] mSidedRedstone = new byte[] { 15, 15, 15, 15, 15, 15 }; protected boolean mRedstone = false; @@ -182,9 +183,15 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov public abstract boolean isStillValid(); protected boolean doCoverThings() { - for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (!tickCoverAtSide(side)) return false; + byte validCoversMask = this.validCoversMask; + if (validCoversMask == 0) return true; + + ForgeDirection[] validDirections = ForgeDirection.VALID_DIRECTIONS; + for (int i = Integer.numberOfTrailingZeros(validCoversMask); i < 6; i++) { + if (((validCoversMask >>> i) & 1) == 0) continue; + if (!tickCoverAtSide(validDirections[i])) return false; } + return true; } @@ -349,16 +356,23 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov return getCoverInfoAtSide(side).getCoverBehavior(); } - public void setCoverInfoAtSide(ForgeDirection side, CoverInfo coverInfo) { - if (side != ForgeDirection.UNKNOWN) coverInfos[side.ordinal()] = coverInfo; + public final void setCoverInfoAtSide(ForgeDirection side, CoverInfo coverInfo) { + if (side != ForgeDirection.UNKNOWN) { + coverInfos[side.ordinal()] = coverInfo; + + byte sideMask = (byte) (1 << side.ordinal()); + validCoversMask &= (byte) ~sideMask; + if (coverInfo.isValid()) validCoversMask |= sideMask; + } } @Override - public CoverInfo getCoverInfoAtSide(ForgeDirection side) { + public final CoverInfo getCoverInfoAtSide(ForgeDirection side) { final int ordinalSide = side.ordinal(); if (side != ForgeDirection.UNKNOWN) { - if (coverInfos[ordinalSide] == null) coverInfos[ordinalSide] = new CoverInfo(side, this); - return coverInfos[side.ordinal()]; + CoverInfo coverInfo = coverInfos[ordinalSide]; + if (coverInfo == null) coverInfo = (coverInfos[ordinalSide] = new CoverInfo(side, this)); + return coverInfo; } return CoverInfo.EMPTY_INFO; } |