Skip to content

Commit 99d244a

Browse files
authored
Fix an empty tooltip on GT fluid slots that have no fluid (#2863)
1 parent 8822d55 commit 99d244a

File tree

4 files changed

+52
-19
lines changed

4 files changed

+52
-19
lines changed

src/main/java/gregtech/api/mui/sync/GTFluidSyncHandler.java

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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() {

src/main/java/gregtech/api/util/GTUtility.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,4 +1023,10 @@ public static int combineRGB(@Range(from = 0, to = 255) int r, @Range(from = 0,
10231023
}
10241024
return map.get(key.toWildcard());
10251025
}
1026+
1027+
public static boolean areFluidStacksEqual(@Nullable FluidStack a, @Nullable FluidStack b) {
1028+
if (a == b) return true;
1029+
if (a == null) return false;
1030+
return a.isFluidEqual(b);
1031+
}
10261032
}

src/main/java/gregtech/common/metatileentities/multi/multiblockpart/MetaTileEntityFluidHatch.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -291,7 +291,7 @@ public ModularPanel buildUI(PosGuiData guiData, PanelSyncManager guiSyncManager)
291291
setLocked(fluidStack != null);
292292
this.lockedFluid = fluidStack;
293293
this.fluidTank.onContentsChanged();
294-
}, this::setLocked);
294+
}, this::setLocked, this::isLocked);
295295
}
296296

297297
return GTGuis.createPanel(this, 176, 166)

src/main/java/gregtech/common/mui/widget/GTFluidSlot.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,7 @@ public final class GTFluidSlot extends Widget<GTFluidSlot> implements Interactab
3737
private boolean disableBackground = false;
3838

3939
public GTFluidSlot() {
40-
tooltip().setAutoUpdate(true).titleMargin();
41-
tooltipBuilder(tooltip -> {
42-
if (!isSynced()) return;
43-
syncHandler.handleTooltip(tooltip);
44-
});
40+
tooltip().titleMargin();
4541
}
4642

4743
public static GTFluidSyncHandler sync(IFluidTank tank) {
@@ -56,6 +52,8 @@ public void onInit() {
5652
if (syncHandler.canLockFluid() || syncHandler.isPhantom()) {
5753
getContext().getJeiSettings().addJeiGhostIngredientSlot(this);
5854
}
55+
tooltipBuilder(syncHandler::handleTooltip);
56+
syncHandler.setChangeConsumer($ -> markTooltipDirty());
5957
}
6058

6159
public GTFluidSlot syncHandler(IFluidTank fluidTank) {

0 commit comments

Comments
 (0)