aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/io/github/cottonmc/cotton/gui/widget/icon/ItemIcon.java33
-rw-r--r--src/testMod/java/io/github/cottonmc/test/client/GhostIconTestGui.java26
-rw-r--r--src/testMod/java/io/github/cottonmc/test/client/LibGuiTestClient.java1
3 files changed, 60 insertions, 0 deletions
diff --git a/src/main/java/io/github/cottonmc/cotton/gui/widget/icon/ItemIcon.java b/src/main/java/io/github/cottonmc/cotton/gui/widget/icon/ItemIcon.java
index 9da86ee..e6beeed 100644
--- a/src/main/java/io/github/cottonmc/cotton/gui/widget/icon/ItemIcon.java
+++ b/src/main/java/io/github/cottonmc/cotton/gui/widget/icon/ItemIcon.java
@@ -3,6 +3,7 @@ package io.github.cottonmc.cotton.gui.widget.icon;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.DrawContext;
+import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@@ -15,7 +16,11 @@ import java.util.Objects;
* @since 2.2.0
*/
public class ItemIcon implements Icon {
+ // Matches the vanilla RecipeBookGhostSlots class (1.20.2).
+ private static final int GHOST_OVERLAY_COLOR = 0x30_FFFFFF;
+
private final ItemStack stack;
+ private boolean ghost = false;
/**
* Constructs an item icon.
@@ -47,6 +52,34 @@ public class ItemIcon implements Icon {
matrices.translate(x, y, 0);
matrices.scale(scale, scale, 1);
context.drawItemWithoutEntity(stack, 0, 0);
+
+ if (isGhost()) {
+ context.fill(RenderLayer.getGuiGhostRecipeOverlay(), 0, 0, 16, 16, GHOST_OVERLAY_COLOR);
+ }
+
matrices.pop();
}
+
+ /**
+ * Checks whether this icon is a ghost item.
+ * Ghost items are rendered with a pale overlay.
+ *
+ * @return {@code true} if this icon is a ghost item, {@code false} otherwise
+ * @since 9.2.0
+ */
+ public boolean isGhost() {
+ return ghost;
+ }
+
+ /**
+ * Marks this icon as a ghost or non-ghost icon.
+ *
+ * @param ghost {@code true} if this icon is a ghost item, {@code false} otherwise
+ * @return this icon
+ * @since 9.2.0
+ */
+ public ItemIcon setGhost(boolean ghost) {
+ this.ghost = ghost;
+ return this;
+ }
}
diff --git a/src/testMod/java/io/github/cottonmc/test/client/GhostIconTestGui.java b/src/testMod/java/io/github/cottonmc/test/client/GhostIconTestGui.java
new file mode 100644
index 0000000..34c9737
--- /dev/null
+++ b/src/testMod/java/io/github/cottonmc/test/client/GhostIconTestGui.java
@@ -0,0 +1,26 @@
+package io.github.cottonmc.test.client;
+
+import net.minecraft.item.Items;
+import net.minecraft.text.Text;
+
+import io.github.cottonmc.cotton.gui.client.LightweightGuiDescription;
+import io.github.cottonmc.cotton.gui.widget.WButton;
+import io.github.cottonmc.cotton.gui.widget.WGridPanel;
+import io.github.cottonmc.cotton.gui.widget.WToggleButton;
+import io.github.cottonmc.cotton.gui.widget.icon.ItemIcon;
+
+public class GhostIconTestGui extends LightweightGuiDescription {
+ public GhostIconTestGui() {
+ WGridPanel root = (WGridPanel) rootPanel;
+ root.setGaps(2, 2);
+
+ ItemIcon icon = new ItemIcon(Items.CACTUS);
+ WButton button = new WButton(icon, Text.literal("Hello world"));
+ WToggleButton ghostToggle = new WToggleButton(Text.literal("Ghost"));
+ ghostToggle.setOnToggle(icon::setGhost);
+
+ root.add(button, 0, 0, 5, 1);
+ root.add(ghostToggle, 0, 1, 5, 1);
+ root.validate(this);
+ }
+}
diff --git a/src/testMod/java/io/github/cottonmc/test/client/LibGuiTestClient.java b/src/testMod/java/io/github/cottonmc/test/client/LibGuiTestClient.java
index aef04ed..0674761 100644
--- a/src/testMod/java/io/github/cottonmc/test/client/LibGuiTestClient.java
+++ b/src/testMod/java/io/github/cottonmc/test/client/LibGuiTestClient.java
@@ -71,6 +71,7 @@ public class LibGuiTestClient implements ClientModInitializer {
.then(literal("texture").executes(openScreen(client -> new TextureTestGui())))
.then(literal("textalignment").executes(openScreen(client -> new TextAlignmentTestGui())))
.then(literal("list").executes(openScreen(client -> new ListTestGui())))
+ .then(literal("ghosticon").executes(openScreen(client -> new GhostIconTestGui())))
));
}