123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- * This file is licensed under the MIT License, part of Roughly Enough Items.
- * Copyright (c) 2018, 2019, 2020 shedaniel
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
- package me.shedaniel.rei.gui.widget;
- import me.shedaniel.math.api.Rectangle;
- import me.shedaniel.rei.api.ClientHelper;
- import me.shedaniel.rei.api.EntryStack;
- import me.shedaniel.rei.api.REIHelper;
- import me.shedaniel.rei.api.RecipeCategory;
- import me.shedaniel.rei.api.widgets.Tooltip;
- import net.minecraft.util.Formatting;
- import net.minecraft.util.Identifier;
- import org.jetbrains.annotations.ApiStatus;
- import org.jetbrains.annotations.Nullable;
- import java.util.Collections;
- import java.util.List;
- import java.util.function.Predicate;
- @ApiStatus.Internal
- public class TabWidget extends WidgetWithBounds {
-
- public static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
- public static final Identifier CHEST_GUI_TEXTURE_DARK = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer_dark.png");
-
- public boolean shown = false, selected = false;
- public EntryStack logo;
- public int id;
- public String categoryName;
- public Rectangle bounds;
- public RecipeCategory<?> category;
- public int u, v;
- @Nullable
- private Predicate<TabWidget> onClick;
-
- private TabWidget(int id, Rectangle bounds, int u, int v, @Nullable Predicate<TabWidget> onClick) {
- this.id = id;
- this.bounds = bounds;
- this.u = u;
- this.v = v;
- this.onClick = onClick;
- }
-
- @ApiStatus.Internal
- public static TabWidget create(int id, int tabSize, int leftX, int bottomY, int u, int v, @Nullable Predicate<TabWidget> onClick) {
- return new TabWidget(id, new Rectangle(leftX + id * tabSize, bottomY - tabSize, tabSize, tabSize), u, v, onClick);
- }
-
- @Override
- public boolean mouseClicked(double mouseX, double mouseY, int button) {
- return button == 0 && containsMouse(mouseX, mouseY) && onClick.test(this);
- }
-
- public void setRenderer(RecipeCategory<?> category, EntryStack logo, String categoryName, boolean selected) {
- if (logo == null) {
- shown = false;
- this.logo = null;
- } else {
- shown = true;
- this.logo = logo;
- }
- this.category = category;
- this.selected = selected;
- this.categoryName = categoryName;
- }
-
- public boolean isSelected() {
- return selected;
- }
-
- public int getId() {
- return id;
- }
-
- public boolean isShown() {
- return shown;
- }
-
- @Override
- public List<Widget> children() {
- return Collections.emptyList();
- }
-
- @Override
- public void render(int mouseX, int mouseY, float delta) {
- if (shown) {
- minecraft.getTextureManager().bindTexture(REIHelper.getInstance().isDarkThemeEnabled() ? CHEST_GUI_TEXTURE_DARK : CHEST_GUI_TEXTURE);
- this.blit(bounds.x, bounds.y + 2, u + (selected ? bounds.width : 0), v, bounds.width, (selected ? bounds.height + 2 : bounds.height - 1));
- logo.setZ(100);
- logo.render(new Rectangle(bounds.getCenterX() - 8, bounds.getCenterY() - 5, 16, 16), mouseX, mouseY, delta);
- if (containsMouse(mouseX, mouseY)) {
- drawTooltip();
- }
- }
- }
-
- private void drawTooltip() {
- if (this.minecraft.options.advancedItemTooltips)
- Tooltip.create(categoryName, Formatting.DARK_GRAY.toString() + category.getIdentifier().toString(), ClientHelper.getInstance().getFormattedModFromIdentifier(category.getIdentifier())).queue();
- else
- Tooltip.create(categoryName, ClientHelper.getInstance().getFormattedModFromIdentifier(category.getIdentifier())).queue();
- }
-
- @Override
- public Rectangle getBounds() {
- return bounds;
- }
-
- }
|