11package com .gregtechceu .gtceu .common .item ;
22
3- import com .gregtechceu .gtceu .api .blockentity .MetaMachineBlockEntity ;
4- import com .gregtechceu .gtceu .api .gui .GuiTextures ;
5- import com .gregtechceu .gtceu .api .gui .widget .SlotWidget ;
63import com .gregtechceu .gtceu .api .item .component .IAddInformation ;
7- import com .gregtechceu .gtceu .api .item .component .IItemUIFactory ;
8- import com .gregtechceu .gtceu .api .machine .feature .IHasCircuitSlot ;
9- import com .gregtechceu .gtceu .api .machine .trait .NotifiableItemStackHandler ;
10- import com .gregtechceu .gtceu .api .transfer .item .CustomItemStackHandler ;
4+ import com .gregtechceu .gtceu .api .mui .base .IItemUIHolder ;
5+ import com .gregtechceu .gtceu .api .mui .factory .PlayerInventoryGuiData ;
6+ import com .gregtechceu .gtceu .api .mui .value .sync .PanelSyncManager ;
7+ import com .gregtechceu .gtceu .client .mui .screen .ModularPanel ;
8+ import com .gregtechceu .gtceu .client .mui .screen .UISettings ;
119import com .gregtechceu .gtceu .common .data .GTItems ;
12- import com .gregtechceu .gtceu .config . ConfigHolder ;
10+ import com .gregtechceu .gtceu .common . data . mui . GTMuiWidgets ;
1311
1412import com .lowdragmc .lowdraglib .gui .factory .HeldItemUIFactory ;
15- import com .lowdragmc .lowdraglib .gui .modular .ModularUI ;
16- import com .lowdragmc .lowdraglib .gui .texture .GuiTextureGroup ;
17- import com .lowdragmc .lowdraglib .gui .texture .ItemStackTexture ;
18- import com .lowdragmc .lowdraglib .gui .widget .ButtonWidget ;
19- import com .lowdragmc .lowdraglib .gui .widget .LabelWidget ;
2013
2114import net .minecraft .nbt .CompoundTag ;
2215import net .minecraft .network .chat .Component ;
2316import net .minecraft .util .Mth ;
24- import net .minecraft .world .InteractionResult ;
25- import net .minecraft .world .entity .player .Player ;
2617import net .minecraft .world .item .ItemStack ;
2718import net .minecraft .world .item .TooltipFlag ;
28- import net .minecraft .world .item .context .UseOnContext ;
2919import net .minecraft .world .level .Level ;
30- import net .minecraft .world .level .block .entity .BlockEntity ;
3120
3221import org .jetbrains .annotations .Nullable ;
3322
3423import java .util .List ;
3524
36- public class IntCircuitBehaviour implements IItemUIFactory , IAddInformation {
25+ public class IntCircuitBehaviour implements IAddInformation , IItemUIHolder {
3726
3827 public static final int CIRCUIT_MAX = 32 ;
3928
@@ -43,11 +32,6 @@ public static ItemStack stack(int configuration) {
4332 return stack ;
4433 }
4534
46- public static void setCircuitConfiguration (HeldItemUIFactory .HeldItemHolder holder , int configuration ) {
47- setCircuitConfiguration (holder .getHeld (), configuration );
48- holder .markAsDirty ();
49- }
50-
5135 public static void setCircuitConfiguration (ItemStack itemStack , int configuration ) {
5236 if (configuration < 0 || configuration > CIRCUIT_MAX )
5337 throw new IllegalArgumentException ("Given configuration number is out of range!" );
@@ -99,61 +83,7 @@ public void appendHoverText(ItemStack stack, @Nullable Level level, List<Compone
9983 }
10084
10185 @ Override
102- public ModularUI createUI (HeldItemUIFactory .HeldItemHolder holder , Player entityPlayer ) {
103- LabelWidget label = new LabelWidget (9 , 8 , "Programmed Circuit Configuration" );
104- label .setDropShadow (false );
105- label .setTextColor (0x404040 );
106- var modular = new ModularUI (184 , 132 , holder , entityPlayer )
107- .widget (label );
108- SlotWidget slotwidget = new SlotWidget (
109- new CustomItemStackHandler (stack (getCircuitConfiguration (holder .getHeld ()))),
110- 0 , 82 , 20 , false , false );
111- slotwidget .setBackground (GuiTextures .SLOT );
112- modular .widget (slotwidget );
113- int idx = 0 ;
114- for (int x = 0 ; x <= 2 ; x ++) {
115- for (int y = 0 ; y <= 8 ; y ++) {
116- int finalIdx = idx ;
117- modular .widget (new ButtonWidget (10 + (18 * y ), 48 + (18 * x ), 18 , 18 ,
118- new GuiTextureGroup (GuiTextures .SLOT , new ItemStackTexture (stack (finalIdx )).scale (16f / 18 )),
119- data -> {
120- setCircuitConfiguration (holder , finalIdx );
121- slotwidget .setHandlerSlot (new CustomItemStackHandler (stack (finalIdx )), 0 );
122- }));
123- idx ++;
124- }
125- }
126- for (int x = 0 ; x <= 5 ; x ++) {
127- int finalIdx = x + 27 ;
128- modular .widget (new ButtonWidget (10 + (18 * x ), 102 , 18 , 18 ,
129- new GuiTextureGroup (GuiTextures .SLOT , new ItemStackTexture (stack (finalIdx )).scale (16f / 18 )),
130- data -> {
131- setCircuitConfiguration (holder , finalIdx );
132- slotwidget .setHandlerSlot (new CustomItemStackHandler (stack (finalIdx )), 0 );
133- }));
134- }
135- modular .mainGroup .setBackground (GuiTextures .BACKGROUND );
136- return modular ;
137- }
138-
139- @ Override
140- public InteractionResult useOn (UseOnContext context ) {
141- var stack = context .getItemInHand ();
142- int circuitSetting = getCircuitConfiguration (stack );
143- BlockEntity entity = context .getLevel ().getBlockEntity (context .getClickedPos ());
144- if (entity instanceof MetaMachineBlockEntity machineEntity && context .isSecondaryUseActive ()) {
145- if (machineEntity .metaMachine instanceof IHasCircuitSlot circuitMachine &&
146- circuitMachine .getCircuitInventory ().getSlots () > 0 ) {
147- setCircuitConfig (circuitMachine .getCircuitInventory (), circuitSetting );
148- }
149- if (!ConfigHolder .INSTANCE .machines .ghostCircuit )
150- stack .shrink (1 );
151- return InteractionResult .SUCCESS ;
152- }
153- return IItemUIFactory .super .useOn (context );
154- }
155-
156- void setCircuitConfig (NotifiableItemStackHandler circuit , int value ) {
157- circuit .setStackInSlot (0 , IntCircuitBehaviour .stack (value ));
86+ public ModularPanel buildUI (PlayerInventoryGuiData <?> data , PanelSyncManager syncManager , UISettings settings ) {
87+ return GTMuiWidgets .createCircuitSlotPanel (data ::setUsedItemStack , data ::getUsedItemStack , syncManager );
15888 }
15989}
0 commit comments