Skip to content

Commit 09e85bd

Browse files
committed
Add "buttons" to JEI screen to show layer toggles and explode option
1 parent 56ab7db commit 09e85bd

1 file changed

Lines changed: 105 additions & 33 deletions

File tree

src/main/java/com/robotgryphon/compactcrafting/compat/jei/JeiMiniaturizationCraftingCategory.java

Lines changed: 105 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@
1818
import mezz.jei.api.recipe.category.IRecipeCategory;
1919
import net.minecraft.block.BlockState;
2020
import net.minecraft.client.Minecraft;
21-
import net.minecraft.client.renderer.*;
21+
import net.minecraft.client.renderer.BlockRendererDispatcher;
22+
import net.minecraft.client.renderer.IRenderTypeBuffer;
23+
import net.minecraft.client.renderer.RenderType;
24+
import net.minecraft.client.renderer.Tessellator;
2225
import net.minecraft.client.renderer.texture.OverlayTexture;
2326
import net.minecraft.client.resources.I18n;
2427
import net.minecraft.item.Item;
@@ -27,6 +30,7 @@
2730
import net.minecraft.util.math.AxisAlignedBB;
2831
import net.minecraft.util.math.BlockPos;
2932
import net.minecraft.util.math.vector.Quaternion;
33+
import net.minecraft.util.math.vector.Vector3d;
3034
import net.minecraft.util.math.vector.Vector3f;
3135
import net.minecraft.util.text.IFormattableTextComponent;
3236
import net.minecraft.util.text.TextFormatting;
@@ -47,9 +51,19 @@ public class JeiMiniaturizationCraftingCategory implements IRecipeCategory<Minia
4751
private IGuiHelper guiHelper;
4852
private final IDrawableStatic background;
4953
private final IDrawableStatic slotDrawable;
50-
private int[] renderLayers;
54+
private boolean singleLayer = false;
55+
private int singleLayerOffset = 0;
5156
private boolean debugMode = false;
52-
private Rectangle2d explodeToggle = new Rectangle2d(0, 0, 10, 10);
57+
58+
private Rectangle explodeToggle = new Rectangle(0, 0, 10, 10);
59+
private Rectangle layerUp = new Rectangle(0, 12, 10, 10);
60+
private Rectangle layerSwap = new Rectangle(0, 23, 10, 10);
61+
private Rectangle layerDown = new Rectangle(0, 34, 10, 10);
62+
63+
/**
64+
* Whether or not the preview is exploded (expanded) or not.
65+
*/
66+
private boolean exploded = false;
5367

5468
/**
5569
* Explode multiplier; specifies how far apart blocks are rendered.
@@ -114,6 +128,9 @@ public void setIngredients(MiniaturizationRecipe recipe, IIngredients ing) {
114128
@Override
115129
public void setRecipe(IRecipeLayout recipeLayout, MiniaturizationRecipe recipe, IIngredients iIngredients) {
116130

131+
singleLayer = false;
132+
singleLayerOffset = 0;
133+
117134
int GUTTER_X = 5;
118135
int OFFSET_Y = 150;
119136

@@ -196,12 +213,29 @@ private void addOutputSlots(MiniaturizationRecipe recipe, int GUTTER_X, int OFFS
196213
@Override
197214
public boolean handleClick(MiniaturizationRecipe recipe, double mouseX, double mouseY, int mouseButton) {
198215

199-
if(explodeToggle.contains((int) mouseX, (int) mouseY)) {
200-
if(explodeMulti == 1.6d) {
201-
explodeMulti = 1.0d;
202-
} else {
203-
explodeMulti = 1.6d;
204-
}
216+
if (explodeToggle.contains(mouseX, mouseY)) {
217+
explodeMulti = exploded ? 1.0d : 1.6d;
218+
exploded = !exploded;
219+
return true;
220+
}
221+
222+
if (layerSwap.contains(mouseX, mouseY)) {
223+
singleLayer = !singleLayer;
224+
return true;
225+
}
226+
227+
if (layerUp.contains(mouseX, mouseY) && singleLayer) {
228+
if(singleLayerOffset < recipe.getDimensions().getYSize() - 1)
229+
singleLayerOffset++;
230+
231+
return true;
232+
}
233+
234+
if (layerDown.contains(mouseX, mouseY) && singleLayer) {
235+
if(singleLayerOffset > 0)
236+
singleLayerOffset--;
237+
238+
return true;
205239
}
206240

207241
return false;
@@ -210,38 +244,45 @@ public boolean handleClick(MiniaturizationRecipe recipe, double mouseX, double m
210244
@Override
211245
public void draw(MiniaturizationRecipe recipe, MatrixStack mx, double mouseX, double mouseY) {
212246

213-
try {
247+
// try {
248+
// IDrawableBuilder b = guiHelper.drawableBuilder(new ResourceLocation(CompactCrafting.MOD_ID, "block/field_projector"), 16, 16, 16, 16);
249+
// IDrawableStatic build = b.build();
250+
//
251+
// build.draw(mx, 0, 30);
252+
// } catch (Exception ex) {
253+
// }
214254

215-
}
255+
AxisAlignedBB dims = recipe.getDimensions();
256+
257+
IDrawableStatic jei = guiHelper
258+
.drawableBuilder(
259+
new ResourceLocation(CompactCrafting.MOD_ID, "textures/nope.png"),
260+
0, 0,
261+
10, 10
262+
).setTextureSize(16, 16).build();
216263

217-
catch(Exception ex) {}
264+
jei.draw(mx, explodeToggle.x, explodeToggle.y);
265+
266+
jei.draw(mx, layerSwap.x, layerSwap.y);
267+
if(singleLayer) {
268+
if(singleLayerOffset < dims.getYSize() - 1)
269+
jei.draw(mx, layerUp.x, layerUp.y);
270+
271+
if(singleLayerOffset > 0)
272+
jei.draw(mx, layerDown.x, layerDown.y);
273+
}
218274

219275
try {
220276
IRenderTypeBuffer.Impl buffers = IRenderTypeBuffer.getImpl(Tessellator.getInstance().getBuffer());
221277
IVertexBuilder field = buffers.getBuffer(RenderTypesExtensions.PROJECTION_FIELD_RENDERTYPE);
222278
IVertexBuilder lines = buffers.getBuffer(RenderType.getLines());
223279

224-
mx.push();
225-
226-
mx.translate(explodeToggle.getX(), explodeToggle.getY(), 0);
227-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX(), explodeToggle.getY(), 0));
228-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX() + explodeToggle.getWidth(), explodeToggle.getY(), 0));
229-
230-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX() + explodeToggle.getWidth(), explodeToggle.getY(), 0));
231-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX() + explodeToggle.getWidth(), explodeToggle.getY() + explodeToggle.getHeight(), 0));
232-
233-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX() + explodeToggle.getWidth(), explodeToggle.getY() + explodeToggle.getHeight(), 0));
234-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX(), explodeToggle.getY() + explodeToggle.getHeight(), 0));
235-
236-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX(), explodeToggle.getY() + explodeToggle.getHeight(), 0));
237-
addColoredVertex(field, mx, Color.green, new Vector3f(explodeToggle.getX(), explodeToggle.getY(), 0));
238-
239-
mx.pop();
280+
// drawRect(mx, lines, layerUp, Color.blue);
281+
// drawRect(mx, lines, layerSwap, Color.red);
282+
// drawRect(mx, lines, layerDown, Color.blue);
240283

241284
mx.push();
242285

243-
AxisAlignedBB dims = recipe.getDimensions();
244-
245286
// mx.translate(-dims.getXSize()/2, -dims.getYSize() /2 , -dims.getZSize() / 2);
246287

247288
mx.translate(
@@ -256,7 +297,7 @@ public void draw(MiniaturizationRecipe recipe, MatrixStack mx, double mouseX, do
256297
0,
257298
true));
258299

259-
if(debugMode) {
300+
if (debugMode) {
260301
// DEBUG Line
261302
addColoredVertex(lines, mx, Color.RED, new Vector3f(0, (float) -10, 0));
262303
addColoredVertex(lines, mx, Color.RED, new Vector3f(0, (float) 10, 0));
@@ -267,7 +308,13 @@ public void draw(MiniaturizationRecipe recipe, MatrixStack mx, double mouseX, do
267308
// Variable explode based on mouse position (clamped)
268309
// double explodeMulti = MathHelper.clamp(mouseX, 0, this.background.getWidth())/this.background.getWidth()*2+1;
269310

270-
renderLayers = IntStream.range(0, (int) ySize).toArray();
311+
312+
int[] renderLayers;
313+
if (!singleLayer) {
314+
renderLayers = IntStream.range(0, (int) ySize).toArray();
315+
} else {
316+
renderLayers = new int[]{singleLayerOffset};
317+
}
271318

272319
mx.translate(
273320
-(dims.getXSize() / 2) * explodeMulti - 0.5,
@@ -288,8 +335,33 @@ public void draw(MiniaturizationRecipe recipe, MatrixStack mx, double mouseX, do
288335
}
289336
}
290337

338+
private void drawRect(MatrixStack mx, IVertexBuilder field, Rectangle rect, Color color) {
339+
mx.push();
340+
mx.translate(rect.getX(), rect.getY(), 0);
341+
addColoredVertex(field, mx, color, new Vector3d(rect.getX(), rect.getY(), 0));
342+
addColoredVertex(field, mx, color, new Vector3d(rect.getX() + rect.getWidth(), rect.getY(), 0));
343+
344+
addColoredVertex(field, mx, color, new Vector3d(rect.getX() + rect.getWidth(), rect.getY(), 0));
345+
addColoredVertex(field, mx, color, new Vector3d(rect.getX() + rect.getWidth(), rect.getY() + rect.getHeight(), 0));
346+
347+
addColoredVertex(field, mx, color, new Vector3d(rect.getX() + rect.getWidth(), rect.getY() + rect.getHeight(), 0));
348+
addColoredVertex(field, mx, color, new Vector3d(rect.getX(), rect.getY() + rect.getHeight(), 0));
349+
350+
addColoredVertex(field, mx, color, new Vector3d(rect.getX(), rect.getY() + rect.getHeight(), 0));
351+
addColoredVertex(field, mx, color, new Vector3d(rect.getX(), rect.getY(), 0));
352+
mx.pop();
353+
}
354+
355+
private void addColoredVertex(IVertexBuilder renderer, MatrixStack stack, Color color, Vector3d position) {
356+
renderer.pos(position.getX(), position.getY(), position.getZ())
357+
.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())
358+
.lightmap(0, 240)
359+
.normal(1, 0, 0)
360+
.endVertex();
361+
}
362+
291363
private void addColoredVertex(IVertexBuilder renderer, MatrixStack stack, Color color, Vector3f position) {
292-
renderer.pos(stack.getLast().getMatrix(), position.getX(), position.getY(), position.getZ())
364+
renderer.pos(position.getX(), position.getY(), position.getZ())
293365
.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())
294366
.lightmap(0, 240)
295367
.normal(1, 0, 0)

0 commit comments

Comments
 (0)