From 1d894089d0d14efde4195afc967c9be9d3db97dd Mon Sep 17 00:00:00 2001 From: RecursivePineapple Date: Tue, 15 Oct 2024 16:20:27 -0400 Subject: Improved & cleaned up wormhole generator (#3334) --- .../machines/multi/MTEWormholeGenerator.java | 181 +++++++++++++++------ 1 file changed, 131 insertions(+), 50 deletions(-) (limited to 'src/main/java/gregtech/common') diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java index 8d47092c02..4c603f7bb4 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java @@ -27,11 +27,13 @@ import java.util.Optional; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -49,6 +51,7 @@ import appeng.api.AEApi; import bartworks.API.BorosilicateGlass; import gregtech.GTMod; import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.SoundResource; import gregtech.api.enums.TierEU; import gregtech.api.interfaces.IHatchElement; @@ -58,10 +61,12 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.ResultMissingItem; import gregtech.api.recipe.check.SimpleCheckRecipeResult; import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; import gregtech.api.util.IGTHatchAdder; import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.tileentities.render.TileEntityWormhole; @@ -76,13 +81,14 @@ public class MTEWormholeGenerator extends MTEEnhancedMultiBlockBase link.getDest(mSelfReference)) .map(MetaTileEntity::getBaseMetaTileEntity) @@ -503,6 +514,24 @@ public class MTEWormholeGenerator extends MTEEnhancedMultiBlockBase Long.MAX_VALUE ? Long.MAX_VALUE : ((long) mLink.mWormholeEnergy); if (getTransferable(i) > 0) { if (mLink.mWormholeEnergy <= 0) { - var singularityStack = singularity.copy(); + ItemStack singularityStack = singularity.copy(); if (!depleteInput(singularityStack)) { return new ResultMissingItem(singularityStack); @@ -567,9 +596,8 @@ public class MTEWormholeGenerator extends MTEEnhancedMultiBlockBase 0) { - var delta = mPendingEnergy / WH_ENERGY_AVG_WINDOW; - if (mPendingEnergy < mWormholeEnergy) { + double delta = mWormholeEnergy * (1.0 - DECAY_RATE); + // if the wormhole is shrinking and the next tick would take it below the pending energy, just // use the pending energy if (mWormholeEnergy - delta < mPendingEnergy) { @@ -782,6 +825,8 @@ public class MTEWormholeGenerator extends MTEEnhancedMultiBlockBase mWormholeEnergy) { + double delta = mPendingEnergy / WH_ENERGY_AVG_WINDOW; + // if the wormhole is growing and the next tick would take it above the pending energy, just use // the pending energy if (mWormholeEnergy + delta > mPendingEnergy) { @@ -797,9 +842,21 @@ public class MTEWormholeGenerator extends MTEEnhancedMultiBlockBase tryClean(WeakReference tileReference) { if (tileReference != null) { - var tile = tileReference.get(); + MTEWormholeGenerator tile = tileReference.get(); if (tile == null) { return null; } else { - var base = tile.getBaseMetaTileEntity(); + IGregTechTileEntity base = tile.getBaseMetaTileEntity(); if (base == null || base.isDead()) { return null; @@ -936,10 +993,12 @@ public class MTEWormholeGenerator extends MTEEnhancedMultiBlockBase 0 ? ((double)mLink.mReceiveAmounts[OPPOSITES[i]]) / ((double)mLink.mSendAmounts[i]) * 100 : 0 + avgSend, + avgSend / 20 / V[inputHatch.mTier], + avgSend > 0 ? (avgReceiveOpposite / (double)avgSend * 100) : 0, + SCAN_AVG_WINDOW )); } else if(outputHatch != null) { data.add(String.format( - "%s hatch (%,dA/t %s) received §b%,d§f EU (equivalent to %,dA/t) with an efficiency of %.3f%% in the last second", + "%s hatch (%,dA/t %s) received §b%,d§f EU (equivalent to %,dA/t) with an efficiency of %.3f%% in the last %d seconds", HATCH_NAMES[i], outputHatch.Amperes, VN[outputHatch.mTier], - mLink != null ? mLink.mReceiveAmounts[i] : 0, - mLink != null ? mLink.mReceiveAmounts[i] / 20 / V[outputHatch.mTier] : 0, - mLink != null && mLink.mSendAmounts[OPPOSITES[i]] > 0 ? ((double)mLink.mReceiveAmounts[i]) / ((double)mLink.mSendAmounts[OPPOSITES[i]]) * 100 : 0 + avgReceive, + avgReceive / 20 / V[outputHatch.mTier], + avgSendOpposite > 0 ? (avgReceive / (double)avgSendOpposite * 100) : 0, + SCAN_AVG_WINDOW )); } else { data.add(String.format("%s hatch is not present", HATCH_NAMES[i])); -- cgit