-
Notifications
You must be signed in to change notification settings - Fork 211
Expand file tree
/
Copy pathGregTechGuiScreen.java
More file actions
74 lines (61 loc) · 2.83 KB
/
GregTechGuiScreen.java
File metadata and controls
74 lines (61 loc) · 2.83 KB
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
package gregtech.api.mui;
import gregtech.api.GTValues;
import gregtech.api.util.MUIUtil;
import gregtech.mixins.mui2.ModularSyncManagerAccessor;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import com.cleanroommc.modularui.integration.jei.JeiRecipeTransferHandler;
import com.cleanroommc.modularui.screen.ModularPanel;
import com.cleanroommc.modularui.screen.ModularScreen;
import com.cleanroommc.modularui.utils.ObjectList;
import com.cleanroommc.modularui.value.sync.PanelSyncHandler;
import com.cleanroommc.modularui.value.sync.PanelSyncManager;
import com.cleanroommc.modularui.value.sync.SyncHandler;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.recipe.transfer.IRecipeTransferError;
import mezz.jei.transfer.RecipeTransferErrorInternal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@SuppressWarnings("UnstableApiUsage")
@SideOnly(Side.CLIENT)
public class GregTechGuiScreen extends ModularScreen implements JeiRecipeTransferHandler {
public GregTechGuiScreen(ModularPanel mainPanel) {
this(mainPanel, GTGuiTheme.STANDARD);
}
public GregTechGuiScreen(ModularPanel mainPanel, GTGuiTheme theme) {
this(GTValues.MODID, mainPanel, theme);
}
public GregTechGuiScreen(String owner, ModularPanel mainPanel, GTGuiTheme theme) {
this(owner, mainPanel, theme.getId());
}
public GregTechGuiScreen(String owner, ModularPanel mainPanel, String themeId) {
super(owner, mainPanel);
useTheme(themeId);
}
@Override
public IRecipeTransferError transferRecipe(IRecipeLayout recipeLayout, boolean maxTransfer, boolean simulate) {
Map<String, List<SyncHandler>> panelToSyncMap = new HashMap<>();
ObjectList<PanelSyncManager> panels = ObjectList.create();
panels.add(((ModularSyncManagerAccessor) getSyncManager()).getMainPanelSyncManager());
while (!panels.isEmpty()) {
PanelSyncManager psm = panels.removeFirst();
panelToSyncMap.put(psm.getPanelName(), new ArrayList<>(MUIUtil.getSyncHandlers(psm)));
if (MUIUtil.hasSubPanels(psm)) {
for (PanelSyncHandler psh : MUIUtil.getSubPanels(psm)) {
if (MUIUtil.hasSyncManager(psh)) {
panels.add(MUIUtil.getPanelSyncManager(psh));
}
}
}
}
for (SyncHandler syncHandler : panelToSyncMap.get(getPanelManager().getTopMostPanel().getName())) {
if (syncHandler instanceof IJEIRecipeReceiver recipeReceiver) {
return recipeReceiver.receiveRecipe(recipeLayout, maxTransfer, simulate);
}
}
// Hide the + button by default if no recipe receiver was found.
return RecipeTransferErrorInternal.INSTANCE;
}
}