Skip to content

Commit c6a7ae3

Browse files
committed
Lock slot when speed != 0
1 parent b5c9eda commit c6a7ae3

1 file changed

Lines changed: 56 additions & 1 deletion

File tree

src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/part/RotorHolderPartMachine.java

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,25 @@
1111
import com.gregtechceu.gtceu.api.machine.feature.multiblock.*;
1212
import com.gregtechceu.gtceu.api.machine.multiblock.part.TieredPartMachine;
1313
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
14+
import com.gregtechceu.gtceu.api.mui.factory.PosGuiData;
15+
import com.gregtechceu.gtceu.api.mui.utils.Alignment;
16+
import com.gregtechceu.gtceu.api.mui.value.sync.BooleanSyncValue;
17+
import com.gregtechceu.gtceu.api.mui.value.sync.IntSyncValue;
18+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
19+
import com.gregtechceu.gtceu.api.mui.widget.ParentWidget;
20+
import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget;
21+
import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow;
22+
import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot;
23+
import com.gregtechceu.gtceu.api.mui.widgets.slot.ModularSlot;
24+
import com.gregtechceu.gtceu.api.mui.widgets.slot.SlotGroup;
25+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
26+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
1427
import com.gregtechceu.gtceu.common.data.GTDamageTypes;
1528
import com.gregtechceu.gtceu.common.data.GTMaterials;
29+
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
1630
import com.gregtechceu.gtceu.common.item.TurbineRotorBehaviour;
1731

32+
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
1833
import com.lowdragmc.lowdraglib.syncdata.ISubscription;
1934
import com.lowdragmc.lowdraglib.syncdata.annotation.DescSynced;
2035
import com.lowdragmc.lowdraglib.syncdata.annotation.Persisted;
@@ -167,7 +182,7 @@ private void updateRotorSpeed() {
167182
if (isFormed() && getControllers().first() instanceof IWorkableMultiController workable) {
168183
if (workable.getRecipeLogic().isWorking()) return;
169184
}
170-
if (!hasRotor()) {
185+
if (!hasRotor() || !isFormed()) {
171186
setRotorSpeed(0);
172187
} else if (getRotorSpeed() > 0) {
173188
setRotorSpeed(Math.max(0, getRotorSpeed() - SPEED_DECREMENT));
@@ -229,6 +244,46 @@ public InteractionResult onUse(BlockState state, Level level, BlockPos pos, Play
229244
//////////////////////////////////////
230245
// ********** GUI ***********//
231246
//////////////////////////////////////
247+
248+
// TODO MUI: Might need EIO widget? Not sure
249+
@Override
250+
public @NotNull ModularPanel buildUI(@NotNull PosGuiData data, @NotNull PanelSyncManager syncManager,
251+
@NotNull UISettings settings) {
252+
SlotGroup rotorSlotGroup = new SlotGroup("rotor", 1);
253+
254+
255+
256+
var slot = new ItemSlot()
257+
.slot(new ModularSlot(inventory, 0)
258+
.slotGroup(rotorSlotGroup))
259+
.background(GTGuiTextures.SLOT, GTGuiTextures.TURBINE_OVERLAY)
260+
.marginLeft(30)
261+
.marginRight(30)
262+
.verticalCenter();
263+
264+
var rotorSync = new IntSyncValue(this::getRotorSpeed, (speed) -> {});
265+
rotorSync.setChangeListener(() -> {
266+
boolean canEdit = rotorSync.getIntValue() == 0;
267+
slot.getSlot().accessibility(canEdit, canEdit);
268+
});
269+
270+
271+
syncManager.syncValue("rotor_speed", rotorSync);
272+
273+
return new ModularPanel(this.getDefinition().getName())
274+
.size(176, 100 + (18 * 4))
275+
.child(GTMuiWidgets.createTitleBar(this.getDefinition(), 176))
276+
.child(new ParentWidget<>()
277+
.widthRel(1)
278+
.height(20 + 18 * 4)
279+
.child(Flow.row()
280+
.crossAxisAlignment(Alignment.CrossAxis.CENTER)
281+
.align(Alignment.CENTER)
282+
.coverChildren()
283+
.child(slot)))
284+
.child(SlotGroupWidget.playerInventory(false).left(7).bottom(7));
285+
}
286+
232287
/*
233288
* @Override
234289
* public Widget createUIWidget() {

0 commit comments

Comments
 (0)