Skip to content

Commit 6c3ef94

Browse files
Spicierspace153YoungOnionMCjurrejelle
authored
[MUI] Conveyor and Simple Filter (#4128)
Co-authored-by: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Co-authored-by: Jurre Groenendijk <jurre@jilles.com>
1 parent 4ba098a commit 6c3ef94

25 files changed

+491
-139
lines changed

src/main/java/com/gregtechceu/gtceu/GTCEu.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import me.shedaniel.rei.api.client.REIRuntime;
2222
import org.apache.logging.log4j.LogManager;
2323
import org.apache.logging.log4j.Logger;
24+
import org.mariuszgromada.math.mxparser.License;
2425

2526
import java.nio.file.Path;
2627

@@ -32,6 +33,10 @@ public class GTCEu {
3233
public static final String NAME = "GregTechCEu";
3334
public static final Logger LOGGER = LogManager.getLogger(NAME);
3435

36+
static {
37+
License.iConfirmNonCommercialUse("GTCEu");
38+
}
39+
3540
public GTCEu() {
3641
GTCEu.init();
3742
GTCEuAPI.instance = this;

src/main/java/com/gregtechceu/gtceu/api/cover/CoverBehavior.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ public void onAttached(ItemStack itemStack, @Nullable ServerPlayer player) {
109109
attachItem = itemStack.copy();
110110
attachItem.setCount(1);
111111
syncDataHolder.markClientSyncFieldDirty("attachItem");
112+
markAsChanged();
112113
}
113114

114115
public void onLoad() {}

src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ default CoverBehavior self() {
3131
return (CoverBehavior) this;
3232
}
3333

34+
default boolean isRemote() {
35+
return self().coverHolder.isRemote();
36+
}
37+
3438
default boolean isRemoved() {
3539
return self().coverHolder.isRemoved() || self().coverHolder.getCoverAtSide(self().attachedSide) != self();
3640
}
@@ -131,7 +135,7 @@ class EnumRowBuilder<T extends Enum<T>> {
131135

132136
private EnumSyncValue<T> syncValue;
133137
private final Class<T> enumValue;
134-
private String lang;
138+
private IKey lang;
135139
private IDrawable[] background;
136140
private IDrawable selectedBackground;
137141
private IDrawable[] overlay;
@@ -145,7 +149,7 @@ public EnumRowBuilder<T> value(EnumSyncValue<T> syncValue) {
145149
return this;
146150
}
147151

148-
public EnumRowBuilder<T> lang(String lang) {
152+
public EnumRowBuilder<T> lang(IKey lang) {
149153
this.lang = lang;
150154
return this;
151155
}
@@ -204,8 +208,8 @@ public Flow build() {
204208
}
205209
}
206210

207-
if (this.lang != null && !this.lang.isEmpty())
208-
row.child(IKey.lang(this.lang).asWidget().align(Alignment.CenterRight).height(18));
211+
if (this.lang != null)
212+
row.child(this.lang.asWidget().align(Alignment.CenterRight).height(18));
209213

210214
return row;
211215
}

src/main/java/com/gregtechceu/gtceu/api/cover/filter/Filter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package com.gregtechceu.gtceu.api.cover.filter;
22

3+
import com.gregtechceu.gtceu.api.mui.factory.GuiData;
4+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
5+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
6+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
7+
38
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
49

510
import net.minecraft.nbt.CompoundTag;
@@ -11,6 +16,11 @@ public interface Filter<T, S extends Filter<T, S>> extends Predicate<T> {
1116

1217
WidgetGroup openConfigurator(int x, int y);
1318

19+
/**
20+
* @return Filter panel when opened by itself (including the player inventory)
21+
*/
22+
ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings);
23+
1424
CompoundTag saveFilter();
1525

1626
void setOnUpdated(Consumer<S> onUpdated);

src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ public FilterHandler(ISyncManaged container) {
5757

5858
protected abstract F getEmptyFilter();
5959

60-
protected abstract boolean canInsertFilterItem(ItemStack itemStack);
61-
6260
//////////////////////////////////
6361
// ***** PUBLIC API ******//
6462
//////////////////////////////////
6563

64+
public abstract boolean canInsertFilterItem(ItemStack itemStack);
65+
6666
public Widget createFilterSlotUI(int xPos, int yPos) {
6767
return new SlotWidget(getFilterSlot(), 0, xPos, yPos)
6868
.setChangeListener(this::updateFilter)
@@ -117,7 +117,7 @@ public FilterHandler<T, F> onFilterUpdated(Consumer<F> onFilterUpdated) {
117117
// ***** FILTER HANDLING ******//
118118
///////////////////////////////////////
119119

120-
private CustomItemStackHandler getFilterSlot() {
120+
public CustomItemStackHandler getFilterSlot() {
121121
if (this.filterSlot == null) {
122122
this.filterSlot = new CustomItemStackHandler(this.filterItem) {
123123

src/main/java/com/gregtechceu/gtceu/api/cover/filter/FilterHandlers.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ protected ItemFilter getEmptyFilter() {
2121
}
2222

2323
@Override
24-
protected boolean canInsertFilterItem(ItemStack itemStack) {
24+
public boolean canInsertFilterItem(ItemStack itemStack) {
2525
return ItemFilter.FILTERS.containsKey(itemStack.getItem());
2626
}
2727
};
@@ -41,7 +41,7 @@ protected FluidFilter getEmptyFilter() {
4141
}
4242

4343
@Override
44-
protected boolean canInsertFilterItem(ItemStack itemStack) {
44+
public boolean canInsertFilterItem(ItemStack itemStack) {
4545
return FluidFilter.FILTERS.containsKey(itemStack.getItem());
4646
}
4747
};

src/main/java/com/gregtechceu/gtceu/api/cover/filter/FluidFilter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package com.gregtechceu.gtceu.api.cover.filter;
22

3+
import com.gregtechceu.gtceu.api.mui.factory.GuiData;
4+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
5+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
6+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
7+
38
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
49

510
import net.minecraft.nbt.CompoundTag;
@@ -58,6 +63,11 @@ public WidgetGroup openConfigurator(int x, int y) {
5863
throw new NotImplementedException("Not available for empty fluid filter");
5964
}
6065

66+
@Override
67+
public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) {
68+
return null;
69+
}
70+
6171
@Override
6272
public CompoundTag saveFilter() {
6373
throw new NotImplementedException("Not available for empty fluid filter");

src/main/java/com/gregtechceu/gtceu/api/cover/filter/ItemFilter.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
package com.gregtechceu.gtceu.api.cover.filter;
22

3+
import com.gregtechceu.gtceu.api.mui.factory.GuiData;
4+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
5+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
6+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
7+
38
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
49

510
import net.minecraft.nbt.CompoundTag;
@@ -57,6 +62,11 @@ public WidgetGroup openConfigurator(int x, int y) {
5762
throw new NotImplementedException("Not available for empty item filter");
5863
}
5964

65+
@Override
66+
public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) {
67+
return null;
68+
}
69+
6070
@Override
6171
public CompoundTag saveFilter() {
6272
throw new NotImplementedException("Not available for empty item filter");

src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleFluidFilter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@
33
import com.gregtechceu.gtceu.api.gui.GuiTextures;
44
import com.gregtechceu.gtceu.api.gui.widget.ScrollablePhantomFluidWidget;
55
import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget;
6+
import com.gregtechceu.gtceu.api.mui.factory.GuiData;
7+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
68
import com.gregtechceu.gtceu.api.transfer.fluid.CustomFluidTank;
9+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
10+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
711

812
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
913

@@ -140,6 +144,11 @@ public void detectAndSendChanges() {
140144
return group;
141145
}
142146

147+
@Override
148+
public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) {
149+
return null;
150+
}
151+
143152
@Override
144153
public boolean test(FluidStack other) {
145154
return testFluidAmount(other) > 0L;

src/main/java/com/gregtechceu/gtceu/api/cover/filter/SimpleItemFilter.java

Lines changed: 82 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
package com.gregtechceu.gtceu.api.cover.filter;
22

3-
import com.gregtechceu.gtceu.api.gui.GuiTextures;
4-
import com.gregtechceu.gtceu.api.gui.widget.PhantomSlotWidget;
5-
import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget;
3+
import com.gregtechceu.gtceu.api.mui.factory.GuiData;
4+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
5+
import com.gregtechceu.gtceu.api.mui.value.sync.PhantomItemSlotSyncHandler;
6+
import com.gregtechceu.gtceu.api.mui.widgets.Dialog;
7+
import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget;
8+
import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow;
9+
import com.gregtechceu.gtceu.api.mui.widgets.layout.Grid;
10+
import com.gregtechceu.gtceu.api.mui.widgets.slot.ModularSlot;
11+
import com.gregtechceu.gtceu.api.mui.widgets.slot.PhantomItemSlot;
612
import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler;
13+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
14+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
15+
import com.gregtechceu.gtceu.common.data.GTItems;
16+
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
17+
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
718
import com.gregtechceu.gtceu.utils.GTUtil;
819

920
import com.lowdragmc.lowdraglib.gui.widget.WidgetGroup;
@@ -15,6 +26,7 @@
1526
import net.minecraft.world.item.ItemStack;
1627

1728
import lombok.Getter;
29+
import org.jetbrains.annotations.NotNull;
1830

1931
import java.util.Arrays;
2032
import java.util.function.Consumer;
@@ -97,42 +109,76 @@ public void setIgnoreNbt(boolean ingoreNbt) {
97109
onUpdated.accept(this);
98110
}
99111

112+
@Override
100113
public WidgetGroup openConfigurator(int x, int y) {
101-
WidgetGroup group = new WidgetGroup(x, y, 18 * 3 + 25, 18 * 3); // 80 55
102-
for (int i = 0; i < 3; i++) {
103-
for (int j = 0; j < 3; j++) {
104-
final int index = i * 3 + j;
105-
106-
var handler = new CustomItemStackHandler(matches[index]);
107-
108-
var slot = new PhantomSlotWidget(handler, 0, i * 18, j * 18) {
109-
110-
@Override
111-
public void updateScreen() {
112-
super.updateScreen();
113-
setMaxStackSize(maxStackSize);
114-
}
115-
116-
@Override
117-
public void detectAndSendChanges() {
118-
super.detectAndSendChanges();
119-
setMaxStackSize(maxStackSize);
120-
}
121-
};
122-
123-
slot.setChangeListener(() -> {
124-
matches[index] = handler.getStackInSlot(0);
125-
onUpdated.accept(this);
126-
}).setBackground(GuiTextures.SLOT);
127-
128-
group.addWidget(slot);
114+
return null;
115+
}
116+
117+
@Override
118+
public ModularPanel getPanel(GuiData data, PanelSyncManager syncManager, UISettings settings) {
119+
FilterItemStackHandler handler = new FilterItemStackHandler(matches, this);
120+
121+
Grid filterGrid = new Grid()
122+
.coverChildren()
123+
.mapTo(3, 9, i -> new PhantomItemSlot()
124+
.size(16)
125+
.syncHandler(new PhantomItemSlotSyncHandler(new ModularSlot(handler, i)
126+
.changeListener((stack, amount, client, init) -> {
127+
handler.setStackInSlot(i, stack);
128+
}).ignoreMaxStackSize(true).accessibility(true, false))));
129+
130+
return new Dialog<>("simple_item_filter")
131+
.setDisablePanelsBelow(false)
132+
.setDraggable(true)
133+
.setCloseOnOutOfBoundsClick(true)
134+
.child(GTMuiWidgets.createTitleBar(GTItems.ITEM_FILTER.asStack(), 176, GTGuiTextures.BACKGROUND))
135+
.child(Flow.row()
136+
.top(10)
137+
.coverChildrenHeight()
138+
.child(filterGrid.horizontalCenter()))
139+
.child(SlotGroupWidget.playerInventory(false).left(7).bottom(7));
140+
}
141+
142+
private static class FilterItemStackHandler extends CustomItemStackHandler {
143+
144+
private ItemStack[] matches;
145+
private SimpleItemFilter filter;
146+
147+
public FilterItemStackHandler(ItemStack[] matches, SimpleItemFilter simpleItemFilter) {
148+
super(matches.length);
149+
this.matches = matches;
150+
this.filter = simpleItemFilter;
151+
}
152+
153+
@Override
154+
public @NotNull ItemStack getStackInSlot(int slot) {
155+
return matches[slot];
156+
}
157+
158+
@Override
159+
protected int getStackLimit(int slot, @NotNull ItemStack stack) {
160+
return 1;
161+
}
162+
163+
@Override
164+
public @NotNull ItemStack extractItem(int slot, int amount, boolean simulate) {
165+
if (amount >= matches[slot].getCount()) {
166+
matches[slot] = ItemStack.EMPTY;
129167
}
168+
return matches[slot];
169+
}
170+
171+
@Override
172+
public @NotNull ItemStack insertItem(int slot, @NotNull ItemStack stack, boolean simulate) {
173+
return stack;
174+
}
175+
176+
@Override
177+
public void setStackInSlot(int slot, @NotNull ItemStack stack) {
178+
super.setStackInSlot(slot, stack);
179+
matches[slot] = stack.copyWithCount(1);
180+
filter.onUpdated.accept(filter);
130181
}
131-
group.addWidget(new ToggleButtonWidget(18 * 3 + 5, 0, 20, 20,
132-
GuiTextures.BUTTON_BLACKLIST, this::isBlackList, this::setBlackList));
133-
group.addWidget(new ToggleButtonWidget(18 * 3 + 5, 20, 20, 20,
134-
GuiTextures.BUTTON_FILTER_NBT, this::isIgnoreNbt, this::setIgnoreNbt));
135-
return group;
136182
}
137183

138184
@Override

0 commit comments

Comments
 (0)