1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
package gregtech.api.recipe.maps;
import java.util.function.Supplier;
import javax.annotation.ParametersAreNonnullByDefault;
import org.apache.commons.lang3.tuple.Pair;
import com.gtnewhorizons.modularui.api.ModularUITextures;
import com.gtnewhorizons.modularui.api.drawable.IDrawable;
import com.gtnewhorizons.modularui.api.drawable.UITexture;
import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
import com.gtnewhorizons.modularui.api.math.Pos2d;
import com.gtnewhorizons.modularui.api.math.Size;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
import com.gtnewhorizons.modularui.common.widget.ProgressBar;
import com.gtnewhorizons.modularui.common.widget.SlotWidget;
import gregtech.api.enums.SteamVariant;
import gregtech.api.recipe.BasicUIPropertiesBuilder;
import gregtech.api.recipe.NEIRecipePropertiesBuilder;
import gregtech.api.recipe.RecipeMapFrontend;
import gregtech.api.util.MethodsReturnNonnullByDefault;
import gregtech.common.gui.modularui.UIHelper;
// Makes some small changes to the default recipe frontend to display custom backgrounds and progress bars
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class PurificationUnitRecipeMapFrontend extends RecipeMapFrontend {
private final int overlayHeight;
private static final Pos2d realProgressBarPos = new Pos2d(3, 3);
public PurificationUnitRecipeMapFrontend(int overlayHeight, BasicUIPropertiesBuilder uiPropertiesBuilder,
NEIRecipePropertiesBuilder neiPropertiesBuilder) {
super(
uiPropertiesBuilder.progressBarSize(new Size(0, 0))
.progressBarPos(new Pos2d(0, 0)),
neiPropertiesBuilder);
this.overlayHeight = overlayHeight;
}
@Override
public void addProgressBar(ModularWindow.Builder builder, Supplier<Float> progressSupplier, Pos2d windowOffset) {
assert uiProperties.progressBarTexture != null;
UITexture texture = uiProperties.progressBarTexture.get();
builder.widget(
new ProgressBar().setTexture(texture, 170)
.setDirection(uiProperties.progressBarDirection)
.setProgress(progressSupplier)
.setSynced(false, false)
.setPos(realProgressBarPos.add(windowOffset))
.setSize(new Size(170, overlayHeight)));
}
@Override
public ModularWindow.Builder createNEITemplate(IItemHandlerModifiable itemInputsInventory,
IItemHandlerModifiable itemOutputsInventory, IItemHandlerModifiable specialSlotInventory,
IItemHandlerModifiable fluidInputsInventory, IItemHandlerModifiable fluidOutputsInventory,
Supplier<Float> progressSupplier, Pos2d windowOffset) {
// Override regular createNEITemplate method, so we can remove the background texture with the ugly border.
ModularWindow.Builder builder = ModularWindow.builder(neiProperties.recipeBackgroundSize);
// First draw progress bar in background
if (uiProperties.useProgressBar) {
addProgressBar(builder, progressSupplier, windowOffset);
}
UIHelper.forEachSlots(
(i, backgrounds, pos) -> builder.widget(
SlotWidget.phantom(itemInputsInventory, i)
.setBackground(backgrounds)
.setPos(pos)
.setSize(18, 18)),
(i, backgrounds, pos) -> builder.widget(
SlotWidget.phantom(itemOutputsInventory, i)
.setBackground(backgrounds)
.setPos(pos)
.setSize(18, 18)),
(i, backgrounds, pos) -> {
if (uiProperties.useSpecialSlot) builder.widget(
SlotWidget.phantom(specialSlotInventory, 0)
.setBackground(backgrounds)
.setPos(pos)
.setSize(18, 18));
},
(i, backgrounds, pos) -> builder.widget(
SlotWidget.phantom(fluidInputsInventory, i)
.setBackground(backgrounds)
.setPos(pos)
.setSize(18, 18)),
(i, backgrounds, pos) -> builder.widget(
SlotWidget.phantom(fluidOutputsInventory, i)
.setBackground(backgrounds)
.setPos(pos)
.setSize(18, 18)),
ModularUITextures.ITEM_SLOT,
ModularUITextures.FLUID_SLOT,
uiProperties,
uiProperties.maxItemInputs,
uiProperties.maxItemOutputs,
uiProperties.maxFluidInputs,
uiProperties.maxFluidOutputs,
SteamVariant.NONE,
windowOffset);
addGregTechLogo(builder, windowOffset);
for (Pair<IDrawable, Pair<Size, Pos2d>> specialTexture : uiProperties.specialTextures) {
builder.widget(
new DrawableWidget().setDrawable(specialTexture.getLeft())
.setSize(
specialTexture.getRight()
.getLeft())
.setPos(
specialTexture.getRight()
.getRight()
.add(windowOffset)));
}
return builder;
}
}
|