Spaces:
Build error
Build error
File size: 10,913 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 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
package net.minecraft.client.gui.components;
import java.time.Duration;
import java.util.function.Consumer;
import javax.annotation.Nullable;
import net.minecraft.Util;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ComponentPath;
import net.minecraft.client.gui.Font;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.components.events.GuiEventListener;
import net.minecraft.client.gui.layouts.LayoutElement;
import net.minecraft.client.gui.narration.NarratableEntry;
import net.minecraft.client.gui.narration.NarratedElementType;
import net.minecraft.client.gui.narration.NarrationElementOutput;
import net.minecraft.client.gui.navigation.FocusNavigationEvent;
import net.minecraft.client.gui.navigation.ScreenRectangle;
import net.minecraft.client.resources.sounds.SimpleSoundInstance;
import net.minecraft.client.sounds.SoundManager;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.MutableComponent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.util.Mth;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public abstract class AbstractWidget implements Renderable, GuiEventListener, LayoutElement, NarratableEntry {
private static final double PERIOD_PER_SCROLLED_PIXEL = 0.5;
private static final double MIN_SCROLL_PERIOD = 3.0;
protected int width;
protected int height;
private int x;
private int y;
private Component message;
protected boolean isHovered;
public boolean active = true;
public boolean visible = true;
protected float alpha = 1.0F;
private int tabOrderGroup;
private boolean focused;
private final WidgetTooltipHolder tooltip = new WidgetTooltipHolder();
public AbstractWidget(int p_93629_, int p_93630_, int p_93631_, int p_93632_, Component p_93633_) {
this.x = p_93629_;
this.y = p_93630_;
this.width = p_93631_;
this.height = p_93632_;
this.message = p_93633_;
}
@Override
public int getHeight() {
return this.height;
}
@Override
public final void render(GuiGraphics p_282421_, int p_93658_, int p_93659_, float p_93660_) {
if (this.visible) {
this.isHovered = p_282421_.containsPointInScissor(p_93658_, p_93659_)
&& p_93658_ >= this.getX()
&& p_93659_ >= this.getY()
&& p_93658_ < this.getX() + this.width
&& p_93659_ < this.getY() + this.height;
this.renderWidget(p_282421_, p_93658_, p_93659_, p_93660_);
this.tooltip.refreshTooltipForNextRenderPass(this.isHovered(), this.isFocused(), this.getRectangle());
}
}
public void setTooltip(@Nullable Tooltip p_259796_) {
this.tooltip.set(p_259796_);
}
@Nullable
public Tooltip getTooltip() {
return this.tooltip.get();
}
public void setTooltipDelay(Duration p_334848_) {
this.tooltip.setDelay(p_334848_);
}
protected MutableComponent createNarrationMessage() {
return wrapDefaultNarrationMessage(this.getMessage());
}
public static MutableComponent wrapDefaultNarrationMessage(Component p_168800_) {
return Component.translatable("gui.narrate.button", p_168800_);
}
protected abstract void renderWidget(GuiGraphics p_282139_, int p_268034_, int p_268009_, float p_268085_);
protected static void renderScrollingString(
GuiGraphics p_281620_, Font p_282651_, Component p_281467_, int p_283621_, int p_282084_, int p_283398_, int p_281938_, int p_283471_
) {
renderScrollingString(p_281620_, p_282651_, p_281467_, (p_283621_ + p_283398_) / 2, p_283621_, p_282084_, p_283398_, p_281938_, p_283471_);
}
protected static void renderScrollingString(
GuiGraphics p_298878_, Font p_301352_, Component p_297799_, int p_300294_, int p_297733_, int p_298903_, int p_300338_, int p_297281_, int p_299081_
) {
int i = p_301352_.width(p_297799_);
int j = (p_298903_ + p_297281_ - 9) / 2 + 1;
int k = p_300338_ - p_297733_;
if (i > k) {
int l = i - k;
double d0 = (double)Util.getMillis() / 1000.0;
double d1 = Math.max((double)l * 0.5, 3.0);
double d2 = Math.sin((Math.PI / 2) * Math.cos((Math.PI * 2) * d0 / d1)) / 2.0 + 0.5;
double d3 = Mth.lerp(d2, 0.0, (double)l);
p_298878_.enableScissor(p_297733_, p_298903_, p_300338_, p_297281_);
p_298878_.drawString(p_301352_, p_297799_, p_297733_ - (int)d3, j, p_299081_);
p_298878_.disableScissor();
} else {
int i1 = Mth.clamp(p_300294_, p_297733_ + i / 2, p_300338_ - i / 2);
p_298878_.drawCenteredString(p_301352_, p_297799_, i1, j, p_299081_);
}
}
protected void renderScrollingString(GuiGraphics p_281857_, Font p_282790_, int p_282664_, int p_282944_) {
int i = this.getX() + p_282664_;
int j = this.getX() + this.getWidth() - p_282664_;
renderScrollingString(p_281857_, p_282790_, this.getMessage(), i, this.getY(), j, this.getY() + this.getHeight(), p_282944_);
}
public void onClick(double p_93634_, double p_93635_) {
}
public void onRelease(double p_93669_, double p_93670_) {
}
protected void onDrag(double p_93636_, double p_93637_, double p_93638_, double p_93639_) {
}
@Override
public boolean mouseClicked(double p_93641_, double p_93642_, int p_93643_) {
if (this.active && this.visible) {
if (this.isValidClickButton(p_93643_)) {
boolean flag = this.isMouseOver(p_93641_, p_93642_);
if (flag) {
this.playDownSound(Minecraft.getInstance().getSoundManager());
this.onClick(p_93641_, p_93642_);
return true;
}
}
return false;
} else {
return false;
}
}
@Override
public boolean mouseReleased(double p_93684_, double p_93685_, int p_93686_) {
if (this.isValidClickButton(p_93686_)) {
this.onRelease(p_93684_, p_93685_);
return true;
} else {
return false;
}
}
protected boolean isValidClickButton(int p_93652_) {
return p_93652_ == 0;
}
@Override
public boolean mouseDragged(double p_93645_, double p_93646_, int p_93647_, double p_93648_, double p_93649_) {
if (this.isValidClickButton(p_93647_)) {
this.onDrag(p_93645_, p_93646_, p_93648_, p_93649_);
return true;
} else {
return false;
}
}
@Nullable
@Override
public ComponentPath nextFocusPath(FocusNavigationEvent p_265640_) {
if (!this.active || !this.visible) {
return null;
} else {
return !this.isFocused() ? ComponentPath.leaf(this) : null;
}
}
@Override
public boolean isMouseOver(double p_93672_, double p_93673_) {
return this.active
&& this.visible
&& p_93672_ >= (double)this.getX()
&& p_93673_ >= (double)this.getY()
&& p_93672_ < (double)this.getRight()
&& p_93673_ < (double)this.getBottom();
}
public void playDownSound(SoundManager p_93665_) {
playButtonClickSound(p_93665_);
}
public static void playButtonClickSound(SoundManager p_363924_) {
p_363924_.play(SimpleSoundInstance.forUI(SoundEvents.UI_BUTTON_CLICK, 1.0F));
}
@Override
public int getWidth() {
return this.width;
}
public void setWidth(int p_93675_) {
this.width = p_93675_;
}
public void setHeight(int p_298443_) {
this.height = p_298443_;
}
public void setAlpha(float p_93651_) {
this.alpha = p_93651_;
}
public void setMessage(Component p_93667_) {
this.message = p_93667_;
}
public Component getMessage() {
return this.message;
}
@Override
public boolean isFocused() {
return this.focused;
}
public boolean isHovered() {
return this.isHovered;
}
public boolean isHoveredOrFocused() {
return this.isHovered() || this.isFocused();
}
@Override
public boolean isActive() {
return this.visible && this.active;
}
@Override
public void setFocused(boolean p_93693_) {
this.focused = p_93693_;
}
@Override
public NarratableEntry.NarrationPriority narrationPriority() {
if (this.isFocused()) {
return NarratableEntry.NarrationPriority.FOCUSED;
} else {
return this.isHovered ? NarratableEntry.NarrationPriority.HOVERED : NarratableEntry.NarrationPriority.NONE;
}
}
@Override
public final void updateNarration(NarrationElementOutput p_259921_) {
this.updateWidgetNarration(p_259921_);
this.tooltip.updateNarration(p_259921_);
}
protected abstract void updateWidgetNarration(NarrationElementOutput p_259858_);
protected void defaultButtonNarrationText(NarrationElementOutput p_168803_) {
p_168803_.add(NarratedElementType.TITLE, this.createNarrationMessage());
if (this.active) {
if (this.isFocused()) {
p_168803_.add(NarratedElementType.USAGE, Component.translatable("narration.button.usage.focused"));
} else {
p_168803_.add(NarratedElementType.USAGE, Component.translatable("narration.button.usage.hovered"));
}
}
}
@Override
public int getX() {
return this.x;
}
@Override
public void setX(int p_254495_) {
this.x = p_254495_;
}
@Override
public int getY() {
return this.y;
}
@Override
public void setY(int p_253718_) {
this.y = p_253718_;
}
public int getRight() {
return this.getX() + this.getWidth();
}
public int getBottom() {
return this.getY() + this.getHeight();
}
@Override
public void visitWidgets(Consumer<AbstractWidget> p_265566_) {
p_265566_.accept(this);
}
public void setSize(int p_312975_, int p_312301_) {
this.width = p_312975_;
this.height = p_312301_;
}
@Override
public ScreenRectangle getRectangle() {
return LayoutElement.super.getRectangle();
}
public void setRectangle(int p_309908_, int p_310169_, int p_312247_, int p_310380_) {
this.setSize(p_309908_, p_310169_);
this.setPosition(p_312247_, p_310380_);
}
@Override
public int getTabOrderGroup() {
return this.tabOrderGroup;
}
public void setTabOrderGroup(int p_268123_) {
this.tabOrderGroup = p_268123_;
}
} |