diff options
3 files changed, 21 insertions, 2 deletions
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 @@ -131,6 +131,14 @@ public abstract class GT_CoverBehaviorBase<T extends ISerializableObject> { } /** + * 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. */ public final void onDropped(byte aSide, int aCoverID, ISerializableObject aCoverVariable, ICoverable aTileEntity) { @@ -417,6 +425,9 @@ public abstract class GT_CoverBehaviorBase<T extends ISerializableObject> { } 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) {} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java index 65cf49b1a7..c65e019053 100644 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java +++ b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java @@ -50,6 +50,11 @@ public abstract class GT_Cover_AdvancedRedstoneTransmitterBase<T extends GT_Cove return aCoverVariable; } + @Override + protected void preDataChangedImpl(byte aSide, int aCoverID, int aNewCoverId, T aCoverVariable, T aNewCoverVariable, ICoverable aTileEntity) { + unregisterSignal(aSide, aCoverVariable, aTileEntity); + } + public static class TransmitterData extends GT_Cover_AdvancedWirelessRedstoneBase.WirelessData { protected boolean invert; |