Skip to content

Commit

Permalink
Fixed Power injection for Multiblocks.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
draknyte1 committed Dec 13, 2019
1 parent 7b592a6 commit 11ba5e8
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -505,15 +505,77 @@ public void explodeMultiblock() {
}

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)) {
return true;
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;
}
}
return false;

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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,6 @@ public boolean checkRecipe(ItemStack aStack) {
} 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;
}
}
Expand Down

0 comments on commit 11ba5e8

Please sign in to comment.