From 2911e1e68afa0db6e615aca4b79b012bd6e08936 Mon Sep 17 00:00:00 2001 From: Matej Dipčár <492666@mail.muni.cz> Date: Wed, 21 Sep 2022 14:00:15 +0200 Subject: Implement `onBaseTEDestroyed` hook for covers --- .../java/gregtech/api/metatileentity/BaseMetaPipeEntity.java | 2 ++ .../java/gregtech/api/metatileentity/BaseMetaTileEntity.java | 2 ++ .../java/gregtech/api/metatileentity/CoverableTileEntity.java | 8 ++++++++ .../gregtech/api/multitileentity/base/BaseMultiTileEntity.java | 2 ++ src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java | 10 ++++++++++ 5 files changed, 24 insertions(+) (limited to 'src/main/java/gregtech') diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 0fdaa90c1a..7c75bb97d4 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -776,6 +776,8 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity if (hasCover) tNBT.setIntArray("mCoverSides", mCoverSides); if (hasValidMetaTileEntity()) mMetaTileEntity.setItemNBT(tNBT); if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT); + + onBaseTEDestroyed(); return new ArrayList<>(Collections.singletonList(rStack)); } diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index cdc81220e6..08ead9a946 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -1423,6 +1423,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (hasValidMetaTileEntity()) mMetaTileEntity.setItemNBT(tNBT); if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT); + + onBaseTEDestroyed(); return new ArrayList<>(Collections.singletonList(rStack)); } diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java index caf3c1b15f..5958b515be 100644 --- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -320,6 +320,14 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov return false; } + protected void onBaseTEDestroyed() { + for (byte side = 0; side < 6; ++side) { + GT_CoverBehaviorBase behavior = getCoverBehaviorAtSideNew(side); + if (behavior != GregTech_API.sNoBehavior) + behavior.onBaseTEDestroyed(side, getCoverIDAtSide(side), mCoverData[side], this); + } + } + @Override public void setOutputRedstoneSignal(byte aSide, byte aStrength) { aStrength = (byte) Math.min(Math.max(0, aStrength), 15); diff --git a/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java index 18dc310bb7..385ae310f1 100644 --- a/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java +++ b/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java @@ -906,6 +906,8 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity final ArrayList rList = new ArrayList<>(); final MultiTileEntityRegistry tRegistry = MultiTileEntityRegistry.getRegistry(getMultiTileEntityRegistryID()); if (tRegistry != null) rList.add(tRegistry.getItem(getMultiTileEntityID(), writeItemNBT(new NBTTagCompound()))); + + onBaseTEDestroyed(); return rList; } diff --git a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java index efbff79957..e0879cda86 100644 --- a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java +++ b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java @@ -221,6 +221,14 @@ public abstract class GT_CoverBehaviorBase { return onCoverRemovalImpl(aSide, aCoverID, forceCast(aCoverVariable), aTileEntity, aForced); } + /** + * Called upon Base TE being destroyed (once getDrops is called), + * thus getting called only when destroyed in survival. + */ + public final void onBaseTEDestroyed(byte aSide, int aCoverID, ISerializableObject aCoverVariable, ICoverable aTileEntity) { + onBaseTEDestroyedImpl(aSide, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + /** * Gives a small Text for the status of the Cover. */ @@ -412,6 +420,8 @@ public abstract class GT_CoverBehaviorBase { protected void onDroppedImpl(byte aSide, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} + protected void onBaseTEDestroyedImpl(byte aSide, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} + protected boolean isRedstoneSensitiveImpl( byte aSide, int aCoverID, T aCoverVariable, ICoverable aTileEntity, long aTimer) { return true; -- cgit