11package github .kasuminova .mmce .common .world ;
22
33import com .github .bsideup .jabel .Desugar ;
4+ import github .kasuminova .mmce .common .tile .MEPatternMirrorImage ;
5+ import github .kasuminova .mmce .common .tile .MEPatternProvider ;
46import github .kasuminova .mmce .common .util .concurrent .ExecuteGroup ;
57import hellfirepvp .modularmachinery .common .tiles .base .TileMultiblockMachineController ;
68import it .unimi .dsi .fastutil .objects .ObjectArraySet ;
911import net .minecraft .tileentity .TileEntity ;
1012import net .minecraft .util .math .BlockPos ;
1113import net .minecraft .world .World ;
14+ import net .minecraftforge .fml .common .Loader ;
15+ import net .minecraftforge .fml .common .Optional ;
1216
1317import java .util .Collections ;
1418import java .util .Map ;
@@ -40,16 +44,26 @@ public void removeWorld(World world) {
4044
4145 public void checkComponentShared (TileEntity component , TileMultiblockMachineController ctrl ) {
4246 World world = component .getWorld ();
43- BlockPos pos = component .getPos ();
47+ BlockPos pos ;
48+ TileEntity te ;
49+
50+ if (Loader .isModLoaded ("appliedenergistics2" )){
51+ Object [] result = getResult (component , world );
52+ pos = (BlockPos ) result [0 ];
53+ te = (TileEntity ) result [1 ];
54+ } else {
55+ te = component ;
56+ pos = component .getPos ();
57+ }
4458
4559 Map <BlockPos , ComponentInfo > posComponentMap = componentMap .computeIfAbsent (world , v -> new ConcurrentHashMap <>());
4660
47- synchronized (component ) {
61+ synchronized (te ) {
4862 ComponentInfo info = posComponentMap .computeIfAbsent (pos , v -> new ComponentInfo (
49- component , pos , ReferenceSets .synchronize (new ReferenceOpenHashSet <>(Collections .singleton (ctrl )))));
63+ te , pos , ReferenceSets .synchronize (new ReferenceOpenHashSet <>(Collections .singleton (ctrl )))));
5064
51- if (!info .areTileEntityEquals (component )) {
52- ComponentInfo newInfo = new ComponentInfo (component , pos , ReferenceSets .synchronize (new ReferenceOpenHashSet <>(Collections .singleton (ctrl ))));
65+ if (!info .areTileEntityEquals (te )) {
66+ ComponentInfo newInfo = new ComponentInfo (te , pos , ReferenceSets .synchronize (new ReferenceOpenHashSet <>(Collections .singleton (ctrl ))));
5367 posComponentMap .put (pos , newInfo );
5468 return ;
5569 }
@@ -73,9 +87,36 @@ public void checkComponentShared(TileEntity component, TileMultiblockMachineCont
7387 }
7488 }
7589
90+ @ Optional .Method (modid = "appliedenergistics2" )
91+ private static Object [] getResult (TileEntity component , World world ) {
92+ BlockPos pos = component .getPos ();
93+ TileEntity te = component ;
94+
95+ if (component instanceof MEPatternMirrorImage mepi ){
96+ if (mepi .providerPos != null ){
97+ TileEntity tileEntity = world .getTileEntity (mepi .providerPos );
98+ if (tileEntity instanceof MEPatternProvider mep ){
99+ te = mep ;
100+ pos = mep .getPos ();
101+ }
102+ }
103+ }
104+ return new Object []{pos ,te };
105+ }
106+
76107 public void removeOwner (TileEntity component , TileMultiblockMachineController ctrl ) {
77108 World world = component .getWorld ();
78- BlockPos pos = component .getPos ();
109+ BlockPos pos ;
110+ TileEntity te ;
111+
112+ if (Loader .isModLoaded ("appliedenergistics2" )){
113+ Object [] result = getResult (component , world );
114+ pos = (BlockPos ) result [0 ];
115+ te = (TileEntity ) result [1 ];
116+ } else {
117+ te = component ;
118+ pos = component .getPos ();
119+ }
79120
80121 Map <BlockPos , ComponentInfo > posComponentMap = componentMap .computeIfAbsent (world , v -> new ConcurrentHashMap <>());
81122
@@ -84,8 +125,8 @@ public void removeOwner(TileEntity component, TileMultiblockMachineController ct
84125 return ;
85126 }
86127
87- if (!info .areTileEntityEquals (component )) {
88- ComponentInfo newInfo = new ComponentInfo (component , pos , new ObjectArraySet <>());
128+ if (!info .areTileEntityEquals (te )) {
129+ ComponentInfo newInfo = new ComponentInfo (te , pos , new ObjectArraySet <>());
89130 posComponentMap .put (pos , newInfo );
90131 } else {
91132 Set <TileMultiblockMachineController > owners = info .owners ;
0 commit comments