@@ -41,6 +41,7 @@ public class GTFluidSyncHandler extends SyncHandler {
4141 private final IFluidTank tank ;
4242 private Consumer <FluidStack > jeiHandler ;
4343 private BooleanConsumer lockHandler ;
44+ private BooleanSupplier isLocked ;
4445 private Supplier <FluidStack > lockedFluid ;
4546 private FluidStack lastFluid ;
4647 private FluidStack phantomFluid ;
@@ -50,15 +51,17 @@ public class GTFluidSyncHandler extends SyncHandler {
5051 private BooleanSupplier showAmountInTooltip = () -> true ;
5152 private BooleanSupplier showAmountOnSlot = () -> true ;
5253 private BooleanSupplier drawAlwaysFull = () -> true ;
54+ @ Nullable
55+ private Consumer <@ Nullable FluidStack > changeConsumer ;
5356
5457 public GTFluidSyncHandler (IFluidTank tank ) {
5558 this .tank = tank ;
5659 }
5760
5861 @ Override
5962 public void detectAndSendChanges (boolean init ) {
60- var current = getFluid ();
61- if (init || current == null || lastFluid == null || current . isFluidEqual ( lastFluid )) {
63+ FluidStack current = getFluid ();
64+ if (init || ! GTUtility . areFluidStacksEqual ( current , lastFluid )) {
6265 lastFluid = current == null ? null : current .copy ();
6366 syncToClient (UPDATE_TANK , buffer -> NetworkUtils .writeFluidStack (buffer , current ));
6467 } else if (lastFluid != null && current .amount != lastFluid .amount ) {
@@ -84,11 +87,13 @@ public void lockFluid(boolean locked, boolean sync) {
8487 });
8588 }
8689
87- public GTFluidSyncHandler handleLocking (Supplier <FluidStack > lockedFluid , Consumer <FluidStack > jeiHandler ,
88- BooleanConsumer lockHandler ) {
90+ public GTFluidSyncHandler handleLocking (@ NotNull Supplier <FluidStack > lockedFluid ,
91+ @ NotNull Consumer <FluidStack > jeiHandler ,
92+ @ NotNull BooleanConsumer lockHandler , @ NotNull BooleanSupplier isLocked ) {
8993 this .lockedFluid = lockedFluid ;
9094 this .jeiHandler = jeiHandler ;
9195 this .lockHandler = lockHandler ;
96+ this .isLocked = isLocked ;
9297 return this ;
9398 }
9499
@@ -194,6 +199,16 @@ public boolean drawAlwaysFull() {
194199 return this .drawAlwaysFull .getAsBoolean ();
195200 }
196201
202+ public void setChangeConsumer (@ Nullable Consumer <@ Nullable FluidStack > changeConsumer ) {
203+ this .changeConsumer = changeConsumer ;
204+ }
205+
206+ protected void onChange (@ Nullable FluidStack fluidStack ) {
207+ if (changeConsumer != null ) {
208+ changeConsumer .accept (fluidStack );
209+ }
210+ }
211+
197212 public @ NotNull String getFormattedFluidAmount () {
198213 var tankFluid = this .tank .getFluid ();
199214 return String .format ("%,d" , tankFluid == null ? 0 : tankFluid .amount );
@@ -206,22 +221,25 @@ public int getFluidAmount() {
206221
207222 public @ Nullable String getFluidLocalizedName () {
208223 var tankFluid = this .tank .getFluid ();
209- if (tankFluid == null && canLockFluid () )
210- tankFluid = this . lockedFluid . get ();
224+ if (tankFluid == null )
225+ tankFluid = getLockedFluid ();
211226
212227 return tankFluid == null ? null : tankFluid .getLocalizedName ();
213228 }
214229
215230 public @ NotNull IKey getFluidNameKey () {
216231 FluidStack tankFluid = tank .getFluid ();
217- if (tankFluid == null && canLockFluid () ) {
218- tankFluid = lockedFluid . get ();
232+ if (tankFluid == null ) {
233+ tankFluid = getLockedFluid ();
219234 }
220235 return tankFluid == null ? IKey .EMPTY : KeyUtil .fluid (tankFluid );
221236 }
222237
223238 public void handleTooltip (@ NotNull RichTooltip tooltip ) {
224- tooltip .addLine (getFluidNameKey ());
239+ IKey nameKey = getFluidNameKey ();
240+ if (nameKey != IKey .EMPTY ) {
241+ tooltip .addLine (nameKey );
242+ }
225243
226244 if (showAmountInTooltip ()) {
227245 tooltip .addLine (IKey .lang ("gregtech.fluid.amount" , getFluidAmount (), getCapacity ()));
@@ -249,9 +267,20 @@ public void handleTooltip(@NotNull RichTooltip tooltip) {
249267 public void readOnClient (int id , PacketBuffer buf ) {
250268 switch (id ) {
251269 case TRY_CLICK_CONTAINER -> replaceCursorItemStack (NetworkUtils .readItemStack (buf ));
252- case UPDATE_TANK -> setFluid (NetworkUtils .readFluidStack (buf ));
253- case UPDATE_AMOUNT -> setAmount (buf .readInt ());
254- case LOCK_FLUID -> lockFluid (NetworkUtils .readFluidStack (buf ), false );
270+ case UPDATE_TANK -> {
271+ FluidStack stack = NetworkUtils .readFluidStack (buf );
272+ setFluid (stack );
273+ onChange (stack );
274+ }
275+ case UPDATE_AMOUNT -> {
276+ setAmount (buf .readInt ());
277+ onChange (getFluid ());
278+ }
279+ case LOCK_FLUID -> {
280+ lockFluid (NetworkUtils .readFluidStack (buf ), false );
281+ FluidStack stack = getFluid ();
282+ onChange (stack == null ? getLockedFluid () : stack );
283+ }
255284 }
256285 }
257286
@@ -545,7 +574,7 @@ public FluidStack getLockedFluid() {
545574 }
546575
547576 public boolean canLockFluid () {
548- return jeiHandler != null && lockHandler != null && lockedFluid != null ;
577+ return jeiHandler != null && lockHandler != null && lockedFluid != null && isLocked != null ;
549578 }
550579
551580 public void toggleLockFluid () {
0 commit comments