ItemStackRenderer.java 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Roughly Enough Items by Danielshe.
  3. * Licensed under the MIT License.
  4. */
  5. package me.shedaniel.rei.gui.renderers;
  6. import com.google.common.collect.Lists;
  7. import com.mojang.blaze3d.platform.GlStateManager;
  8. import me.shedaniel.rei.RoughlyEnoughItemsCore;
  9. import me.shedaniel.rei.api.ClientHelper;
  10. import me.shedaniel.rei.api.Renderer;
  11. import me.shedaniel.rei.gui.widget.EntryListWidget;
  12. import me.shedaniel.rei.gui.widget.QueuedTooltip;
  13. import me.shedaniel.rei.impl.ScreenHelper;
  14. import net.minecraft.client.MinecraftClient;
  15. import net.minecraft.client.render.GuiLighting;
  16. import net.minecraft.client.render.item.ItemRenderer;
  17. import net.minecraft.item.ItemStack;
  18. import net.minecraft.util.Identifier;
  19. import java.util.Collections;
  20. import java.util.List;
  21. public abstract class ItemStackRenderer extends Renderer {
  22. public static final Identifier CHEST_GUI_TEXTURE = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
  23. public boolean drawTooltip = false;
  24. @Override
  25. public void render(int x, int y, double mouseX, double mouseY, float delta) {
  26. int l = x - 8, i1 = y - 6;
  27. GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
  28. ItemRenderer itemRenderer = MinecraftClient.getInstance().getItemRenderer();
  29. itemRenderer.zOffset = blitOffset;
  30. GuiLighting.enableForItems();
  31. GlStateManager.colorMask(true, true, true, true);
  32. GlStateManager.enableLighting();
  33. GlStateManager.enableRescaleNormal();
  34. GlStateManager.enableDepthTest();
  35. itemRenderer.renderGuiItem(getItemStack(), l, i1);
  36. itemRenderer.renderGuiItemOverlay(MinecraftClient.getInstance().textRenderer, getItemStack(), l, i1, renderCounts() ? null : "");
  37. itemRenderer.zOffset = 0.0F;
  38. this.blitOffset = 0;
  39. if (drawTooltip && mouseX >= x - 8 && mouseX <= x + 8 && mouseY >= y - 6 && mouseY <= y + 10)
  40. queueTooltip(getItemStack(), delta);
  41. this.drawTooltip = false;
  42. }
  43. protected void queueTooltip(ItemStack itemStack, float delta) {
  44. ScreenHelper.getLastOverlay().addTooltip(QueuedTooltip.create(getTooltip(itemStack)));
  45. }
  46. protected boolean renderCounts() {
  47. return true;
  48. }
  49. protected List<String> getTooltip(ItemStack itemStack) {
  50. List<String> toolTip = Lists.newArrayList(EntryListWidget.tryGetItemStackToolTip(itemStack, true));
  51. if (RoughlyEnoughItemsCore.getConfigManager().getConfig().shouldAppendModNames()) {
  52. final String modString = ClientHelper.getInstance().getFormattedModFromItem(itemStack.getItem());
  53. toolTip.addAll(getExtraToolTips(itemStack));
  54. boolean alreadyHasMod = false;
  55. for (String s : toolTip)
  56. if (s.equalsIgnoreCase(modString)) {
  57. alreadyHasMod = true;
  58. break;
  59. }
  60. if (!alreadyHasMod)
  61. toolTip.add(modString);
  62. }
  63. return toolTip;
  64. }
  65. protected List<String> getExtraToolTips(ItemStack stack) {
  66. return Collections.emptyList();
  67. }
  68. public abstract ItemStack getItemStack();
  69. }