Skip to content

Commit 88b8335

Browse files
committed
all filters are now ported
pump conveyor is mostly porter even more changes to filter positioning fixed some issues with oredict filter reader don't set filter settings in constructor
1 parent 1a7284f commit 88b8335

11 files changed

+273
-63
lines changed

src/main/java/gregtech/common/covers/CoverItemFilter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,13 @@ public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManag
162162
.size(176, 188).padding(7)
163163
.child(CoverWithUI.createTitleRow(getPickItem()).left(4))
164164
.child(new Column().widthRel(1f).align(Alignment.TopLeft).top(22).coverChildrenHeight()
165-
.child(new Row().coverChildren().marginBottom(4).left(0)
165+
.child(new Row().coverChildrenHeight()
166+
.widthRel(1f).marginBottom(4).left(0)
166167
.child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_INSERT))
167168
.child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_EXTRACT))
168-
.child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH)))
169-
.child(getItemFilter().createWidgets(guiSyncManager)))
169+
.child(createFilterModeButton(filteringMode, ItemFilterMode.FILTER_BOTH))
170+
.child(IKey.str("Filter Mode").asWidget().align(Alignment.CenterRight)))
171+
.child(getItemFilter().createWidgets(guiSyncManager).left(0)))
170172
.child(SlotGroupWidget.playerInventory(0).bottom(7).left(7));
171173
}
172174

src/main/java/gregtech/common/covers/CoverPump.java

Lines changed: 120 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,24 @@
11
package gregtech.common.covers;
22

3+
import com.cleanroommc.modularui.api.drawable.IKey;
4+
import com.cleanroommc.modularui.api.widget.Interactable;
35
import com.cleanroommc.modularui.factory.SidedPosGuiData;
46
import com.cleanroommc.modularui.screen.ModularPanel;
7+
import com.cleanroommc.modularui.utils.Alignment;
8+
import com.cleanroommc.modularui.utils.MouseData;
9+
import com.cleanroommc.modularui.value.sync.EnumSyncValue;
510
import com.cleanroommc.modularui.value.sync.GuiSyncManager;
611

12+
import com.cleanroommc.modularui.value.sync.IntSyncValue;
13+
import com.cleanroommc.modularui.widget.ParentWidget;
14+
15+
import com.cleanroommc.modularui.widget.Widget;
16+
import com.cleanroommc.modularui.widgets.ButtonWidget;
17+
import com.cleanroommc.modularui.widgets.ToggleButton;
18+
import com.cleanroommc.modularui.widgets.layout.Column;
19+
import com.cleanroommc.modularui.widgets.layout.Row;
20+
import com.cleanroommc.modularui.widgets.textfield.TextFieldWidget;
21+
722
import gregtech.api.GTValues;
823
import gregtech.api.capability.GregtechDataCodes;
924
import gregtech.api.capability.GregtechTileCapabilities;
@@ -21,6 +36,7 @@
2136
import gregtech.api.gui.widgets.LabelWidget;
2237
import gregtech.api.gui.widgets.TextFieldWidget2;
2338
import gregtech.api.gui.widgets.WidgetGroup;
39+
import gregtech.api.mui.GTGuiTextures;
2440
import gregtech.api.mui.GTGuis;
2541
import gregtech.api.util.GTTransferUtils;
2642
import gregtech.client.renderer.texture.Textures;
@@ -30,6 +46,7 @@
3046
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
3147
import net.minecraft.entity.player.EntityPlayer;
3248
import net.minecraft.entity.player.EntityPlayerMP;
49+
import net.minecraft.item.EnumDyeColor;
3350
import net.minecraft.nbt.NBTTagCompound;
3451
import net.minecraft.network.PacketBuffer;
3552
import net.minecraft.tileentity.TileEntity;
@@ -242,8 +259,107 @@ public boolean usesMui2() {
242259

243260
@Override
244261
public ModularPanel buildUI(SidedPosGuiData guiData, GuiSyncManager guiSyncManager) {
245-
return GTGuis.createPanel(this, 100, 100)
246-
.child(CoverWithUI.createTitleRow(getPickItem()));
262+
var panel = GTGuis.createPanel(this, 176,192);
263+
264+
//todo set fluid filter stuffs here
265+
266+
return panel.child(CoverWithUI.createTitleRow(getPickItem()))
267+
.child(createUI(panel, guiSyncManager))
268+
.bindPlayerInventory();
269+
}
270+
271+
protected ParentWidget<?> createUI(ModularPanel mainPanel, GuiSyncManager syncManager) {
272+
EnumSyncValue<ManualImportExportMode> manualIOmode = new EnumSyncValue<>(ManualImportExportMode.class,
273+
this::getManualImportExportMode, this::setManualImportExportMode);
274+
275+
IntSyncValue throughput = new IntSyncValue(this::getTransferRate, this::setTransferRate);
276+
277+
syncManager.syncValue("manual_io", manualIOmode);
278+
279+
return new Column().top(24).margin(7, 0)
280+
.widthRel(1f).coverChildrenHeight()
281+
.child(new Row().coverChildrenHeight()
282+
.marginBottom(2).widthRel(1f)
283+
.child(new ButtonWidget<>()
284+
.left(0).width(18)
285+
.onMousePressed(mouseButton -> {
286+
throughput.updateCacheFromSource(false);
287+
int val = throughput.getValue() - getIncrementValue(MouseData.create(mouseButton));
288+
throughput.setValue(val, true, true);
289+
Interactable.playButtonClickSound();
290+
return true;
291+
})
292+
.onUpdateListener(w -> w.overlay(createAdjustOverlay(false))))
293+
.child(new TextFieldWidget()
294+
.left(18).right(18)
295+
.setTextColor(EnumDyeColor.WHITE.getColorValue())
296+
.setNumbers(1, maxFluidTransferRate)
297+
.value(throughput)
298+
.background(GTGuiTextures.DISPLAY)
299+
.onUpdateListener(w -> {
300+
if (throughput.updateCacheFromSource(false)) {
301+
w.setText(throughput.getStringValue());
302+
}
303+
}))
304+
.child(new ButtonWidget<>()
305+
.right(0).width(18)
306+
.onMousePressed(mouseButton -> {
307+
throughput.updateCacheFromSource(false);
308+
int val = throughput.getValue() + getIncrementValue(MouseData.create(mouseButton));
309+
throughput.setValue(val, true, true);
310+
Interactable.playButtonClickSound();
311+
return true;
312+
})
313+
.onUpdateListener(w -> w.overlay(createAdjustOverlay(true)))))
314+
.child(getFluidFilterContainer()
315+
.initUI(mainPanel, syncManager))
316+
.child(new Row().coverChildrenHeight()
317+
.marginBottom(2).widthRel(1f)
318+
.child(createManualIoButton(manualIOmode, ManualImportExportMode.DISABLED))
319+
.child(createManualIoButton(manualIOmode, ManualImportExportMode.UNFILTERED))
320+
.child(createManualIoButton(manualIOmode, ManualImportExportMode.FILTERED))
321+
.child(IKey.lang("Manual IO Mode")
322+
.asWidget()
323+
.align(Alignment.CenterRight)
324+
.height(18)));
325+
}
326+
327+
private Widget<ToggleButton> createManualIoButton(EnumSyncValue<ManualImportExportMode> value, ManualImportExportMode mode) {
328+
return new ToggleButton().size(18)
329+
.value(boolValueOf(value, mode))
330+
.background(GTGuiTextures.MC_BUTTON_DISABLED)
331+
.selectedBackground(GTGuiTextures.MC_BUTTON)
332+
.overlay(GTGuiTextures.MANUAL_IO_OVERLAY[mode.ordinal()])
333+
.addTooltipLine(switch (mode) {
334+
case DISABLED -> IKey.lang("cover.universal.manual_import_export.mode.disabled");
335+
case UNFILTERED -> IKey.lang("cover.universal.manual_import_export.mode.unfiltered");
336+
case FILTERED -> IKey.lang("cover.universal.manual_import_export.mode.filtered");
337+
});
338+
}
339+
340+
protected int getIncrementValue(MouseData data) {
341+
int adjust = 1;
342+
if (data.shift) adjust *= 4;
343+
if (data.ctrl) adjust *= 16;
344+
if (data.alt) adjust *= 64;
345+
return adjust;
346+
}
347+
348+
protected IKey createAdjustOverlay(boolean increment) {
349+
final StringBuilder builder = new StringBuilder();
350+
builder.append(increment ? '+' : '-');
351+
builder.append(getIncrementValue(MouseData.create(-1)));
352+
353+
float scale = 1f;
354+
if (builder.length() == 3) {
355+
scale = 0.8f;
356+
} else if (builder.length() == 4) {
357+
scale = 0.6f;
358+
} else if (builder.length() > 4) {
359+
scale = 0.5f;
360+
}
361+
return IKey.str(builder.toString())
362+
.scale(scale);
247363
}
248364

249365
public static Function<String, String> getTextFieldValidator(IntSupplier maxSupplier) {
@@ -291,12 +407,14 @@ public void readCustomData(int discriminator, @NotNull PacketBuffer buf) {
291407
public void writeInitialSyncData(@NotNull PacketBuffer packetBuffer) {
292408
super.writeInitialSyncData(packetBuffer);
293409
packetBuffer.writeEnumValue(pumpMode);
410+
getFluidFilterContainer().writeInitialSyncData(packetBuffer);
294411
}
295412

296413
@Override
297414
public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) {
298415
super.readInitialSyncData(packetBuffer);
299416
this.pumpMode = packetBuffer.readEnumValue(PumpMode.class);
417+
getFluidFilterContainer().readInitialSyncData(packetBuffer);
300418
}
301419

302420
@Override

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public final void markDirty() {
9292
}
9393
}
9494

95-
protected abstract class BaseFluidFilterReader extends BaseFilterReader {
95+
protected abstract static class BaseFluidFilterReader extends BaseFilterReader {
9696

9797
protected static final String KEY_FLUIDS = "FluidTank";
9898

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

Lines changed: 82 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,36 @@
11
package gregtech.common.covers.filter;
22

3+
import com.cleanroommc.modularui.api.drawable.IKey;
4+
import com.cleanroommc.modularui.api.widget.IWidget;
5+
import com.cleanroommc.modularui.api.widget.Interactable;
6+
import com.cleanroommc.modularui.screen.ModularPanel;
7+
import com.cleanroommc.modularui.utils.Alignment;
8+
import com.cleanroommc.modularui.value.sync.GuiSyncManager;
9+
import com.cleanroommc.modularui.value.sync.PanelSyncHandler;
10+
import com.cleanroommc.modularui.value.sync.SyncHandlers;
11+
import com.cleanroommc.modularui.widgets.ButtonWidget;
12+
import com.cleanroommc.modularui.widgets.ItemSlot;
13+
import com.cleanroommc.modularui.widgets.layout.Row;
14+
315
import gregtech.api.gui.GuiTextures;
416
import gregtech.api.gui.Widget;
517
import gregtech.api.gui.widgets.LabelWidget;
618
import gregtech.api.gui.widgets.ServerWidgetGroup;
719
import gregtech.api.gui.widgets.SlotWidget;
820
import gregtech.api.gui.widgets.ToggleButtonWidget;
21+
import gregtech.api.mui.GTGuiTextures;
922
import gregtech.api.util.IDirtyNotifiable;
1023

1124
import net.minecraft.item.ItemStack;
1225
import net.minecraft.nbt.NBTTagCompound;
26+
import net.minecraft.network.PacketBuffer;
1327
import net.minecraftforge.common.util.INBTSerializable;
1428
import net.minecraftforge.fluids.FluidStack;
1529
import net.minecraftforge.items.ItemStackHandler;
1630

1731
import org.jetbrains.annotations.NotNull;
1832

33+
import java.io.IOException;
1934
import java.util.function.BooleanSupplier;
2035
import java.util.function.Consumer;
2136
import java.util.function.Supplier;
@@ -32,13 +47,10 @@ public class FluidFilterContainer implements INBTSerializable<NBTTagCompound> {
3247

3348
public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, int capacity) {
3449
this.filterWrapper = new FluidFilterWrapper(this); // for compat
50+
this.maxSize = capacity;
51+
this.dirtyNotifiable = dirtyNotifiable;
3552
this.filterInventory = new ItemStackHandler(1) {
3653

37-
@Override
38-
public boolean isItemValid(int slot, @NotNull ItemStack stack) {
39-
return FilterTypeRegistry.isFluidFilter(stack);
40-
}
41-
4254
@Override
4355
public int getSlotLimit(int slot) {
4456
return 1;
@@ -48,14 +60,7 @@ public int getSlotLimit(int slot) {
4860
protected void onLoad() {
4961
onFilterSlotChange(false);
5062
}
51-
52-
@Override
53-
protected void onContentsChanged(int slot) {
54-
onFilterSlotChange(true);
55-
}
5663
};
57-
this.maxSize = capacity;
58-
this.dirtyNotifiable = dirtyNotifiable;
5964
}
6065

6166
public FluidFilterContainer(IDirtyNotifiable dirtyNotifiable, Supplier<Boolean> showTip, int maxSize) {
@@ -141,10 +146,75 @@ public void blacklistUI(int y, Consumer<Widget> widgetGroup, BooleanSupplier sho
141146
widgetGroup.accept(blacklistButton);
142147
}
143148

149+
/** Uses Cleanroom MUI*/
150+
public IWidget initUI(ModularPanel main, GuiSyncManager manager) {
151+
var panel = new PanelSyncHandler(main) {
152+
@Override
153+
public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager) {
154+
// getFluidFilter().setMaxStackSizer(stackSizer);
155+
return getFluidFilter().createPopupPanel(syncManager);
156+
}
157+
};
158+
manager.syncValue("filter_panel", panel);
159+
160+
return new Row().coverChildrenHeight()
161+
.marginBottom(2).widthRel(1f)
162+
.child(new ItemSlot()
163+
.slot(SyncHandlers.itemSlot(filterInventory, 0)
164+
.filter(FilterTypeRegistry::isFluidFilter)
165+
.changeListener((newItem, onlyAmountChanged, client, init) -> {
166+
if (newItem.isEmpty() || FilterTypeRegistry.isFluidFilter(newItem)) {
167+
onFilterSlotChange(true);
168+
}
169+
})
170+
.singletonSlotGroup(101))
171+
.onUpdateListener(w -> {
172+
if (!hasFluidFilter() && panel.isPanelOpen()) {
173+
panel.closePanel();
174+
}
175+
}, true)
176+
.size(18)
177+
.background(GTGuiTextures.SLOT, GTGuiTextures.FILTER_SLOT_OVERLAY))
178+
.child(new ButtonWidget<>()
179+
.setEnabledIf(w -> hasFluidFilter())
180+
.onMousePressed(i -> {
181+
boolean success = false;
182+
if (!panel.isPanelOpen()) {
183+
panel.openPanel();
184+
success = true;
185+
} else if (panel.isValid()) {
186+
panel.closePanel();
187+
success = true;
188+
}
189+
Interactable.playButtonClickSound();
190+
return success;
191+
}))
192+
.child(IKey.dynamic(() -> hasFluidFilter() ?
193+
getFilterInventory().getStackInSlot(0).getDisplayName() :
194+
IKey.lang("metaitem.fluid_filter.name").get())
195+
.alignment(Alignment.CenterRight).asWidget()
196+
.left(36).right(0).height(18));
197+
}
198+
144199
public boolean hasFluidFilter() {
145200
return currentFluidFilter != null;
146201
}
147202

203+
public void writeInitialSyncData(PacketBuffer packetBuffer) {
204+
packetBuffer.writeItemStack(getFilterInventory().getStackInSlot(0));
205+
}
206+
207+
public void readInitialSyncData(@NotNull PacketBuffer packetBuffer) {
208+
var stack = ItemStack.EMPTY;
209+
try {
210+
stack = packetBuffer.readItemStack();
211+
} catch (IOException ignore) {}
212+
this.filterInventory.setStackInSlot(0, stack);
213+
214+
if (FilterTypeRegistry.isFluidFilter(stack))
215+
this.currentFluidFilter = FilterTypeRegistry.getFluidFilterForStack(stack);
216+
}
217+
148218
public void setBlacklistFilter(boolean blacklistFilter) {
149219
if (hasFluidFilter()) getFluidFilter().setBlacklistFilter(blacklistFilter);
150220
}

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -128,27 +128,24 @@ public void setOnMatched(OnMatch<ItemStack> onMatch) {
128128
}
129129

130130
protected static class BaseItemFilterReader extends BaseFilterReader {
131-
private Supplier<Integer> maxStackSizer = () -> 1;
132-
private int cache;
133131
protected static final String COUNT = "Count";
134132
public BaseItemFilterReader(ItemStack container, int slots) {
135133
super(container, slots);
136-
setBlacklistFilter(false);
137134
}
138135

139136
public void onMaxStackSizeChange() {
140137
this.cache = getMaxStackSizer().get();
141138
}
142139

143-
public final int getMaxStackSize() {
144-
return this.isBlacklistFilter() ? 1 : this.cache;
145-
}
146-
147140
public final void setMaxStackSizer(Supplier<Integer> maxStackSizer) {
148141
this.maxStackSizer = maxStackSizer;
149142
this.cache = this.maxStackSizer.get();
150143
}
151144

145+
public final int getMaxStackSize() {
146+
return this.isBlacklistFilter() ? 1 : this.cache;
147+
}
148+
152149
public Supplier<Integer> getMaxStackSizer() {
153150
return this.maxStackSizer;
154151
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public ModularPanel createUI(ModularPanel mainPanel, GuiSyncManager syncManager)
170170
}))
171171
.child(IKey.dynamic(() -> hasItemFilter() ?
172172
getFilterInventory().getStackInSlot(0).getDisplayName() :
173-
IKey.lang("cover.conveyor.item_filter.title").get())
173+
IKey.lang("metaitem.item_filter.name").get())
174174
.alignment(Alignment.CenterRight).asWidget()
175175
.left(36).right(0).height(18));
176176
}

0 commit comments

Comments
 (0)