14
14
import net .minecraft .tileentity .TileEntity ;
15
15
import net .minecraft .util .BlockPos ;
16
16
import net .minecraft .util .EnumFacing ;
17
- import net .minecraftforge .fml .common .Loader ;
17
+ import net .minecraftforge .fml .common .ModAPIManager ;
18
+ import net .minecraftforge .fml .common .Optional ;
18
19
import vazkii .botania .api .mana .IManaReceiver ;
20
+ import vazkii .botania .common .Botania ;
19
21
import vazkii .botania .common .block .tile .TileMod ;
20
22
import cofh .api .energy .IEnergyConnection ;
21
23
import cofh .api .energy .IEnergyReceiver ;
22
- import net .minecraftforge .fml .common .Optional ;
23
24
24
25
import java .util .EnumMap ;
25
26
import java .util .Map ;
@@ -31,24 +32,22 @@ public class TileRFGenerator extends TileMod implements IManaReceiver, IEnergyCo
31
32
private static final int MAX_MANA = 1280 * CONVERSION_RATE ;
32
33
33
34
private static final String TAG_MANA = "mana" ;
34
-
35
35
int mana = 0 ;
36
36
37
37
// Thanks to skyboy for help with this cuz I'm a noob with RF
38
- private EnumMap <EnumFacing , IEnergyReceiver > receiverCache ;
38
+ private EnumMap <EnumFacing , IEnergyReceiver > receiverCache = new EnumMap <>( EnumFacing . class ) ;
39
39
private boolean deadCache ;
40
40
41
41
@ Override
42
42
@ Optional .Method (modid = "CoFHAPI|energy" )
43
43
public void validate () {
44
44
super .validate ();
45
45
deadCache = true ;
46
- receiverCache = null ;
47
46
}
48
47
49
48
@ Override
50
49
public void updateEntity () {
51
- if (!worldObj .isRemote && Loader . isModLoaded ( "CoFHAPI|energy" ) ) {
50
+ if (!worldObj .isRemote && Botania . rfApiLoaded ) {
52
51
if (deadCache )
53
52
reCache ();
54
53
@@ -60,19 +59,17 @@ public void updateEntity() {
60
59
61
60
@ Optional .Method (modid = "CoFHAPI|energy" )
62
61
protected final int transmitEnergy (int energy ) {
63
- if (receiverCache != null )
64
- for (Map .Entry <EnumFacing , IEnergyReceiver > e : receiverCache .entrySet ()) {
65
- // todo 1.8 this iteration was in explicit reverse order. was there a reason?
66
- IEnergyReceiver tile = e .getValue ();
67
- if (tile == null )
68
- continue ;
62
+ // TODO: Share energy amoung receivers ?
63
+ for (Map .Entry <EnumFacing , IEnergyReceiver > e : receiverCache .entrySet ()) {
64
+ IEnergyReceiver tile = e .getValue ();
65
+ if (tile == null )
66
+ continue ;
69
67
70
- if (tile .receiveEnergy (e .getKey (), energy , true ) > 0 )
71
- energy -= tile .receiveEnergy (e .getKey (), energy , false );
68
+ energy -= tile .receiveEnergy (e .getKey ().getOpposite (), energy , false );
72
69
73
- if (energy <= 0 )
74
- return 0 ;
75
- }
70
+ if (energy <= 0 )
71
+ return 0 ;
72
+ }
76
73
77
74
return energy ;
78
75
}
@@ -90,28 +87,17 @@ private void reCache() {
90
87
public void onNeighborTileChange (BlockPos pos ) {
91
88
TileEntity tile = worldObj .getTileEntity (pos );
92
89
93
- if (pos .getX () < getPos ().getX ())
94
- addCache (tile , EnumFacing .EAST );
95
- else if (pos .getX () > getPos ().getX ())
96
- addCache (tile , EnumFacing .WEST );
97
- else if (pos .getZ () < getPos ().getZ ())
98
- addCache (tile , EnumFacing .SOUTH );
99
- else if (pos .getZ () > getPos ().getZ ())
100
- addCache (tile , EnumFacing .NORTH );
101
- else if (pos .getY () < getPos ().getY ())
102
- addCache (tile , EnumFacing .UP );
103
- else if (pos .getY () > getPos ().getY ())
104
- addCache (tile , EnumFacing .DOWN );
90
+ BlockPos q = getPos ();
91
+ EnumFacing side = EnumFacing .getFacingFromVector (pos .getX () - q .getX (), pos .getY () - q .getY (), pos .getZ () - q .getZ ());
92
+
93
+ addCache (tile , side );
105
94
}
106
95
107
96
@ Optional .Method (modid = "CoFHAPI|energy" )
108
97
private void addCache (TileEntity tile , EnumFacing side ) {
109
- if (receiverCache != null )
110
- receiverCache .remove (side );
98
+ receiverCache .remove (side );
111
99
112
- if (tile instanceof IEnergyReceiver && ((IEnergyReceiver )tile ).canConnectEnergy (side )) {
113
- if (receiverCache == null )
114
- receiverCache = new EnumMap <>(EnumFacing .class );
100
+ if (tile instanceof IEnergyReceiver ) {
115
101
receiverCache .put (side , (IEnergyReceiver )tile );
116
102
}
117
103
}
0 commit comments