aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java
diff options
context:
space:
mode:
authortth05 <36999320+tth05@users.noreply.github.com>2024-01-12 21:14:43 +0100
committerGitHub <noreply@github.com>2024-01-12 21:14:43 +0100
commit0bbd5f72b17f212b4dcdcc5268b8c2dd1ed68e5c (patch)
tree040b047025aa555d692d45a57f5ac5694d695629 /src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java
parent321015a62729dadf195427714c9ec7f4e2035648 (diff)
downloadGT5-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.java28
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;
}