diff options
Diffstat (limited to 'src/main/java/goodgenerator/blocks/tileEntity/base')
-rw-r--r-- | src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java | 165 | ||||
-rw-r--r-- | src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java | 707 |
2 files changed, 84 insertions, 788 deletions
diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java index c997fd7bfd..a85c418d55 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java @@ -1,16 +1,13 @@ package goodgenerator.blocks.tileEntity.base; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe; import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; import static gregtech.api.enums.Textures.BlockIcons.*; import static gregtech.api.util.GT_StructureUtility.ofFrame; -import java.util.ArrayList; - import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.ResourceLocation; @@ -39,6 +36,7 @@ import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; @@ -49,6 +47,8 @@ import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_HatchElementBuilder; +import gregtech.api.util.GT_OverclockCalculator; +import gregtech.api.util.GT_ParallelHelper; import gregtech.api.util.GT_Recipe; import gregtech.api.util.GT_Utility; import gregtech.common.power.FusionPower; @@ -101,10 +101,12 @@ public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMulti public LargeFusionComputer(String name) { super(name); + useLongPower = true; } public LargeFusionComputer(int id, String name, String nameRegional) { super(id, name, nameRegional); + useLongPower = true; } @Override @@ -147,6 +149,15 @@ public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMulti } @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + // Migration code + if (lEUt > 0) { + lEUt = -lEUt; + } + } + + @Override public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { this.eEnergyMulti.clear(); if (structureCheck_EM(MAIN_NAME, 23, 3, 40) && !mInputHatches.isEmpty() @@ -295,7 +306,7 @@ public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMulti stopMachine(); } if (mMaxProgresstime > 0) { - this.getBaseMetaTileEntity().decreaseStoredEnergyUnits(mEUt, true); + this.getBaseMetaTileEntity().decreaseStoredEnergyUnits(-lEUt, true); if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { if (mOutputItems != null) for (ItemStack tStack : mOutputItems) if (tStack != null) addOutput(tStack); @@ -318,12 +329,12 @@ public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMulti if (aBaseMetaTileEntity.isAllowedToWork()) { this.mEUStore = (int) getBaseMetaTileEntity().getStoredEU(); if (checkRecipe()) { - if (this.mEUStore < this.mLastRecipe.mSpecialValue - this.mEUt) { + if (this.mEUStore < this.mLastRecipe.mSpecialValue + this.lEUt) { mMaxProgresstime = 0; turnCasingActive(false); } getBaseMetaTileEntity().decreaseStoredEnergyUnits( - this.mLastRecipe.mSpecialValue - this.mEUt, + this.mLastRecipe.mSpecialValue + this.lEUt, false); } } @@ -388,101 +399,81 @@ public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMulti mUpdate = 100; } - @Override - public boolean onRunningTick(ItemStack aStack) { - if (mEUt < 0) { - if (!drainEnergyInput(((long) -mEUt * 10000) / Math.max(1000, mEfficiency))) { - this.mLastRecipe = null; - this.para = 0; - stopMachine(); - return false; - } - } - if (this.mEUStore <= 0) { - this.mLastRecipe = null; - this.para = 0; - stopMachine(); - return false; - } - return true; - } - public abstract int tierOverclock(); public int overclock(int mStartEnergy) { if (tierOverclock() == 1) { - return 1; + return 0; } if (tierOverclock() == 2) { - return mStartEnergy < 160000000 ? 2 : 1; + return mStartEnergy <= 160000000 ? 1 : 0; } if (tierOverclock() == 4) { - return (mStartEnergy < 160000000 ? 4 : (mStartEnergy < 320000000 ? 2 : 1)); + return (mStartEnergy <= 160000000 ? 2 : (mStartEnergy <= 320000000 ? 1 : 0)); } if (tierOverclock() == 8) { - return (mStartEnergy < 160000000) ? 8 - : ((mStartEnergy < 320000000) ? 4 : (mStartEnergy < 640000000) ? 2 : 1); + return (mStartEnergy <= 160000000) ? 3 + : ((mStartEnergy <= 320000000) ? 2 : (mStartEnergy <= 640000000) ? 1 : 0); } - return (mStartEnergy < 160000000) ? 16 - : ((mStartEnergy < 320000000) ? 8 - : ((mStartEnergy < 640000000) ? 4 : (mStartEnergy < 1280000000) ? 2 : 1)); + return (mStartEnergy <= 160000000) ? 4 + : ((mStartEnergy <= 320000000) ? 3 + : ((mStartEnergy <= 640000000) ? 2 : (mStartEnergy <= 1280000000) ? 1 : 0)); } - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - - ArrayList<FluidStack> tFluidList = getStoredFluids(); + public GT_Recipe.GT_Recipe_Map getRecipeMap() { + return GT_Recipe.GT_Recipe_Map.sFusionRecipes; + } - if (tFluidList.size() > 1) { - FluidStack[] tFluids = tFluidList.toArray(new FluidStack[0]); - GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sFusionRecipes - .findRecipe(this.getBaseMetaTileEntity(), this.mLastRecipe, false, Integer.MAX_VALUE, tFluids); + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected GT_ParallelHelper createParallelHelper(@NotNull GT_Recipe recipe) { + // When the fusion first loads and is still processing, it does the recipe check without consuming. + if (mRunningOnLoad) { + return new GT_ParallelHelper().setRecipe(recipe).setItemInputs(inputItems) + .setFluidInputs(inputFluids).setAvailableEUt(availableVoltage * availableAmperage) + .setMachine(machine, protectItems, protectFluids) + .setRecipeLocked(recipeLockableMachine, isRecipeLocked).setMaxParallel(maxParallel) + .enableBatchMode(batchSize).enableOutputCalculation(); + } + return super.createParallelHelper(recipe); + } - if ((tRecipe == null && !mRunningOnLoad) || (tRecipe != null && (maxEUStore() < tRecipe.mSpecialValue))) { - turnCasingActive(false); - this.mLastRecipe = null; - return CheckRecipeResultRegistry.NO_RECIPE; + @NotNull + @Override + protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe, + @NotNull GT_ParallelHelper helper) { + return super.createOverclockCalculator(recipe, helper) + .limitOverclockCount(overclock(recipe.mSpecialValue)); } - int pall = handleParallelRecipe( - tRecipe, - tFluids, - null, - Math.min( - getMaxPara() * extraPara(tRecipe.mSpecialValue), - (int) (getMaxEUInput() / tRecipe.mEUt / overclock(tRecipe.mSpecialValue)))); - this.para = pall; - if (mRunningOnLoad || pall > 0) { - this.mLastRecipe = tRecipe; - this.mEUt = (this.mLastRecipe.mEUt * overclock(this.mLastRecipe.mSpecialValue) * pall); - this.mMaxProgresstime = Math - .max(this.mLastRecipe.mDuration / overclock(this.mLastRecipe.mSpecialValue), 1); - this.mEfficiencyIncrease = 10000; - this.mOutputFluids = getMultiOutput(mLastRecipe, pall).getKey().toArray(new FluidStack[0]); - turnCasingActive(true); - mRunningOnLoad = false; + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { + if (!mRunningOnLoad && recipe.mSpecialValue > maxEUStore()) { + return CheckRecipeResultRegistry.insufficientStartupPower(recipe.mSpecialValue); + } + maxParallel = getMaxPara() * extraPara(recipe.mSpecialValue); return CheckRecipeResultRegistry.SUCCESSFUL; } - } - return CheckRecipeResultRegistry.NO_RECIPE; - } - public long getMaxEUInput() { - long sum = 0; - for (GT_MetaTileEntity_Hatch_Energy hatch : mEnergyHatches) { - if (isValidMetaTileEntity(hatch)) { - sum += Math.min( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - hatch.maxEUInput() * hatch.maxAmperesIn()); - } - } - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : eEnergyMulti) { - if (isValidMetaTileEntity(hatch)) { - sum += Math.min( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - hatch.maxEUInput() * hatch.maxAmperesIn()); + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (mRunningOnLoad) mRunningOnLoad = false; + turnCasingActive(result.wasSuccessful()); + if (result.wasSuccessful()) { + mLastRecipe = lastRecipe; + } else { + mLastRecipe = null; + } + return result; } - } - return sum; + }.setOverclock(1, 1); } @Override @@ -571,9 +562,13 @@ public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMulti @Override public String[] getInfoData() { - String tier = hatchTier() == 6 ? EnumChatFormatting.RED + "I" + EnumChatFormatting.RESET - : hatchTier() == 7 ? EnumChatFormatting.YELLOW + "II" + EnumChatFormatting.RESET - : hatchTier() == 8 ? EnumChatFormatting.GRAY + "III" + EnumChatFormatting.RESET : "IV"; + String tier = switch (hatchTier()) { + case 6 -> EnumChatFormatting.RED + "I" + EnumChatFormatting.RESET; + case 7 -> EnumChatFormatting.RED + "II" + EnumChatFormatting.RESET; + case 8 -> EnumChatFormatting.RED + "III" + EnumChatFormatting.RESET; + case 9 -> EnumChatFormatting.RED + "IV" + EnumChatFormatting.RESET; + default -> EnumChatFormatting.GOLD + "V" + EnumChatFormatting.RESET; + }; float plasmaOut = 0; int powerRequired = 0; if (this.mLastRecipe != null) { diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java index ecee690a74..1225fda96f 100644 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java @@ -1,104 +1,11 @@ package goodgenerator.blocks.tileEntity.base; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.getMultiOutput; -import static com.github.bartimaeusnek.bartworks.util.RecipeFinderForParallel.handleParallelRecipe; import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; import static gregtech.api.enums.Textures.BlockIcons.*; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import java.util.ArrayList; +import gregtech.api.logic.ProcessingLogic; -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.AdvFusionPower; -import gregtech.api.util.GT_HatchElementBuilder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; - -public abstract class LargeFusionComputerPP extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - public static final String MAIN_NAME = "largeFusionPP"; - private boolean isLoadedChunk; - public GT_Recipe mLastRecipe; - public int para; - public long mEUStore; - protected AdvFusionPower power; - private static final ClassValue<IStructureDefinition<LargeFusionComputerPP>> STRUCTURE_DEFINITION = new ClassValue<IStructureDefinition<LargeFusionComputerPP>>() { - - @Override - protected IStructureDefinition<LargeFusionComputerPP> computeValue(Class<?> type) { - return StructureDefinition.<LargeFusionComputerPP>builder() - .addShape(MAIN_NAME, transpose(new String[][] { L0, L1, L2, L3, L2, L1, L0 })) - .addElement('H', lazy(x -> ofBlock(x.getCoilBlock(), x.getCoilMeta()))) - .addElement('C', lazy(x -> ofBlock(x.getCasingBlock(), x.getCasingMeta()))) - .addElement('B', lazy(x -> ofBlock(x.getGlassBlock(), x.getGlassMeta()))) - .addElement( - 'I', - lazy( - x -> GT_HatchElementBuilder.<LargeFusionComputerPP>builder() - .atLeast(GT_HatchElement.InputHatch) - .adder(LargeFusionComputerPP::addFluidIO).casingIndex(x.textureIndex()) - .dot(1).buildAndChain(x.getGlassBlock(), x.getGlassMeta()))) - .addElement( - 'E', - lazy( - x -> GT_HatchElementBuilder.<LargeFusionComputerPP>builder() - .atLeast(HatchElement.EnergyMulti.or(GT_HatchElement.Energy)) - .adder(LargeFusionComputerPP::addEnergyInjector) - .casingIndex(x.textureIndex()).dot(2) - .buildAndChain(x.getCasingBlock(), x.getCasingMeta()))) - .addElement('F', lazy(x -> ofFrame(x.getFrameBox()))).build(); - } - }; - - static { - Textures.BlockIcons.setCasingTextureForId( - 52, - TextureFactory.of( - TextureFactory.builder().addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW).extFacing().build(), - TextureFactory.builder().addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW).extFacing().glow() - .build())); - } +public abstract class LargeFusionComputerPP extends LargeFusionComputer { public LargeFusionComputerPP(String name) { super(name); @@ -109,613 +16,7 @@ public abstract class LargeFusionComputerPP extends GT_MetaTileEntity_TooltipMul } @Override - public AdvFusionPower getPower() { - return power; - } - - @Override - public abstract long maxEUStore(); - - public abstract Block getCasingBlock(); - - public abstract int getCasingMeta(); - - public abstract Block getCoilBlock(); - - public abstract int getCoilMeta(); - - public abstract Block getGlassBlock(); - - public abstract int getGlassMeta(); - - public abstract int hatchTier(); - - public abstract Materials getFrameBox(); - - public int textureIndex() { - return 53; - }; - - public abstract ITexture getTextureOverlay(); - - public abstract int getMaxPara(); - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.eEnergyMulti.clear(); - if (structureCheck_EM(MAIN_NAME, 23, 3, 40) && !mInputHatches.isEmpty() - && !mOutputHatches.isEmpty() - && (mEnergyHatches.size() + eEnergyMulti.size()) != 0) { - fixAllIssue(); - return true; - } - return false; - } - - public void fixAllIssue() { - mWrench = true; - mScrewdriver = true; - mSoftHammer = true; - mHardHammer = true; - mSolderingTool = true; - mCrowbar = true; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - structureBuild_EM(MAIN_NAME, 23, 3, 40, itemStack, b); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) { - return -1; - } else { - return survivialBuildPiece( - MAIN_NAME, - stackSize, - 23, - 3, - 40, - elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5), - source, - actor, - false, - true); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) { - // if machine has stopped, stop chunkloading - GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); - this.isLoadedChunk = false; - } else if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && !this.isLoadedChunk) { - // load a 3x3 area when machine is running - GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); - int offX = aBaseMetaTileEntity.getFrontFacing().offsetX; - int offZ = aBaseMetaTileEntity.getFrontFacing().offsetZ; - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() - 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() - 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() - 1 + offZ)); - this.isLoadedChunk = true; - } - - if (aBaseMetaTileEntity.isServerSide()) { - if (aTick % 400 == 0) fixAllIssue(); - if (mEfficiency < 0) mEfficiency = 0; - if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { - this.mEUStore = aBaseMetaTileEntity.getStoredEU(); - checkRecipe(); - } - if (mUpdated) { - mUpdate = 50; - mUpdated = false; - } - if (--mUpdate == 0 || --mStartUpCheck == 0 - || cyclicUpdate_EM() - || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { - if (mUpdate <= -1000) { - mUpdate = 5000; - } - checkStructure(true, aBaseMetaTileEntity); - } - if (mStartUpCheck < 0) { - if (mMachine) { - if (this.mEnergyHatches != null) { - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) - if (isValidMetaTileEntity(tHatch)) { - if (aBaseMetaTileEntity.getStoredEU() - + (2048L * tierOverclock() * getMaxPara() * extraPara(100)) < maxEUStore() - && tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - false)) { - aBaseMetaTileEntity.increaseStoredEnergyUnits( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - true); - } else if (aBaseMetaTileEntity.getStoredEU() + (2048L * tierOverclock()) < maxEUStore() - && tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(2048L * tierOverclock(), false)) { - aBaseMetaTileEntity - .increaseStoredEnergyUnits(2048L * tierOverclock(), true); - } - } - } - if (this.eEnergyMulti != null) { - for (GT_MetaTileEntity_Hatch_EnergyMulti tHatch : eEnergyMulti) - if (isValidMetaTileEntity(tHatch)) { - if (aBaseMetaTileEntity.getStoredEU() - + (2048L * tierOverclock() * getMaxPara() * extraPara(100)) < maxEUStore() - && tHatch.getBaseMetaTileEntity().decreaseStoredEnergyUnits( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - false)) { - aBaseMetaTileEntity.increaseStoredEnergyUnits( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - true); - } else if (aBaseMetaTileEntity.getStoredEU() + (2048L * tierOverclock()) < maxEUStore() - && tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(2048L * tierOverclock(), false)) { - aBaseMetaTileEntity - .increaseStoredEnergyUnits(2048L * tierOverclock(), true); - } - } - } - if (this.mEUStore <= 0 && mMaxProgresstime > 0) { - stopMachine(); - } - if (mMaxProgresstime > 0) { - this.getBaseMetaTileEntity().decreaseStoredEnergyUnits(mEUt, true); - if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { - if (mOutputItems != null) - for (ItemStack tStack : mOutputItems) if (tStack != null) addOutput(tStack); - if (mOutputFluids != null) - for (FluidStack tStack : mOutputFluids) if (tStack != null) addOutput(tStack); - mEfficiency = Math.max( - 0, - Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); - mOutputItems = null; - mProgresstime = 0; - mMaxProgresstime = 0; - mEfficiencyIncrease = 0; - this.mEUStore = getBaseMetaTileEntity().getStoredEU(); - if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); - } - } else { - if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() - || aBaseMetaTileEntity.hasInventoryBeenModified()) { - turnCasingActive(mMaxProgresstime > 0); - if (aBaseMetaTileEntity.isAllowedToWork()) { - this.mEUStore = getBaseMetaTileEntity().getStoredEU(); - if (checkRecipe()) { - if (this.mEUStore < this.mLastRecipe.mSpecialValue - this.mEUt) { - mMaxProgresstime = 0; - turnCasingActive(false); - } - getBaseMetaTileEntity().decreaseStoredEnergyUnits( - this.mLastRecipe.mSpecialValue - this.mEUt, - false); - } - } - if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); - } - } - } else { - turnCasingActive(false); - this.mLastRecipe = null; - stopMachine(); - } - } - aBaseMetaTileEntity - .setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mMachine ? 0 : 64)); - aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); - } else { - soundMagic(getActivitySound()); - } - } - - public boolean turnCasingActive(boolean status) { - if (this.mEnergyHatches != null) { - for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.eEnergyMulti != null) { - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : this.eEnergyMulti) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.mOutputHatches != null) { - for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.mInputHatches != null) { - for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) - return new ITexture[] { TextureFactory.builder().addIcon(MACHINE_CASING_FUSION_GLASS).extFacing().build(), - getTextureOverlay() }; - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; - return new ITexture[] { TextureFactory.builder().addIcon(MACHINE_CASING_FUSION_GLASS).extFacing().build() }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public void onMachineBlockUpdate() { - mUpdate = 100; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (mEUt < 0) { - if (!drainEnergyInput(((long) -mEUt * 10000) / Math.max(1000, mEfficiency))) { - this.mLastRecipe = null; - this.para = 0; - stopMachine(); - return false; - } - } - if (this.mEUStore <= 0) { - this.mLastRecipe = null; - this.para = 0; - stopMachine(); - return false; - } - return true; + protected ProcessingLogic createProcessingLogic() { + return super.createProcessingLogic().setOverclock(2, 2); } - - public abstract int tierOverclock(); - - public abstract int overclock(int mStartEnergy); - - public abstract int extraPara(int startEnergy); - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - ArrayList<FluidStack> tFluidList = getStoredFluids(); - - if (tFluidList.size() > 1) { - FluidStack[] tFluids = tFluidList.toArray(new FluidStack[0]); - GT_Recipe tRecipe = GT_Recipe.GT_Recipe_Map.sFusionRecipes - .findRecipe(this.getBaseMetaTileEntity(), this.mLastRecipe, false, Integer.MAX_VALUE, tFluids); - - if ((tRecipe == null && !mRunningOnLoad) || (tRecipe != null && (maxEUStore() < tRecipe.mSpecialValue))) { - turnCasingActive(false); - this.mLastRecipe = null; - return CheckRecipeResultRegistry.NO_RECIPE; - } - int pall = handleParallelRecipe( - tRecipe, - tFluids, - null, - Math.min( - getMaxPara() * extraPara(tRecipe.mSpecialValue), - (int) (getMaxEUInput() / tRecipe.mEUt / overclock(tRecipe.mSpecialValue)))); - this.para = pall; - if (mRunningOnLoad || pall > 0) { - this.mLastRecipe = tRecipe; - this.mEUt = (this.mLastRecipe.mEUt * overclock(this.mLastRecipe.mSpecialValue) * pall); - this.mMaxProgresstime = Math - .max(this.mLastRecipe.mDuration / overclock(this.mLastRecipe.mSpecialValue), 1); - this.mEfficiencyIncrease = 10000; - this.mOutputFluids = getMultiOutput(mLastRecipe, pall).getKey().toArray(new FluidStack[0]); - turnCasingActive(true); - mRunningOnLoad = false; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - } - return CheckRecipeResultRegistry.NO_RECIPE; - } - - public long getMaxEUInput() { - long sum = 0; - for (GT_MetaTileEntity_Hatch_Energy hatch : mEnergyHatches) { - if (isValidMetaTileEntity(hatch)) { - sum += Math.min( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - hatch.maxEUInput() * hatch.maxAmperesIn()); - } - } - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : eEnergyMulti) { - if (isValidMetaTileEntity(hatch)) { - sum += Math.min( - 2048L * tierOverclock() * getMaxPara() * extraPara(100), - hatch.maxEUInput() * hatch.maxAmperesIn()); - } - } - return sum; - } - - @Override - public void onRemoval() { - if (this.isLoadedChunk) GT_ChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); - super.onRemoval(); - } - - public int getChunkX() { - return getBaseMetaTileEntity().getXCoord() >> 4; - } - - public int getChunkZ() { - return getBaseMetaTileEntity().getZCoord() >> 4; - } - - private boolean addEnergyInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - GT_MetaTileEntity_Hatch_Energy tHatch = (GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity; - if (tHatch.mTier < hatchTier()) return false; - tHatch.updateTexture(aBaseCasingIndex); - return mEnergyHatches.add(tHatch); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - GT_MetaTileEntity_Hatch_EnergyMulti tHatch = (GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity; - if (tHatch.mTier < hatchTier()) return false; - tHatch.updateTexture(aBaseCasingIndex); - return eEnergyMulti.add(tHatch); - } - return false; - } - - private boolean addFluidIO(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - GT_MetaTileEntity_Hatch tHatch = (GT_MetaTileEntity_Hatch) aMetaTileEntity; - if (tHatch.mTier < hatchTier() && !(tHatch instanceof GT_MetaTileEntity_Hatch_Output_ME)) return false; - } else { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - GT_MetaTileEntity_Hatch_Input tInput = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - tInput.updateTexture(aBaseCasingIndex); - tInput.mRecipeMap = getRecipeMap(); - return mInputHatches.add(tInput); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - GT_MetaTileEntity_Hatch_Output tOutput = (GT_MetaTileEntity_Hatch_Output) aMetaTileEntity; - tOutput.updateTexture(aBaseCasingIndex); - return mOutputHatches.add(tOutput); - } - return false; - } - - @Override - public IStructureDefinition<LargeFusionComputerPP> getStructure_EM() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - protected ResourceLocation getActivitySound() { - return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; - } - - @Override - public String[] getInfoData() { - String tier = hatchTier() == 9 ? EnumChatFormatting.BLUE + "IV" + EnumChatFormatting.RESET - : EnumChatFormatting.GOLD + "V" + EnumChatFormatting.RESET; - float plasmaOut = 0; - int powerRequired = 0; - if (this.mLastRecipe != null) { - powerRequired = this.mLastRecipe.mEUt * this.para; - if (this.mLastRecipe.getFluidOutput(0) != null) { - plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration - * this.para; - } - } - - return new String[] { EnumChatFormatting.BLUE + "Fusion Reactor MK " + EnumChatFormatting.RESET + tier, - StatCollector.translateToLocal("scanner.info.UX.0") + ": " - + EnumChatFormatting.LIGHT_PURPLE - + GT_Utility.formatNumbers(this.para) - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.fusion.req") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(powerRequired) - + EnumChatFormatting.RESET - + "EU/t", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mEUStore) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEUStore()) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.fusion.plasma") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(plasmaOut) - + EnumChatFormatting.RESET - + "L/t" }; - } - - protected long energyStorageCache; - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - - screenElements - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("gui.LargeFusion.0") + " " - + GT_Utility.formatNumbers(energyStorageCache) - + " EU") - .setSynced(false).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.LongSyncer(this::maxEUStore, val -> energyStorageCache = val)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("gui.LargeFusion.1") + " " - + GT_Utility.formatNumbers(getEUVar()) - + " EU") - .setSynced(false).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.LongSyncer(this::getEUVar, this::setEUVar)); - } - - public static final String[] L0 = { " ", - " ", " FCCCCCF ", - " FCIBICF ", " FCCCCCF ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " FFF FFF ", - " CCC CCC ", " CIC CIC ", - " CBC CBC ", " CIC CIC ", - " CCC CCC ", " FFF FFF ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " FCCCCCF ", - " FCIBICF ", " FCCCCCF ", - " ", " ", }; - - public static final String[] L1 = { " ", - " FCBBBCF ", " CC CC ", - " CCCCC CCCCC ", " CCCCCCC CCCCCCC ", - " CCCCCCC FCBBBCF CCCCCCC ", " CCCCC CCCCC ", - " CCCC CCCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " FCCCF FCCCF ", - " C C C C ", " B B B B ", - " B B B B ", " B B B B ", - " C C C C ", " FCCCF FCCCF ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCCC CCCC ", " CCCCC CCCCC ", - " CCCCCCC FCBBBCF CCCCCCC ", " CCCCCCC CCCCCCC ", - " CCCCC CCCCC ", " CC CC ", - " FCBBBCF ", " ", }; - - public static final String[] L2 = { " FCCCCCF ", - " CC CC ", " CCCCC CCCCC ", - " CCCCCHHHHHHHHHCCCCC ", " CCCCHHHCC CCHHHCCCC ", - " CCCHHCCCCC CCCCCHHCCC ", " ECHHCCCCC FCCCCCF CCCCCHHCE ", - " CCHCCCC CCCCHCC ", " CCHCCC CCCHCC ", - " CCHCE ECHCC ", " ECHCC CCHCE ", - " CCHCE ECHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", "FCCHCCF FCCHCCF", - "C H C C H C", "C H C C H C", - "C H C C H C", "C H C C H C", - "C H C C H C", "FCCHCCF FCCHCCF", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCE ECHCC ", " ECHCC CCHCE ", - " CCHCE ECHCC ", " CCHCCC CCCHCC ", - " CCHCCCC CCCCHCC ", " ECHHCCCCC FCCCCCF CCCCCHHCE ", - " CCCHHCCCCC CCCCCHHCCC ", " CCCCHHHCC CCHHHCCCC ", - " CCCCCHHHHHHHHHCCCCC ", " CCCCC CCCCC ", - " CC CC ", " FCCCCCF ", }; - - public static final String[] L3 = { " FCIBICF ", - " CC CC ", " CCCHHHHHHHHHCCC ", - " CCHHHHHHHHHHHHHHHCC ", " CCHHHHHHHHHHHHHHHHHHHCC ", - " CHHHHHHHCC CCHHHHHHHC ", " CHHHHHCCC FCIBICF CCCHHHHHC ", - " CHHHHCC CCHHHHC ", " CHHHCC CCHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", "FCHHHCF FCHHHCF", - "C HHH C C HHH C", "I HHH I I HHH I", - "B HHH B B HHH B", "I HHH I I HHH I", - "C HHH C C HHH C", "FCHHHCF FCHHHCF", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHCC CCHHHC ", - " CHHHHCC CCHHHHC ", " CHHHHHCCC FCI~ICF CCCHHHHHC ", - " CHHHHHHHCC CCHHHHHHHC ", " CCHHHHHHHHHHHHHHHHHHHCC ", - " CCHHHHHHHHHHHHHHHCC ", " CCCHHHHHHHHHCCC ", - " CC CC ", " FCIBICF ", }; } |