Skip to content

Commit e9eb58f

Browse files
committed
Fix tooltips and allow tank locking
1 parent b568710 commit e9eb58f

2 files changed

Lines changed: 26 additions & 3 deletions

File tree

src/main/java/com/gregtechceu/gtceu/api/machine/trait/notifiable/NotifiableFluidTank.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public NotifiableFluidTank(int slots, int capacity, IO io, IO capabilityIO) {
6363
this.storages[i] = new CustomFluidTank(capacity);
6464
this.storages[i].setOnContentsChanged(this::onContentsChanged);
6565
}
66+
this.lockedFluid.setOnContentsChanged(this::onLockedFluidChanged);
6667
}
6768

6869
public NotifiableFluidTank(List<CustomFluidTank> storages, IO io, IO capabilityIO) {
@@ -76,6 +77,7 @@ public NotifiableFluidTank(List<CustomFluidTank> storages, IO io, IO capabilityI
7677
if (io == IO.IN) {
7778
this.allowSameFluids = true;
7879
}
80+
this.lockedFluid.setOnContentsChanged(this::onLockedFluidChanged);
7981
}
8082

8183
public NotifiableFluidTank(int slots, int capacity, IO io) {
@@ -92,6 +94,26 @@ public void onContentsChanged() {
9294
notifyListeners();
9395
}
9496

97+
protected void onLockedFluidChanged() {
98+
syncDataHolder.markClientSyncFieldDirty("lockedFluid");
99+
var newFluid = this.lockedFluid.getFluid();
100+
if (newFluid.isEmpty()) {
101+
this.setFilter(stack -> true);
102+
this.onContentsChanged();
103+
return;
104+
}
105+
for (int i = 0; i < this.getTanks(); i++) {
106+
if (this.getFluidInTank(i).isEmpty()) continue;
107+
if (!this.getFluidInTank(i).isFluidEqual(newFluid)) {
108+
// Fluid in a tank that doesn't equal the new locked fluid
109+
this.lockedFluid.setFluid(FluidStack.EMPTY);
110+
return;
111+
}
112+
}
113+
this.setFilter(stack -> stack.isFluidEqual(newFluid));
114+
this.onContentsChanged();
115+
}
116+
95117
@Override
96118
public List<FluidIngredient> handleRecipeInner(IO io, GTRecipe recipe, List<FluidIngredient> left,
97119
boolean simulate) {

src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/FluidHatchPartMachine.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public void buildMainUI(ParentWidget<?> mainWidget, PosGuiData guiData, PanelSyn
255255
}
256256

257257
protected Flow createSingleSlotUI(PanelSyncManager syncManager) {
258-
BooleanSyncValue locked = new BooleanSyncValue(this.tank::isLocked, this.tank::setLocked);
258+
BooleanSyncValue locked = new BooleanSyncValue(this.tank::isLocked, this.tank::setLocked).allowC2S();
259259
syncManager.syncValue("locked", locked);
260260
return Flow.col()
261261
.width(MachineUIPanel.DEFAULT_CONTENT_WIDTH)
@@ -271,12 +271,13 @@ protected Flow createSingleSlotUI(PanelSyncManager syncManager) {
271271
.coverChildren()
272272
.childIf(io.support(IO.OUT), () -> new FluidSlot()
273273
.name("lockedFluid")
274-
.syncHandler(new FluidSlotSyncHandler(tank.getLockedFluid()))
274+
.syncHandler(new FluidSlotSyncHandler(tank.getLockedFluid()).phantom(true))
275275
.alwaysShowFull(true)
276276
.tooltip(t -> t.addLine("Locked Fluid")))
277277
.childIf(io.support(IO.OUT), () -> new ToggleButton()
278278
.syncHandler("locked")
279-
.tooltip(t -> t.addLine("gtceu.gui.fluid_lock.tooltip"))
279+
.tooltipDynamic(t -> t.addLine(Component.translatable("gtceu.gui.fluid_lock.tooltip." +
280+
(locked.getBoolValue() ? "enabled" : "disabled"))))
280281
.overlay(false, GTGuiTextures.BUTTON_LOCK)
281282
.overlay(true, GTGuiTextures.BUTTON_LOCK)
282283
.background(GuiTextures.MC_BUTTON)

0 commit comments

Comments
 (0)