diff options
author | BlueWeabo <76872108+BlueWeabo@users.noreply.github.com> | 2022-12-17 20:58:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-17 19:58:34 +0100 |
commit | 58eb0fa7aaeb177ba9514e95c2b0e6570320a6cb (patch) | |
tree | 90187953f5c53406772eb63e1e3748c42d412fec /src | |
parent | c5590e230195adf4dfbf3b7334bd662d03b97af1 (diff) | |
download | GT5-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')
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 |