aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java
blob: e8f448fb4d1f32d597434577b84a3bb7b02ff615 (plain)
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
package gregtech.loaders.oreprocessing;

import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sAlloySmelterRecipes;
import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sExtruderRecipes;
import static gregtech.api.util.GT_Recipe.GT_Recipe_Map.sFluidSolidficationRecipes;
import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
import static gregtech.api.util.GT_RecipeBuilder.TICKS;
import static gregtech.api.util.GT_Utility.calculateRecipeEU;

import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;

import gregtech.api.enums.GT_Values;
import gregtech.api.enums.ItemList;
import gregtech.api.enums.Materials;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.SubTag;
import gregtech.api.enums.TierEU;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Proxy;

@SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock")
public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegistrator {

    public ProcessingShaping() {
        OrePrefixes.ingot.add(this);
        OrePrefixes.dust.add(this);
    }

    @Override
    public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
        ItemStack aStack) {
        if (((aMaterial == Materials.Glass) || (GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null))
            && (!aMaterial.contains(SubTag.NO_SMELTING))) {
            long aMaterialMass = aMaterial.getMass();
            int tAmount = (int) (aPrefix.mMaterialAmount / 3628800L);
            if ((tAmount > 0) && (tAmount <= 64) && (aPrefix.mMaterialAmount % 3628800L == 0L)) {
                int tVoltageMultiplier = aMaterial.mBlastFurnaceTemp >= 2800 ? 60 : 15;
                int tTrueVoltage = aMaterial.getProcessingMaterialTierEU();

                if (aMaterial.contains(SubTag.NO_SMASHING)) {
                    tVoltageMultiplier /= 4;
                } else if (aPrefix.name()
                    .startsWith(OrePrefixes.dust.name())) {
                        return;
                    }

                if (!OrePrefixes.block.isIgnored(aMaterial.mSmeltInto)
                    && (GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, 1L) != null)) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(9L, aStack), ItemList.Shape_Extruder_Block.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration((10 * tAmount) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);

                    // Allow creation of alloy smelter recipes for material recycling if < IV tier.
                    if (tTrueVoltage < TierEU.IV) {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(9L, aStack), ItemList.Shape_Mold_Block.get(0L))
                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration((5 * tAmount) * TICKS)
                            .eut(calculateRecipeEU(aMaterial, 4 * tVoltageMultiplier))
                            .addTo(sAlloySmelterRecipes);
                    }
                }
                if ((aPrefix != OrePrefixes.ingot || aMaterial != aMaterial.mSmeltInto)
                    && GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Ingot.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(10 * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 4 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Pipe_Tiny.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial.mSmeltInto, tAmount * 2))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration((4 * tAmount) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Pipe_Small.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration((8 * tAmount) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(3L, aStack), ItemList.Shape_Extruder_Pipe_Medium.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration((24 * tAmount) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(6L, aStack), ItemList.Shape_Extruder_Pipe_Large.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration((48 * tAmount) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(12L, aStack), ItemList.Shape_Extruder_Pipe_Huge.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration((96 * tAmount) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Plate.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Small_Gear.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(6L, aStack), ItemList.Shape_Extruder_Turbine_Blade.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }

                if (!(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
                    if (aMaterial.mStandardMoltenFluid != null) {
                        if (GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Ring.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(36L))
                                .noFluidOutputs()
                                .duration(5 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 4 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Screw.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(18L))
                                .noFluidOutputs()
                                .duration(2 * SECONDS + 10 * TICKS)
                                .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Rod.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(72L))
                                .noFluidOutputs()
                                .duration(7 * SECONDS + 10 * TICKS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Bolt.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(18L))
                                .noFluidOutputs()
                                .duration(2 * SECONDS + 10 * TICKS)
                                .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Round.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(18L))
                                .noFluidOutputs()
                                .duration(2 * SECONDS + 10 * TICKS)
                                .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(144L))
                                .noFluidOutputs()
                                .duration(15 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Turbine_Blade.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(864L))
                                .noFluidOutputs()
                                .duration(20 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Pipe_Tiny.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(72L))
                                .noFluidOutputs()
                                .duration(1 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Pipe_Small.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(144L))
                                .noFluidOutputs()
                                .duration(2 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Pipe_Medium.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(432L))
                                .noFluidOutputs()
                                .duration(4 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Pipe_Large.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(864L))
                                .noFluidOutputs()
                                .duration(8 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                        if (GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(ItemList.Shape_Mold_Pipe_Huge.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L))
                                .fluidInputs(aMaterial.getMolten(1728L))
                                .noFluidOutputs()
                                .duration(16 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                .addTo(sFluidSolidficationRecipes);
                        }
                    }
                }
                if (tAmount * 2 <= 64) {
                    if (!(aMaterial == Materials.Aluminium)) {
                        if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Rod.get(0L))
                                .itemOutputs(
                                    GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                                .eut(calculateRecipeEU(aMaterial, 6 * tVoltageMultiplier))
                                .addTo(sExtruderRecipes);
                        }
                    } else {
                        if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Rod.get(0L))
                                .itemOutputs(
                                    GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration(10 * SECONDS)
                                .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                .addTo(sExtruderRecipes);
                        }
                    }
                }
                if (tAmount * 2 <= 64) {
                    if (GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial.mSmeltInto, 1L) != null) {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Wire.get(0L))
                            .itemOutputs(
                                GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial.mSmeltInto, tAmount * 2))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                            .eut(calculateRecipeEU(aMaterial, 6 * tVoltageMultiplier))
                            .addTo(sExtruderRecipes);
                    }
                }
                if (tAmount * 8 <= 64) {
                    if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial.mSmeltInto, 1L) != null) {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Bolt.get(0L))
                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial.mSmeltInto, tAmount * 8))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                            .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                            .addTo(sExtruderRecipes);
                    }
                }
                if (tAmount * 4 <= 64) {
                    if (GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial.mSmeltInto, 1L) != null) {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Ring.get(0L))
                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial.mSmeltInto, tAmount * 4))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                            .eut(calculateRecipeEU(aMaterial, 6 * tVoltageMultiplier))
                            .addTo(sExtruderRecipes);
                    }
                    if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)
                        && !aMaterial.contains(SubTag.NO_SMASHING)) {
                        // If material tier < IV then add manual recipe.
                        if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV
                            && GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L) != null) {
                            GT_ModHandler.addCraftingRecipe(
                                GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L),
                                GT_Proxy.tBits,
                                new Object[] { "h ", "fX", 'X', OrePrefixes.stick.get(aMaterial) });
                        }
                    }
                }

                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Extruder_Sword.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(3L, aStack), ItemList.Shape_Extruder_Pickaxe.get(0L))
                        .itemOutputs(
                            GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 3L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Shovel.get(0L))
                        .itemOutputs(
                            GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 1L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(3L, aStack), ItemList.Shape_Extruder_Axe.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 3L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Extruder_Hoe.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(6L, aStack), ItemList.Shape_Extruder_Hammer.get(0L))
                        .itemOutputs(
                            GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 6L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Extruder_File.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Extruder_Saw.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }
                if (GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, 1L) != null) {
                    GT_Values.RA.stdBuilder()
                        .itemInputs(GT_Utility.copyAmount(4L, aStack), ItemList.Shape_Extruder_Gear.get(0L))
                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount))
                        .noFluidInputs()
                        .noFluidOutputs()
                        .duration(((int) Math.max(aMaterialMass * 5L * tAmount, tAmount)) * TICKS)
                        .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                        .addTo(sExtruderRecipes);
                }

                if (!(aMaterial == Materials.StyreneButadieneRubber || aMaterial == Materials.Silicone)) {
                    if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Plate.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                                .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                } else {
                    // If tier < IV then add ability to turn ingots into plates via alloy smelter.
                    if (tTrueVoltage < TierEU.IV) {
                        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Mold_Plate.get(0L))
                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                                .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                }

                // If tier < IV then add ability to turn ingots into gears via alloy smelter.
                if (tTrueVoltage < TierEU.IV) {
                    if (GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, 1L) != null) {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(8L, aStack), ItemList.Shape_Mold_Gear.get(0L))
                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration(((int) Math.max(aMaterialMass * 10L * tAmount, tAmount)) * TICKS)
                            .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                            .addTo(sAlloySmelterRecipes);
                    }
                }

                switch (aMaterial.mSmeltInto.mName) {
                    case "Glass" -> {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Bottle.get(0L))
                            .itemOutputs(new ItemStack(Items.glass_bottle, 1))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration((tAmount * 32) * TICKS)
                            .eut(16)
                            .addTo(sExtruderRecipes);
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Mold_Bottle.get(0L))
                            .itemOutputs(new ItemStack(Items.glass_bottle, 1))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration((tAmount * 64) * TICKS)
                            .eut(4)
                            .addTo(sAlloySmelterRecipes);
                    }
                    case "Steel" -> {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Cell.get(0L))
                            .itemOutputs(ItemList.Cell_Empty.get(tAmount))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration((tAmount * 128) * TICKS)
                            .eut(TierEU.RECIPE_LV)
                            .addTo(sExtruderRecipes);
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingadviron", tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 32) * TICKS)
                                .eut(3 * tVoltageMultiplier)
                                .addTo(sExtruderRecipes);
                        }
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingadviron", tAmount * 3))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 128) * TICKS)
                                .eut(1 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                    case "Iron", "WroughtIron" -> {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Cell.get(0L))
                            .itemOutputs(GT_ModHandler.getIC2Item("fuelRod", tAmount))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration((tAmount * 128) * TICKS)
                            .eut(TierEU.RECIPE_LV)
                            .addTo(sExtruderRecipes);
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingiron", tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 32) * TICKS)
                                .eut(3 * tVoltageMultiplier)
                                .addTo(sExtruderRecipes);
                        }
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingiron", tAmount * 3))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 128) * TICKS)
                                .eut(1 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                        if (tAmount * 31 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(31L, aStack), ItemList.Shape_Mold_Anvil.get(0L))
                                .itemOutputs(new ItemStack(Blocks.anvil, 1, 0))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 512) * TICKS)
                                .eut(4 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                    case "Tin" -> {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Extruder_Cell.get(0L))
                            .itemOutputs(ItemList.Cell_Empty.get(tAmount))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration((tAmount * 128) * TICKS)
                            .eut(TierEU.RECIPE_LV)
                            .addTo(sExtruderRecipes);
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingtin", tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 32) * TICKS)
                                .eut(3 * tVoltageMultiplier)
                                .addTo(sExtruderRecipes);
                        }
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingtin", tAmount * 3))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 128) * TICKS)
                                .eut(1 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                    case "Lead" -> {
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casinglead", tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 32) * TICKS)
                                .eut(3 * tVoltageMultiplier)
                                .addTo(sExtruderRecipes);
                        }
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casinglead", tAmount * 3))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 128) * TICKS)
                                .eut(1 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                    case "Copper", "AnnealedCopper" -> {
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingcopper", tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 32) * TICKS)
                                .eut(3 * tVoltageMultiplier)
                                .addTo(sExtruderRecipes);
                        }
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingcopper", tAmount * 3))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 128) * TICKS)
                                .eut(1 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                    case "Bronze" -> {
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingbronze", tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 32) * TICKS)
                                .eut(3 * tVoltageMultiplier)
                                .addTo(sExtruderRecipes);
                        }
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casingbronze", tAmount * 3))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 128) * TICKS)
                                .eut(1 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                    case "Gold" -> {
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casinggold", tAmount * 2))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 32) * TICKS)
                                .eut(3 * tVoltageMultiplier)
                                .addTo(sExtruderRecipes);
                        }
                        if (tAmount * 2 <= 64) {
                            GT_Values.RA.stdBuilder()
                                .itemInputs(GT_Utility.copyAmount(2L, aStack), ItemList.Shape_Mold_Casing.get(0L))
                                .itemOutputs(GT_ModHandler.getIC2Item("casinggold", tAmount * 3))
                                .noFluidInputs()
                                .noFluidOutputs()
                                .duration((tAmount * 128) * TICKS)
                                .eut(1 * tVoltageMultiplier)
                                .addTo(sAlloySmelterRecipes);
                        }
                    }
                    case "Polytetrafluoroethylene" -> {
                        GT_Values.RA.stdBuilder()
                            .itemInputs(GT_Utility.copyAmount(1L, aStack), ItemList.Shape_Extruder_Cell.get(0L))
                            .itemOutputs(ItemList.Cell_Empty.get(tAmount * 4))
                            .noFluidInputs()
                            .noFluidOutputs()
                            .duration((tAmount * 128) * TICKS)
                            .eut(TierEU.RECIPE_LV)
                            .addTo(sExtruderRecipes);
                    }
                }
            }
        }
    }
}