Fixed Power injection for Multiblocks.

All Energy Producing Multis will explode if they cannot handle the output load.
All Energy Producing Multis also now support multi amp dynamo hatches, which may be added by addons.
This commit is contained in:
Alkalus 2019-12-13 14:32:37 +00:00
parent 7b592a645c
commit 11ba5e8594
2 changed files with 68 additions and 10 deletions

View file

@ -505,16 +505,78 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity {
}
public boolean addEnergyOutput(long aEU) {
if (aEU <= 0) return true;
for (GT_MetaTileEntity_Hatch_Dynamo tHatch : mDynamoHatches) {
if (isValidMetaTileEntity(tHatch)) {
if (tHatch.getBaseMetaTileEntity().increaseStoredEnergyUnits(aEU, false)) {
if (aEU <= 0) {
return true;
}
}
if (mDynamoHatches.size() > 0) {
return addEnergyOutputMultipleDynamos(aEU, true);
}
return false;
}
public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) {
int injected = 0;
long totalOutput = 0;
long aFirstVoltageFound = -1;
boolean aFoundMixedDynamos = false;
for (GT_MetaTileEntity_Hatch_Dynamo aDynamo : mDynamoHatches) {
if( aDynamo == null ) {
return false;
}
if (isValidMetaTileEntity(aDynamo)) {
long aVoltage = aDynamo.maxEUOutput();
long aTotal = aDynamo.maxAmperesOut() * aVoltage;
// Check against voltage to check when hatch mixing
if (aFirstVoltageFound == -1) {
aFirstVoltageFound = aVoltage;
}
else {
/**
* Calcualtes overclocked ness using long integers
* @param aEUt - recipe EUt
* @param aDuration - recipe Duration
* @param mAmperage - should be 1 ?
*/
//Long time calculation
if (aFirstVoltageFound != aVoltage) {
aFoundMixedDynamos = true;
}
}
totalOutput += aTotal;
}
}
if (totalOutput < aEU || (aFoundMixedDynamos && !aAllowMixedVoltageDynamos)) {
explodeMultiblock();
return false;
}
long leftToInject;
//Long EUt calculation
long aVoltage;
//Isnt too low EUt check?
int aAmpsToInject;
int aRemainder;
int ampsOnCurrentHatch;
//xEUt *= 4;//this is effect of everclocking
for (GT_MetaTileEntity_Hatch_Dynamo aDynamo : mDynamoHatches) {
if (isValidMetaTileEntity(aDynamo)) {
leftToInject = aEU - injected;
aVoltage = aDynamo.maxEUOutput();
aAmpsToInject = (int) (leftToInject / aVoltage);
aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage));
ampsOnCurrentHatch= (int) Math.min(aDynamo.maxAmperesOut(), aAmpsToInject);
for (int i = 0; i < ampsOnCurrentHatch; i++) {
aDynamo.getBaseMetaTileEntity().increaseStoredEnergyUnits(aVoltage, false);
}
injected+=aVoltage*ampsOnCurrentHatch;
if(aRemainder>0 && ampsOnCurrentHatch<aDynamo.maxAmperesOut()){
aDynamo.getBaseMetaTileEntity().increaseStoredEnergyUnits(aRemainder, false);
injected+=aRemainder;
}
}
}
return injected > 0;
}
public long getMaxInputVoltage() {
long rVoltage = 0;

View file

@ -165,10 +165,6 @@ public abstract class GT_MetaTileEntity_LargeTurbine extends GT_MetaTileEntity_M
} else {
this.mMaxProgresstime = 1;
this.mEfficiencyIncrease = (10);
if(this.mDynamoHatches.size()>0){
if(this.mDynamoHatches.get(0).getBaseMetaTileEntity().getOutputVoltage() < (int)((long)mEUt * (long)mEfficiency / 10000L)){
explodeMultiblock();}
}
return true;
}
}