ForgePatch/src/main/java/net/minecraftforge/client/event/RenderTooltipEvent.java

315 lines
8.9 KiB
Java

/*
* Minecraft Forge
* Copyright (c) 2016-2019.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation version 2.1
* of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
package net.minecraftforge.client.event;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.item.ItemStack;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.eventbus.api.Cancelable;
import net.minecraftforge.eventbus.api.Event;
/**
* A set of events which are fired at various points during tooltip rendering.
* <p>
* Can be used to change the rendering parameters, draw something extra, etc.
* <p>
* Do not use this event directly, use one of the subclasses:
* <ul>
* <li>{@link RenderTooltipEvent.Pre}</li>
* <li>{@link RenderTooltipEvent.PostBackground}</li>
* <li>{@link RenderTooltipEvent.PostText}</li>
* </ul>
*/
public abstract class RenderTooltipEvent extends net.minecraftforge.eventbus.api.Event
{
@Nonnull
protected final ItemStack stack;
protected final List<String> lines;
protected int x;
protected int y;
protected FontRenderer fr;
public RenderTooltipEvent(@Nonnull ItemStack stack, @Nonnull List<String> lines, int x, int y, @Nonnull FontRenderer fr)
{
this.stack = stack;
this.lines = Collections.unmodifiableList(lines); // Leave editing to ItemTooltipEvent
this.x = x;
this.y = y;
this.fr = fr;
}
/**
* @return The stack which the tooltip is being rendered for. As tooltips can be drawn without itemstacks, this stack may be empty.
*/
@Nonnull
public ItemStack getStack()
{
return stack;
}
/**
* The lines to be drawn. May change between {@link RenderTooltipEvent.Pre} and {@link RenderTooltipEvent.Post}.
*
* @return An <i>unmodifiable</i> list of strings. Use {@link ItemTooltipEvent} to modify tooltip text.
*/
@Nonnull
public List<String> getLines()
{
return lines;
}
/**
* @return The X position of the tooltip box. By default, the mouse X position.
*/
public int getX()
{
return x;
}
/**
* @return The Y position of the tooltip box. By default, the mouse Y position.
*/
public int getY()
{
return y;
}
/**
* @return The {@link FontRenderer} instance the current render is using.
*/
@Nonnull
public FontRenderer getFontRenderer()
{
return fr;
}
/**
* This event is fired before any tooltip calculations are done. It provides setters for all aspects of the tooltip, so the final render can be modified.
* <p>
* This event is {@link Cancelable}.
*/
@net.minecraftforge.eventbus.api.Cancelable
public static class Pre extends RenderTooltipEvent
{
private int screenWidth;
private int screenHeight;
private int maxWidth;
public Pre(@Nonnull ItemStack stack, @Nonnull List<String> lines, int x, int y, int screenWidth, int screenHeight, int maxWidth, @Nonnull FontRenderer fr)
{
super(stack, lines, x, y, fr);
this.screenWidth = screenWidth;
this.screenHeight = screenHeight;
this.maxWidth = maxWidth;
}
public int getScreenWidth()
{
return screenWidth;
}
public void setScreenWidth(int screenWidth)
{
this.screenWidth = screenWidth;
}
public int getScreenHeight()
{
return screenHeight;
}
public void setScreenHeight(int screenHeight)
{
this.screenHeight = screenHeight;
}
/**
* @return The max width the tooltip can be. Defaults to -1 (unlimited).
*/
public int getMaxWidth()
{
return maxWidth;
}
/**
* Sets the max width of the tooltip. Use -1 for unlimited.
*/
public void setMaxWidth(int maxWidth)
{
this.maxWidth = maxWidth;
}
/**
* Sets the {@link FontRenderer} to be used to render text.
*/
public void setFontRenderer(@Nonnull FontRenderer fr)
{
this.fr = fr;
}
/**
* Set the X origin of the tooltip.
*/
public void setX(int x)
{
this.x = x;
}
/**
* Set the Y origin of the tooltip.
*/
public void setY(int y)
{
this.y = y;
}
}
/**
* Events inheriting from this class are fired at different stages during the tooltip rendering.
* <p>
* Do not use this event directly, use one of its subclasses:
* <ul>
* <li>{@link RenderTooltipEvent.PostBackground}</li>
* <li>{@link RenderTooltipEvent.PostText}</li>
* </ul>
*/
protected static abstract class Post extends RenderTooltipEvent
{
private final int width;
private final int height;
public Post(@Nonnull ItemStack stack, @Nonnull List<String> textLines, int x, int y, @Nonnull FontRenderer fr, int width, int height)
{
super(stack, textLines, x, y, fr);
this.width = width;
this.height = height;
}
/**
* @return The width of the tooltip box. This is the width of the <i>inner</i> box, not including the border.
*/
public int getWidth()
{
return width;
}
/**
* @return The height of the tooltip box. This is the height of the <i>inner</i> box, not including the border.
*/
public int getHeight()
{
return height;
}
}
/**
* This event is fired directly after the tooltip background is drawn, but before any text is drawn.
*/
public static class PostBackground extends Post
{
public PostBackground(@Nonnull ItemStack stack, @Nonnull List<String> textLines, int x, int y, @Nonnull FontRenderer fr, int width, int height)
{ super(stack, textLines, x, y, fr, width, height); }
}
/**
* This event is fired directly after the tooltip text is drawn, but before the GL state is reset.
*/
public static class PostText extends Post
{
public PostText(@Nonnull ItemStack stack, @Nonnull List<String> textLines, int x, int y, @Nonnull FontRenderer fr, int width, int height)
{ super(stack, textLines, x, y, fr, width, height); }
}
/**
* This event is fired when the colours for the tooltip background are determined.
*/
public static class Color extends RenderTooltipEvent
{
private final int originalBackground;
private final int originalBorderStart;
private final int originalBorderEnd;
private int background;
private int borderStart;
private int borderEnd;
public Color(@Nonnull ItemStack stack, @Nonnull List<String> textLines, int x, int y, @Nonnull FontRenderer fr, int background, int borderStart,
int borderEnd)
{
super(stack, textLines, x, y, fr);
this.originalBackground = background;
this.originalBorderStart = borderStart;
this.originalBorderEnd = borderEnd;
this.background = background;
this.borderStart = borderStart;
this.borderEnd = borderEnd;
}
public int getBackground()
{
return background;
}
public void setBackground(int background)
{
this.background = background;
}
public int getBorderStart()
{
return borderStart;
}
public void setBorderStart(int borderStart)
{
this.borderStart = borderStart;
}
public int getBorderEnd()
{
return borderEnd;
}
public void setBorderEnd(int borderEnd)
{
this.borderEnd = borderEnd;
}
public int getOriginalBackground()
{
return originalBackground;
}
public int getOriginalBorderStart()
{
return originalBorderStart;
}
public int getOriginalBorderEnd()
{
return originalBorderEnd;
}
}
}