REISlot.java 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. package me.shedaniel.gui.widget;
  2. import com.google.common.collect.Lists;
  3. import me.shedaniel.Core;
  4. import me.shedaniel.gui.REIRenderHelper;
  5. import me.shedaniel.listenerdefinitions.IMixinContainerGui;
  6. import me.shedaniel.network.DeletePacket;
  7. import net.minecraft.client.MinecraftClient;
  8. import net.minecraft.client.gui.ContainerGui;
  9. import net.minecraft.client.network.ClientPlayerEntity;
  10. import net.minecraft.client.render.GuiLighting;
  11. import net.minecraft.item.ItemStack;
  12. import net.minecraft.util.Identifier;
  13. import net.minecraft.util.registry.Registry;
  14. import java.awt.*;
  15. import java.util.LinkedList;
  16. import java.util.List;
  17. import java.util.stream.Collectors;
  18. /**
  19. * Created by James on 7/28/2018.
  20. */
  21. public class REISlot extends Control {
  22. private static final Identifier RECIPE_GUI = new Identifier("roughlyenoughitems", "textures/gui/recipecontainer.png");
  23. private boolean cheatable = false;
  24. private List<ItemStack> itemList = new LinkedList<>();
  25. private int itemListPointer = 0;
  26. private long displayCounter = 0;
  27. public boolean isDrawBackground() {
  28. return drawBackground;
  29. }
  30. private String extraTooltip;
  31. @Override
  32. public void tick() {
  33. if (itemList.size() > 1) {
  34. displayCounter++;
  35. if (displayCounter % 10 == 0)
  36. if (itemListPointer + 1 >= itemList.size())
  37. itemListPointer = 0;
  38. else itemListPointer++;
  39. }
  40. }
  41. public void setStackList(List<ItemStack> newItemList) {
  42. itemList = newItemList;
  43. itemListPointer = 0;
  44. displayCounter = 0;
  45. }
  46. public void setExtraTooltip(String toolTip) {
  47. extraTooltip = toolTip;
  48. }
  49. public void setDrawBackground(boolean drawBackground) {
  50. this.drawBackground = drawBackground;
  51. }
  52. private boolean drawBackground = false;
  53. private Point backgroundUV = new Point(0, 222);
  54. public REISlot(int x, int y) {
  55. super(x, y, 18, 18);
  56. this.onClick = this::onClick;
  57. }
  58. public ItemStack getStack() {
  59. if (itemList.isEmpty()) {
  60. return ItemStack.EMPTY;
  61. }
  62. return itemList.get(itemListPointer);
  63. }
  64. public void setStack(ItemStack stack) {
  65. itemList.clear();
  66. if (stack != null)
  67. itemList.add(stack);
  68. itemListPointer = 0;
  69. }
  70. @Override
  71. public void draw() {
  72. if (drawBackground) {
  73. MinecraftClient.getInstance().getTextureManager().bindTexture(RECIPE_GUI);
  74. drawTexturedModalRect(rect.x - 1, rect.y - 1, backgroundUV.x, backgroundUV.y, rect.width, rect.height);
  75. }
  76. if (getStack().isEmpty())
  77. return;
  78. GuiLighting.enableForItems();
  79. drawStack(rect.x, rect.y);
  80. if (isHighlighted())
  81. drawTooltip();
  82. }
  83. protected void drawTooltip() {
  84. List<String> toolTip = getTooltip();
  85. toolTip.add("§9§o" + getMod());
  86. Point mouse = REIRenderHelper.getMouseLoc();
  87. REIRenderHelper.addToolTip(toolTip, mouse.x, mouse.y);
  88. }
  89. private boolean onClick(int button) {
  90. ClientPlayerEntity player = MinecraftClient.getInstance().player;
  91. if (REIRenderHelper.reiGui.canCheat() && !(player.inventory.getCursorStack().isEmpty())) {
  92. //Delete the itemstack.
  93. MinecraftClient.getInstance().getNetworkHandler().sendPacket(new DeletePacket());
  94. return true;
  95. }
  96. if (!player.inventory.getCursorStack().isEmpty()) {
  97. return false;
  98. }
  99. if (REIRenderHelper.reiGui.canCheat() && this.cheatable) {
  100. if (getStack() != null && !getStack().isEmpty()) {
  101. ItemStack cheatedStack = getStack().copy();
  102. if (button == 0)
  103. cheatedStack.setAmount(1);
  104. if (button == 1) {
  105. cheatedStack.setAmount(cheatedStack.getMaxAmount());
  106. }
  107. Core.cheatItems(cheatedStack);
  108. return true;
  109. }
  110. } else {
  111. if (button == 0)
  112. return REIRenderHelper.recipeKeyBind();
  113. else if (button == 1)
  114. return REIRenderHelper.useKeyBind();
  115. }
  116. return false;
  117. }
  118. private void drawStack(int x, int y) {
  119. ContainerGui gui = REIRenderHelper.getOverlayedGui();
  120. REIRenderHelper.getItemRender().zOffset = 200.0F;
  121. REIRenderHelper.getItemRender().renderItemAndGlowInGui(getStack(), x, y);
  122. assert gui != null;
  123. if (((IMixinContainerGui) gui).getDraggedStack().isEmpty())
  124. REIRenderHelper.getItemRender().renderItemOverlaysInGUIWithText(MinecraftClient.getInstance().fontRenderer, getStack(), x, y - 0, getTextOverlay(getStack()));
  125. else
  126. REIRenderHelper.getItemRender().renderItemOverlaysInGUIWithText(MinecraftClient.getInstance().fontRenderer, getStack(), x, y - 8, getTextOverlay(getStack()));
  127. REIRenderHelper.getItemRender().zOffset = 0.0F;
  128. }
  129. public String getTextOverlay(ItemStack stack) {
  130. return "";
  131. }
  132. public String getMod() {
  133. if (!getStack().isEmpty()) {
  134. Identifier location = Registry.ITEM.getId(getStack().getItem());
  135. assert location != null;
  136. return REIRenderHelper.tryGettingModName(location.getNamespace());
  137. }
  138. return "";
  139. }
  140. protected List<String> getTooltip() {
  141. final String modString = "§9§o" + getMod();
  142. MinecraftClient mc = MinecraftClient.getInstance();
  143. ContainerGui gui = REIRenderHelper.getOverlayedGui();
  144. List<String> toolTip = Lists.newArrayList();
  145. if (gui != null)
  146. toolTip = gui.getStackTooltip(getStack()).stream().filter(s -> !s.equals(modString)).collect(Collectors.toList());
  147. else
  148. toolTip.add(getStack().getDisplayName().getFormattedText());
  149. if (extraTooltip != null)
  150. toolTip.add(extraTooltip);
  151. return toolTip;
  152. }
  153. public boolean isCheatable() {
  154. return cheatable;
  155. }
  156. public void setCheatable(boolean cheatable) {
  157. this.cheatable = cheatable;
  158. }
  159. }