REISlot.java 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. package me.shedaniel.gui.widget;
  2. import com.google.common.collect.Lists;
  3. import me.shedaniel.gui.REIRenderHelper;
  4. import me.shedaniel.impl.REIRecipeManager;
  5. import me.shedaniel.listenerdefinitions.IMixinGuiContainer;
  6. import me.shedaniel.network.CheatPacket;
  7. import me.shedaniel.network.DeletePacket;
  8. import net.minecraft.client.Minecraft;
  9. import net.minecraft.client.gui.inventory.GuiContainer;
  10. import net.minecraft.client.renderer.RenderHelper;
  11. import net.minecraft.entity.player.EntityPlayer;
  12. import net.minecraft.item.ItemStack;
  13. import net.minecraft.util.ResourceLocation;
  14. import net.minecraft.util.registry.IRegistry;
  15. import java.awt.*;
  16. import java.util.LinkedList;
  17. import java.util.List;
  18. /**
  19. * Created by James on 7/28/2018.
  20. */
  21. public class REISlot extends Control {
  22. private static final ResourceLocation RECIPE_GUI = new ResourceLocation("almostenoughitems", "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. Minecraft.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. RenderHelper.enableGUIStandardItemLighting();
  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. EntityPlayer player = Minecraft.getInstance().player;
  91. if (REIRenderHelper.reiGui.canCheat() && !(player.inventory.getItemStack().isEmpty())) {
  92. //Delete the itemstack.
  93. Minecraft.getInstance().getConnection().sendPacket(new DeletePacket());
  94. return true;
  95. }
  96. if (!player.inventory.getItemStack().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.setCount(1);
  104. if (button == 1) {
  105. cheatedStack.setCount(cheatedStack.getMaxStackSize());
  106. }
  107. Minecraft.getInstance().getConnection().sendPacket(new CheatPacket(cheatedStack));
  108. return true;
  109. }
  110. } else {
  111. REIRenderHelper.recipeKeybind();
  112. }
  113. return false;
  114. }
  115. private void drawStack(int x, int y) {
  116. GuiContainer gui = REIRenderHelper.getOverlayedGui();
  117. REIRenderHelper.getItemRender().zLevel = 200.0F;
  118. REIRenderHelper.getItemRender().renderItemAndEffectIntoGUI(getStack(), x, y);
  119. assert gui != null;
  120. if (((IMixinGuiContainer) gui).getDraggedStack().isEmpty())
  121. REIRenderHelper.getItemRender().renderItemOverlayIntoGUI(Minecraft.getInstance().fontRenderer, getStack(), x, y - 0, "");
  122. else
  123. REIRenderHelper.getItemRender().renderItemOverlayIntoGUI(Minecraft.getInstance().fontRenderer, getStack(), x, y - 8, "");
  124. REIRenderHelper.getItemRender().zLevel = 0.0F;
  125. }
  126. public String getMod() {
  127. if (!getStack().isEmpty()) {
  128. ResourceLocation location = IRegistry.ITEM.getKey(getStack().getItem());
  129. assert location != null;
  130. return REIRenderHelper.tryGettingModName(location.getNamespace());
  131. }
  132. return "";
  133. }
  134. protected List<String> getTooltip() {
  135. Minecraft mc = Minecraft.getInstance();
  136. GuiContainer gui = REIRenderHelper.getOverlayedGui();
  137. List<String> toolTip = Lists.newArrayList();
  138. if (gui != null) {
  139. toolTip = gui.getItemToolTip(getStack());
  140. } else {
  141. toolTip.add(getStack().getDisplayName().getFormattedText());
  142. }
  143. if (extraTooltip != null) {
  144. toolTip.add(extraTooltip);
  145. }
  146. return toolTip;
  147. }
  148. public boolean isCheatable() {
  149. return cheatable;
  150. }
  151. public void setCheatable(boolean cheatable) {
  152. this.cheatable = cheatable;
  153. }
  154. }