aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBlueWeabo <76872108+BlueWeabo@users.noreply.github.com>2022-12-17 20:58:34 +0200
committerGitHub <noreply@github.com>2022-12-17 19:58:34 +0100
commit58eb0fa7aaeb177ba9514e95c2b0e6570320a6cb (patch)
tree90187953f5c53406772eb63e1e3748c42d412fec /src
parentc5590e230195adf4dfbf3b7334bd662d03b97af1 (diff)
downloadGT5-Unofficial-58eb0fa7aaeb177ba9514e95c2b0e6570320a6cb.tar.gz
GT5-Unofficial-58eb0fa7aaeb177ba9514e95c2b0e6570320a6cb.tar.bz2
GT5-Unofficial-58eb0fa7aaeb177ba9514e95c2b0e6570320a6cb.zip
More Fixes to the PCB Factory (#1554)
* why am I so bad at spotting bugs * fixes fixes fixes, who needs to reset multipliers * remove the comment * fix oc oops * fix the roughnessMultiplier * fix accidental energy discount * remove the useless hatch boolean * fix units
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java2
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java25
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java6
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java152
-rw-r--r--src/main/resources/assets/gregtech/lang/en_US.lang1
5 files changed, 154 insertions, 32 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
index 991a03eb96..56bc92e851 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java
@@ -139,7 +139,7 @@ public abstract class GT_MetaTileEntity_ExtendedPowerMultiBlockBase<
/* 3*/ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + EnumChatFormatting.RED
+ GT_Utility.formatNumbers(getActualEnergyUsage()) + EnumChatFormatting.RESET + " EU/t",
/* 4*/ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + EnumChatFormatting.YELLOW
- + GT_Utility.formatNumbers(voltage) + EnumChatFormatting.RESET + " EU/t(*" + amps + ")"
+ + GT_Utility.formatNumbers(voltage) + EnumChatFormatting.RESET + " EU/t(*" + amps + " A)"
+ StatCollector.translateToLocal("GT5U.machines.tier")
+ ": " + EnumChatFormatting.YELLOW
+ VN[GT_Utility.getTier(voltage)] + EnumChatFormatting.RESET,
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
index c67785664c..6df995258e 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
@@ -1286,6 +1286,31 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
return mExoticEnergyHatches;
}
+ /**
+ * @return Returns true if there is 1 TT Energy Hatch OR up to 2 Energy Hatches
+ */
+ public boolean checkExoticAndNormalEnergyHatches() {
+ if (mExoticEnergyHatches.isEmpty() && mEnergyHatches.isEmpty()) {
+ return false;
+ }
+
+ if (mExoticEnergyHatches.size() >= 1) {
+ if (!mEnergyHatches.isEmpty()) {
+ return false;
+ }
+
+ if (mExoticEnergyHatches.size() != 1) {
+ return false;
+ }
+ }
+
+ if (mEnergyHatches.size() > 2) {
+ return false;
+ }
+
+ return true;
+ }
+
@Override
public boolean useModularUI() {
return true;
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java
index 6bff3c3338..d5871c633b 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java
@@ -323,11 +323,7 @@ public class GT_MetaTileEntity_NanoForge
return false;
}
- // Makes sure that the multi can accept only 1 TT Energy Hatch OR up to 2 Normal Energy Hatches. Deform if both
- // present or more than 1 TT Hatch.
- boolean hatch = mExoticEnergyHatches.size() == 1 ^ (mEnergyHatches.size() <= 2 && !mEnergyHatches.isEmpty());
-
- return mSpecialTier > 0 && hatch;
+ return mSpecialTier > 0 && checkExoticAndNormalEnergyHatches();
}
@Override
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java
index bcb195b45c..1af75b4aee 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java
@@ -2,7 +2,7 @@ package gregtech.common.tileentities.machines.multi;
import static com.gtnewhorizon.structurelib.structure.StructureUtility.*;
import static gregtech.api.enums.GT_HatchElement.*;
-import static gregtech.api.enums.GT_Values.AuthorBlueWeabo;
+import static gregtech.api.enums.GT_Values.*;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW;
@@ -43,8 +43,8 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPow
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input;
import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus;
+import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler;
import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_ExoticEnergyInputHelper;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_OreDictUnificator;
@@ -56,6 +56,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting;
+import net.minecraft.util.StatCollector;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidRegistry;
@@ -73,7 +74,7 @@ public class GT_MetaTileEntity_PCBFactory
private static final String ocTier2Upgrade = "ocTier2Upgrade";
private boolean mSeparate = false;
private float mRoughnessMultiplier = 1;
- private int mTier = 1, mSetTier = 1, mUpgradesInstalled = 0;
+ private int mTier = 1, mSetTier = 1, mUpgradesInstalled = 0, mCurrentParallel = 0, mMaxParallel = 0;
private boolean mBioUpgrade = false, mBioRotate = false, mOCTier1 = false, mOCTier2 = false;
private int[] mBioOffsets = new int[] {-5, -1},
mOCTier1Offsets = new int[] {2, -11},
@@ -168,7 +169,7 @@ public class GT_MetaTileEntity_PCBFactory
{"R R"," QQQ "," QTQ "," QQQ ","R R"},
{"R R"," QQQ "," QTQ "," QQQ ","R R"},
{"R R"," QQQ "," QTQ "," QQQ ","R R"},
- {"RNNNR","NQQQN","NQPQN","NQQQN","RNNNR"},
+ {"RNNNR","NQQQN","NQTQN","NQQQN","RNNNR"},
{"RSSSR","SSSSS","SSSSS","SSSSS","RSSSR"}
//spotless:on
}))
@@ -222,7 +223,7 @@ public class GT_MetaTileEntity_PCBFactory
.withCount(t -> isValidMetaTileEntity(t.mCoolantInputHatch) ? 1 : 0)
.newAny(((GT_Block_Casings8) GregTech_API.sBlockCasings8).getTextureIndex(12),2),
ofBlock(GregTech_API.sBlockCasings8, 12)))
- //spotless:on
+ //spotless:on
.addElement('R', ofFrame(Materials.Americium))
.addElement('Q', ofBlock(GregTech_API.sBlockCasings8, 14))
.addElement('T', ofBlock(GregTech_API.sBlockCasings1, 15))
@@ -405,6 +406,7 @@ public class GT_MetaTileEntity_PCBFactory
@Override
public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) {
mTier = 0;
+ mUpgradesInstalled = 0;
if (mSetTier < 3) {
if (!checkPiece(tier1, 3, 5, 0)) {
return false;
@@ -471,11 +473,11 @@ public class GT_MetaTileEntity_PCBFactory
return false;
}
- // Makes sure that the multi can accept only 1 TT Energy Hatch OR up to 2 Normal Energy Hatches. Deform if both
- // present or more than 1 TT Hatch.
- boolean hatch = mExoticEnergyHatches.size() == 1 ^ (mEnergyHatches.size() <= 2 && !mEnergyHatches.isEmpty());
+ if (!checkExoticAndNormalEnergyHatches()) {
+ return false;
+ }
- return mTier > 0 && hatch;
+ return mTier > 0;
}
@Override
@@ -513,12 +515,11 @@ public class GT_MetaTileEntity_PCBFactory
return false;
}
- long voltage = GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList());
- long amps = GT_ExoticEnergyInputHelper.getMaxInputAmpsMulti(getExoticAndNormalEnergyHatchList());
- long tTotalEU = voltage * amps;
+ long voltage = getMaxInputVoltage();
+ int tier = GT_Utility.getTier(voltage);
GT_Recipe tRecipe =
- aMap.findRecipe(getBaseMetaTileEntity(), null, true, false, voltage, aFluidInputs, aStack, tItemInputs);
+ aMap.findRecipe(getBaseMetaTileEntity(), null, true, false, V[tier], aFluidInputs, aStack, tItemInputs);
if (tRecipe == null) {
return false;
@@ -538,7 +539,8 @@ public class GT_MetaTileEntity_PCBFactory
}
int aMaxParallel = (int) Math.max(Math.ceil(Math.log(aNanitesOfRecipe) / Math.log(2) + 0.00001), 1);
- float aExtraPower = (float) Math.ceil(Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled));
+ mMaxParallel = aMaxParallel;
+ float aExtraPower = (float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled);
if (tRecipe.mEUt > voltage) {
return false;
@@ -560,18 +562,20 @@ public class GT_MetaTileEntity_PCBFactory
}
}
+ mCurrentParallel = aCurrentParallel;
+
if (aCurrentParallel > 0) {
this.mEfficiency = (getMaxEfficiency(aStack) - (getIdealStatus() - getRepairStatus()) * 1000);
this.mEfficiencyIncrease = getMaxEfficiency(aStack);
- this.lEUt = (long) -Math.ceil(tRecipe.mEUt * aCurrentParallel * aExtraPower);
+ this.lEUt = -(long) Math.ceil(tRecipe.mEUt * aCurrentParallel * aExtraPower);
this.mMaxProgresstime = (int) Math.ceil(tRecipe.mDuration * Math.pow(mRoughnessMultiplier, 2));
if (mOCTier1 || mOCTier2) {
calculateOverclockedNessMultiInternal(
- (long) Math.ceil(tRecipe.mEUt * aCurrentParallel * aExtraPower),
+ (long) Math.ceil(tRecipe.mEUt * aExtraPower),
(int) Math.ceil(tRecipe.mDuration * Math.pow(mRoughnessMultiplier, 2)),
- 1,
- tTotalEU,
+ aCurrentParallel,
+ V[tier],
mOCTier2);
}
@@ -583,16 +587,18 @@ public class GT_MetaTileEntity_PCBFactory
mOutputItems = new ItemStack[tRecipe.mOutputs.length];
ArrayList<ItemStack> tOutputs = new ArrayList<ItemStack>();
- int remainingEfficiency = getMaxEfficiency(aStack) < 10000 ? 10000 : getMaxEfficiency(aStack);
int repeats = (int) Math.ceil(getMaxEfficiency(aStack) / 10000);
- for (int j = 0; j < repeats; j++) {
- int chanced = getBaseMetaTileEntity().getRandomNumber(10000);
- for (int i = 0; i < tRecipe.mOutputs.length; i++) {
- if (chanced < remainingEfficiency) {
- tOutputs.add(tRecipe.getOutput(i));
+ for (int k = 0; k < aCurrentParallel; k++) {
+ int remainingEfficiency = getMaxEfficiency(aStack) < 10000 ? 10000 : getMaxEfficiency(aStack);
+ for (int j = 0; j < repeats; j++) {
+ int chanced = getBaseMetaTileEntity().getRandomNumber(10000);
+ for (int i = 0; i < tRecipe.mOutputs.length; i++) {
+ if (chanced < remainingEfficiency) {
+ tOutputs.add(tRecipe.getOutput(i));
+ }
}
+ remainingEfficiency -= 10000;
}
- remainingEfficiency -= 10000;
}
mOutputItems = tOutputs.toArray(new ItemStack[0]);
@@ -644,7 +650,7 @@ public class GT_MetaTileEntity_PCBFactory
@Override
public int getMaxEfficiency(ItemStack aStack) {
- return (int) (mRoughnessMultiplier * 10000);
+ return (int) (10000f * mRoughnessMultiplier);
}
@Override
@@ -741,6 +747,100 @@ public class GT_MetaTileEntity_PCBFactory
}
@Override
+ protected void calculateOverclockedNessMultiInternal(
+ long aEUt, int aDuration, int mAmperage, long maxInputVoltage, boolean perfectOC) {
+ int hatches = Math.max(getExoticEnergyHatches().size(), 1);
+ long zMaxInputVoltage = maxInputVoltage;
+ long zTime = aDuration;
+ long zEUt = aEUt;
+ if (zMaxInputVoltage < zEUt) {
+ this.lEUt = Long.MAX_VALUE - 1;
+ this.mMaxProgresstime = Integer.MAX_VALUE - 1;
+ return;
+ }
+
+ while (zEUt < zMaxInputVoltage) {
+ zEUt = zEUt << 2;
+ zTime = zTime >> (perfectOC ? 2 : 1);
+ if (zTime <= 1) {
+ break;
+ }
+ }
+
+ if (zTime <= 0) {
+ zTime = 1;
+ }
+
+ while (zEUt * mAmperage > zMaxInputVoltage * getMaxInputAmps() / hatches) {
+ zEUt = zEUt >> 2;
+ zTime = zTime << (perfectOC ? 2 : 1);
+ }
+
+ if (zEUt > zMaxInputVoltage) {
+ zEUt = zEUt >> 2;
+ zTime = zTime << (perfectOC ? 2 : 1);
+ }
+
+ this.lEUt = zEUt * mAmperage;
+ this.mMaxProgresstime = (int) zTime;
+ }
+
+ @Override
+ protected long getActualEnergyUsage() {
+ return (-this.lEUt * 10000) / Math.min(Math.max(1000, mEfficiency), 10000);
+ }
+
+ @Override
+ public String[] getInfoData() {
+ int mPollutionReduction = 0;
+ for (GT_MetaTileEntity_Hatch_Muffler tHatch : mMufflerHatches) {
+ if (isValidMetaTileEntity(tHatch)) {
+ mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction);
+ }
+ }
+
+ long storedEnergy = 0;
+ long maxEnergy = 0;
+ for (GT_MetaTileEntity_Hatch tHatch : getExoticAndNormalEnergyHatchList()) {
+ if (isValidMetaTileEntity(tHatch)) {
+ storedEnergy += tHatch.getBaseMetaTileEntity().getStoredEU();
+ maxEnergy += tHatch.getBaseMetaTileEntity().getEUCapacity();
+ }
+ }
+ long voltage = getMaxInputVoltage();
+ long amps = getMaxInputAmps();
+
+ return new String[] {
+ /* 1*/ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + EnumChatFormatting.GREEN
+ + GT_Utility.formatNumbers(mProgresstime / 20) + EnumChatFormatting.RESET + " s / "
+ + EnumChatFormatting.YELLOW
+ + GT_Utility.formatNumbers(mMaxProgresstime / 20) + EnumChatFormatting.RESET + " s",
+ /* 2*/ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + EnumChatFormatting.GREEN
+ + GT_Utility.formatNumbers(storedEnergy) + EnumChatFormatting.RESET + " EU / "
+ + EnumChatFormatting.YELLOW
+ + GT_Utility.formatNumbers(maxEnergy) + EnumChatFormatting.RESET + " EU",
+ /* 3*/ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + EnumChatFormatting.RED
+ + GT_Utility.formatNumbers(getActualEnergyUsage()) + EnumChatFormatting.RESET + " EU/t",
+ /* 4*/ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + EnumChatFormatting.YELLOW
+ + GT_Utility.formatNumbers(voltage) + EnumChatFormatting.RESET + " EU/t(*" + amps + " A)"
+ + StatCollector.translateToLocal("GT5U.machines.tier")
+ + ": " + EnumChatFormatting.YELLOW
+ + VN[GT_Utility.getTier(voltage)] + EnumChatFormatting.RESET,
+ /* 5*/ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + EnumChatFormatting.RED
+ + (getIdealStatus() - getRepairStatus()) + EnumChatFormatting.RESET + " "
+ + StatCollector.translateToLocal("GT5U.multiblock.efficiency")
+ + ": " + EnumChatFormatting.YELLOW
+ + Float.toString(mEfficiency / 100.0F) + EnumChatFormatting.RESET + " %",
+ /* 6*/ StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + EnumChatFormatting.GREEN
+ + mPollutionReduction + EnumChatFormatting.RESET + " %",
+ /* 7*/ StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + EnumChatFormatting.GREEN
+ + mMaxParallel,
+ /* 8*/ StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + EnumChatFormatting.GREEN
+ + mCurrentParallel
+ };
+ }
+
+ @Override
protected GT_Multiblock_Tooltip_Builder createTooltip() {
GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
tt.addMachineType("Circuit Board Fabricator")
diff --git a/src/main/resources/assets/gregtech/lang/en_US.lang b/src/main/resources/assets/gregtech/lang/en_US.lang
index 4d7a933a76..8eaf4ccca8 100644
--- a/src/main/resources/assets/gregtech/lang/en_US.lang
+++ b/src/main/resources/assets/gregtech/lang/en_US.lang
@@ -240,6 +240,7 @@ GT5U.multiblock.problems=Problems
GT5U.multiblock.mei=Max Energy Income
GT5U.multiblock.usage=Probably uses
GT5U.multiblock.parallelism=Max parallelism
+GT5U.multiblock.curparallelism=Current parallelism
GT5U.config.colormodulation=Color Modulator
GT5U.config.colormodulation.cable_insulation=Cable Insulation