From f8eb1c66d38b354878e50350a453b557e9b9abd5 Mon Sep 17 00:00:00 2001 From: RealSilverMoon <31100241+RealSilverMoon@users.noreply.github.com> Date: Sun, 30 Jun 2024 03:59:11 +0800 Subject: Several fixes for Tesla Cover (#2671) * Fix tesla cover memory leak * Fix tesla crash when destroying tesla cover * Add max output display --- .../api/metatileentity/BaseMetaTileEntity.java | 6 ++++-- .../api/metatileentity/CoverableTileEntity.java | 16 ++++++++++++++++ src/main/java/gregtech/api/util/GT_CoverBehavior.java | 18 ++++++++++++++++++ .../java/gregtech/api/util/GT_CoverBehaviorBase.java | 11 +++++++++++ 4 files changed, 49 insertions(+), 2 deletions(-) (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index bf6358c884..386975dd6d 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -980,9 +980,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity @Override public void onChunkUnload() { if (canAccessData()) { + onCoverUnload(); mMetaTileEntity.onUnload(); } - super.onChunkUnload(); onChunkUnloadAE(); } @@ -2276,7 +2276,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity @Override public void onBlockDestroyed() { - if (canAccessData()) getMetaTileEntity().onBlockDestroyed(); + if (canAccessData()) { + getMetaTileEntity().onBlockDestroyed(); + } } @Override diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java index 277b79c777..4dce0a083e 100644 --- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -194,6 +194,22 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov return true; } + protected void onCoverUnload() { + byte validCoversMask = this.validCoversMask; + if (validCoversMask == 0) return; + + for (int i = Integer.numberOfTrailingZeros(validCoversMask); i < 6; i++) { + if (((validCoversMask >>> i) & 1) == 0) continue; + onCoverUnloadAtSide(ForgeDirection.VALID_DIRECTIONS[i]); + } + } + + public void onCoverUnloadAtSide(ForgeDirection side) { + final CoverInfo coverInfo = getCoverInfoAtSide(side); + if (!coverInfo.isValid()) return; + coverInfo.onCoverUnload(); + } + public boolean tickCoverAtSide(ForgeDirection side) { return tickCoverAtSide(side, mTickTimer); } diff --git a/src/main/java/gregtech/api/util/GT_CoverBehavior.java b/src/main/java/gregtech/api/util/GT_CoverBehavior.java index 34fc151b9a..3c3a8607fe 100644 --- a/src/main/java/gregtech/api/util/GT_CoverBehavior.java +++ b/src/main/java/gregtech/api/util/GT_CoverBehavior.java @@ -99,6 +99,18 @@ public abstract class GT_CoverBehavior extends GT_CoverBehaviorBase { return getDescriptionImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); } + /** + * Called when Base TE being unloaded. + */ + public void onCoverUnload(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + onCoverUnloadImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + /** * How Blast Proof the Cover is. 30 is normal. */ @@ -581,6 +589,9 @@ public abstract class GT_CoverBehaviorBase { protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} + protected void onCoverUnloadImpl(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) {} + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, long aTimer) { return false; -- cgit