Advertisement
Guest User

HUDConfigScreen

a guest
Feb 29th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.30 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.util.Collection;
  3. import java.util.HashMap;
  4. import java.util.Optional;
  5.  
  6. import org.lwjgl.input.Keyboard;
  7.  
  8. import com.google.common.base.Predicate;
  9.  
  10. import net.minecraft.client.Minecraft;
  11. import net.minecraft.client.gui.GuiScreen;
  12. import net.minecraft.client.gui.ScaledResolution;
  13.  
  14. public class HUDConfigScreen extends GuiScreen {
  15.  
  16. private final HashMap<IRenderer, ScreenPosition> renderes = new HashMap<IRenderer, ScreenPosition>();
  17.  
  18. private Optional<IRenderer> selectedRenderer = Optional.empty();
  19.  
  20. private int prevX, prevY;
  21.  
  22. public HUDConfigScreen(HUDManager api) {
  23.  
  24. Collection<IRenderer> registerdRenderers = api.getRegisteredRenders();
  25.  
  26. for(IRenderer ren : registerdRenderers) {
  27. if(!ren.isEnabled()) {
  28. continue;
  29. }
  30.  
  31. ScreenPosition pos = ren.load();
  32.  
  33. if(pos == null) {
  34. pos = ScreenPosition.fromRelativePosition(0.5, 0.5);
  35. }
  36.  
  37. adjustBounds(ren, pos);
  38. this.renderes.put(ren, pos);
  39. }
  40. }
  41.  
  42. @Override
  43. public void drawScreen(int mouseX, int mouseY, float partailTicks) {
  44.  
  45. super.drawDefaultBackground();
  46.  
  47. final float zBackup = this.zLevel;
  48. this.zLevel = 200;
  49.  
  50. this.drawHollowRect(0, 0, this.width - 1, this.height - 1, 0xFFFF0000);
  51.  
  52. for(IRenderer renderer : renderes.keySet()) {
  53.  
  54. ScreenPosition pos = renderes.get(renderer);
  55.  
  56. renderer.renderDummy(pos);
  57.  
  58. this.drawHollowRect(pos.getAbsoluteX(), pos.getAbsoluteY(), renderer.getWidth(), renderer.getHeight(), 0xFF00FFFF);
  59. }
  60.  
  61. this.zLevel = zBackup;
  62.  
  63. }
  64.  
  65. private void drawHollowRect(int x, int y, int w, int h, int color) {
  66. this.drawHorizontalLine(x, x + w, y, color);
  67. this.drawHorizontalLine(x, x + w, y + h, color);
  68.  
  69. this.drawVerticalLine(x, y + h, y, color);
  70. this.drawVerticalLine(x + w, y + h, y, color);
  71. }
  72.  
  73. @Override
  74. protected void keyTyped(char typedChar, int keyCode) throws IOException {
  75. if(keyCode == Keyboard.KEY_ESCAPE) {
  76. renderes.entrySet().forEach((entry) -> {
  77. entry.getKey().save(entry.getValue());
  78. });
  79. this.mc.displayGuiScreen(null);
  80. }
  81. }
  82.  
  83. @Override
  84. protected void mouseClickMove(int x, int y, int button, long time) {
  85. if(selectedRenderer.isPresent()) {
  86. moveSelectedRenderBy(x - prevX, y - prevY);
  87. }
  88.  
  89. this.prevX = x;
  90. this.prevY = y;
  91. }
  92.  
  93. private void moveSelectedRenderBy(int offsetX, int offsetY) {
  94. IRenderer renderer = selectedRenderer.get();
  95. ScreenPosition pos = renderes.get(renderer);
  96.  
  97. pos.setAbsolute(pos.getAbsoluteX() + offsetX, pos.getAbsoluteY() + offsetY);
  98.  
  99. adjustBounds(renderer, pos);
  100. }
  101.  
  102. @Override
  103. public void onGuiClosed() {
  104.  
  105. for(IRenderer renderer : renderes.keySet()) {
  106. renderer.save(renderes.get(renderer));
  107. }
  108.  
  109. }
  110.  
  111. @Override
  112. public boolean doesGuiPauseGame() {
  113. return true;
  114. }
  115.  
  116. private void adjustBounds(IRenderer renderer, ScreenPosition pos) {
  117.  
  118. ScaledResolution res = new ScaledResolution(Minecraft.getMinecraft());
  119.  
  120. int screenWidth = res.getScaledWidth();
  121. int screenHeight = res.getScaledHeight();
  122.  
  123. int absoluteX = Math.max(0, Math.min(pos.getAbsoluteX(), Math.max(screenWidth - renderer.getWidth(), 0)));
  124. int absoluteY = Math.max(0, Math.min(pos.getAbsoluteY(), Math.max(screenHeight - renderer.getHeight(), 0)));
  125.  
  126. pos.setAbsolute(absoluteX, absoluteY);
  127. }
  128.  
  129. @Override
  130. protected void mouseClicked(int x, int y, int mobuttonuseButton) throws IOException {
  131. this.prevX = x;
  132. this.prevY = y;
  133.  
  134. loadMouseOver(x, y);
  135. }
  136.  
  137. private void loadMouseOver(int x, int y) {
  138. this.selectedRenderer = renderes.keySet().stream().filter((java.util.function.Predicate<? super IRenderer>) new MouseOverFinder(x, y)).findFirst();
  139.  
  140. }
  141.  
  142. private class MouseOverFinder implements Predicate<IRenderer> {
  143.  
  144. private int mouseX, mouseY;
  145.  
  146. public MouseOverFinder(int x, int y) {
  147. this.mouseX = x;
  148. this.mouseY = y;
  149. }
  150.  
  151. @Override
  152. public boolean apply(IRenderer renderer) {
  153.  
  154. ScreenPosition pos = renderes.get(renderer);
  155.  
  156. int absoluteX = pos.getAbsoluteX();
  157. int absoluteY = pos.getAbsoluteY();
  158.  
  159. if(mouseX >= absoluteX && mouseX <= absoluteX + renderer.getWidth()) {
  160.  
  161. if(mouseY >= absoluteY && mouseY <= absoluteY + renderer.getHeight()) {
  162. return true;
  163. }
  164. }
  165.  
  166. return false;
  167. }
  168. }
  169. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement