70 lines
2.6 KiB
Java
70 lines
2.6 KiB
Java
|
package net.minecraft.client.gui.components;
|
||
|
|
||
|
import java.time.Duration;
|
||
|
import javax.annotation.Nullable;
|
||
|
import net.minecraft.Util;
|
||
|
import net.minecraft.client.Minecraft;
|
||
|
import net.minecraft.client.gui.narration.NarrationElementOutput;
|
||
|
import net.minecraft.client.gui.navigation.ScreenRectangle;
|
||
|
import net.minecraft.client.gui.screens.Screen;
|
||
|
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 net.minecraftforge.api.distmarker.Dist;
|
||
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
||
|
|
||
|
@OnlyIn(Dist.CLIENT)
|
||
|
public class WidgetTooltipHolder {
|
||
|
@Nullable
|
||
|
private Tooltip tooltip;
|
||
|
private Duration delay = Duration.ZERO;
|
||
|
private long displayStartTime;
|
||
|
private boolean wasDisplayed;
|
||
|
|
||
|
public void setDelay(Duration p_334379_) {
|
||
|
this.delay = p_334379_;
|
||
|
}
|
||
|
|
||
|
public void set(@Nullable Tooltip p_327883_) {
|
||
|
this.tooltip = p_327883_;
|
||
|
}
|
||
|
|
||
|
@Nullable
|
||
|
public Tooltip get() {
|
||
|
return this.tooltip;
|
||
|
}
|
||
|
|
||
|
public void refreshTooltipForNextRenderPass(boolean p_330612_, boolean p_330175_, ScreenRectangle p_331953_) {
|
||
|
if (this.tooltip == null) {
|
||
|
this.wasDisplayed = false;
|
||
|
} else {
|
||
|
boolean flag = p_330612_ || p_330175_ && Minecraft.getInstance().getLastInputType().isKeyboard();
|
||
|
if (flag != this.wasDisplayed) {
|
||
|
if (flag) {
|
||
|
this.displayStartTime = Util.getMillis();
|
||
|
}
|
||
|
|
||
|
this.wasDisplayed = flag;
|
||
|
}
|
||
|
|
||
|
if (flag && Util.getMillis() - this.displayStartTime > this.delay.toMillis()) {
|
||
|
Screen screen = Minecraft.getInstance().screen;
|
||
|
if (screen != null) {
|
||
|
screen.setTooltipForNextRenderPass(this.tooltip, this.createTooltipPositioner(p_331953_, p_330612_, p_330175_), p_330175_);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private ClientTooltipPositioner createTooltipPositioner(ScreenRectangle p_328060_, boolean p_329268_, boolean p_336280_) {
|
||
|
return (ClientTooltipPositioner)(!p_329268_ && p_336280_ && Minecraft.getInstance().getLastInputType().isKeyboard()
|
||
|
? new BelowOrAboveWidgetTooltipPositioner(p_328060_)
|
||
|
: new MenuTooltipPositioner(p_328060_));
|
||
|
}
|
||
|
|
||
|
public void updateNarration(NarrationElementOutput p_329365_) {
|
||
|
if (this.tooltip != null) {
|
||
|
this.tooltip.updateNarration(p_329365_);
|
||
|
}
|
||
|
}
|
||
|
}
|