Skip to content

Commit 80d0d90

Browse files
committed
brachy is gonna hate this
fixes changing the filter in the filter slot by making a new panel handler and utilizing sync actions and `getOrCreateSyncHandler()` this is what 330am brain comes up with even god lives in fear of this abomination
1 parent 30fc517 commit 80d0d90

File tree

7 files changed

+43
-18
lines changed

7 files changed

+43
-18
lines changed

src/main/java/gregtech/common/covers/filter/BaseFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public BaseFilterReader getFilterReader() {
3434
}
3535

3636
@Override
37-
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) {
37+
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) {
3838
return GTGuis.createPopupPanel("error", 100, 100)
3939
.child(createWidgets(syncManager));
4040
}

src/main/java/gregtech/common/covers/filter/BaseFilterContainer.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import gregtech.api.cover.CoverWithUI;
44
import gregtech.api.mui.GTGuiTextures;
55
import gregtech.api.util.IDirtyNotifiable;
6+
import gregtech.api.util.ItemStackHashStrategy;
67

78
import net.minecraft.item.ItemStack;
89
import net.minecraft.nbt.NBTTagCompound;
@@ -25,6 +26,9 @@
2526
import org.jetbrains.annotations.NotNull;
2627
import org.jetbrains.annotations.Nullable;
2728

29+
import java.util.concurrent.atomic.AtomicInteger;
30+
import java.util.concurrent.atomic.AtomicReference;
31+
2832
public abstract class BaseFilterContainer extends ItemStackHandler {
2933

3034
private int maxTransferSize = 1;
@@ -206,16 +210,27 @@ public void handleLegacyNBT(NBTTagCompound nbt) {
206210
getFilter().getFilterReader().handleLegacyNBT(nbt);
207211
}
208212

209-
public IPanelHandler getFilterHandler(PanelSyncManager syncManager) {
213+
public IPanelHandler getFilterHandler(PanelSyncManager syncManager, int id) {
210214
if (hasFilter()) {
211-
return getFilter().createPanelHandler(syncManager);
215+
return getFilter().createPanelHandler(syncManager, id);
212216
}
213-
return BaseFilter.ERROR_FILTER.createPanelHandler(syncManager);
217+
return BaseFilter.ERROR_FILTER.createPanelHandler(syncManager, id);
214218
}
215219

216220
/** Uses Cleanroom MUI */
217221
public IWidget initUI(GuiData data, PanelSyncManager manager) {
218-
IPanelHandler panel = getFilterHandler(manager);
222+
// i bet brachy is gonna really hate this, but it *does* work
223+
AtomicReference<IPanelHandler> test = new AtomicReference<>(getFilterHandler(manager, 0));
224+
AtomicInteger counter = new AtomicInteger(1);
225+
AtomicReference<ItemStack> oldStack = new AtomicReference<>(getFilterStack());
226+
manager.registerSyncedAction("update_filter_panel", packet -> {
227+
if (hasFilter()) {
228+
oldStack.set(getFilterStack());
229+
// make new panel handler only when we have a filter
230+
test.set(getFilterHandler(manager, counter.getAndIncrement()));
231+
}
232+
});
233+
ItemStackHashStrategy strategy = ItemStackHashStrategy.comparingItemDamageCount();
219234

220235
return Flow.row().coverChildrenHeight()
221236
.marginBottom(2).widthRel(1f)
@@ -224,9 +239,14 @@ public IWidget initUI(GuiData data, PanelSyncManager manager) {
224239
.filter(this::isItemValid)
225240
.singletonSlotGroup(101)
226241
.changeListener((newItem, onlyAmountChanged, client, init) -> {
227-
if (!isItemValid(newItem) || (newItem.isEmpty() && panel.isPanelOpen())) {
242+
IPanelHandler panel = test.get();
243+
if (!isItemValid(newItem) ||
244+
(!strategy.equals(oldStack.get(), newItem) && panel.isPanelOpen())) {
228245
panel.closePanel();
229246
}
247+
if (!init && client && !strategy.equals(oldStack.get(), newItem)) {
248+
manager.callSyncedAction("update_filter_panel", packetBuffer -> {});
249+
}
230250
}))
231251
.size(18).marginRight(2)
232252
.background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY.asIcon().size(16)))
@@ -236,6 +256,7 @@ public IWidget initUI(GuiData data, PanelSyncManager manager) {
236256
GTGuiTextures.FILTER_SETTINGS_OVERLAY.asIcon().size(16))
237257
.setEnabledIf(w -> hasFilter())
238258
.onMousePressed(i -> {
259+
IPanelHandler panel = test.get();
239260
if (!panel.isPanelOpen()) {
240261
setMaxTransferSize(getMaxTransferSize());
241262
panel.openPanel();

src/main/java/gregtech/common/covers/filter/IFilter.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import com.cleanroommc.modularui.api.IPanelHandler;
1010
import com.cleanroommc.modularui.screen.ModularPanel;
11+
import com.cleanroommc.modularui.value.sync.PanelSyncHandler;
1112
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
1213
import com.cleanroommc.modularui.widget.Widget;
1314
import org.jetbrains.annotations.NotNull;
@@ -17,7 +18,7 @@ public interface IFilter {
1718

1819
/** Uses Cleanroom MUI */
1920
@NotNull
20-
ModularPanel createPopupPanel(PanelSyncManager syncManager);
21+
ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName);
2122

2223
/** Uses Cleanroom MUI */
2324
@NotNull
@@ -28,9 +29,12 @@ public interface IFilter {
2829
@NotNull
2930
Widget<?> createWidgets(PanelSyncManager syncManager);
3031

31-
default IPanelHandler createPanelHandler(PanelSyncManager syncManager) {
32-
return syncManager.panel(getContainerStack().getTranslationKey(), (syncManager1, syncHandler) ->
33-
createPopupPanel(syncManager), true);
32+
default IPanelHandler createPanelHandler(PanelSyncManager syncManager, int id) {
33+
String translationKey = getContainerStack().getTranslationKey();
34+
return syncManager.getOrCreateSyncHandler(translationKey, id, PanelSyncHandler.class, () -> {
35+
String key = PanelSyncManager.makeSyncKey(translationKey, id);
36+
return (PanelSyncHandler) syncManager.panel(key, (psm, $) -> createPopupPanel(psm, key), true);
37+
});
3438
}
3539

3640
ItemStack getContainerStack();

src/main/java/gregtech/common/covers/filter/OreDictionaryItemFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ protected void clearCache() {
7070
}
7171

7272
@Override
73-
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) {
74-
return GTGuis.createPopupPanel("ore_dict_filter", 188, 76, false)
73+
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) {
74+
return GTGuis.createPopupPanel(panelName, 188, 76, false)
7575
.padding(7)
7676
.child(CoverWithUI.createTitleRow(getContainerStack()))
7777
.child(createWidgets(syncManager).top(22));

src/main/java/gregtech/common/covers/filter/SimpleFluidFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public void configureFilterTanks(int amount) {
3636
}
3737

3838
@Override
39-
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) {
40-
return GTGuis.createPopupPanel("simple_fluid_filter", 98, 81, false)
39+
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) {
40+
return GTGuis.createPopupPanel(panelName, 98, 81, false)
4141
.padding(4)
4242
.child(CoverWithUI.createTitleRow(getContainerStack()))
4343
.child(createWidgets(syncManager).top(22));

src/main/java/gregtech/common/covers/filter/SimpleItemFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ public int getTransferLimit(ItemStack stack, int transferSize) {
7575
}
7676

7777
@Override
78-
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) {
79-
return GTGuis.createPopupPanel("simple_item_filter", 98, 81, false)
78+
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) {
79+
return GTGuis.createPopupPanel(panelName, 98, 81, false)
8080
.child(CoverWithUI.createTitleRow(getContainerStack()))
8181
.child(createWidgets(syncManager).top(22).left(4));
8282
}

src/main/java/gregtech/common/covers/filter/SmartItemFilter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ public FilterType getType() {
8888
}
8989

9090
@Override
91-
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager) {
92-
return GTGuis.createPopupPanel("smart_item_filter", 98 + 27, 81, false)
91+
public @NotNull ModularPanel createPopupPanel(PanelSyncManager syncManager, String panelName) {
92+
return GTGuis.createPopupPanel(panelName, 98 + 27, 81, false)
9393
.child(CoverWithUI.createTitleRow(getContainerStack()))
9494
.child(createWidgets(syncManager).top(22).left(4));
9595
}

0 commit comments

Comments
 (0)