From d2c7530665e1bf7929be2f92218df8f7941a8d91 Mon Sep 17 00:00:00 2001 From: Matej Dipčár <492666@mail.muni.cz> Date: Thu, 22 Sep 2022 04:02:16 +0200 Subject: Add new hook `preDataChanged` --- .../java/gregtech/api/metatileentity/CoverableTileEntity.java | 7 +++++-- src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java | 11 +++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) (limited to 'src/main/java/gregtech/api') diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java index 5958b515be..e26d12f311 100644 --- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -422,10 +422,13 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov public void receiveCoverData( byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) { if ((aCoverSide >= 0 && aCoverSide < 6)) { + GT_CoverBehaviorBase behaviorBase = getCoverBehaviorAtSideNew(aCoverSide); + behaviorBase.preDataChanged(aCoverSide, getCoverIDAtSide(aCoverSide), aCoverID, getComplexCoverDataAtSide(aCoverSide), aCoverData, this); + setCoverIDAtSideNoUpdate(aCoverSide, aCoverID); setCoverDataAtSide(aCoverSide, aCoverData); - if (isClientSide()) { - getCoverBehaviorAtSideNew(aCoverSide).onDataChanged(aCoverSide, aCoverID, aCoverData, this); + if (!isClientSide()) { + behaviorBase.onDataChanged(aCoverSide, aCoverID, aCoverData, this); } } } diff --git a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java index e0879cda86..47cb866653 100644 --- a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java +++ b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java @@ -130,6 +130,14 @@ public abstract class GT_CoverBehaviorBase { onDataChangedImpl(aSide, aCoverID, forceCast(aCoverVariable), aTileEntity); } + /** + * Called before receiving data from network. Use {@link ICoverable#isClientSide()} to determine the side. + */ + public final void preDataChanged( + byte aSide, int aCoverID, int aNewCoverId, ISerializableObject aCoverVariable, ISerializableObject aNewCoverVariable, ICoverable aTileEntity) { + preDataChangedImpl(aSide, aCoverID, aNewCoverId, forceCast(aCoverVariable), forceCast(aNewCoverVariable), aTileEntity); + } + /** * Called upon cover being removed. Called on both server and client. */ @@ -417,6 +425,9 @@ public abstract class GT_CoverBehaviorBase { } protected void onDataChangedImpl(byte aSide, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} + + protected void preDataChangedImpl( + byte aSide, int aCoverID, int aNewCoverId, T aCoverVariable, T aNewCoverVariable, ICoverable aTileEntity) {} protected void onDroppedImpl(byte aSide, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} -- cgit