diff options
4 files changed, 55 insertions, 42 deletions
diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java index d505ca8e09..07059c82b2 100644 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java @@ -34,39 +34,59 @@ public interface ITeslaConnectable extends ITeslaConnectableSimple { boolean teslaDrainEnergy(long teslaVoltageDrained); class TeslaUtil { - public static final HashSet<ITeslaConnectableSimple> teslaNodeSet = new HashSet<>();//Targets for power transmission + private static final HashSet<ITeslaConnectableSimple> teslaSimpleNodeSet = new HashSet<>();//Targets for power transmission + private static final HashSet<ITeslaConnectable> teslaNodeSet = new HashSet<>();//Sources of power transmission - public static void generateTeslaNodeMap(ITeslaConnectable origin) { - origin.getTeslaNodeMap().clear(); - for (ITeslaConnectableSimple target : teslaNodeSet) { - //Sanity checks - if (target == null) { - //The Tesla Covers do not remove themselves from the list and this is the code that does - teslaNodeSet.remove(null); - continue; - } else if (origin.equals(target) || !origin.getTeslaDimension().equals(target.getTeslaDimension())) { - //Skip if looking at myself and skip if not in the same dimension - //TODO, INTERDIM? - continue; - } else if (origin.getTeslaTransmissionCapability() != 0 && origin.getTeslaReceptionCapability() != 0 && - origin.getTeslaTransmissionCapability() != origin.getTeslaReceptionCapability()) { - //Skip if incompatible - continue; - } + public static void teslaSimpleNodeSetAdd(ITeslaConnectableSimple target){ + teslaSimpleNodeSet.add(target); + teslaNodeSet.forEach(origin -> addTargetToTeslaOrigin(target, origin)); + } - //Range calc - int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition())); - if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) { - //Skip if the range is too vast - continue; - } - origin.getTeslaNodeMap().put(distance, target); + public static void teslaSimpleNodeSetRemove(ITeslaConnectableSimple target){ + teslaSimpleNodeSet.remove(target); + if (target instanceof ITeslaConnectable)teslaNodeSet.remove(target); + teslaNodeSet.forEach(origin -> removeTargetFromTeslaOrigin(target, origin)); + } + + private static void addTargetToTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin){ + if (origin.equals(target) || !origin.getTeslaDimension().equals(target.getTeslaDimension())) { + //Skip if looking at myself and skip if not in the same dimension + //TODO, INTERDIM? + return; + } else if (origin.getTeslaTransmissionCapability() != 0 && origin.getTeslaReceptionCapability() != 0 && + origin.getTeslaTransmissionCapability() != origin.getTeslaReceptionCapability()) { + //Skip if incompatible + return; + } + //Range calc + int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition())); + if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) { + //Skip if the range is too vast + return; } + origin.getTeslaNodeMap().put(distance, target); } - public static void cleanTeslaNodeMap(ITeslaConnectable origin) { - //Wipes all null objects, in practice this is unloaded or improperly removed tesla objects - origin.getTeslaNodeMap().keySet().removeIf(Objects::isNull); + private static void removeTargetFromTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin){ + //Range calc TODO Remove duplicate? + int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition())); + origin.getTeslaNodeMap().remove(distance, target); + } + + public static void generateTeslaNodeMap(ITeslaConnectable origin) { + if(!teslaNodeSet.contains(origin)) { + origin.getTeslaNodeMap().clear(); + for (ITeslaConnectableSimple target : teslaSimpleNodeSet) { + //Sanity checks + if (target == null) { + //The Tesla Covers do not remove themselves from the list and this is the code that does + teslaSimpleNodeSet.remove(null); + continue; + } + addTargetToTeslaOrigin(target, origin); + } + } + teslaNodeSet.add(origin); } public static long powerTeslaNodeMap(ITeslaConnectable origin) { diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java index d3d9ead6d2..a573ed740b 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java @@ -1,8 +1,6 @@ package com.github.technus.tectech.thing.cover; -import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; import com.github.technus.tectech.mechanics.tesla.TeslaCoverConnection; -import com.github.technus.tectech.util.Vec3Impl; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; @@ -20,7 +18,7 @@ public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior { //Only do stuff if we're on top and have power if (aSide == 1 || aTileEntity.getEUCapacity() > 0) { //Makes sure we're on the list - teslaNodeSet.add(new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), + teslaSimpleNodeSetAdd(new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), getTeslaReceptionCapability())); } return super.doCoverThings(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 5f6e0fffaa..22f1d003e6 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -462,7 +462,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock if (this.getBaseMetaTileEntity().isClientSide()) { return; } - teslaNodeSet.remove(this); + teslaSimpleNodeSetRemove(this); for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) { if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) { cap.getBaseMetaTileEntity().setActive(false); @@ -536,7 +536,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public void loadNBTData(NBTTagCompound aNBT) { super.loadNBTData(aNBT); energyCapacity = aNBT.getLong("eEnergyCapacity"); - teslaNodeSet.add(this); + teslaSimpleNodeSetAdd(this); } @Override @@ -556,7 +556,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { super.onFirstTick_EM(aBaseMetaTileEntity); if (!aBaseMetaTileEntity.isClientSide()) { - teslaNodeSet.add(this); + teslaSimpleNodeSetAdd(this); } } @@ -606,9 +606,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock transferRadiusTransceiverDisplay.set(transferRadiusTower * 2); transferRadiusCoverUltimateDisplay.set(transferRadiusTower); - //Clean the teslaNodeMap - cleanTeslaNodeMap(this); - //Power transfer outputCurrentDisplay.set(powerTeslaNodeMap(this)); diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index cc42929806..c7ebb76e09 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -7,14 +7,12 @@ import com.github.technus.tectech.TecTech; import com.github.technus.tectech.loader.NetworkDispatcher;
import com.github.technus.tectech.mechanics.spark.RendererMessage;
import com.github.technus.tectech.mechanics.spark.ThaumSpark;
-import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil;
import com.github.technus.tectech.util.Util;
import com.github.technus.tectech.util.Vec3Impl;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import eu.usrv.yamcore.auxiliary.PlayerChatHelper;
import gregtech.api.interfaces.ITexture;
-import gregtech.api.interfaces.metatileentity.IMetaTileEntity;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.MetaTileEntity;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer;
@@ -231,7 +229,7 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
super.onFirstTick(aBaseMetaTileEntity);
if (!aBaseMetaTileEntity.isClientSide()) {
- teslaNodeSet.add(this);
+ teslaSimpleNodeSetAdd(this);
}
}
@@ -239,14 +237,14 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB public void onRemoval() {
super.onRemoval();
if (!this.getBaseMetaTileEntity().isClientSide()) {
- teslaNodeSet.remove(this);
+ teslaSimpleNodeSetRemove(this);
}
}
@Override
public void loadNBTData(NBTTagCompound aNBT) {
super.loadNBTData(aNBT);
- teslaNodeSet.add(this);
+ teslaSimpleNodeSetAdd(this);
}
@Override
|