aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle3
-rw-r--r--build.properties2
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java4
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java151
-rw-r--r--src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java77
-rw-r--r--src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java48
-rw-r--r--src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java3
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java77
-rw-r--r--src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java122
9 files changed, 264 insertions, 223 deletions
diff --git a/build.gradle b/build.gradle
index ca8da27742..d9b1d23bb2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -220,3 +220,6 @@ jar {
attributes "FMLAT": "tectech_at.cfg"
}
}
+
+//Fixes Intellij Runs not loading textures
+sourceSets { main { output.resourcesDir = output.classesDir } } \ No newline at end of file
diff --git a/build.properties b/build.properties
index 16de85d897..578a6b6e77 100644
--- a/build.properties
+++ b/build.properties
@@ -1,6 +1,6 @@
minecraft.version=1.7.10
forge.version=10.13.4.1614
-tectech.version=4.9.0
+tectech.version=4.9.1
ic2.version=2.2.790-experimental
codechickenlib.version=1.1.3.140
diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java
index 58caed7951..4004a8d826 100644
--- a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java
+++ b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java
@@ -31,7 +31,7 @@ public class RendererMessage implements IMessage {
ObjectInputStream ois = new ObjectInputStream(is);
Object data = ois.readObject();
sparkList = (HashSet<ThaumSpark>) data;
- } catch (IOException | ClassNotFoundException ex) {
+ } catch (IOException | ClassNotFoundException ignored) {
}
}
@@ -44,7 +44,7 @@ public class RendererMessage implements IMessage {
oos.flush();
InputStream is = new ByteArrayInputStream(baos.toByteArray());
pBuffer.writeBytes(is, baos.toByteArray().length);
- } catch (IOException ex) {
+ } catch (IOException ignore) {
}
}
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 e397c1dc5f..de8d828cf4 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
@@ -1,19 +1,19 @@
package com.github.technus.tectech.mechanics.tesla;
import com.github.technus.tectech.mechanics.spark.ThaumSpark;
+import com.google.common.collect.Multimap;
-import java.util.HashMap;
import java.util.HashSet;
-import java.util.Objects;
+import java.util.Map;
-import static com.github.technus.tectech.util.Util.entriesSortedByValues;
import static java.lang.Math.sqrt;
public interface ITeslaConnectable extends ITeslaConnectableSimple {
//Map with all Teslas in the same dimension and the distance to them //TODO Range
- HashMap<ITeslaConnectableSimple, Integer> teslaNodeMap = new HashMap<>();
+ Multimap<Integer, ITeslaConnectableSimple> getTeslaNodeMap();
+
//ThaumCraft lighting coordinate pairs, so we can send them in bursts and save on lag
- HashSet<ThaumSpark> sparkList = new HashSet<>();
+ HashSet<ThaumSpark> getSparkList();
//-128 to -1 disables capability
//0 means any source or target
@@ -33,88 +33,113 @@ 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 teslaSimpleNodeSetAdd(ITeslaConnectableSimple target) {
+ if (!teslaSimpleNodeSet.contains(target)) {
+ teslaSimpleNodeSet.add(target);
+ teslaNodeSet.forEach(origin -> addTargetToTeslaOrigin(target, origin));
+ }
+ }
+
+ 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);
+ }
+
+ 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) {
- origin.teslaNodeMap.clear();
- for (ITeslaConnectableSimple target : teslaNodeSet) {
+ 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
- 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;
- }
-
- //Range calc
- int distance = (int) sqrt(origin.getTeslaPosition().distanceSq(target.getTeslaPosition()));
- if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) {
- //Skip if the range is too vast
+ teslaSimpleNodeSet.remove(null);
continue;
}
- origin.teslaNodeMap.put(target, distance);
+ addTargetToTeslaOrigin(target, origin);
}
- }
-
- public static void cleanTeslaNodeMap(ITeslaConnectable origin) {
- //Wipes all null objects, in practice this is unloaded or improperly removed tesla objects
- origin.teslaNodeMap.keySet().removeIf(Objects::isNull);
+ teslaNodeSet.add(origin);
}
public static long powerTeslaNodeMap(ITeslaConnectable origin) {
- //Teslas can only send OR receive
- if (origin.isTeslaReadyToReceive()) {
- return 0L;//TODO Negative values to indicate charging?
- }
long remainingAmperes = origin.getTeslaOutputCurrent();
- while (remainingAmperes > 0) {
- long startingAmperes = remainingAmperes;
- for (HashMap.Entry<ITeslaConnectableSimple, Integer> Rx : entriesSortedByValues(teslaNodeMap)) {
- if (origin.getTeslaStoredEnergy() < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * 2 : origin.getTeslaOutputVoltage())) {
- //Return and end the tick if we're out of energy to send
- return origin.getTeslaOutputCurrent() - remainingAmperes;
- }
-
- ITeslaConnectableSimple target = Rx.getKey();
- int distance = Rx.getValue();
+ boolean canSendPower = !origin.isTeslaReadyToReceive() && remainingAmperes > 0;
+
+ if (canSendPower) {
+ for (Map.Entry<Integer, ITeslaConnectableSimple> Rx : origin.getTeslaNodeMap().entries()) {
+ //Do we still have power left to send kind of check
+ if (origin.getTeslaStoredEnergy() < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() *
+ 2 : origin.getTeslaOutputVoltage())) break;
+ //Explicit words for the important fields
+ ITeslaConnectableSimple target = Rx.getValue();
+ int distance = Rx.getKey();
+ //Can our target receive energy?
+ if(!target.isTeslaReadyToReceive()) continue;
//Calculate the voltage output
long outputVoltageInjectable;
long outputVoltageConsumption;
-
if (origin.isOverdriveEnabled()) {
outputVoltageInjectable = origin.getTeslaOutputVoltage();
- outputVoltageConsumption = origin.getTeslaOutputVoltage() + (distance * origin.getTeslaEnergyLossPerBlock()) +
- (long) Math.round(origin.getTeslaOutputVoltage() * origin.getTeslaOverdriveLossCoefficient());
+ outputVoltageConsumption = origin.getTeslaOutputVoltage() +
+ (distance * origin.getTeslaEnergyLossPerBlock()) +
+ (long) Math.round(origin.getTeslaOutputVoltage() *
+ origin.getTeslaOverdriveLossCoefficient());
} else {
- outputVoltageInjectable = origin.getTeslaOutputVoltage() - (distance * origin.getTeslaEnergyLossPerBlock());
+ outputVoltageInjectable = origin.getTeslaOutputVoltage() - (distance *
+ origin.getTeslaEnergyLossPerBlock());
outputVoltageConsumption = origin.getTeslaOutputVoltage();
}
- //Skip the target if the cost is too high
- if (origin.getTeslaStoredEnergy() < outputVoltageConsumption) {
- continue;
+ //Break out of the loop if the cost is too high
+ //Since the next target will have an even higher cost, just quit now.
+ if (origin.getTeslaStoredEnergy() < outputVoltageConsumption) break;
+
+ //Now shove in as many packets as will fit~
+ while(canSendPower){
+ if (target.teslaInjectEnergy(outputVoltageInjectable)) {
+ origin.teslaDrainEnergy(outputVoltageConsumption);
+ origin.getSparkList().add(new ThaumSpark(origin.getTeslaPosition(),
+ target.getTeslaPosition(), origin.getTeslaDimension()));
+ remainingAmperes--;
+ //Update the can send power flag each time we send power
+ canSendPower = (origin.getTeslaStoredEnergy() < outputVoltageConsumption ||
+ remainingAmperes > 0);
+ } else {
+ //Breaks out when I can't send anymore power
+ break;
+ }
}
- if (target.teslaInjectEnergy(outputVoltageInjectable)) {
- origin.teslaDrainEnergy(outputVoltageConsumption);
- sparkList.add(new ThaumSpark(origin.getTeslaPosition(), target.getTeslaPosition(), origin.getTeslaDimension()));
- remainingAmperes--;
- }
- if (remainingAmperes == 0) {
- return origin.getTeslaOutputCurrent();
- }
- }
- //End the tick after one iteration with no transmissions
- if (remainingAmperes == startingAmperes) {
- return origin.getTeslaOutputCurrent() - remainingAmperes;
+ //Break out if we can't send power anymore
+ if (!canSendPower)break;
}
}
return origin.getTeslaOutputCurrent() - remainingAmperes;
diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java
new file mode 100644
index 0000000000..5c6fef6af8
--- /dev/null
+++ b/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java
@@ -0,0 +1,77 @@
+package com.github.technus.tectech.mechanics.tesla;
+
+import com.github.technus.tectech.util.Vec3Impl;
+import com.google.common.base.Objects;
+import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+
+import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetAdd;
+import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove;
+
+public class TeslaCoverConnection implements ITeslaConnectableSimple {
+ private final IGregTechTileEntity IGT;
+ private final Vec3Impl pos;
+ private final byte teslaReceptionCapability;
+
+ public TeslaCoverConnection(IGregTechTileEntity IGT, byte teslaReceptionCapability) {
+ this.IGT = IGT;
+ this.pos = new Vec3Impl(IGT);
+ this.teslaReceptionCapability = teslaReceptionCapability;
+ }
+
+ @Override
+ public byte getTeslaReceptionCapability() {
+ return teslaReceptionCapability;
+ }
+
+ @Override
+ public float getTeslaReceptionCoefficient() {
+ return 1;
+ }
+
+ @Override
+ public boolean isTeslaReadyToReceive() {
+ return true;
+ }
+
+ @Override
+ public long getTeslaStoredEnergy() {
+ return IGT.getStoredEU();
+ }
+
+ @Override
+ public Vec3Impl getTeslaPosition() {
+ return pos;
+ }
+
+ @Override
+ public Integer getTeslaDimension() {
+ return IGT.getWorld().provider.dimensionId;
+ }
+
+ @Override
+ public boolean teslaInjectEnergy(long teslaVoltageInjected) {
+ //Same as in the microwave transmitters, this does not account for amp limits
+ boolean output = false;
+
+ if (!IGT.isDead()){
+ output = IGT.injectEnergyUnits((byte) 1, teslaVoltageInjected, 1L) > 0L;
+ } else {
+ teslaSimpleNodeSetRemove(this);
+ }
+
+ return output;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ TeslaCoverConnection that = (TeslaCoverConnection) o;
+ return Objects.equal(IGT, that.IGT);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(IGT);
+ }
+}
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 2efe2f3cbc..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,9 +1,7 @@
package com.github.technus.tectech.thing.cover;
-import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple;
-import com.github.technus.tectech.util.Vec3Impl;
+import com.github.technus.tectech.mechanics.tesla.TeslaCoverConnection;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_Utility;
import net.minecraft.entity.player.EntityPlayer;
@@ -11,9 +9,7 @@ import net.minecraft.entity.player.EntityPlayer;
import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*;
import static ic2.api.info.Info.DMG_ELECTRIC;
-public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior implements ITeslaConnectableSimple {
- private IGregTechTileEntity IGT;
-
+public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior {
public GT_Cover_TM_TeslaCoil() {
}
@@ -21,14 +17,10 @@ public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior implements ITeslaCon
public int doCoverThings(byte aSide, byte aInputRedstone, int aCoverID, int aCoverVariable, ICoverable aTileEntity, long aTimer) {
//Only do stuff if we're on top and have power
if (aSide == 1 || aTileEntity.getEUCapacity() > 0) {
- //Pull IGT onto the outside, should only execute first tick
- if (IGT == null) {
- IGT = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0);
- }
//Makes sure we're on the list
- teslaNodeSet.add(this);
+ teslaSimpleNodeSetAdd(new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0),
+ getTeslaReceptionCapability()));
}
-
return super.doCoverThings(aSide, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer);
}
@@ -57,39 +49,7 @@ public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior implements ITeslaCon
return 200;
}
- @Override
public byte getTeslaReceptionCapability() {
return 2;
}
-
- @Override
- public float getTeslaReceptionCoefficient() {
- return 1;
- }
-
- @Override
- public boolean isTeslaReadyToReceive() {
- return true;
- }
-
- @Override
- public long getTeslaStoredEnergy() {
- return IGT.getStoredEU();
- }
-
- @Override
- public Vec3Impl getTeslaPosition() {
- return new Vec3Impl(IGT);
- }
-
- @Override
- public Integer getTeslaDimension() {
- return IGT.getWorld().provider.dimensionId;
- }
-
- @Override
- public boolean teslaInjectEnergy(long teslaVoltageInjected) {
- //Same as in the microwave transmitters, this does not account for amp limits
- return IGT.injectEnergyUnits((byte) 1, teslaVoltageInjected, 1L) > 0L;
- }
}
diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java
index 028ac3a4d6..3417d7ae20 100644
--- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java
+++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java
@@ -31,8 +31,7 @@ public class GT_Cover_TM_TeslaCoil_Ultimate extends GT_Cover_TM_TeslaCoil {
public boolean letsFluidOut(byte aSide, int aCoverID, int aCoverVariable, Fluid aFluid, ICoverable aTileEntity) {
return true;
}
-
- @Override
+
public byte getTeslaReceptionCapability() {
return 1;
}
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 93f6e50c5a..580e6195ad 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
@@ -8,6 +8,7 @@ import com.github.technus.tectech.mechanics.spark.ThaumSpark;
import com.github.technus.tectech.mechanics.structure.Structure;
import com.github.technus.tectech.mechanics.structure.adders.IHatchAdder;
import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable;
+import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple;
import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor;
import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti;
import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti;
@@ -19,6 +20,9 @@ import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters;
import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture;
import com.github.technus.tectech.util.CommonValues;
import com.github.technus.tectech.util.Vec3Impl;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.MultimapBuilder;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.enums.Materials;
@@ -35,6 +39,7 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.fluids.FluidStack;
import java.util.ArrayList;
+import java.util.HashSet;
import static com.github.technus.tectech.mechanics.structure.Structure.adders;
import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*;
@@ -47,6 +52,11 @@ import static java.lang.Math.*;
import static net.minecraft.util.StatCollector.translateToLocal;
public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable, ITeslaConnectable {
+ //Interface fields
+ private final Multimap<Integer, ITeslaConnectableSimple> teslaNodeMap = MultimapBuilder.treeKeys().linkedListValues().build();
+ private final HashSet<ThaumSpark> sparkList = new HashSet<>();
+ private int sparkCount = 10;
+
//region variables
private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TOWER;//Default is 32
private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TRANSCEIVER;//Default is 16
@@ -73,8 +83,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
private final ArrayList<GT_MetaTileEntity_Hatch_Capacitor> eCapacitorHatches = new ArrayList<>(); //Capacitor hatches which determine the max voltage tier and count of amps
- private int sortTime = 0; //Scan timer used for tesla search intervals
-
private long energyCapacity = 0; //Total energy storage limited by capacitors
private long outputVoltageMax = 0; //Tesla voltage output limited by capacitors
private int vTier = -1; //Tesla voltage tier limited by capacitors
@@ -451,13 +459,12 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
@Override
public void onRemoval() {
super.onRemoval();
- if (this.getBaseMetaTileEntity().isClientSide()) {
- return;
- }
- teslaNodeSet.remove(this);
- for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) {
- if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) {
- cap.getBaseMetaTileEntity().setActive(false);
+ if (!getBaseMetaTileEntity().isClientSide()) {
+ teslaSimpleNodeSetRemove(this);
+ for (GT_MetaTileEntity_Hatch_Capacitor cap : eCapacitorHatches) {
+ if (GT_MetaTileEntity_MultiBlockBase.isValidMetaTileEntity(cap)) {
+ cap.getBaseMetaTileEntity().setActive(false);
+ }
}
}
}
@@ -528,7 +535,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
@@ -548,14 +555,13 @@ 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);
+ generateTeslaNodeMap(this);
}
}
@Override
public boolean onRunningTick(ItemStack aStack) {
- IGregTechTileEntity mte = getBaseMetaTileEntity();
-
//Hysteresis based ePowerPass setting
float energyFrac = (float) getEUVar() / energyCapacity;
@@ -569,15 +575,6 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
ePowerPass = false;
}
- //Create the teslaNodeMap
- if (sortTime == sortTimeMinSetting.get()) {
- sortTime = 0;
- sortTimeDisplay.updateStatus();
- generateTeslaNodeMap(this);
- }
- sortTime++;
- sortTimeDisplay.set(sortTime);
-
//Power Limit Settings
if (outputVoltageSetting.get() > 0) {
outputVoltage = min(outputVoltageMax, (long) outputVoltageSetting.get());
@@ -598,22 +595,24 @@ 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));
- if (!sparkList.isEmpty()) {
- NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList),
- mte.getWorld().provider.dimensionId,
- posTop.get0(),
- posTop.get1(),
- posTop.get2(),
- 256);
+ //Randomly send all the sparks out once every 3 to 5 seconds
+ sparkCount--;
+ if (sparkCount == 0){
+ IGregTechTileEntity mte = getBaseMetaTileEntity();
+ sparkCount = 10;
+ if(!sparkList.isEmpty()){
+ NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList),
+ mte.getWorld().provider.dimensionId,
+ mte.getXCoord(),
+ mte.getYCoord(),
+ mte.getZCoord(),
+ 256);
+ sparkList.clear();
+ }
}
- sparkList.clear();
-
return true;
}
@@ -702,6 +701,16 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock
}
@Override
+ public Multimap<Integer, ITeslaConnectableSimple> getTeslaNodeMap() {
+ return teslaNodeMap;
+ }
+
+ @Override
+ public HashSet<ThaumSpark> getSparkList() {
+ return sparkList;
+ }
+
+ @Override
public byte getTeslaTransmissionCapability() {
return 1;
}
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 388a253b27..8c3fb9410b 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
@@ -1,17 +1,19 @@
package com.github.technus.tectech.thing.metaTileEntity.single;
import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable;
+import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple;
import com.github.technus.tectech.util.CommonValues;
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 com.google.common.collect.MultimapBuilder;
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;
@@ -23,6 +25,7 @@ import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import java.util.Arrays;
+import java.util.HashSet;
import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.*;
import static com.github.technus.tectech.util.CommonValues.V;
@@ -32,12 +35,14 @@ import static net.minecraft.util.StatCollector.translateToLocal;
import static net.minecraft.util.StatCollector.translateToLocalFormatted;
public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer implements ITeslaConnectable {
+ //Interface fields
+ private final Multimap<Integer, ITeslaConnectableSimple> teslaNodeMap = MultimapBuilder.treeKeys().linkedListValues().build();
+ private final HashSet<ThaumSpark> sparkList = new HashSet<>();
+ private int sparkCount = 10;
+
private final static int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE;//Default is 20
private final static int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK;//Default is 1
private final static float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE;//Default is 0.25F
-
- private byte sparkCount = 0;
-
private final static int transferRadiusMin = 4;//Minimum user configurable
private int transferRadius = transferRadiusMax;//Default transferRadius setting
@@ -55,9 +60,6 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB
private String clientLocale = "en_US";
- private int sortTime = 0;//Sorting tick counter
- private final static int sortTimeMax = 100;//Sorting tick counter limit, so we only sort once every 5 seconds
-
public GT_MetaTileEntity_TeslaCoil(int aID, String aName, String aNameRegional, int aTier, int aSlotCount) {
super(aID, aName, aNameRegional, aTier, "", aSlotCount);
Util.setTier(aTier, this);
@@ -179,51 +181,12 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB
return new GT_MetaTileEntity_TeslaCoil(mName, mTier, mDescription, mTextures, mInventory.length);
}
- private void thaumLightning(IGregTechTileEntity mte, IGregTechTileEntity node) {
- int x = mte.getXCoord();
- int y = mte.getYCoord();
- int z = mte.getZCoord();
-
- byte xR;
- byte yR;
- byte zR;
-
- IMetaTileEntity nodeInside = node.getMetaTileEntity();
- if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil) {
- GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside;
- xR = (byte) (nodeTesla.posTop.get0() - x);
- yR = (byte) (nodeTesla.posTop.get1() - y);
- zR = (byte) (nodeTesla.posTop.get2() - z);
- } else {
- xR = (byte) (node.getXCoord() - x);
- yR = (byte) (node.getYCoord() - y);
- zR = (byte) (node.getZCoord() - z);
- }
-
- int wID = mte.getWorld().provider.dimensionId;
-
- sparkList.add(new ThaumSpark(x, y, z, xR, yR, zR, wID));
- }
-
- private long[] getOutputVoltage(long outputVoltage, int distance, boolean overDriveToggle) {
- long outputVoltageInjectable;
- long outputVoltageConsumption;
-
- if (overDriveToggle) {
- outputVoltageInjectable = outputVoltage;
- outputVoltageConsumption = outputVoltage + (distance * perBlockLoss) + (long) Math.round(overDriveLoss * outputVoltage);
- } else {
- outputVoltageInjectable = outputVoltage - (distance * perBlockLoss);
- outputVoltageConsumption = outputVoltage;
- }
- return new long[]{outputVoltageInjectable, outputVoltageConsumption};
- }
-
@Override
public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
super.onFirstTick(aBaseMetaTileEntity);
if (!aBaseMetaTileEntity.isClientSide()) {
- teslaNodeSet.add(this);
+ teslaSimpleNodeSetAdd(this);
+ generateTeslaNodeMap(this);
}
}
@@ -231,14 +194,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
@@ -260,41 +223,36 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB
powerPassToggle = false;
}
- //Create the teslaNodeMap
- if (sortTime == sortTimeMax) {
- sortTime = 0;
- generateTeslaNodeMap(this);
- }
- sortTime++;
-
//Send Power
powerTeslaNodeMap(this);
- sparkCount++;
- if (sparkCount == 60 && !sparkList.isEmpty()) {
- sparkCount = 0;
- NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList),
- aBaseMetaTileEntity.getWorld().provider.dimensionId,
- aBaseMetaTileEntity.getXCoord(),
- aBaseMetaTileEntity.getYCoord(),
- aBaseMetaTileEntity.getZCoord(),
- 256);
+ //Randomly send all the sparks out once every 3 to 5 seconds
+ sparkCount--;
+ if (sparkCount == 0){
+ sparkCount = 10;
+ if(!sparkList.isEmpty()){
+ NetworkDispatcher.INSTANCE.sendToAllAround(new RendererMessage.RendererData(sparkList),
+ aBaseMetaTileEntity.getWorld().provider.dimensionId,
+ aBaseMetaTileEntity.getXCoord(),
+ aBaseMetaTileEntity.getYCoord(),
+ aBaseMetaTileEntity.getZCoord(),
+ 256);
+ sparkList.clear();
+ }
}
- sparkList.clear();
}
@Override
public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) {
- if (aBaseMetaTileEntity.isClientSide()) {
- return true;
- }
- try {
- EntityPlayerMP player = (EntityPlayerMP) aPlayer;
- clientLocale = (String) FieldUtils.readField(player, "translator", true);
- } catch (Exception e) {
- clientLocale = "en_US";
+ if (aBaseMetaTileEntity.isServerSide()) {
+ try {
+ EntityPlayerMP player = (EntityPlayerMP) aPlayer;
+ clientLocale = (String) FieldUtils.readField(player, "translator", true);
+ } catch (Exception e) {
+ clientLocale = "en_US";
+ }
+ aBaseMetaTileEntity.openGUI(aPlayer);
}
- aBaseMetaTileEntity.openGUI(aPlayer);
return true;
}
@@ -309,6 +267,16 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB
}
@Override
+ public Multimap<Integer, ITeslaConnectableSimple> getTeslaNodeMap() {
+ return teslaNodeMap;
+ }
+
+ @Override
+ public HashSet<ThaumSpark> getSparkList() {
+ return sparkList;
+ }
+
+ @Override
public byte getTeslaTransmissionCapability() {
return 2;
}