REISlot.java 5.8 KB

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