aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity/implementations
diff options
context:
space:
mode:
authorTechnus <daniel112092@gmail.com>2017-09-14 20:23:00 +0200
committerTechnus <daniel112092@gmail.com>2017-09-14 20:23:00 +0200
commit3b721447ae976b83c7283553d6aaa980ef133f86 (patch)
treeb8ffad03da2a139d87539efe3c9cf541305d35b0 /src/main/java/gregtech/api/metatileentity/implementations
parentd9003883ad4d97977d9a768cb09eea354bc71ec8 (diff)
downloadGT5-Unofficial-3b721447ae976b83c7283553d6aaa980ef133f86.tar.gz
GT5-Unofficial-3b721447ae976b83c7283553d6aaa980ef133f86.tar.bz2
GT5-Unofficial-3b721447ae976b83c7283553d6aaa980ef133f86.zip
Moving average wire fix
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity/implementations')
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java57
1 files changed, 40 insertions, 17 deletions
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 0feac7561e..388f56edbb 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
@@ -44,8 +44,9 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
public long mRestRF;
public int mOverheat;
public static short mMaxOverheat=(short) (GT_Mod.gregtechproxy.mWireHeatingTicks * 100);
- private int tickDiff=1;
- private long lastTickTime;
+
+ private int[] lastAmperage;
+ private long lastWorldTick;
public GT_MetaPipeEntity_Cable(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) {
super(aID, aName, aNameRegional, 0);
@@ -242,27 +243,50 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
}
@Override
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
+ if(aBaseMetaTileEntity.isServerSide()) {
+ lastAmperage = new int[16];
+ lastWorldTick = aBaseMetaTileEntity.getWorld().getTotalWorldTime() - 1;//sets initial value -1 since it is in the same tick as first on post tick
+ }
+ }
+
+ @Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
- mTransferredVoltageOK=mTransferredVoltage;
- mTransferredVoltage=0;
- mTransferredAmperageOK=mTransferredAmperage;
- mTransferredAmperage = 0;
-
- tickDiff=Math.max((int)(aBaseMetaTileEntity.getWorld().getTotalWorldTime()-lastTickTime),1);
- lastTickTime=aBaseMetaTileEntity.getWorld().getTotalWorldTime();
-
- long overHeatAmps=mTransferredAmperage-(mAmperage*tickDiff);
- if(overHeatAmps>0) mOverheat+=100*overHeatAmps;
+ {//amp handler
+ long worldTick = aBaseMetaTileEntity.getWorld().getTotalWorldTime();
+ int tickDiff = (int) (worldTick - lastWorldTick);
+ lastWorldTick = worldTick;
+ int ampsAvr=lastAmperage[15]=mTransferredAmperage;
+ if (tickDiff >= 16) {
+ for (int i = 0; i <= 14; i++) lastAmperage[i]=0;
+ } else {
+ System.arraycopy(lastAmperage,tickDiff,lastAmperage,0,16-tickDiff);
+ for (int i = 14; i >=0; i--,--tickDiff) {
+ if(tickDiff>0){
+ lastAmperage[i]=0;
+ }else{
+ ampsAvr+=lastAmperage[i];
+ }
+ }
+ }
+ if (ampsAvr > (mAmperage<<4)) mOverheat+=100*(ampsAvr-(mAmperage<<4));
+ }
- if(mOverheat>mMaxOverheat){
+ if(mOverheat>=mMaxOverheat) {
//if(mInsulated){
- //todo uninsulate
+ //todo uninsulate
//}else{
- aBaseMetaTileEntity.setToFire();
+ aBaseMetaTileEntity.setToFire();
//}
+ }else if (mOverheat>0){
+ mOverheat--;
}
- else if(mOverheat>0)mOverheat--;
+
+ mTransferredVoltageOK=mTransferredVoltage;
+ mTransferredVoltage=0;
+ mTransferredAmperageOK=mTransferredAmperage;
+ mTransferredAmperage = 0;
if (aTick % 20 == 0) {
mTransferredVoltageLast20OK=mTransferredVoltageLast20;
@@ -355,7 +379,6 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
//EnumChatFormatting.BLUE + mName + EnumChatFormatting.RESET,
"Heat: "+
EnumChatFormatting.RED+ mOverheat +EnumChatFormatting.RESET+" / "+EnumChatFormatting.YELLOW+ mMaxOverheat + EnumChatFormatting.RESET,
- "TickDiff: "+ EnumChatFormatting.YELLOW+ tickDiff + EnumChatFormatting.RESET,
"Max Load (1t):",
EnumChatFormatting.GREEN + Integer.toString(mTransferredAmperageOK) + EnumChatFormatting.RESET +" A / "+
EnumChatFormatting.YELLOW + Long.toString(mAmperage) + EnumChatFormatting.RESET +" A",