Skip to content

Commit 616847d

Browse files
authored
Powerfailing bypass (#3767)
1 parent 421cd0f commit 616847d

5 files changed

Lines changed: 58 additions & 21 deletions

File tree

src/generated/resources/assets/gtceu/lang/en_ud.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2048,6 +2048,7 @@
20482048
"cover.machine_controller.mode.null": "buıɥʇoN ןoɹʇuoƆ",
20492049
"cover.machine_controller.normal": "ןɐɯɹoN",
20502050
"cover.machine_controller.redstone": "%d :ɥʇbuǝɹʇS ǝuoʇspǝᴚ uıW",
2051+
"cover.machine_controller.suspend_powerfail": ":buıןıɐℲ ɹǝʍoԀ ʇuǝʌǝɹԀ",
20512052
"cover.machine_controller.title": "sbuıʇʇǝS ɹǝןןoɹʇuoƆ ǝuıɥɔɐW",
20522053
"cover.pump.fluid_filter.title": "ɹǝʇןıℲ pınןℲ",
20532054
"cover.pump.mode.export": "ʇɹodxƎ :ǝpoW",
@@ -5673,6 +5674,7 @@
56735674
"recipe.capability.fluid.name": "pınןℲ",
56745675
"recipe.capability.item.name": "ɯǝʇI",
56755676
"recipe.condition.adjacent_block.tooltip": "punoɹɐ sʞɔoןᗺ",
5677+
"recipe.condition.adjacent_fluid.tooltip": "punoɹɐ sʞɔoןq pınןℲ",
56765678
"recipe.condition.biome.tooltip": "%s :ǝɯoıᗺ",
56775679
"recipe.condition.daytime.day.tooltip": "ʞɹoʍ oʇ ǝɯıʇ ʎɐp sǝɹınbǝᴚ",
56785680
"recipe.condition.daytime.night.tooltip": "ʞɹoʍ oʇ ǝɯıʇ ʇɥbıu sǝɹınbǝᴚ",
@@ -5685,7 +5687,6 @@
56855687
"recipe.condition.quest.completed.tooltip": "pǝʇǝןdɯoɔ %s sǝɹınbǝᴚ",
56865688
"recipe.condition.quest.not_completed.tooltip": "pǝʇǝןdɯoɔ ʇou %s sǝɹınbǝᴚ",
56875689
"recipe.condition.rain.tooltip": "%d :ןǝʌǝꞀ uıɐᴚ",
5688-
"recipe.condition.adjacent_fluid.tooltip": "punoɹɐ sʞɔoןq pınןℲ",
56895690
"recipe.condition.steam_vent.tooltip": "ʇuǝʌ ɯɐǝʇs uɐǝןƆ",
56905691
"recipe.condition.thunder.tooltip": "%d :ןǝʌǝꞀ ɹǝpunɥ⟘",
56915692
"tagprefix.andesite": "ǝɹO %s ǝʇısǝpuⱯ",

src/generated/resources/assets/gtceu/lang/en_us.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2048,6 +2048,7 @@
20482048
"cover.machine_controller.mode.null": "Control Nothing",
20492049
"cover.machine_controller.normal": "Normal",
20502050
"cover.machine_controller.redstone": "Min Redstone Strength: %d",
2051+
"cover.machine_controller.suspend_powerfail": "Prevent Power Failing:",
20512052
"cover.machine_controller.title": "Machine Controller Settings",
20522053
"cover.pump.fluid_filter.title": "Fluid Filter",
20532054
"cover.pump.mode.export": "Mode: Export",
@@ -5673,6 +5674,7 @@
56735674
"recipe.capability.fluid.name": "Fluid",
56745675
"recipe.capability.item.name": "Item",
56755676
"recipe.condition.adjacent_block.tooltip": "Blocks around",
5677+
"recipe.condition.adjacent_fluid.tooltip": "Fluid blocks around",
56765678
"recipe.condition.biome.tooltip": "Biome: %s",
56775679
"recipe.condition.daytime.day.tooltip": "Requires day time to work",
56785680
"recipe.condition.daytime.night.tooltip": "Requires night time to work",
@@ -5685,7 +5687,6 @@
56855687
"recipe.condition.quest.completed.tooltip": "Requires %s completed",
56865688
"recipe.condition.quest.not_completed.tooltip": "Requires %s not completed",
56875689
"recipe.condition.rain.tooltip": "Rain Level: %d",
5688-
"recipe.condition.adjacent_fluid.tooltip": "Fluid blocks around",
56895690
"recipe.condition.steam_vent.tooltip": "Clean steam vent",
56905691
"recipe.condition.thunder.tooltip": "Thunder Level: %d",
56915692
"tagprefix.andesite": "Andesite %s Ore",

src/main/java/com/gregtechceu/gtceu/api/machine/trait/RecipeLogic.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,15 @@
1010
import com.gregtechceu.gtceu.api.machine.MetaMachine;
1111
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
1212
import com.gregtechceu.gtceu.api.machine.feature.IRecipeLogicMachine;
13+
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IMultiController;
1314
import com.gregtechceu.gtceu.api.machine.property.GTMachineModelProperties;
1415
import com.gregtechceu.gtceu.api.recipe.ActionResult;
1516
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
1617
import com.gregtechceu.gtceu.api.recipe.RecipeHelper;
1718
import com.gregtechceu.gtceu.api.registry.GTRegistries;
1819
import com.gregtechceu.gtceu.api.sound.AutoReleasedSound;
20+
import com.gregtechceu.gtceu.common.cover.MachineControllerCover;
21+
import com.gregtechceu.gtceu.utils.GTMath;
1922

2023
import com.lowdragmc.lowdraglib.gui.texture.IGuiTexture;
2124
import com.lowdragmc.lowdraglib.syncdata.IEnhancedManaged;
@@ -273,9 +276,25 @@ public void handleRecipeWorking() {
273276
// Machine isn't getting enough power, suspend after 5 attempts.
274277
if (handleTick.io() == IO.IN && handleTick.capability() == EURecipeCapability.CAP) {
275278
runAttempt++;
276-
if (runAttempt > 5) {
277-
runAttempt = 0;
278-
setStatus(Status.SUSPEND);
279+
runAttempt = (int) GTMath.clamp(runAttempt, 0, 5);
280+
if (runAttempt == 5) {
281+
boolean preventPowerFail = false;
282+
if (machine.self() instanceof IMultiController) {
283+
var covers = machine.self().getCoverContainer().getCovers();
284+
for (var cover : covers) {
285+
if (cover instanceof MachineControllerCover mcc) {
286+
if (mcc.preventPowerFail()) {
287+
preventPowerFail = true;
288+
break;
289+
}
290+
}
291+
}
292+
}
293+
294+
if (machine.self() instanceof IMultiController && !preventPowerFail) {
295+
runAttempt = 0;
296+
setStatus(Status.SUSPEND);
297+
}
279298
}
280299
runDelay = runAttempt * 60;
281300
}

src/main/java/com/gregtechceu/gtceu/common/cover/MachineControllerCover.java

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.gregtechceu.gtceu.api.gui.widget.IntInputWidget;
1111
import com.gregtechceu.gtceu.api.gui.widget.PhantomSlotWidget;
1212
import com.gregtechceu.gtceu.api.gui.widget.ToggleButtonWidget;
13+
import com.gregtechceu.gtceu.api.machine.MachineCoverContainer;
1314
import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler;
1415
import com.gregtechceu.gtceu.common.cover.data.ControllerMode;
1516

@@ -34,11 +35,11 @@
3435
import net.minecraft.world.level.block.Block;
3536

3637
import lombok.Getter;
38+
import lombok.experimental.Accessors;
3739
import org.jetbrains.annotations.Nullable;
3840

3941
import java.util.Arrays;
4042
import java.util.List;
41-
import java.util.Optional;
4243
import java.util.stream.Collectors;
4344

4445
import javax.annotation.ParametersAreNonnullByDefault;
@@ -71,6 +72,11 @@ public ManagedFieldHolder getFieldHolder() {
7172
@Nullable
7273
private ControllerMode controllerMode = ControllerMode.MACHINE;
7374

75+
@Getter
76+
@Accessors(fluent = true)
77+
@Persisted
78+
private boolean preventPowerFail = false;
79+
7480
public MachineControllerCover(CoverDefinition definition, ICoverable coverHolder, Direction attachedSide) {
7581
super(definition, coverHolder, attachedSide);
7682
}
@@ -203,7 +209,7 @@ public Widget createUIWidget() {
203209
if (controllerMode != null && getControllable(controllerMode.side) == null) {
204210
setControllerMode(null);
205211
}
206-
WidgetGroup group = new WidgetGroup(0, 0, 176, 75);
212+
WidgetGroup group = new WidgetGroup(0, 0, 176, 95);
207213

208214
group.addWidget(new LabelWidget(10, 5, "cover.machine_controller.title"));
209215
group.addWidget(new IntInputWidget(10, 20, 131, 20,
@@ -221,6 +227,12 @@ public Widget createUIWidget() {
221227
.isMultiLang()
222228
.setTooltipText("cover.machine_controller.invert"));
223229

230+
group.addWidget(new LabelWidget(10, 72, "cover.machine_controller.suspend_powerfail"));
231+
group.addWidget(new ToggleButtonWidget(147, 68, 18, 18, GuiTextures.BUTTON_POWER,
232+
this::preventPowerFail, (data) -> {
233+
preventPowerFail = data;
234+
}));
235+
224236
sideCoverSlot = new CustomItemStackHandler(1);
225237
group.addWidget(new PhantomSlotWidget(sideCoverSlot, 0, 147, 46) {
226238

@@ -267,19 +279,22 @@ private void updateCoverSlot() {
267279
return;
268280
}
269281

270-
Optional.ofNullable(controllerMode)
271-
.map(mode -> mode.side)
272-
.map(coverHolder::getCoverAtSide)
273-
.map(CoverBehavior::getAttachItem)
274-
.map(ItemStack::copy)
275-
.ifPresentOrElse(
276-
item -> {
277-
sideCoverSlot.setStackInSlot(0, item);
278-
sideCoverSlot.onContentsChanged(0);
279-
},
280-
() -> {
281-
sideCoverSlot.setStackInSlot(0, ItemStack.EMPTY);
282-
sideCoverSlot.onContentsChanged(0);
283-
});
282+
if (controllerMode == null) {
283+
sideCoverSlot.setStackInSlot(0, ItemStack.EMPTY);
284+
sideCoverSlot.onContentsChanged(0);
285+
} else {
286+
var side = controllerMode.side;
287+
if (side == null && coverHolder instanceof MachineCoverContainer coverContainer) {
288+
sideCoverSlot.setStackInSlot(0, coverContainer.getMachine().getDefinition().asStack());
289+
} else {
290+
var cover = coverHolder.getCoverAtSide(side);
291+
if (cover != null) {
292+
sideCoverSlot.setStackInSlot(0, cover.getAttachItem().copy());
293+
} else {
294+
sideCoverSlot.setStackInSlot(0, ItemStack.EMPTY);
295+
}
296+
}
297+
sideCoverSlot.onContentsChanged(0);
298+
}
284299
}
285300
}

src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,7 @@ public static void init(RegistrateLangProvider provider) {
459459
multilineLang(provider, "cover.machine_controller.invert.disabled",
460460
"§eNormal§r - in this mode, the cover will require a signal weaker than the set redstone level to run");
461461
provider.add("cover.machine_controller.redstone", "Min Redstone Strength: %d");
462+
provider.add("cover.machine_controller.suspend_powerfail", "Prevent Power Failing:");
462463
provider.add("cover.machine_controller.mode.machine", "Control Machine");
463464
provider.add("cover.machine_controller.mode.cover_up", "Control Cover (Top)");
464465
provider.add("cover.machine_controller.mode.cover_down", "Control Cover (Bottom)");

0 commit comments

Comments
 (0)