aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java
diff options
context:
space:
mode:
authorkorneel vandamme <Krampus.sack.never@gmail.com>2021-06-16 21:25:34 +0200
committerkorneel vandamme <Krampus.sack.never@gmail.com>2021-06-16 21:25:34 +0200
commit3a2bbefb2ba5d29305c8c702cb00574ebc42b713 (patch)
tree80536b2e7ebcb95e9c4ae5d77a75653f113efc13 /src/main/java/gregtech/api/graphs/paths/PowerNodePath.java
parentbadecb827f57cc49d2be89f6135646f77ecd6cbf (diff)
downloadGT5-Unofficial-3a2bbefb2ba5d29305c8c702cb00574ebc42b713.tar.gz
GT5-Unofficial-3a2bbefb2ba5d29305c8c702cb00574ebc42b713.tar.bz2
GT5-Unofficial-3a2bbefb2ba5d29305c8c702cb00574ebc42b713.zip
add graph network to pipes and implement it for power
Diffstat (limited to 'src/main/java/gregtech/api/graphs/paths/PowerNodePath.java')
-rw-r--r--src/main/java/gregtech/api/graphs/paths/PowerNodePath.java111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java b/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java
new file mode 100644
index 0000000000..7c71a545a6
--- /dev/null
+++ b/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java
@@ -0,0 +1,111 @@
+package gregtech.api.graphs.paths;
+
+import gregtech.api.metatileentity.BaseMetaPipeEntity;
+import gregtech.api.metatileentity.MetaPipeEntity;
+import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable;
+import net.minecraft.server.MinecraftServer;
+
+//path for cables
+//al calculations like ams and voltage hapens here
+public class PowerNodePath extends NodePath {
+ int mMaxAmps;
+ int mAmps = 0;
+ int mLoss;
+ int mVoltage = 0;
+ int mMaxVoltage;
+ int mTick = 0;
+ boolean mCountUp = true;
+
+
+ public PowerNodePath(MetaPipeEntity[] aCables) {
+ super(aCables);
+ }
+
+ public int getLoss() {
+ return mLoss;
+ }
+
+ public void applyVoltage(int aVoltage, boolean aCountUp) {
+ int tNewTime = MinecraftServer.getServer().getTickCounter();
+ if (mTick != tNewTime) {
+ reset(tNewTime - mTick);
+ mTick = tNewTime;
+ this.mVoltage = aVoltage;
+ this.mCountUp = aCountUp;
+ } else if (this.mCountUp != aCountUp && (aVoltage - mLoss)> this.mVoltage || aVoltage > this.mVoltage){
+ this.mCountUp = aCountUp;
+ this.mVoltage = aVoltage;
+ }
+ if (aVoltage > mMaxVoltage) {
+ for (MetaPipeEntity tCable : mPipes) {
+ if (((GT_MetaPipeEntity_Cable)tCable).mVoltage < this.mVoltage) {
+ BaseMetaPipeEntity tBaseCable = (BaseMetaPipeEntity) tCable.getBaseMetaTileEntity();
+ tBaseCable.setToFire();
+ }
+ }
+ }
+ }
+
+ public void addAmps(int aAmps) {
+ this.mAmps += aAmps;
+ if (false && this.mAmps > mMaxAmps * 40) {
+ for (MetaPipeEntity tCable : mPipes) {
+ if (((GT_MetaPipeEntity_Cable)tCable).mAmperage*40 < this.mAmps) {
+ BaseMetaPipeEntity tBaseCable = (BaseMetaPipeEntity) tCable.getBaseMetaTileEntity();
+ tBaseCable.setToFire();
+ }
+ }
+ }
+ }
+
+ //if no amps pass trough for more then 0.5 second reduce them to minimize wrong results
+ //but still allow the player to see if activity is hapening
+ public int getAmps() {
+ int tTime = MinecraftServer.getServer().getTickCounter() - 10;
+ if (mTick < tTime) {
+ reset(tTime - mTick);
+ mTick = tTime;
+ }
+ return mAmps;
+ }
+
+ public int getVoltage(MetaPipeEntity aCable) {
+ int tLoss = 0;
+ if (mCountUp) {
+ for (int i = 0; i < mPipes.length; i++) {
+ GT_MetaPipeEntity_Cable tCable = (GT_MetaPipeEntity_Cable) mPipes[i];
+ tLoss += tCable.mCableLossPerMeter;
+ if (aCable == tCable) {
+ return Math.max(mVoltage - tLoss, 0);
+ }
+ }
+ } else {
+ for (int i = mPipes.length - 1; i >= 0; i--) {
+ GT_MetaPipeEntity_Cable tCable = (GT_MetaPipeEntity_Cable) mPipes[i];
+ tLoss += tCable.mCableLossPerMeter;
+ if (aCable == tCable) {
+ return Math.max(mVoltage - tLoss, 0);
+ }
+ }
+ }
+ return -1;
+ }
+
+ private void reset(int aTimePassed) {
+ mAmps = Math.max(0, mAmps - (mMaxAmps * aTimePassed));
+ }
+
+ @Override
+ protected void processPipes() {
+ super.processPipes();
+ mMaxAmps = Integer.MAX_VALUE;
+ mMaxVoltage = Integer.MAX_VALUE;
+ for (MetaPipeEntity tCable : mPipes) {
+ if (tCable instanceof GT_MetaPipeEntity_Cable) {
+ mMaxAmps = Math.min((int)((GT_MetaPipeEntity_Cable) tCable).mAmperage, mMaxAmps);
+ mLoss += (int)((GT_MetaPipeEntity_Cable) tCable).mCableLossPerMeter;
+ mMaxVoltage = Math.min((int)((GT_MetaPipeEntity_Cable) tCable).mVoltage, mMaxVoltage);
+ }
+ }
+ }
+}