72 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.gui.components;
 | |
| 
 | |
| import java.time.Duration;
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.Util;
 | |
| import net.minecraft.client.Minecraft;
 | |
| import net.minecraft.client.gui.GuiGraphics;
 | |
| import net.minecraft.client.gui.narration.NarrationElementOutput;
 | |
| import net.minecraft.client.gui.navigation.ScreenRectangle;
 | |
| import net.minecraft.client.gui.screens.inventory.tooltip.BelowOrAboveWidgetTooltipPositioner;
 | |
| import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner;
 | |
| import net.minecraft.client.gui.screens.inventory.tooltip.MenuTooltipPositioner;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class WidgetTooltipHolder {
 | |
| 	@Nullable
 | |
| 	private Tooltip tooltip;
 | |
| 	private Duration delay = Duration.ZERO;
 | |
| 	private long displayStartTime;
 | |
| 	private boolean wasDisplayed;
 | |
| 
 | |
| 	public void setDelay(Duration delay) {
 | |
| 		this.delay = delay;
 | |
| 	}
 | |
| 
 | |
| 	public void set(@Nullable Tooltip tooltip) {
 | |
| 		this.tooltip = tooltip;
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	public Tooltip get() {
 | |
| 		return this.tooltip;
 | |
| 	}
 | |
| 
 | |
| 	public void refreshTooltipForNextRenderPass(
 | |
| 		GuiGraphics guiGraphics, int mouseX, int mouseY, boolean hovering, boolean focused, ScreenRectangle screenRectangle
 | |
| 	) {
 | |
| 		if (this.tooltip == null) {
 | |
| 			this.wasDisplayed = false;
 | |
| 		} else {
 | |
| 			Minecraft minecraft = Minecraft.getInstance();
 | |
| 			boolean bl = hovering || focused && minecraft.getLastInputType().isKeyboard();
 | |
| 			if (bl != this.wasDisplayed) {
 | |
| 				if (bl) {
 | |
| 					this.displayStartTime = Util.getMillis();
 | |
| 				}
 | |
| 
 | |
| 				this.wasDisplayed = bl;
 | |
| 			}
 | |
| 
 | |
| 			if (bl && Util.getMillis() - this.displayStartTime > this.delay.toMillis()) {
 | |
| 				guiGraphics.setTooltipForNextFrame(
 | |
| 					minecraft.font, this.tooltip.toCharSequence(minecraft), this.createTooltipPositioner(screenRectangle, hovering, focused), mouseX, mouseY, focused
 | |
| 				);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	private ClientTooltipPositioner createTooltipPositioner(ScreenRectangle screenRectangle, boolean hovering, boolean focused) {
 | |
| 		return (ClientTooltipPositioner)(!hovering && focused && Minecraft.getInstance().getLastInputType().isKeyboard()
 | |
| 			? new BelowOrAboveWidgetTooltipPositioner(screenRectangle)
 | |
| 			: new MenuTooltipPositioner(screenRectangle));
 | |
| 	}
 | |
| 
 | |
| 	public void updateNarration(NarrationElementOutput output) {
 | |
| 		if (this.tooltip != null) {
 | |
| 			this.tooltip.updateNarration(output);
 | |
| 		}
 | |
| 	}
 | |
| }
 |