77import gregtech .api .cover .CoverWithUI ;
88import gregtech .api .cover .CoverableView ;
99import gregtech .api .gui .GuiTextures ;
10- import gregtech .api .gui .ModularUI ;
11- import gregtech .api .gui .widgets .*;
1210import gregtech .api .metatileentity .IFastRenderMetaTileEntity ;
1311import gregtech .api .metatileentity .MetaTileEntity ;
1412import gregtech .api .metatileentity .interfaces .IGregTechTileEntity ;
1513import gregtech .api .metatileentity .multiblock .MultiblockAbility ;
1614import gregtech .api .metatileentity .multiblock .MultiblockControllerBase ;
15+ import gregtech .api .mui .GTGuiTextures ;
16+ import gregtech .api .mui .GTGuis ;
1717import gregtech .api .util .GTLog ;
18- import gregtech .api .util .Position ;
1918import gregtech .api .util .TextFormattingUtil ;
2019import gregtech .client .renderer .texture .Textures ;
2120import gregtech .client .utils .RenderUtil ;
2524import net .minecraft .client .Minecraft ;
2625import net .minecraft .client .renderer .GlStateManager ;
2726import net .minecraft .client .renderer .OpenGlHelper ;
27+ import net .minecraft .client .renderer .RenderHelper ;
2828import net .minecraft .entity .item .EntityItem ;
2929import net .minecraft .entity .player .EntityPlayer ;
3030import net .minecraft .entity .player .EntityPlayerMP ;
6060import codechicken .lib .vec .Cuboid6 ;
6161import codechicken .lib .vec .Matrix4 ;
6262import codechicken .lib .vec .Rotation ;
63+ import com .cleanroommc .modularui .api .drawable .IDrawable ;
64+ import com .cleanroommc .modularui .api .drawable .IKey ;
65+ import com .cleanroommc .modularui .api .widget .Interactable ;
66+ import com .cleanroommc .modularui .drawable .DynamicDrawable ;
67+ import com .cleanroommc .modularui .factory .SidedPosGuiData ;
68+ import com .cleanroommc .modularui .screen .ModularPanel ;
69+ import com .cleanroommc .modularui .utils .Alignment ;
70+ import com .cleanroommc .modularui .utils .Color ;
71+ import com .cleanroommc .modularui .value .sync .EnumSyncValue ;
72+ import com .cleanroommc .modularui .value .sync .IntSyncValue ;
73+ import com .cleanroommc .modularui .value .sync .PanelSyncManager ;
74+ import com .cleanroommc .modularui .widgets .ButtonWidget ;
75+ import com .cleanroommc .modularui .widgets .layout .Flow ;
6376import org .apache .commons .lang3 .ArrayUtils ;
6477import org .jetbrains .annotations .NotNull ;
6578import org .jetbrains .annotations .Nullable ;
@@ -86,11 +99,27 @@ public enum MODE {
8699 MACHINE ,
87100 PROXY ;
88101
89- public static MODE [] VALUES ;
102+ public static final MODE [] VALUES ;
90103
91104 static {
92105 VALUES = MODE .values ();
93106 }
107+
108+ public IKey getLangKey (boolean selected ) {
109+ return IKey .lang (
110+ "metaitem.cover.digital.mode." + name ().toLowerCase () + "." + (selected ? "enabled" : "disabled" ));
111+ }
112+
113+ public IDrawable getOverlay (boolean selected ) {
114+ final int i = selected ? 1 : 0 ;
115+ return switch (this ) {
116+ case FLUID -> GTGuiTextures .BUTTON_FLUID [i ];
117+ case ITEM -> GTGuiTextures .BUTTON_ITEM [i ];
118+ case ENERGY -> GTGuiTextures .BUTTON_ENERGY [i ];
119+ case MACHINE -> GTGuiTextures .BUTTON_MACHINE [i ];
120+ case PROXY -> GTGuiTextures .BUTTON_INTERFACE [i ];
121+ };
122+ }
94123 }
95124
96125 // run-time data
@@ -450,55 +479,94 @@ public boolean modeLeftClick(EntityPlayer entityPlayer, MODE mode, int slot) {
450479 return false ;
451480 }
452481
453- // todo port this to mui2 unless that's already done in some other pr
482+ @ Override
483+ public boolean usesMui2 () {
484+ return true ;
485+ }
454486
455487 @ Override
456- public ModularUI createUI (EntityPlayer player ) {
457- WidgetGroup primaryGroup = new WidgetGroup (new Position (0 , 10 ));
458- primaryGroup .addWidget (new LabelWidget (10 , 5 , "metaitem.cover.digital.name" , 0 ));
459- ToggleButtonWidget [] buttons = new ToggleButtonWidget [5 ];
460- buttons [0 ] = new ToggleButtonWidget (40 , 20 , 20 , 20 , GuiTextures .BUTTON_FLUID , () -> this .mode == MODE .FLUID ,
461- (pressed ) -> {
462- if (pressed ) setMode (MODE .FLUID );
463- }).setTooltipText ("metaitem.cover.digital.mode.fluid" );
464- buttons [1 ] = new ToggleButtonWidget (60 , 20 , 20 , 20 , GuiTextures .BUTTON_ITEM , () -> this .mode == MODE .ITEM ,
465- (pressed ) -> {
466- if (pressed ) setMode (MODE .ITEM );
467- }).setTooltipText ("metaitem.cover.digital.mode.item" );
468- buttons [2 ] = new ToggleButtonWidget (80 , 20 , 20 , 20 , GuiTextures .BUTTON_ENERGY , () -> this .mode == MODE .ENERGY ,
469- (pressed ) -> {
470- if (pressed ) setMode (MODE .ENERGY );
471- }).setTooltipText ("metaitem.cover.digital.mode.energy" );
472- buttons [3 ] = new ToggleButtonWidget (100 , 20 , 20 , 20 , GuiTextures .BUTTON_MACHINE ,
473- () -> this .mode == MODE .MACHINE , (pressed ) -> {
474- if (pressed ) setMode (MODE .MACHINE );
475- }).setTooltipText ("metaitem.cover.digital.mode.machine" );
476- buttons [4 ] = new ToggleButtonWidget (140 , 20 , 20 , 20 , GuiTextures .BUTTON_INTERFACE ,
477- () -> this .mode == MODE .PROXY , (pressed ) -> {
478- if (pressed ) setMode (MODE .PROXY );
479- }).setTooltipText ("metaitem.cover.digital.mode.proxy" );
480- primaryGroup .addWidget (new LabelWidget (10 , 25 , "metaitem.cover.digital.title.mode" , 0 ));
481- primaryGroup .addWidget (buttons [0 ]);
482- primaryGroup .addWidget (buttons [1 ]);
483- primaryGroup .addWidget (buttons [2 ]);
484- primaryGroup .addWidget (buttons [3 ]);
485- primaryGroup .addWidget (buttons [4 ]);
486-
487- primaryGroup .addWidget (new LabelWidget (10 , 50 , "monitor.gui.title.slot" , 0 ));
488- primaryGroup .addWidget (
489- new ClickButtonWidget (40 , 45 , 20 , 20 , "-1" , (data ) -> setMode (slot - (data .isShiftClick ? 10 : 1 ))));
490- primaryGroup .addWidget (
491- new ClickButtonWidget (140 , 45 , 20 , 20 , "+1" , (data ) -> setMode (slot + (data .isShiftClick ? 10 : 1 ))));
492- primaryGroup .addWidget (new ImageWidget (60 , 45 , 80 , 20 , GuiTextures .DISPLAY ));
493- primaryGroup .addWidget (new SimpleTextWidget (100 , 55 , "" , 16777215 , () -> Integer .toString (this .slot )));
494-
495- primaryGroup .addWidget (new LabelWidget (10 , 75 , "metaitem.cover.digital.title.spin" , 0 ));
496- primaryGroup .addWidget (new ClickButtonWidget (40 , 70 , 20 , 20 , "R" , (data ) -> setMode (this .spin .rotateY ())));
497- primaryGroup .addWidget (new ImageWidget (60 , 70 , 80 , 20 , GuiTextures .DISPLAY ));
498- primaryGroup .addWidget (new SimpleTextWidget (100 , 80 , "" , 16777215 , () -> this .spin .toString ()));
499- ModularUI .Builder builder = ModularUI .builder (GuiTextures .BACKGROUND , 176 , 202 ).widget (primaryGroup )
500- .bindPlayerInventory (player .inventory , GuiTextures .SLOT , 8 , 120 );
501- return builder .build (this , player );
488+ public ModularPanel buildUI (SidedPosGuiData guiData , PanelSyncManager guiSyncManager ) {
489+ Flow row = Flow .row ()
490+ .pos (10 , 20 )
491+ .coverChildren ()
492+ .child (IKey .lang ("metaitem.cover.digital.title.mode" ).asWidget ()
493+ .size (30 , 20 ));
494+
495+ IntSyncValue slotValue = new IntSyncValue (() -> this .slot , this ::setMode );
496+ EnumSyncValue <MODE > modeValue = new EnumSyncValue <>(MODE .class , this ::getMode , this ::setMode );
497+ EnumSyncValue <EnumFacing > spinValue = new EnumSyncValue <>(EnumFacing .class , () -> this .spin , this ::setMode );
498+ guiSyncManager .syncValue ("slot" , slotValue );
499+ guiSyncManager .syncValue ("mode" , modeValue );
500+ guiSyncManager .syncValue ("spin" , spinValue );
501+
502+ for (MODE mode : MODE .VALUES ) {
503+ row .child (new ButtonWidget <>()
504+ .size (20 )
505+ .onMousePressed (m -> {
506+ modeValue .setValue (mode );
507+ return true ;
508+ })
509+ .tooltipAutoUpdate (true )
510+ .tooltipBuilder (tooltip -> tooltip .add (mode .getLangKey (getMode () == mode )))
511+ .disableHoverBackground ()
512+ .background (new DynamicDrawable (() -> mode .getOverlay (getMode () == mode ))));
513+ }
514+
515+ return GTGuis .createPanel (this , 176 , 202 )
516+ .child (CoverWithUI .createTitleRow (getPickItem ())
517+ .pos (5 , 5 ))
518+ .child (row )
519+ .child (Flow .row ()
520+ .pos (10 , 45 )
521+ .coverChildren ()
522+ .child (IKey .lang ("monitor.gui.title.slot" ).asWidget ()
523+ .size (30 , 20 ))
524+ .child (new ButtonWidget <>()
525+ .size (20 )
526+ .overlay (IKey .str ("-" )
527+ .color (Color .WHITE .main ))
528+ .onMousePressed (m -> {
529+ int s = slotValue .getIntValue ();
530+ s -= Interactable .hasShiftDown () ? 10 : 1 ;
531+ slotValue .setIntValue (s );
532+ return true ;
533+ }))
534+ .child (IKey .dynamic (() -> Integer .toString (this .slot )).asWidget ()
535+ .size (80 , 20 )
536+ .paddingLeft (4 )
537+ .color (0xffffff )
538+ .alignment (Alignment .CenterLeft )
539+ .background (GTGuiTextures .DISPLAY ))
540+ .child (new ButtonWidget <>()
541+ .size (20 )
542+ .overlay (IKey .str ("+" )
543+ .color (Color .WHITE .main ))
544+ .onMousePressed (m -> {
545+ int s = slotValue .getIntValue ();
546+ s += Interactable .hasShiftDown () ? 10 : 1 ;
547+ slotValue .setIntValue (s );
548+ return true ;
549+ })))
550+ .child (Flow .row ()
551+ .pos (10 , 75 )
552+ .coverChildren ()
553+ .child (IKey .lang ("metaitem.cover.digital.title.spin" ).asWidget ()
554+ .size (30 , 20 ))
555+ .child (new ButtonWidget <>()
556+ .size (20 )
557+ .overlay (IKey .str ("R" )
558+ .color (Color .WHITE .main ))
559+ .onMousePressed (m -> {
560+ spinValue .setValue (spinValue .getValue ().rotateY ());
561+ return true ;
562+ }))
563+ .child (IKey .dynamic (() -> spinValue .getValue ().toString ()).asWidget ()
564+ .alignment (Alignment .CenterLeft )
565+ .paddingLeft (4 )
566+ .size (80 , 20 )
567+ .color (0xffffff )
568+ .background (GTGuiTextures .DISPLAY )))
569+ .bindPlayerInventory ();
502570 }
503571
504572 private void syncAllInfo () {
@@ -916,14 +984,14 @@ public <T> T getCapability(@NotNull Capability<T> capability, T defaultValue) {
916984 @ Override
917985 public void renderCover (CCRenderState ccRenderState , Matrix4 translation , IVertexOperation [] ops , Cuboid6 cuboid6 ,
918986 BlockRenderLayer blockRenderLayer ) {
919- codechicken . lib . vec . Rotation rotation = new codechicken . lib . vec . Rotation (0 , 0 , 1 , 0 );
987+ Rotation rotation = new Rotation (0 , 0 , 1 , 0 );
920988 if (this .getAttachedSide ().getAxis ().isVertical ()) {
921989 if (this .spin == EnumFacing .WEST ) {
922990 translation .translate (0 , 0 , 1 );
923- rotation = new codechicken . lib . vec . Rotation (Math .PI / 2 , 0 , 1 , 0 );
991+ rotation = new Rotation (Math .PI / 2 , 0 , 1 , 0 );
924992 } else if (this .spin == EnumFacing .EAST ) {
925993 translation .translate (1 , 0 , 0 );
926- rotation = new codechicken . lib . vec . Rotation (-Math .PI / 2 , 0 , 1 , 0 );
994+ rotation = new Rotation (-Math .PI / 2 , 0 , 1 , 0 );
927995 } else if (this .spin == EnumFacing .SOUTH ) {
928996 translation .translate (1 , 0 , 1 );
929997 rotation = new Rotation (Math .PI , 0 , 1 , 0 );
@@ -963,7 +1031,7 @@ public void renderMetaTileEntityFast(CCRenderState renderState, Matrix4 translat
9631031 public void renderMetaTileEntity (double x , double y , double z , float partialTicks ) {
9641032 GlStateManager .pushMatrix ();
9651033 /* hack the lightmap */
966- net . minecraft . client . renderer . RenderHelper .disableStandardItemLighting ();
1034+ RenderHelper .disableStandardItemLighting ();
9671035 float lastBrightnessX = OpenGlHelper .lastBrightnessX ;
9681036 float lastBrightnessY = OpenGlHelper .lastBrightnessY ;
9691037 OpenGlHelper .setLightmapTextureCoords (OpenGlHelper .lightmapTexUnit , 240.0F , 240.0F );
@@ -978,7 +1046,7 @@ public void renderMetaTileEntity(double x, double y, double z, float partialTick
9781046
9791047 /* restore the lightmap */
9801048 OpenGlHelper .setLightmapTextureCoords (OpenGlHelper .lightmapTexUnit , lastBrightnessX , lastBrightnessY );
981- net . minecraft . client . renderer . RenderHelper .enableStandardItemLighting ();
1049+ RenderHelper .enableStandardItemLighting ();
9821050 GlStateManager .popMatrix ();
9831051 }
9841052
0 commit comments