aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java28
-rw-r--r--src/main/java/gregtech/common/covers/CoverInfo.java8
2 files changed, 25 insertions, 11 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;
}
diff --git a/src/main/java/gregtech/common/covers/CoverInfo.java b/src/main/java/gregtech/common/covers/CoverInfo.java
index 7f45085ead..3deafba899 100644
--- a/src/main/java/gregtech/common/covers/CoverInfo.java
+++ b/src/main/java/gregtech/common/covers/CoverInfo.java
@@ -33,8 +33,8 @@ public final class CoverInfo {
public static final CoverInfo EMPTY_INFO = new CoverInfo(ForgeDirection.UNKNOWN, null);
private final ForgeDirection coverSide;
private int coverID = 0;
- private GT_CoverBehaviorBase<?> coverBehavior = null;
- private ISerializableObject coverData = null;
+ private GT_CoverBehaviorBase<?> coverBehavior;
+ private ISerializableObject coverData;
private final WeakReference<ICoverable> coveredTile;
private boolean needsUpdate = false;
@@ -43,6 +43,7 @@ public final class CoverInfo {
public CoverInfo(ForgeDirection side, ICoverable aTile) {
coverSide = side;
coveredTile = new WeakReference<>(aTile);
+ coverBehavior = GregTech_API.sNoBehavior;
}
public CoverInfo(ForgeDirection side, int aID, ICoverable aTile, ISerializableObject aCoverData) {
@@ -89,8 +90,7 @@ public final class CoverInfo {
}
public GT_CoverBehaviorBase<?> getCoverBehavior() {
- if (coverBehavior != null) return coverBehavior;
- return GregTech_API.sNoBehavior;
+ return coverBehavior;
}
public ISerializableObject getCoverData() {