aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity
diff options
context:
space:
mode:
authorHoleFish <48403212+HoleFish@users.noreply.github.com>2024-03-11 18:06:51 +0800
committerGitHub <noreply@github.com>2024-03-11 11:06:51 +0100
commitad49276a25535ff110a3e37934f72dbea8eec258 (patch)
tree57620a84a6928bc9d01516835cf0a6ec1f30d915 /src/main/java/gregtech/api/metatileentity
parent34c34137ba1c888feff65b1695992d609f33a7f1 (diff)
downloadGT5-Unofficial-ad49276a25535ff110a3e37934f72dbea8eec258.tar.gz
GT5-Unofficial-ad49276a25535ff110a3e37934f72dbea8eec258.tar.bz2
GT5-Unofficial-ad49276a25535ff110a3e37934f72dbea8eec258.zip
Add messages about the reasons for machine shutdown during processing (#2522)
* ShutDownReason setup * implement * fix machine not turn on
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity')
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java16
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java3
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java10
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java77
4 files changed, 89 insertions, 17 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index e387d3cd5a..61728d9267 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -12,6 +12,7 @@ import java.util.Collections;
import java.util.List;
import java.util.UUID;
+import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraft.block.Block;
@@ -36,6 +37,8 @@ import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
+import org.jetbrains.annotations.NotNull;
+
import com.gtnewhorizon.structurelib.alignment.IAlignment;
import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider;
import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable;
@@ -78,6 +81,8 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
+import gregtech.api.util.shutdown.ShutDownReason;
+import gregtech.api.util.shutdown.ShutDownReasonRegistry;
import gregtech.common.GT_Pollution;
import gregtech.common.covers.CoverInfo;
import ic2.api.Direction;
@@ -101,6 +106,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
private boolean hasTimeStatisticsStarted;
public long mLastSoundTick = 0;
public boolean mWasShutdown = false;
+ public @Nonnull ShutDownReason lastShutDownReason = ShutDownReasonRegistry.NONE;
protected MetaTileEntity mMetaTileEntity;
protected long mStoredEnergy = 0, mStoredSteam = 0;
protected int mAverageEUInputIndex = 0, mAverageEUOutputIndex = 0;
@@ -2469,6 +2475,16 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
}
@Override
+ public void setShutDownReason(@NotNull ShutDownReason reason) {
+ lastShutDownReason = reason;
+ }
+
+ @Override
+ public @NotNull ShutDownReason getLastShutDownReason() {
+ return lastShutDownReason;
+ }
+
+ @Override
public IAlignment getAlignment() {
return getMetaTileEntity() instanceof IAlignmentProvider
? ((IAlignmentProvider) getMetaTileEntity()).getAlignment()
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java
index cc585d1999..c7f0e6cdd5 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java
@@ -22,6 +22,7 @@ import cpw.mods.fml.common.network.NetworkRegistry;
import gregtech.api.GregTech_API;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
+import gregtech.api.util.shutdown.ShutDownReasonRegistry;
/**
* Enhanced multiblock base class, featuring following improvement over {@link GT_MetaTileEntity_MultiBlockBase}
@@ -53,7 +54,7 @@ public abstract class GT_MetaTileEntity_EnhancedMultiBlockBase<T extends GT_Meta
@Override
public void setExtendedFacing(ExtendedFacing newExtendedFacing) {
if (mExtendedFacing != newExtendedFacing) {
- if (mMachine) stopMachine();
+ if (mMachine) stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE);
mExtendedFacing = newExtendedFacing;
final IGregTechTileEntity base = getBaseMetaTileEntity();
mMachine = false;
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 6f351fb5ab..b7f34f264c 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
@@ -16,12 +16,16 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
+import org.jetbrains.annotations.NotNull;
+
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.logic.ProcessingLogic;
import gregtech.api.recipe.check.CheckRecipeResult;
import gregtech.api.util.GT_ExoticEnergyInputHelper;
import gregtech.api.util.GT_OverclockCalculator;
import gregtech.api.util.GT_Utility;
+import gregtech.api.util.shutdown.ShutDownReason;
+import gregtech.api.util.shutdown.ShutDownReasonRegistry;
/**
* Multiblock base class that allows machine to use power over int.
@@ -72,7 +76,7 @@ public abstract class GT_MetaTileEntity_ExtendedPowerMultiBlockBase<T extends GT
}
if (this.lEUt < 0) {
if (!drainEnergyInput(getActualEnergyUsage())) {
- criticalStopMachine();
+ stopMachine(ShutDownReasonRegistry.POWER_LOSS);
return false;
}
}
@@ -80,9 +84,9 @@ public abstract class GT_MetaTileEntity_ExtendedPowerMultiBlockBase<T extends GT
}
@Override
- public void stopMachine() {
+ public void stopMachine(@NotNull ShutDownReason reason) {
this.lEUt = 0;
- super.stopMachine();
+ super.stopMachine(reason);
}
@Override
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 19fee8f153..2bbd99a36a 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
@@ -88,9 +88,12 @@ import gregtech.api.util.GT_Utility;
import gregtech.api.util.GT_Waila;
import gregtech.api.util.OutputHatchWrapper;
import gregtech.api.util.VoidProtectionHelper;
+import gregtech.api.util.shutdown.ShutDownReason;
+import gregtech.api.util.shutdown.ShutDownReasonRegistry;
import gregtech.client.GT_SoundLoop;
import gregtech.common.GT_Pollution;
import gregtech.common.gui.modularui.widget.CheckRecipeResultSyncer;
+import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer;
import gregtech.common.items.GT_MetaGenerated_Tool_01;
import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME;
import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME;
@@ -402,11 +405,11 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
checkMaintenance();
if (getRepairStatus() > 0) {
runMachine(aBaseMetaTileEntity, aTick);
- } else {
- stopMachine();
+ } else if (aBaseMetaTileEntity.isAllowedToWork()) {
+ stopMachine(ShutDownReasonRegistry.NO_REPAIR);
}
- } else {
- stopMachine();
+ } else if (aBaseMetaTileEntity.isAllowedToWork()) {
+ stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE);
}
}
aBaseMetaTileEntity.setErrorDisplayID(
@@ -520,7 +523,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
if (onRunningTick(mInventory[1])) {
markDirty();
if (!polluteEnvironment(getPollutionPerTick(mInventory[1]))) {
- stopMachine();
+ stopMachine(ShutDownReasonRegistry.POLLUTION_FAIL);
}
if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) {
if (mOutputItems != null) {
@@ -668,7 +671,7 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
}
if (mEUt < 0) {
if (!drainEnergyInput(getActualEnergyUsage())) {
- criticalStopMachine();
+ stopMachine(ShutDownReasonRegistry.POWER_LOSS);
return false;
}
}
@@ -896,7 +899,26 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
*/
public abstract boolean explodesOnComponentBreak(ItemStack aStack);
+ /**
+ * @deprecated Use {@link #stopMachine(ShutDownReason)}
+ */
+ @Deprecated
public void stopMachine() {
+ stopMachine(ShutDownReasonRegistry.NONE);
+ }
+
+ /**
+ * @deprecated Use {@link #stopMachine(ShutDownReason)}
+ */
+ @Deprecated
+ public void criticalStopMachine() {
+ stopMachine(ShutDownReasonRegistry.CRITICAL_NONE);
+ }
+
+ public void stopMachine(@Nonnull ShutDownReason reason) {
+ if (!ShutDownReasonRegistry.isRegistered(reason.getID())) {
+ throw new RuntimeException(String.format("Reason %s is not registered for registry", reason.getID()));
+ }
mOutputItems = null;
mOutputFluids = null;
mEUt = 0;
@@ -905,12 +927,11 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
mMaxProgresstime = 0;
mEfficiencyIncrease = 0;
getBaseMetaTileEntity().disableWorking();
- }
-
- public void criticalStopMachine() {
- stopMachine();
- sendSound(INTERRUPT_SOUND_INDEX);
+ getBaseMetaTileEntity().setShutDownReason(reason);
getBaseMetaTileEntity().setShutdownStatus(true);
+ if (reason.wasCritical()) {
+ sendSound(INTERRUPT_SOUND_INDEX);
+ }
}
public int getRepairStatus() {
@@ -931,8 +952,12 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
}
public boolean doRandomMaintenanceDamage() {
- if (!isCorrectMachinePart(mInventory[1]) || getRepairStatus() == 0) {
- stopMachine();
+ if (!isCorrectMachinePart(mInventory[1])) {
+ stopMachine(ShutDownReasonRegistry.NO_MACHINE_PART);
+ return false;
+ }
+ if (getRepairStatus() == 0) {
+ stopMachine(ShutDownReasonRegistry.NO_REPAIR);
return false;
}
if (mRuntime++ > 1000) {
@@ -2184,6 +2209,10 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
return true;
}
+ protected boolean shouldDisplayShutDownReason() {
+ return true;
+ }
+
protected String generateCurrentRecipeInfoString() {
StringBuilder ret = new StringBuilder(EnumChatFormatting.WHITE + "Progress: ")
.append(String.format("%,.2f", (double) mProgresstime / 20))
@@ -2324,6 +2353,28 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
new TextWidget(GT_Utility.trans("142", "Running perfectly.")).setDefaultColor(COLOR_TEXT_WHITE.get())
.setEnabled(
widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && getBaseMetaTileEntity().isActive()));
+
+ screenElements.widget(
+ TextWidget.dynamicString(
+ () -> getBaseMetaTileEntity().getLastShutDownReason()
+ .getDisplayString())
+ .setSynced(false)
+ .setTextAlignment(Alignment.CenterLeft)
+ .setEnabled(
+ widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive()
+ && GT_Utility.isStringValid(
+ getBaseMetaTileEntity().getLastShutDownReason()
+ .getDisplayString())
+ && getBaseMetaTileEntity().wasShutdown()))
+ .widget(
+ new ShutDownReasonSyncer(
+ () -> getBaseMetaTileEntity().getLastShutDownReason(),
+ reason -> getBaseMetaTileEntity().setShutDownReason(reason)))
+ .widget(
+ new FakeSyncWidget.BooleanSyncer(
+ () -> getBaseMetaTileEntity().wasShutdown(),
+ wasShutDown -> getBaseMetaTileEntity().setShutdownStatus(wasShutDown)));
+
screenElements.widget(
TextWidget.dynamicString(() -> checkRecipeResult.getDisplayString())
.setSynced(false)