/
GuiItemStackFastBatch.java
142 lines (121 loc) · 4.24 KB
/
GuiItemStackFastBatch.java
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package mezz.jei.gui.ingredients;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.item.ItemStack;
import mezz.jei.gui.Focus;
import mezz.jei.util.ItemStackElement;
public class GuiItemStackFastBatch {
private final List<GuiItemStackFast> renderItemsAll = new ArrayList<>();
private final List<GuiItemStackFast> renderItemsBuiltIn = new ArrayList<>();
private final List<GuiItemStackFast> renderItems2d = new ArrayList<>();
private final List<GuiItemStackFast> renderItems3d = new ArrayList<>();
public void clear() {
renderItemsAll.clear();
renderItemsBuiltIn.clear();
renderItems2d.clear();
renderItems3d.clear();
}
public void add(GuiItemStackFast guiItemStack) {
renderItemsAll.add(guiItemStack);
}
public void set(int i, List<ItemStackElement> itemList) {
renderItemsBuiltIn.clear();
renderItems2d.clear();
renderItems3d.clear();
for (GuiItemStackFast guiItemStack : renderItemsAll) {
if (i >= itemList.size()) {
guiItemStack.clear();
} else {
ItemStack stack = itemList.get(i).getItemStack();
guiItemStack.setItemStack(stack);
if (guiItemStack.isBuiltInRenderer()) {
renderItemsBuiltIn.add(guiItemStack);
} else if (guiItemStack.isGui3d()) {
renderItems3d.add(guiItemStack);
} else {
renderItems2d.add(guiItemStack);
}
}
i++;
}
}
@Nullable
public Focus getFocusUnderMouse(int mouseX, int mouseY) {
for (GuiItemStackFast guiItemStack : renderItemsAll) {
if (guiItemStack.isMouseOver(mouseX, mouseY)) {
return new Focus(guiItemStack.getItemStack());
}
}
return null;
}
/** renders all ItemStacks and returns hovered gui item stack for later render pass */
@Nullable
public GuiItemStackFast render(@Nullable GuiItemStackFast hovered, @Nonnull Minecraft minecraft, boolean isMouseOver, int mouseX, int mouseY) {
if (isMouseOver && hovered == null) {
for (GuiItemStackFast guiItemStack : renderItemsAll) {
if (guiItemStack.isMouseOver(mouseX, mouseY)) {
hovered = guiItemStack;
break;
}
}
}
RenderHelper.enableGUIStandardItemLighting();
RenderItem renderItem = minecraft.getRenderItem();
TextureManager textureManager = minecraft.getTextureManager();
renderItem.zLevel += 50.0F;
textureManager.bindTexture(TextureMap.locationBlocksTexture);
textureManager.getTexture(TextureMap.locationBlocksTexture).setBlurMipmap(false, false);
GlStateManager.enableRescaleNormal();
GlStateManager.enableAlpha();
GlStateManager.alphaFunc(516, 0.1F);
GlStateManager.enableBlend();
GlStateManager.blendFunc(770, 771);
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
// 3d Items
GlStateManager.pushMatrix();
{
GlStateManager.enableLighting();
GlStateManager.scale(20.0F, 20.0F, -20.0F);
for (GuiItemStackFast guiItemStack : renderItems3d) {
if (hovered != guiItemStack) {
guiItemStack.renderItemAndEffectIntoGUI(true);
}
}
}
GlStateManager.popMatrix();
// 2d Items
GlStateManager.pushMatrix();
{
GlStateManager.disableLighting();
GlStateManager.scale(32.0F, 32.0F, -32.0F);
for (GuiItemStackFast guiItemStack : renderItems2d) {
if (hovered != guiItemStack) {
guiItemStack.renderItemAndEffectIntoGUI(false);
}
}
}
GlStateManager.popMatrix();
GlStateManager.disableAlpha();
GlStateManager.disableRescaleNormal();
GlStateManager.disableLighting();
textureManager.bindTexture(TextureMap.locationBlocksTexture);
textureManager.getTexture(TextureMap.locationBlocksTexture).restoreLastBlurMipmap();
renderItem.zLevel -= 50.0F;
// built-in render Items
for (GuiItemStackFast guiItemStack : renderItemsBuiltIn) {
if (hovered != guiItemStack) {
guiItemStack.renderSlow();
}
}
RenderHelper.disableStandardItemLighting();
return hovered;
}
}