aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity
diff options
context:
space:
mode:
authorJason Mitchell <mitchej@gmail.com>2019-07-15 19:47:31 -0700
committerJason Mitchell <mitchej@gmail.com>2019-07-15 19:47:31 -0700
commit1b7d5e176ec01d7b8fec464371b3e79144fffa8a (patch)
tree1ac96357da37d59d8ebe24add96d0c81368c0a27 /src/main/java/gregtech/api/metatileentity
parent30715b1438568a7594cbd7ef03e70f93adc76bdf (diff)
downloadGT5-Unofficial-1b7d5e176ec01d7b8fec464371b3e79144fffa8a.tar.gz
GT5-Unofficial-1b7d5e176ec01d7b8fec464371b3e79144fffa8a.tar.bz2
GT5-Unofficial-1b7d5e176ec01d7b8fec464371b3e79144fffa8a.zip
IC2 ENet compat for GT transformers & GT cables
* Fixes every face of ic2 nuclear reactors giving full energy * Should reduce performance concerns from previous ic2 energy compat * Removes Tec's workaround
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity')
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java11
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java10
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseTileEntity.java53
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java4
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaTileEntity.java8
-rw-r--r--src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java131
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java49
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java30
8 files changed, 237 insertions, 59 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
index d2ac134dbe..6d9ce47ef2 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
@@ -273,6 +273,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
for (byte i = 0; i < 6; i++)
mCoverBehaviors[i] = GregTech_API.getCoverBehavior(mCoverSides[i]);
issueBlockUpdate();
+ joinEnet();
}
if (xCoord != oX || yCoord != oY || zCoord != oZ) {
@@ -433,6 +434,9 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
}
tList.add("Is" + (mMetaTileEntity.isAccessAllowed(aPlayer) ? " " : EnumChatFormatting.RED+" not "+EnumChatFormatting.RESET) + "accessible for you");
}
+ if(joinedIc2Enet)
+ tList.add("Joined IC2 ENet");
+
return mMetaTileEntity.getSpecialDebugInfo(this, aPlayer, aLogLevel, tList);
}
@@ -498,7 +502,9 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
}
@Override
- public void setFrontFacing(byte aFacing) {/*Do nothing*/}
+ public void setFrontFacing(byte aFacing) {
+ doEnetUpdate();
+ }
@Override
public int getSizeInventory() {
@@ -556,6 +562,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
mMetaTileEntity.onRemoval();
mMetaTileEntity.setBaseMetaTileEntity(null);
}
+ leaveEnet();
super.invalidate();
}
@@ -864,6 +871,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
//logic handled internally
GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
}
+ doEnetUpdate();
return true;
}
@@ -876,6 +884,7 @@ public class BaseMetaPipeEntity extends BaseTileEntity implements IGregTechTileE
GT_Utility.sendChatToPlayer(aPlayer, trans("091","Redstone Output at Side ") + tSide + trans("092"," set to: ") + ((mStrongRedstone & (1 << tSide)) != 0 ? trans("093","Strong") : trans("094","Weak")));
GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(103), 3.0F, -1, xCoord, yCoord, zCoord);
}
+ doEnetUpdate();
return true;
}
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index 75b34fa73f..1da2dffca9 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -378,6 +378,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
oRedstone = mRedstone;
issueBlockUpdate();
}
+ if(mTickTimer == 10) joinEnet();
if (xCoord != oX || yCoord != oY || zCoord != oZ) {
oX = xCoord;
@@ -417,6 +418,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
}
}
+
if (mMetaTileEntity.isEnetOutput() && oOutput > 0) {
long tOutputVoltage = Math.max(oOutput, oOutput + (1 << GT_Utility.getTier(oOutput))), tUsableAmperage = Math.min(getOutputAmperage(), (getStoredEU() - mMetaTileEntity.getMinimumStoredEU()) / tOutputVoltage);
if (tUsableAmperage > 0) {
@@ -746,6 +748,8 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
if (!mHasEnoughEnergy)
tList.add(EnumChatFormatting.RED+"ATTENTION: This Device needs more power."+EnumChatFormatting.RESET);
}
+ if(joinedIc2Enet)
+ tList.add("Joined IC2 ENet");
return mMetaTileEntity.getSpecialDebugInfo(this, aPlayer, aLogLevel, tList);
}
@@ -816,6 +820,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
mFacing = aFacing;
mMetaTileEntity.onFacingChange();
onMachineBlockUpdate();
+ doEnetUpdate();
}
}
@@ -875,6 +880,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
@Override
public void invalidate() {
tileEntityInvalid = false;
+ leaveEnet();
if (canAccessData()) {
mMetaTileEntity.onRemoval();
mMetaTileEntity.setBaseMetaTileEntity(null);
@@ -1355,7 +1361,8 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
mStrongRedstone ^= (1 << tSide);
GT_Utility.sendChatToPlayer(aPlayer, trans("091","Redstone Output at Side ") + tSide + trans("092"," set to: ") + ((mStrongRedstone & (1 << tSide)) != 0 ? trans("093","Strong") : trans("094","Weak")));
GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(103), 3.0F, -1, xCoord, yCoord, zCoord);
- }
+ }
+ doEnetUpdate();
return true;
}
@@ -1365,6 +1372,7 @@ public class BaseMetaTileEntity extends BaseTileEntity implements IGregTechTileE
//logic handled internally
GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord);
}
+ doEnetUpdate();
return true;
}
diff --git a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java
index 66d1ade42d..eb18ef0d0c 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java
@@ -1,10 +1,14 @@
package gregtech.api.metatileentity;
+import cpw.mods.fml.common.FMLCommonHandler;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
import gregtech.api.net.GT_Packet_Block_Event;
import gregtech.api.util.GT_LanguageManager;
import gregtech.api.util.GT_Utility;
+import ic2.api.energy.event.EnergyTileLoadEvent;
+import ic2.api.energy.event.EnergyTileUnloadEvent;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
@@ -13,6 +17,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraft.world.biome.BiomeGenBase;
+import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.IFluidHandler;
@@ -398,12 +403,14 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje
@Override
public void invalidate() {
+ leaveEnet();
clearNullMarkersFromTileEntityBuffer();
super.invalidate();
}
@Override
public void onChunkUnload() {
+ leaveEnet();
clearNullMarkersFromTileEntityBuffer();
super.onChunkUnload();
isDead = true;
@@ -442,4 +449,50 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje
public String trans(String aKey, String aEnglish){
return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_"+aKey, aEnglish, false);
}
+
+ /*
+ * IC2 Energy Compat
+ */
+ protected TileIC2EnergySink ic2EnergySink = null;
+ protected boolean joinedIc2Enet = false;
+
+ public IMetaTileEntity getMetaTileEntity() { return null; }
+
+ protected void createIc2Sink() {
+ if(ic2EnergySink == null && FMLCommonHandler.instance().getEffectiveSide().isServer() && shouldJoinIc2Enet()) {
+ ic2EnergySink = new TileIC2EnergySink((IGregTechTileEntity)this);
+ ic2EnergySink.xCoord = xCoord;
+ ic2EnergySink.yCoord = yCoord;
+ ic2EnergySink.zCoord = zCoord;
+ ic2EnergySink.setWorldObj(worldObj);
+ }
+ }
+
+ public void doEnetUpdate() {
+ leaveEnet();
+ joinEnet();
+ }
+
+ protected void joinEnet() {
+ if (joinedIc2Enet || !shouldJoinIc2Enet()) return;
+
+ if(ic2EnergySink == null) createIc2Sink();
+
+ if (ic2EnergySink != null) {
+ MinecraftForge.EVENT_BUS.post(new EnergyTileLoadEvent(ic2EnergySink));
+ joinedIc2Enet = true;
+ }
+ }
+
+ protected void leaveEnet() {
+ if (joinedIc2Enet && ic2EnergySink != null && FMLCommonHandler.instance().getEffectiveSide().isServer()) {
+ joinedIc2Enet = false;
+ MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(ic2EnergySink));
+ }
+ }
+
+ public boolean shouldJoinIc2Enet() {
+ final IMetaTileEntity meta = getMetaTileEntity();
+ return meta != null && meta.shouldJoinIc2Enet();
+ }
} \ No newline at end of file
diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
index 7129c174df..6b66b64fa0 100644
--- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
@@ -2,7 +2,6 @@ package gregtech.api.metatileentity;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.interfaces.metatileentity.IConnectable;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
@@ -838,4 +837,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
public boolean canConnect(byte aSide, TileEntity tTileEntity) { return false; }
public boolean getGT6StyleConnection() { return false; }
+
+ public boolean shouldJoinIc2Enet() { return false; }
+
}
diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
index 5aced1f177..e7c35e9b08 100644
--- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
@@ -43,7 +43,7 @@ import static gregtech.api.enums.GT_Values.V;
* Call the Constructor like the following example inside the Load Phase, to register it.
* "new GT_MetaTileEntity_E_Furnace(54, "GT_E_Furnace", "Automatic E-Furnace");"
*/
-public abstract class MetaTileEntity implements IMetaTileEntity {
+public abstract class MetaTileEntity implements IMetaTileEntity {
/**
* Only assigned for the MetaTileEntity in the List! Also only used to get the localized Name for the ItemStack and for getInvName.
*/
@@ -86,10 +86,6 @@ public abstract class MetaTileEntity implements IMetaTileEntity {
GT_LanguageManager.addStringLocalization("gt.blockmachines." + mName + ".name", aRegionalName);
mInventory = new ItemStack[aInvSlotCount];
-// if (GT.isClientSide()) {
-// ItemStack tStack = new ItemStack(GregTech_API.sBlockMachines, 1, aID);
-// tStack.getItem().addInformation(tStack, null, new ArrayList<String>(), true);
-// }
}
/**
@@ -936,4 +932,6 @@ public abstract class MetaTileEntity implements IMetaTileEntity {
public String getAlternativeModeText(){
return "";
}
+
+ public boolean shouldJoinIc2Enet() { return false; }
}
diff --git a/src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java b/src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java
new file mode 100644
index 0000000000..6a4b952735
--- /dev/null
+++ b/src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java
@@ -0,0 +1,131 @@
+package gregtech.api.metatileentity;
+
+import com.google.common.collect.Sets;
+import gregtech.api.interfaces.metatileentity.IConnectable;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
+import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable;
+import gregtech.api.util.GT_Utility;
+import ic2.api.energy.tile.IEnergySink;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraftforge.common.util.ForgeDirection;
+
+public class TileIC2EnergySink extends TileEntity implements IEnergySink {
+ private IGregTechTileEntity myMeta;
+ private GT_MetaPipeEntity_Cable cableMeta = null;
+
+ public TileIC2EnergySink(IGregTechTileEntity meta) {
+ if (meta == null) throw new NullPointerException("no null metas");
+ myMeta = meta;
+ final IMetaTileEntity metaTile = myMeta.getMetaTileEntity();
+ if (metaTile instanceof IMetaTileEntityCable) {
+ cableMeta = (GT_MetaPipeEntity_Cable) metaTile;
+ }
+ }
+ /*
+ *
+ * IC2 enet compat - IEnergySink
+ *
+ */
+
+ /**
+ * Determine how much energy the sink accepts.
+ *
+ * Make sure that injectEnergy() does accepts energy if demandsEnergy() returns anything > 0.
+ *
+ * @note Modifying the energy net from this method is disallowed.
+ *
+ * @return max accepted input in eu
+ */
+ @Override
+ public double getDemandedEnergy() {
+ if(cableMeta != null) {
+ return (cableMeta.mVoltage * cableMeta.mAmperage);
+ }
+ else
+ return myMeta.getEUCapacity() - myMeta.getStoredEU();
+ }
+
+
+
+ /**
+ * Determine the tier of this energy sink.
+ * 1 = LV, 2 = MV, 3 = HV, 4 = EV etc.
+ * @note Return Integer.MAX_VALUE to allow any voltage.
+ *
+ * @return tier of this energy sink
+ */
+ @Override
+ public int getSinkTier() {
+ return GT_Utility.getTier(cableMeta != null ? cableMeta.mVoltage : myMeta.getInputVoltage());
+ }
+
+ /**
+ * Transfer energy to the sink.
+ *
+ * It's highly recommended to accept all energy by letting the internal buffer overflow to
+ * increase the performance and accuracy of the distribution simulation.
+ *
+ * @param directionFrom direction from which the energy comes from
+ * @param amount energy to be transferred
+ * @return Energy not consumed (leftover)
+ */
+ @Override
+ public double injectEnergy(ForgeDirection directionFrom, double amount, double voltage) {
+
+ final long amps =(long)Math.max(amount / (cableMeta != null ? cableMeta.mVoltage : myMeta.getInputVoltage() * 1.0), 1.0);
+ final long euPerAmp = (long)(amount / (amps * 1.0));
+
+ final IMetaTileEntity metaTile = myMeta.getMetaTileEntity();
+ if (metaTile == null) return amount;
+
+ final long usedAmps;
+ if(cableMeta != null) {
+ usedAmps = ((IMetaTileEntityCable) metaTile).transferElectricity((byte) directionFrom.ordinal(), Math.min(euPerAmp, cableMeta.mVoltage), amps, Sets.newHashSet((TileEntity) myMeta));
+
+ // [23:17:00] [Client thread/INFO]: [CHAT] §9(§aAOE §aSafe §aMode §ais §aenabled§9) §cOperation §cCanceled §cbecause §ca §ctile §centity §cwas §cdetected
+ //[23:17:01] [Server thread/ERROR] [FML]: Exception caught during firing event cpw.mods.fml.common.gameevent.TickEvent$WorldTickEvent@1b066533:
+ //java.lang.NullPointerException
+ // at gregtech.api.metatileentity.TileIC2EnergySink.injectEnergy(TileIC2EnergySink.java:83) ~[TileIC2EnergySink.class:?]
+ // at ic2.core.energy.EnergyNetLocal.processChanges(EnergyNetLocal.java:704) ~[EnergyNetLocal.class:?]
+ // at ic2.core.energy.EnergyNetLocal.onTickEnd(EnergyNetLocal.java:389) ~[EnergyNetLocal.class:?]
+ // at ic2.core.energy.EnergyNetGlobal.onTickEnd(EnergyNetGlobal.java:69) ~[EnergyNetGlobal.class:?]
+ // at ic2.core.TickHandler.onWorldTick(TickHandler.java:79) ~[TickHandler.class:?]
+ // at cpw.mods.fml.common.eventhandler.ASMEventHandler_85_TickHandler_onWorldTick_WorldTickEvent.invoke(.dynamic) ~[?:?]
+ // at cpw.mods.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:54) ~[ASMEventHandler.class:?]
+ // at cpw.mods.fml.common.eventhandler.EventBus.post(EventBus.java:140) ~[EventBus.class:?]
+ // at cpw.mods.fml.common.FMLCommonHandler.onPostWorldTick(FMLCommonHandler.java:255) ~[FMLCommonHandler.class:?]
+ // at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:645) ~[MinecraftServer.class:?]
+ // at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:547) ~[MinecraftServer.class:?]
+ // at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:111) ~[bsx.class:?]
+ // at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:396) [MinecraftServer.class:?]
+ // at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685) [?:?]
+ }
+ else
+ usedAmps = myMeta.injectEnergyUnits((byte) directionFrom.ordinal(), Math.min(euPerAmp, myMeta.getInputVoltage()), amps);
+ return amount - ( usedAmps * euPerAmp);
+
+ // transferElectricity for cables
+ }
+
+ /**
+ * Determine if this acceptor can accept current from an adjacent emitter in a direction.
+ *
+ * The TileEntity in the emitter parameter is what was originally added to the energy net,
+ * which may be normal in-world TileEntity, a delegate or an IMetaDelegate.
+ *
+ * @param emitter energy emitter, may also be null or an IMetaDelegate
+ * @param direction direction the energy is being received from
+ */
+ @Override
+ public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction) {
+ final IMetaTileEntity metaTile = myMeta.getMetaTileEntity();
+ if(metaTile instanceof IMetaTileEntityCable && (direction == ForgeDirection.UNKNOWN || ((IConnectable)metaTile).isConnectedAtSide(direction.ordinal())))
+ return true;
+ else
+ return myMeta.inputEnergyFrom((byte) direction.ordinal(), false);
+
+ }
+
+}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
index 5b75b89d23..c55e346546 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
@@ -156,34 +156,6 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
return (int) mAmperage * 64;
}
- private void pullFromIc2EnergySources(IGregTechTileEntity aBaseMetaTileEntity) {
- if(!GT_Mod.gregtechproxy.ic2EnergySourceCompat) return;
-
- for( byte aSide = 0 ; aSide < 6 ; aSide++) if(isConnectedAtSide(aSide)) {
- final TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(aSide);
- final TileEntity tEmitter;
- if (tTileEntity instanceof IReactorChamber)
- tEmitter = (TileEntity) ((IReactorChamber) tTileEntity).getReactor();
- else tEmitter = (tTileEntity == null || tTileEntity instanceof IEnergyTile || EnergyNet.instance == null) ? tTileEntity :
- EnergyNet.instance.getTileEntity(tTileEntity.getWorldObj(), tTileEntity.xCoord, tTileEntity.yCoord, tTileEntity.zCoord);
-
- if (tEmitter instanceof IEnergySource) {
- final GT_CoverBehavior coverBehavior = aBaseMetaTileEntity.getCoverBehaviorAtSide(aSide);
- final int coverId = aBaseMetaTileEntity.getCoverIDAtSide(aSide),
- coverData = aBaseMetaTileEntity.getCoverDataAtSide(aSide);
- final ForgeDirection tDirection = ForgeDirection.getOrientation(GT_Utility.getOppositeSide(aSide));
-
- if (((IEnergySource) tEmitter).emitsEnergyTo((TileEntity) aBaseMetaTileEntity, tDirection) &&
- coverBehavior.letsEnergyIn(aSide, coverId, coverData, aBaseMetaTileEntity)) {
- final long tEU = (long) ((IEnergySource) tEmitter).getOfferedEnergy();
-
- if (transferElectricity(aSide, tEU, 1, Sets.newHashSet((TileEntity) aBaseMetaTileEntity)) > 0)
- ((IEnergySource) tEmitter).drawEnergy(tEU);
- }
- }
- }
- }
-
@Override
public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
if (!isConnectedAtSide(aSide) && aSide != 6)
@@ -324,8 +296,6 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
@Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
- if (GT_Mod.gregtechproxy.ic2EnergySourceCompat) pullFromIc2EnergySources(aBaseMetaTileEntity);
-
{ //amp handler
long worldTick = aBaseMetaTileEntity.getWorld().getTotalWorldTime();
@@ -604,4 +574,23 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb);
}
}
+
+ @Override
+ public boolean shouldJoinIc2Enet() {
+ if (!GT_Mod.gregtechproxy.ic2EnergySourceCompat) return false;
+
+ if (mConnections != 0) {
+ final IGregTechTileEntity baseMeta = getBaseMetaTileEntity();
+ for( byte aSide = 0 ; aSide < 6 ; aSide++) if(isConnectedAtSide(aSide)) {
+ final TileEntity tTileEntity = baseMeta.getTileEntityAtSide(aSide);
+ final TileEntity tEmitter = (tTileEntity == null || tTileEntity instanceof IEnergyTile || EnergyNet.instance == null) ? tTileEntity :
+ EnergyNet.instance.getTileEntity(tTileEntity.getWorldObj(), tTileEntity.xCoord, tTileEntity.yCoord, tTileEntity.zCoord);
+
+ if (tEmitter instanceof IEnergyEmitter)
+ return true;
+
+ }
+ }
+ return false;
+ }
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java
index 72b24182df..f33b8aa3d9 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java
@@ -1,23 +1,16 @@
package gregtech.api.metatileentity.implementations;
-import appeng.api.parts.IPartHost;
import cofh.api.energy.IEnergyProvider;
import cofh.api.energy.IEnergyStorage;
import crazypants.enderio.machine.capbank.TileCapBank;
import crazypants.enderio.machine.capbank.network.ICapBankNetwork;
import crazypants.enderio.power.IPowerContainer;
-import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
-import ic2.api.energy.tile.IEnergySource;
-import ic2.api.reactor.IReactor;
-import ic2.api.reactor.IReactorChamber;
-import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -147,30 +140,20 @@ public class GT_MetaTileEntity_Transformer extends GT_MetaTileEntity_TieredMachi
@Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
- if (aBaseMetaTileEntity.isServerSide()) {
+ if (aBaseMetaTileEntity.isServerSide() && GregTech_API.mInputRF) {
aBaseMetaTileEntity.setActive(aBaseMetaTileEntity.isAllowedToWork());
for (byte i = 0; i < 6 && aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity(); i++)
if (aBaseMetaTileEntity.inputEnergyFrom(i)) {
TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(i);
- if (tTileEntity instanceof IReactorChamber) {
- tTileEntity = (TileEntity) ((IReactorChamber) tTileEntity).getReactor();
- }
- if(tTileEntity instanceof IReactor && !GT_Mod.gregtechproxy.reactorsDone.add((IReactor) tTileEntity)){
- continue;
- }
- if (tTileEntity instanceof IEnergySource && !(tTileEntity instanceof IPartHost) && ((IEnergySource) tTileEntity).emitsEnergyTo((TileEntity) aBaseMetaTileEntity, ForgeDirection.getOrientation(GT_Utility.getOppositeSide(i)))) {
- long tEU = Math.min(maxEUInput(), (long) ((IEnergySource) tTileEntity).getOfferedEnergy());
- ((IEnergySource) tTileEntity).drawEnergy(tEU);
- aBaseMetaTileEntity.injectEnergyUnits((byte) 6, tEU, 1);
- } else if (GregTech_API.mInputRF && tTileEntity instanceof IEnergyProvider && ((IEnergyProvider) tTileEntity).extractEnergy(ForgeDirection.getOrientation(GT_Utility.getOppositeSide(i)), 1, true) == 1) {
+ if (tTileEntity instanceof IEnergyProvider && ((IEnergyProvider) tTileEntity).extractEnergy(ForgeDirection.getOrientation(GT_Utility.getOppositeSide(i)), 1, true) == 1) {
long tEU = (long) ((IEnergyProvider) tTileEntity).extractEnergy(ForgeDirection.getOrientation(GT_Utility.getOppositeSide(i)), GT_Utility.safeInt(maxEUInput() * 100L / GregTech_API.mRFtoEU), false);
tEU = tEU * GregTech_API.mRFtoEU / 100;
aBaseMetaTileEntity.injectEnergyUnits((byte) 6, Math.min(tEU, maxEUInput()), 1);
- } else if (GregTech_API.mInputRF && tTileEntity instanceof IEnergyStorage && ((IEnergyStorage) tTileEntity).extractEnergy(1, true) == 1) {
+ } else if (tTileEntity instanceof IEnergyStorage && ((IEnergyStorage) tTileEntity).extractEnergy(1, true) == 1) {
long tEU = (long) ((IEnergyStorage) tTileEntity).extractEnergy(GT_Utility.safeInt(maxEUInput() * 100L / GregTech_API.mRFtoEU), false);
tEU = tEU * GregTech_API.mRFtoEU / 100;
aBaseMetaTileEntity.injectEnergyUnits((byte) 6, Math.min(tEU, maxEUInput()), 1);
- } else if (GregTech_API.mInputRF && GregTech_API.meIOLoaded && tTileEntity instanceof IPowerContainer && ((IPowerContainer) tTileEntity).getEnergyStored() > 0) {
+ } else if (GregTech_API.meIOLoaded && tTileEntity instanceof IPowerContainer && ((IPowerContainer) tTileEntity).getEnergyStored() > 0) {
int storedRF = ((IPowerContainer) tTileEntity).getEnergyStored();
int extractRF = GT_Utility.safeInt(maxEUInput() * 100L / GregTech_API.mRFtoEU);
long tEU = 0;
@@ -233,4 +216,9 @@ public class GT_MetaTileEntity_Transformer extends GT_MetaTileEntity_TieredMachi
maxAmperesOut() +
trans("149","A");
}
+
+ @Override
+ public boolean shouldJoinIc2Enet() {
+ return true;
+ }
}