2
2
3
3
import static com .recursive_pineapple .matter_manipulator .common .utils .MMUtils .nullIfUnknown ;
4
4
5
+ import java .lang .invoke .MethodHandle ;
6
+ import java .lang .invoke .MethodType ;
5
7
import java .util .Arrays ;
6
8
import java .util .List ;
7
9
import java .util .Objects ;
13
15
14
16
import net .minecraftforge .common .util .ForgeDirection ;
15
17
18
+ import gregtech .api .covers .CoverRegistry ;
16
19
import gregtech .api .enums .ItemList ;
17
20
import gregtech .api .enums .VoidingMode ;
18
21
import gregtech .api .interfaces .IConfigurationCircuitSupport ;
28
31
import gregtech .api .metatileentity .implementations .MTEHatchInputBus ;
29
32
import gregtech .api .metatileentity .implementations .MTEHatchOutput ;
30
33
import gregtech .api .metatileentity .implementations .MTEMultiBlockBase ;
31
- import gregtech .api .objects .GTItemStack ;
32
- import gregtech .common .covers .CoverInfo ;
34
+ import gregtech .common .covers .Cover ;
33
35
import gregtech .common .tileentities .machines .MTEHatchOutputBusME ;
34
36
import gregtech .common .tileentities .machines .MTEHatchOutputME ;
35
37
46
48
import com .recursive_pineapple .matter_manipulator .common .items .manipulator .Transform ;
47
49
import com .recursive_pineapple .matter_manipulator .common .utils .MMUtils ;
48
50
51
+ import lombok .SneakyThrows ;
49
52
import tectech .thing .metaTileEntity .hatch .MTEHatchDynamoTunnel ;
50
53
import tectech .thing .metaTileEntity .hatch .MTEHatchEnergyTunnel ;
51
54
import tectech .thing .metaTileEntity .multi .base .TTMultiblockBase ;
@@ -148,8 +151,8 @@ public GTAnalysisResult(IGregTechTileEntity igte) {
148
151
149
152
// check each side for covers
150
153
for (ForgeDirection dir : ForgeDirection .VALID_DIRECTIONS ) {
151
- if (igte .getCoverIDAtSide (dir ) != 0 ) {
152
- covers [dir .ordinal ()] = CoverData .fromInfo ( MMUtils . getActualCover ( igte , dir ) );
154
+ if (igte .hasCoverAtSide (dir )) {
155
+ covers [dir .ordinal ()] = CoverData .fromMachine ( igte , dir );
153
156
hasCover = true ;
154
157
155
158
if (igte .getRedstoneOutputStrength (dir )) {
@@ -250,6 +253,13 @@ public GTAnalysisResult(IGregTechTileEntity igte) {
250
253
}
251
254
}
252
255
256
+ private static final MethodHandle SET_TICK_RATE_ADDITION = MMUtils .exposeMethod (Cover .class , MethodType .methodType (void .class , int .class ), "setTickRateAddition" );
257
+
258
+ @ SneakyThrows
259
+ private static void setTickRateAddition (Cover cover , int value ) {
260
+ SET_TICK_RATE_ADDITION .invokeExact (cover , value );
261
+ }
262
+
253
263
@ Override
254
264
public boolean apply (IBlockApplyContext ctx ) {
255
265
TileEntity te = ctx .getTileEntity ();
@@ -317,28 +327,28 @@ public boolean apply(IBlockApplyContext ctx) {
317
327
// install/remove/update the covers
318
328
for (ForgeDirection dir : ForgeDirection .VALID_DIRECTIONS ) {
319
329
CoverData expected = mCovers == null ? null : mCovers [dir .ordinal ()];
320
- CoverInfo actual = MMUtils . getActualCover ( gte , dir );
330
+ Cover actual = gte . getCoverAtSide ( dir );
321
331
322
332
if (actual == null && expected != null ) {
323
333
installCover (ctx , gte , dir , expected );
324
334
} else if (actual != null && expected == null ) {
325
335
removeCover (ctx , gte , dir );
326
336
} else if (actual != null && expected != null ) {
327
- if (!ItemStack .areItemStacksEqual (expected .getCover (), actual . getDrop ( ))) {
337
+ if (!ItemStack .areItemStacksEqual (expected .getCoverStack (), gte . getCoverItemAtSide ( dir ))) {
328
338
removeCover (ctx , gte , dir );
329
339
installCover (ctx , gte , dir , expected );
330
- } else if (!Objects .equals (actual .getCoverData (), expected .getCoverData ())) {
340
+ } else if (!Objects .equals (actual .getCoverData (), expected .getCoverData (actual ))) {
331
341
updateCover (ctx , gte , dir , expected );
332
342
}
333
343
}
334
344
335
345
// set the redstone strength
336
346
gte .setRedstoneOutputStrength (dir , (mStrongRedstone & dir .flag ) != 0 );
337
347
if (expected != null ) {
338
- actual = MMUtils . getActualCover ( gte , dir );
348
+ actual = gte . getCoverAtSide ( dir );
339
349
340
350
if (actual != null ) {
341
- actual . setTickRateAddition (expected .tickRateAddition == null ? 0 : expected .tickRateAddition );
351
+ setTickRateAddition (actual , expected .tickRateAddition == null ? 0 : expected .tickRateAddition );
342
352
}
343
353
}
344
354
}
@@ -452,24 +462,13 @@ public boolean apply(IBlockApplyContext ctx) {
452
462
}
453
463
454
464
private void removeCover (IBlockApplyContext context , IGregTechTileEntity gte , ForgeDirection side ) {
455
- CoverInfo actual = MMUtils .getActualCover (gte , side );
456
-
457
- if (actual != null ) {
458
- context .givePlayerItems (actual .getDrop ());
459
-
460
- actual .onCoverRemoval (true );
461
- actual .onDropped ();
462
- gte .setCoverIDAtSide (side , 0 );
463
-
464
- if (gte instanceof CoverableTileEntity te ) {
465
- te .clearCoverInfoAtSide (side );
466
- te .setOutputRedstoneSignal (side , (byte ) 0 );
467
- }
465
+ if (gte .hasCoverAtSide (side )) {
466
+ context .givePlayerItems (gte .detachCover (side ));
468
467
}
469
468
}
470
469
471
470
private void installCover (IBlockApplyContext context , IGregTechTileEntity gte , ForgeDirection side , CoverData cover ) {
472
- ItemStack stack = cover .getCover ();
471
+ ItemStack stack = cover .getCoverStack ();
473
472
474
473
if (!canPlace (gte , side , cover )) {
475
474
context .error ("Was not allowed to put cover on " + side .name ().toLowerCase () + "side: " + stack .getDisplayName ());
@@ -481,8 +480,11 @@ private void installCover(IBlockApplyContext context, IGregTechTileEntity gte, F
481
480
return ;
482
481
}
483
482
484
- gte .attachCover (context .getRealPlayer (), stack , side );
485
- gte .setCoverDataAtSide (side , cover .getCoverBehaviour ().allowsCopyPasteTool () ? cover .getCoverData () : null );
483
+ CoverRegistry .getCoverPlacer (stack ).placeCover (context .getRealPlayer (), stack , gte , side );
484
+
485
+ if (gte .getCoverAtSide (side ).allowsCopyPasteTool ()) {
486
+ gte .setCoverDataAtSide (side , cover .getCoverData (gte .getCoverAtSide (side )));
487
+ }
486
488
}
487
489
488
490
private void updateCover (
@@ -491,10 +493,10 @@ private void updateCover(
491
493
ForgeDirection side ,
492
494
CoverData target
493
495
) {
494
- CoverInfo info = MMUtils . getActualCover (gte , side );
495
- if ( info != null && ItemStack . areItemStacksEqual ( info . getDrop (), target . getCover ())) {
496
- if (info .allowsCopyPasteTool ()) {
497
- info .setCoverData (target .getCoverData ());
496
+ if ( gte . hasCoverAtSide ( side ) && ItemStack . areItemStacksEqual (gte . getCoverItemAtSide ( side ), target . getCoverStack ())) {
497
+ Cover cover = gte . getCoverAtSide ( side );
498
+ if (cover .allowsCopyPasteTool ()) {
499
+ cover .setCoverData (target .getCoverData (cover ));
498
500
}
499
501
}
500
502
}
@@ -506,16 +508,16 @@ public boolean getRequiredItemsForExistingBlock(IBlockApplyContext context) {
506
508
if (te instanceof IGregTechTileEntity gte ) {
507
509
for (ForgeDirection side : ForgeDirection .VALID_DIRECTIONS ) {
508
510
CoverData target = mCovers == null ? null : mCovers [side .ordinal ()];
509
- CoverInfo actual = MMUtils . getActualCover ( gte , side );
511
+ Cover actual = gte . getCoverAtSide ( side );
510
512
511
- if (actual != null && (target == null || ItemStack .areItemStacksEqual (actual . getDrop ( ), target .getCover ()))) {
512
- context .givePlayerItems (actual . getDrop ( ));
513
+ if (actual != null && (target == null || ItemStack .areItemStacksEqual (gte . getCoverItemAtSide ( side ), target .getCoverStack ()))) {
514
+ context .givePlayerItems (gte . getCoverItemAtSide ( side ));
513
515
actual = null ;
514
516
}
515
517
516
518
if (actual == null && target != null ) {
517
519
if (canPlace (gte , side , target )) {
518
- context .tryConsumeItems (target .getCover ());
520
+ context .tryConsumeItems (target .getCoverStack ());
519
521
}
520
522
}
521
523
}
@@ -530,18 +532,17 @@ public boolean getRequiredItemsForNewBlock(IBlockApplyContext context) {
530
532
CoverData target = mCovers == null ? null : mCovers [side .ordinal ()];
531
533
532
534
if (target != null ) {
533
- context .tryConsumeItems (target .getCover ());
535
+ context .tryConsumeItems (target .getCoverStack ());
534
536
}
535
537
}
536
538
537
539
return true ;
538
540
}
539
541
540
542
private boolean canPlace (IGregTechTileEntity gte , ForgeDirection side , CoverData cover ) {
541
- ItemStack stack = cover .getCover ();
543
+ ItemStack stack = cover .getCoverStack ();
542
544
543
- if (!cover .getCoverBehaviour ().isCoverPlaceable (side , stack , gte )) return false ;
544
- if (!gte .getMetaTileEntity ().allowCoverOnSide (side , new GTItemStack (stack ))) return false ;
545
+ if (!gte .getMetaTileEntity ().allowCoverOnSide (side , stack )) return false ;
545
546
546
547
return true ;
547
548
}
0 commit comments