123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- package me.shedaniel.gui;
- import com.mojang.blaze3d.platform.GlStateManager;
- import me.shedaniel.gui.widget.Control;
- import me.shedaniel.gui.widget.IFocusable;
- import me.shedaniel.gui.widget.REISlot;
- import me.shedaniel.impl.REIRecipeManager;
- import me.shedaniel.library.KeyBindManager;
- import me.shedaniel.listenerdefinitions.IMixinContainerGui;
- import net.fabricmc.loader.FabricLoader;
- import net.minecraft.client.MinecraftClient;
- import net.minecraft.client.font.FontRenderer;
- import net.minecraft.client.gui.ContainerGui;
- import net.minecraft.client.render.item.ItemRenderer;
- import net.minecraft.client.util.Window;
- import net.minecraft.item.ItemStack;
- import java.awt.*;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Optional;
- /**
- * Created by James on 7/28/2018.
- */
- public class REIRenderHelper {
- static Point mouseLoc;
- static public GuiItemList reiGui;
- static ContainerGui overlayedGui;
- static List<TooltipData> tooltipsToRender = new ArrayList<>();
-
- public static void setMouseLoc(int x, int y) {
- mouseLoc = new Point(x, y);
- }
-
- static public IFocusable focusedControl;
-
- public static Point getMouseLoc() {
- return mouseLoc;
- }
-
- public static Window getResolution() {
- return MinecraftClient.getInstance().window;
- }
-
- public static String tryGettingModName(String modid) {
- if (modid.equalsIgnoreCase("minecraft"))
- return "Minecraft";
- return FabricLoader.INSTANCE.getModContainers().stream()
- .map(modContainer -> {
- return modContainer.getInfo();
- })
- .filter(modInfo -> modInfo.getId().equals(modid) || (modInfo.getName() != null && modInfo.getName().equals(modid)))
- .findFirst().map(modInfo -> {
- if (modInfo.getName() != null)
- return modInfo.getName();
- return modid;
- }).orElse(modid);
- }
-
- public static void drawREI(ContainerGui overlayedGui) {
- REIRenderHelper.overlayedGui = overlayedGui;
- if (reiGui == null) {
- reiGui = new GuiItemList(overlayedGui);
- }
- reiGui.draw();
- renderTooltips();
- }
-
- public static void resize(int scaledWidth, int scaledHeight) {
- if (reiGui != null) {
- reiGui.resize();
- }
- if (overlayedGui instanceof RecipeGui) {
- overlayedGui.onScaleChanged(MinecraftClient.getInstance(), scaledWidth, scaledHeight);
- }
- }
-
- public static ItemRenderer getItemRender() {
- return MinecraftClient.getInstance().getItemRenderer();
- }
-
- public static FontRenderer getFontRenderer() {
- return MinecraftClient.getInstance().fontRenderer;
- }
-
- public static ContainerGui getOverlayedGui() {
- if (overlayedGui instanceof ContainerGui)
- return overlayedGui;
- return null;
- }
-
- public static void addToolTip(List<String> text, int x, int y) {
- tooltipsToRender.add(new TooltipData(text, x, y));
- }
-
-
- private static void renderTooltips() {
- GlStateManager.pushMatrix();
- GlStateManager.enableLighting();
- for(TooltipData tooltipData : tooltipsToRender) {
- getOverlayedGui().drawTooltip(tooltipData.text, tooltipData.x, tooltipData.y);
- }
- GlStateManager.disableLighting();
- tooltipsToRender.clear();
- GlStateManager.popMatrix();
-
- }
-
- public static boolean mouseClick(int x, int y, int button) {
- if (reiGui.visible) {
- for(Control control : reiGui.controls) {
- if (control.isHighlighted() && control.isEnabled() && control.onClick != null) {
- if (focusedControl != null)
- focusedControl.setFocused(false);
- if (control instanceof IFocusable) {
- focusedControl = (IFocusable) control;
- ((IFocusable) control).setFocused(true);
- }
- return control.onClick.apply(button);
- }
- }
- if (focusedControl != null) {
- focusedControl.setFocused(false);
- focusedControl = null;
- }
- }
- if (overlayedGui instanceof RecipeGui) {
- List<Control> controls = ((RecipeGui) overlayedGui).controls;
- Optional<Control> ctrl = controls.stream().filter(Control::isHighlighted).filter(Control::isEnabled).findFirst();
- if (ctrl.isPresent()) {
- try {
- return ctrl.get().onClick.apply(button);
- } catch (Exception e) {
- }
- }
- }
- return false;
- }
-
- public static boolean keyDown(int typedChar, int keyCode, int unknown) {
- boolean handled = false;
- if (focusedControl != null && focusedControl instanceof Control) {
- Control control = (Control) focusedControl;
- if (control.onKeyDown != null) {
- handled = control.onKeyDown.accept(typedChar, keyCode, unknown);
- }
- if (control.charPressed != null)
- if (typedChar == 256) {
- ((IFocusable) control).setFocused(false);
- focusedControl = null;
- }
- handled = true;
- }
- if (!handled) {
- return KeyBindManager.processGuiKeybinds(typedChar);
- }
- return handled;
- }
-
- public static boolean charInput(long num, int keyCode, int unknown) {
- if (focusedControl != null && focusedControl instanceof Control) {
- Control control = (Control) focusedControl;
- if (control.charPressed != null) {
- int numChars = Character.charCount(keyCode);
- if (num == numChars)
- control.charPressed.accept((char) keyCode, unknown);
- else {
- char[] chars = Character.toChars(keyCode);
- for(int x = 0; x < chars.length; x++) {
- control.charPressed.accept(chars[x], unknown);
- }
- }
- return true;
- }
- }
- return false;
- }
-
- public static boolean mouseScrolled(double direction) {
- if (!reiGui.visible)
- return false;
- if (direction > 0 && reiGui.buttonLeft.isEnabled())
- reiGui.buttonLeft.onClick.apply(0);
- else if (direction < 0 && reiGui.buttonRight.isEnabled())
- reiGui.buttonRight.onClick.apply(0);
- return true;
- }
-
- private static class TooltipData {
-
- private final List<String> text;
- private final int x;
- private final int y;
-
- public TooltipData(List<String> text, int x, int y) {
- this.text = text;
- this.x = x;
- this.y = y;
- }
- }
-
- public static void updateSearch() {
- reiGui.updateView();
- }
-
- public static void tick() {
- if (reiGui != null && MinecraftClient.getInstance().currentGui == overlayedGui)
- reiGui.tick();
- }
-
- public static void recipeKeybind() {
- if (!(MinecraftClient.getInstance().currentGui instanceof ContainerGui))
- return;
- Control control = reiGui.getLastHovered();
- if (control != null && control.isHighlighted() && control instanceof REISlot) {
- REISlot slot = (REISlot) control;
- REIRecipeManager.instance().displayRecipesFor(slot.getStack());
- return;
- }
- if (((IMixinContainerGui) overlayedGui).getHoveredSlot() != null) {
- ItemStack stack = ((IMixinContainerGui) overlayedGui).getHoveredSlot().getStack();
- REIRecipeManager.instance().displayRecipesFor(stack);
- }
-
- }
-
- public static void useKeybind() {
- if (!(MinecraftClient.getInstance().currentGui instanceof ContainerGui))
- return;
- Control control = reiGui.getLastHovered();
- if (control != null && control.isHighlighted() && control instanceof REISlot) {
- REISlot slot = (REISlot) control;
- REIRecipeManager.instance().displayUsesFor(slot.getStack());
- return;
- }
- if (((IMixinContainerGui) overlayedGui).getHoveredSlot() != null) {
- ItemStack stack = ((IMixinContainerGui) overlayedGui).getHoveredSlot().getStack();
- REIRecipeManager.instance().displayUsesFor(stack);
- }
-
- }
-
- public static void hideKeybind() {
- if (MinecraftClient.getInstance().currentGui == overlayedGui && reiGui != null) {
- reiGui.visible = !reiGui.visible;
- }
- }
- }
|