1818import mezz .jei .api .recipe .category .IRecipeCategory ;
1919import net .minecraft .block .BlockState ;
2020import 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 ;
2225import net .minecraft .client .renderer .texture .OverlayTexture ;
2326import net .minecraft .client .resources .I18n ;
2427import net .minecraft .item .Item ;
2730import net .minecraft .util .math .AxisAlignedBB ;
2831import net .minecraft .util .math .BlockPos ;
2932import net .minecraft .util .math .vector .Quaternion ;
33+ import net .minecraft .util .math .vector .Vector3d ;
3034import net .minecraft .util .math .vector .Vector3f ;
3135import net .minecraft .util .text .IFormattableTextComponent ;
3236import 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