File size: 5,978 Bytes
d46f4a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package net.minecraft.client.gui.components;

import javax.annotation.Nullable;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

@OnlyIn(Dist.CLIENT)
public abstract class SpriteIconButton extends Button {
    protected final ResourceLocation sprite;
    protected final int spriteWidth;
    protected final int spriteHeight;

    SpriteIconButton(
        int p_297620_,
        int p_300275_,
        Component p_297544_,
        int p_298263_,
        int p_299223_,
        ResourceLocation p_297738_,
        Button.OnPress p_297736_,
        @Nullable Button.CreateNarration p_335316_
    ) {
        super(0, 0, p_297620_, p_300275_, p_297544_, p_297736_, p_335316_ == null ? DEFAULT_NARRATION : p_335316_);
        this.spriteWidth = p_298263_;
        this.spriteHeight = p_299223_;
        this.sprite = p_297738_;
    }

    public static SpriteIconButton.Builder builder(Component p_299964_, Button.OnPress p_301369_, boolean p_298501_) {
        return new SpriteIconButton.Builder(p_299964_, p_301369_, p_298501_);
    }

    @OnlyIn(Dist.CLIENT)
    public static class Builder {
        private final Component message;
        private final Button.OnPress onPress;
        private final boolean iconOnly;
        private int width = 150;
        private int height = 20;
        @Nullable
        private ResourceLocation sprite;
        private int spriteWidth;
        private int spriteHeight;
        @Nullable
        Button.CreateNarration narration;

        public Builder(Component p_298778_, Button.OnPress p_297973_, boolean p_297512_) {
            this.message = p_298778_;
            this.onPress = p_297973_;
            this.iconOnly = p_297512_;
        }

        public SpriteIconButton.Builder width(int p_298805_) {
            this.width = p_298805_;
            return this;
        }

        public SpriteIconButton.Builder size(int p_301312_, int p_297726_) {
            this.width = p_301312_;
            this.height = p_297726_;
            return this;
        }

        public SpriteIconButton.Builder sprite(ResourceLocation p_298738_, int p_301308_, int p_297593_) {
            this.sprite = p_298738_;
            this.spriteWidth = p_301308_;
            this.spriteHeight = p_297593_;
            return this;
        }

        public SpriteIconButton.Builder narration(Button.CreateNarration p_328959_) {
            this.narration = p_328959_;
            return this;
        }

        public SpriteIconButton build() {
            if (this.sprite == null) {
                throw new IllegalStateException("Sprite not set");
            } else {
                return (SpriteIconButton)(this.iconOnly
                    ? new SpriteIconButton.CenteredIcon(
                        this.width, this.height, this.message, this.spriteWidth, this.spriteHeight, this.sprite, this.onPress, this.narration
                    )
                    : new SpriteIconButton.TextAndIcon(
                        this.width, this.height, this.message, this.spriteWidth, this.spriteHeight, this.sprite, this.onPress, this.narration
                    ));
            }
        }
    }

    @OnlyIn(Dist.CLIENT)
    public static class CenteredIcon extends SpriteIconButton {
        protected CenteredIcon(
            int p_300200_,
            int p_299056_,
            Component p_298209_,
            int p_300001_,
            int p_298255_,
            ResourceLocation p_298326_,
            Button.OnPress p_298485_,
            @Nullable Button.CreateNarration p_328314_
        ) {
            super(p_300200_, p_299056_, p_298209_, p_300001_, p_298255_, p_298326_, p_298485_, p_328314_);
        }

        @Override
        public void renderWidget(GuiGraphics p_299781_, int p_297898_, int p_300476_, float p_300735_) {
            super.renderWidget(p_299781_, p_297898_, p_300476_, p_300735_);
            int i = this.getX() + this.getWidth() / 2 - this.spriteWidth / 2;
            int j = this.getY() + this.getHeight() / 2 - this.spriteHeight / 2;
            p_299781_.blitSprite(RenderType::guiTextured, this.sprite, i, j, this.spriteWidth, this.spriteHeight);
        }

        @Override
        public void renderString(GuiGraphics p_300547_, Font p_301253_, int p_299879_) {
        }
    }

    @OnlyIn(Dist.CLIENT)
    public static class TextAndIcon extends SpriteIconButton {
        protected TextAndIcon(
            int p_299028_,
            int p_300372_,
            Component p_297448_,
            int p_300274_,
            int p_301370_,
            ResourceLocation p_298996_,
            Button.OnPress p_298623_,
            @Nullable Button.CreateNarration p_328187_
        ) {
            super(p_299028_, p_300372_, p_297448_, p_300274_, p_301370_, p_298996_, p_298623_, p_328187_);
        }

        @Override
        public void renderWidget(GuiGraphics p_299610_, int p_301138_, int p_298092_, float p_300832_) {
            super.renderWidget(p_299610_, p_301138_, p_298092_, p_300832_);
            int i = this.getX() + this.getWidth() - this.spriteWidth - 2;
            int j = this.getY() + this.getHeight() / 2 - this.spriteHeight / 2;
            p_299610_.blitSprite(RenderType::guiTextured, this.sprite, i, j, this.spriteWidth, this.spriteHeight);
        }

        @Override
        public void renderString(GuiGraphics p_297951_, Font p_300566_, int p_298347_) {
            int i = this.getX() + 2;
            int j = this.getX() + this.getWidth() - this.spriteWidth - 4;
            int k = this.getX() + this.getWidth() / 2;
            renderScrollingString(p_297951_, p_300566_, this.getMessage(), k, i, this.getY(), j, this.getY() + this.getHeight(), p_298347_);
        }
    }
}