diff options
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java | 28 | ||||
-rw-r--r-- | src/main/java/gregtech/common/covers/CoverInfo.java | 8 |
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() { |