1010import com .gregtechceu .gtceu .api .gui .widget .IntInputWidget ;
1111import com .gregtechceu .gtceu .api .gui .widget .PhantomSlotWidget ;
1212import com .gregtechceu .gtceu .api .gui .widget .ToggleButtonWidget ;
13+ import com .gregtechceu .gtceu .api .machine .MachineCoverContainer ;
1314import com .gregtechceu .gtceu .api .transfer .item .CustomItemStackHandler ;
1415import com .gregtechceu .gtceu .common .cover .data .ControllerMode ;
1516
3435import net .minecraft .world .level .block .Block ;
3536
3637import lombok .Getter ;
38+ import lombok .experimental .Accessors ;
3739import org .jetbrains .annotations .Nullable ;
3840
3941import java .util .Arrays ;
4042import java .util .List ;
41- import java .util .Optional ;
4243import java .util .stream .Collectors ;
4344
4445import 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}
0 commit comments