aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java76
-rw-r--r--src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java4
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java9
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java8
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