Skip to content

Commit d7bb959

Browse files
committed
Fix RF integration
Buildcraft pipes are particularly sentitive to directions.
1 parent a20e510 commit d7bb959

File tree

2 files changed

+22
-34
lines changed

2 files changed

+22
-34
lines changed

src/main/java/vazkii/botania/common/Botania.java

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public class Botania {
5252
public static boolean bloodMagicLoaded = false;
5353
public static boolean coloredLightsLoaded = false;
5454
public static boolean etFuturumLoaded = false;
55+
public static boolean rfApiLoaded = false;
5556

5657
public static ILightHelper lightHelper;
5758

@@ -70,6 +71,7 @@ public void preInit(FMLPreInitializationEvent event) {
7071
bloodMagicLoaded = Loader.isModLoaded("AWWayofTime"); // Psh, noob
7172
coloredLightsLoaded = Loader.isModLoaded("easycoloredlights");
7273
etFuturumLoaded = Loader.isModLoaded("etfuturum");
74+
rfApiLoaded = ModAPIManager.INSTANCE.hasAPI("CoFHAPI|energy");
7375

7476
lightHelper = coloredLightsLoaded ? new LightHelperColored() : new LightHelperVanilla();
7577

src/main/java/vazkii/botania/common/block/tile/mana/TileRFGenerator.java

+20-34
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@
1414
import net.minecraft.tileentity.TileEntity;
1515
import net.minecraft.util.BlockPos;
1616
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;
1819
import vazkii.botania.api.mana.IManaReceiver;
20+
import vazkii.botania.common.Botania;
1921
import vazkii.botania.common.block.tile.TileMod;
2022
import cofh.api.energy.IEnergyConnection;
2123
import cofh.api.energy.IEnergyReceiver;
22-
import net.minecraftforge.fml.common.Optional;
2324

2425
import java.util.EnumMap;
2526
import java.util.Map;
@@ -31,24 +32,22 @@ public class TileRFGenerator extends TileMod implements IManaReceiver, IEnergyCo
3132
private static final int MAX_MANA = 1280 * CONVERSION_RATE;
3233

3334
private static final String TAG_MANA = "mana";
34-
3535
int mana = 0;
3636

3737
// 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);
3939
private boolean deadCache;
4040

4141
@Override
4242
@Optional.Method(modid = "CoFHAPI|energy")
4343
public void validate() {
4444
super.validate();
4545
deadCache = true;
46-
receiverCache = null;
4746
}
4847

4948
@Override
5049
public void updateEntity() {
51-
if(!worldObj.isRemote && Loader.isModLoaded("CoFHAPI|energy")) {
50+
if(!worldObj.isRemote && Botania.rfApiLoaded) {
5251
if(deadCache)
5352
reCache();
5453

@@ -60,19 +59,17 @@ public void updateEntity() {
6059

6160
@Optional.Method(modid = "CoFHAPI|energy")
6261
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;
6967

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);
7269

73-
if(energy <= 0)
74-
return 0;
75-
}
70+
if (energy <= 0)
71+
return 0;
72+
}
7673

7774
return energy;
7875
}
@@ -90,28 +87,17 @@ private void reCache() {
9087
public void onNeighborTileChange(BlockPos pos) {
9188
TileEntity tile = worldObj.getTileEntity(pos);
9289

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);
10594
}
10695

10796
@Optional.Method(modid = "CoFHAPI|energy")
10897
private void addCache(TileEntity tile, EnumFacing side) {
109-
if(receiverCache != null)
110-
receiverCache.remove(side);
98+
receiverCache.remove(side);
11199

112-
if(tile instanceof IEnergyReceiver && ((IEnergyReceiver)tile).canConnectEnergy(side)) {
113-
if(receiverCache == null)
114-
receiverCache = new EnumMap<>(EnumFacing.class);
100+
if(tile instanceof IEnergyReceiver) {
115101
receiverCache.put(side, (IEnergyReceiver)tile);
116102
}
117103
}

0 commit comments

Comments
 (0)