ScreenHelper.java 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * Roughly Enough Items by Danielshe.
  3. * Licensed under the MIT License.
  4. */
  5. package me.shedaniel.rei.client;
  6. import com.google.common.collect.Lists;
  7. import me.shedaniel.rei.gui.ContainerScreenOverlay;
  8. import me.shedaniel.rei.gui.widget.SearchFieldWidget;
  9. import me.shedaniel.rei.listeners.ContainerScreenHooks;
  10. import net.fabricmc.api.ClientModInitializer;
  11. import net.fabricmc.fabric.api.event.client.ClientTickCallback;
  12. import net.minecraft.client.MinecraftClient;
  13. import net.minecraft.client.gui.screen.ingame.AbstractContainerScreen;
  14. import net.minecraft.client.util.Window;
  15. import net.minecraft.item.ItemStack;
  16. import org.apache.logging.log4j.util.TriConsumer;
  17. import java.awt.*;
  18. import java.util.List;
  19. public class ScreenHelper implements ClientModInitializer {
  20. public static SearchFieldWidget searchField;
  21. public static List<ItemStack> inventoryStacks = Lists.newArrayList();
  22. private static boolean overlayVisible = true;
  23. private static ContainerScreenOverlay overlay;
  24. private static AbstractContainerScreen lastContainerScreen = null;
  25. public static boolean isOverlayVisible() {
  26. return overlayVisible;
  27. }
  28. public static void toggleOverlayVisible() {
  29. overlayVisible = !overlayVisible;
  30. }
  31. public static ContainerScreenOverlay getLastOverlay(boolean reset, boolean setPage) {
  32. if (overlay == null || reset) {
  33. overlay = new ContainerScreenOverlay();
  34. overlay.init(setPage);
  35. }
  36. return overlay;
  37. }
  38. public static ContainerScreenOverlay getLastOverlay() {
  39. return getLastOverlay(false, false);
  40. }
  41. public static AbstractContainerScreen getLastContainerScreen() {
  42. return lastContainerScreen;
  43. }
  44. public static void setLastContainerScreen(AbstractContainerScreen lastContainerScreen) {
  45. ScreenHelper.lastContainerScreen = lastContainerScreen;
  46. }
  47. public static ContainerScreenHooks getLastContainerScreenHooks() {
  48. return (ContainerScreenHooks) lastContainerScreen;
  49. }
  50. public static void drawHoveringWidget(int x, int y, TriConsumer<Integer, Integer, Float> consumer, int width, int height, float delta) {
  51. Window window = MinecraftClient.getInstance().window;
  52. drawHoveringWidget(new Dimension(window.getScaledWidth(), window.getScaledHeight()), x, y, consumer, width, height, delta);
  53. }
  54. public static void drawHoveringWidget(Dimension dimension, int x, int y, TriConsumer<Integer, Integer, Float> consumer, int width, int height, float delta) {
  55. int actualX = Math.max(x + 12, 6);
  56. int actualY = Math.min(y - height / 2, dimension.height - height - 6);
  57. if (actualX + width > dimension.width)
  58. actualX -= 24 + width;
  59. if (actualY < 6)
  60. actualY += 24;
  61. consumer.accept(actualX, actualY, delta);
  62. }
  63. @Override
  64. public void onInitializeClient() {
  65. ClientTickCallback.EVENT.register(client -> {
  66. if (lastContainerScreen != client.currentScreen && client.currentScreen instanceof AbstractContainerScreen)
  67. lastContainerScreen = (AbstractContainerScreen) client.currentScreen;
  68. });
  69. }
  70. }