1010import net .minecraft .client .gui .screen .*;
1111import net .minecraft .client .gui .screen .narration .*;
1212import net .minecraft .client .gui .widget .*;
13+ import net .minecraft .registry .entry .*;
1314import net .minecraft .text .*;
1415import net .minecraft .util .*;
1516import net .minecraft .util .math .*;
@@ -26,7 +27,7 @@ public class ColorSelectionWidget extends ClickableWidget {
2627 protected final ColorPickerBlockEntity colorPicker ;
2728
2829 @ Nullable
29- private Consumer <InkColor > changedListener ;
30+ private Consumer <Optional < InkColor > > changedListener ;
3031 protected final Screen screen ;
3132
3233 final List <Pair <InkColor , Boolean >> usableColors = new ArrayList <>(); // stores if a certain color should be displayed
@@ -50,28 +51,48 @@ public ColorSelectionWidget(int x, int y, int selectedDotX, int selectedDotY, Sc
5051 }
5152 }
5253
53- public void setChangedListener (@ Nullable Consumer <InkColor > changedListener ) {
54+ public void setChangedListener (@ Nullable Consumer <Optional < InkColor > > changedListener ) {
5455 this .changedListener = changedListener ;
5556 }
5657
57- private void onChanged (InkColor newColor ) {
58+ private void onChanged (Optional < RegistryEntry < InkColor >> newColor ) {
5859 if (this .changedListener != null ) {
5960 this .changedListener .accept (newColor );
6061 }
6162 }
62-
63+
6364 @ Override
64- protected void renderButton (DrawContext context , int mouseX , int mouseY , float delta ) {
65-
65+ protected void renderWidget (DrawContext context , int mouseX , int mouseY , float delta ) {
66+ // draw selection icons
67+ int i = -1 ;
68+ int currentX = this .getX () + 1 ;
69+ int currentY = this .getY () + 1 ;
70+ for (Pair <InkColor , Boolean > color : usableColors ) {
71+ if (color .getRight ()) {
72+ fillQuad (context .getMatrices (), currentX , currentY , 5 , 5 , color .getLeft ().value ().getColorVec ());
73+ }
74+ i = i + 1 ;
75+ currentX = currentX + 7 ;
76+ if (i == 7 ) {
77+ currentY = currentY + 7 ;
78+ currentX = this .getX () + 1 ;
79+ }
80+ }
81+
82+ // draw currently selected icon
83+ Optional <RegistryEntry <InkColor >> selectedColor = this .colorPicker .getSelectedColor ();
84+ if (selectedColor .isPresent ()) {
85+ fillQuad (context .getMatrices (), selectedDotX , selectedDotY , 4 , 4 , selectedColor .get ().value ().getColorVec ());
86+ }
6687 }
67-
88+
6889 @ Override
6990 public boolean mouseClicked (double mouseX , double mouseY , int button ) {
7091 MinecraftClient client = MinecraftClient .getInstance ();
7192
7293 if (isUnselection (mouseX , mouseY )) {
7394 client .player .playSound (SpectrumSoundEvents .BUTTON_CLICK , 1.0F , 1.0F );
74- onChanged (null );
95+ onChanged (Optional . empty () );
7596 }
7697
7798 boolean colorSelectionClicked = mouseX >= (double ) this .getX () && mouseX < (double ) (this .getX () + this .width ) && mouseY >= (double ) this .getY () && mouseY < (double ) (this .getY () + this .height );
@@ -83,7 +104,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
83104 int verticalColorOffset = yOffset / 7 ;
84105 int newColorIndex = horizontalColorOffset + verticalColorOffset * 8 ;
85106
86- Pair <InkColor , Boolean > clickedColor = usableColors .get (newColorIndex );
107+ Pair <RegistryEntry < InkColor > , Boolean > clickedColor = usableColors .get (newColorIndex );
87108 if (clickedColor .getRight ()) {
88109 client .player .playSound (SpectrumSoundEvents .BUTTON_CLICK , 1.0F , 1.0F );
89110 onChanged (clickedColor .getLeft ());
@@ -102,30 +123,6 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) {
102123 protected void appendClickableNarrations (NarrationMessageBuilder builder ) {
103124 builder .put (NarrationPart .TITLE , Text .translatable ("spectrum.narration.color_selection" , this .colorPicker .getSelectedColor ()));
104125 }
105-
106- public void draw (DrawContext drawContext ) {
107- // draw selection icons
108- int i = -1 ;
109- int currentX = this .getX () + 1 ;
110- int currentY = this .getY () + 1 ;
111- for (Pair <InkColor , Boolean > color : usableColors ) {
112- if (color .getRight ()) {
113- fillQuad (drawContext .getMatrices (), currentX , currentY , 5 , 5 , color .getLeft ().getColorVec ());
114- }
115- i = i + 1 ;
116- currentX = currentX + 7 ;
117- if (i == 7 ) {
118- currentY = currentY + 7 ;
119- currentX = this .getX () + 1 ;
120- }
121- }
122-
123- // draw currently selected icon
124- InkColor selectedColor = this .colorPicker .getSelectedColor ();
125- if (selectedColor != null ) {
126- fillQuad (drawContext .getMatrices (), selectedDotX , selectedDotY , 4 , 4 , selectedColor .getColorVec ());
127- }
128- }
129126
130127 private boolean isUnselection (double mouseX , double mouseY ) {
131128 return mouseX >= (double ) selectedDotX && mouseX < (double ) (selectedDotX + 4 ) && mouseY >= (double ) selectedDotY && mouseY < (double ) (selectedDotY + 4 );
@@ -141,17 +138,16 @@ public void drawMouseoverTooltip(DrawContext drawContext, int mouseX, int mouseY
141138 if (overUnselection ) {
142139 drawContext .drawTooltip (client .textRenderer , List .of (Text .translatable ("spectrum.tooltip.ink_powered.unselect_color" )), Optional .empty (), getX (), getY ());
143140 } else {
144-
145141 int xOffset = MathHelper .floor (mouseX ) - this .getX ();
146142 int yOffset = MathHelper .floor (mouseY ) - this .getY ();
147143
148144 int horizontalColorOffset = xOffset / 7 ;
149145 int verticalColorOffset = yOffset / 7 ;
150146 int newColorIndex = horizontalColorOffset + verticalColorOffset * 8 ;
151147
152- Pair <InkColor , Boolean > hoveredColor = usableColors .get (newColorIndex );
148+ Pair <RegistryEntry < InkColor > , Boolean > hoveredColor = usableColors .get (newColorIndex );
153149 if (hoveredColor .getRight ()) {
154- drawContext .drawTooltip (client .textRenderer , List .of (hoveredColor .getLeft ().getName ()), Optional .empty (), getX (), getY ());
150+ drawContext .drawTooltip (client .textRenderer , List .of (hoveredColor .getLeft ().value (). getName ()), Optional .empty (), getX (), getY ());
155151 } else {
156152 drawContext .drawTooltip (client .textRenderer , List .of (Text .translatable ("spectrum.tooltip.ink_powered.unselect_color" )), Optional .empty (), getX (), getY ());
157153 }
0 commit comments