diff options
Diffstat (limited to 'src/main/java')
10 files changed, 82 insertions, 12 deletions
diff --git a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java index a3618898d..157d8bd26 100644 --- a/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java +++ b/src/main/java/me/shedaniel/rei/RoughlyEnoughItemsCore.java @@ -90,7 +90,8 @@ public class RoughlyEnoughItemsCore implements ClientModInitializer, ModInitiali ItemStack stack = packetByteBuf.readItemStack(); if (player.inventory.insertStack(stack.copy())) player.sendChatMessage(new TranslatableTextComponent("text.rei.cheat_items", stack.getDisplayName().getFormattedText(), stack.getAmount(), player.getEntityName()), ChatMessageType.SYSTEM); - else player.sendChatMessage(new TranslatableTextComponent("text.rei.failed_cheat_items"), ChatMessageType.SYSTEM); + else + player.sendChatMessage(new TranslatableTextComponent("text.rei.failed_cheat_items"), ChatMessageType.SYSTEM); }); } diff --git a/src/main/java/me/shedaniel/rei/client/ClientHelper.java b/src/main/java/me/shedaniel/rei/client/ClientHelper.java index ea7ce4d24..306ddaa6b 100644 --- a/src/main/java/me/shedaniel/rei/client/ClientHelper.java +++ b/src/main/java/me/shedaniel/rei/client/ClientHelper.java @@ -10,9 +10,13 @@ import me.shedaniel.rei.gui.widget.RecipeViewingWidget; import me.shedaniel.rei.listeners.ClientLoaded; import me.shedaniel.rei.listeners.IMixinContainerGui; import net.fabricmc.api.ClientModInitializer; +import net.fabricmc.fabric.api.client.keybinding.FabricKeyBinding; +import net.fabricmc.fabric.impl.client.keybinding.KeyBindingRegistryImpl; import net.fabricmc.loader.FabricLoader; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; +import net.minecraft.client.resource.language.I18n; +import net.minecraft.client.util.InputUtil; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.item.Item; @@ -24,12 +28,17 @@ import net.minecraft.util.PacketByteBuf; import net.minecraft.util.registry.Registry; import java.awt.*; +import java.awt.event.KeyEvent; import java.util.HashMap; import java.util.List; import java.util.Map; public class ClientHelper implements ClientLoaded, ClientModInitializer { + private static final Identifier RECIPE_KEYBIND = new Identifier("roughlyenoughitems", "recipe_keybind"); + private static final Identifier USAGE_KEYBIND = new Identifier("roughlyenoughitems", "usage_keybind"); + private static final Identifier HIDE_KEYBIND = new Identifier("roughlyenoughitems", "hide_keybind"); + public static FabricKeyBinding RECIPE, USAGE, HIDE; private static List<ItemStack> itemList; private static boolean cheating; @@ -134,6 +143,15 @@ public class ClientHelper implements ClientLoaded, ClientModInitializer { @Override public void onInitializeClient() { this.cheating = false; + registerFabricKeyBinds(); + } + + private void registerFabricKeyBinds() { + String category = "key.rei.category"; + KeyBindingRegistryImpl.INSTANCE.addCategory(category); + KeyBindingRegistryImpl.INSTANCE.register(RECIPE = FabricKeyBinding.Builder.create(RECIPE_KEYBIND, InputUtil.Type.KEY_KEYBOARD, 82, category).build()); + KeyBindingRegistryImpl.INSTANCE.register(USAGE = FabricKeyBinding.Builder.create(USAGE_KEYBIND, InputUtil.Type.KEY_KEYBOARD, 85, category).build()); + KeyBindingRegistryImpl.INSTANCE.register(HIDE = FabricKeyBinding.Builder.create(HIDE_KEYBIND, InputUtil.Type.KEY_KEYBOARD, 79, category).build()); } } diff --git a/src/main/java/me/shedaniel/rei/client/ConfigManager.java b/src/main/java/me/shedaniel/rei/client/ConfigManager.java index a2d4d9890..3ff143f44 100644 --- a/src/main/java/me/shedaniel/rei/client/ConfigManager.java +++ b/src/main/java/me/shedaniel/rei/client/ConfigManager.java @@ -2,7 +2,6 @@ package me.shedaniel.rei.client; import me.shedaniel.rei.RoughlyEnoughItemsCore; import net.fabricmc.loader.FabricLoader; -import org.apache.logging.log4j.core.Core; import java.io.File; import java.io.FileWriter; diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java index 09d05ec2c..21ff9c058 100644 --- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java +++ b/src/main/java/me/shedaniel/rei/client/GuiHelper.java @@ -6,9 +6,18 @@ import net.minecraft.client.gui.ContainerGui; public class GuiHelper { + private static boolean overlayVisible = true; private static ContainerGuiOverlay overlay; public static TextFieldWidget searchField; + public static boolean isOverlayVisible() { + return overlayVisible; + } + + public static void toggleOverlayVisible() { + overlayVisible = !overlayVisible; + } + public static ContainerGuiOverlay getOverlay(ContainerGui lastGui) { if (overlay == null) { overlay = new ContainerGuiOverlay(lastGui); diff --git a/src/main/java/me/shedaniel/rei/client/REIConfig.java b/src/main/java/me/shedaniel/rei/client/REIConfig.java index dfc961f28..2f4060a9f 100644 --- a/src/main/java/me/shedaniel/rei/client/REIConfig.java +++ b/src/main/java/me/shedaniel/rei/client/REIConfig.java @@ -11,10 +11,6 @@ public class REIConfig { .setPrettyPrinting() .create(); - public int recipeKeyBind = KeyEvent.VK_R; - public int usageKeyBind = KeyEvent.VK_U; - public int hideKeyBind = KeyEvent.VK_O; - public boolean centreSearchBox = false; public REIItemListOrdering itemListOrdering = REIItemListOrdering.REGISTRY; public boolean isAscending = true; public boolean enableCraftableOnlyButton = true; diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java index 687f43630..a8000d8d5 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java +++ b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java @@ -12,6 +12,7 @@ import net.minecraft.client.gui.GuiEventListener; import net.minecraft.client.render.GuiLighting; import net.minecraft.client.resource.language.I18n; import net.minecraft.client.util.Window; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.MathHelper; import java.awt.*; @@ -22,12 +23,12 @@ public class ContainerGuiOverlay extends Gui { public static String searchTerm = ""; private static int page = 0; + private static ItemListOverlay itemListOverlay; private final List<IWidget> widgets; private final List<QueuedTooltip> queuedTooltips; private Rectangle rectangle; private IMixinContainerGui containerGui; private Window window; - private static ItemListOverlay itemListOverlay; private ButtonWidget buttonLeft, buttonRight; public ContainerGuiOverlay(ContainerGui containerGui) { @@ -147,6 +148,8 @@ public class ContainerGuiOverlay extends Gui { @Override public void draw(int int_1, int int_2, float float_1) { + if (!GuiHelper.isOverlayVisible()) + return; widgets.forEach(widget -> { GuiLighting.disable(); widget.draw(int_1, int_2, float_1); @@ -193,6 +196,34 @@ public class ContainerGuiOverlay extends Gui { for(GuiEventListener listener : listeners) if (listener.keyPressed(int_1, int_2, int_3)) return true; + Point point = ClientHelper.getMouseLocation(); + ItemStack itemStack = null; + for(IWidget widget : itemListOverlay.getListeners()) + if (widget instanceof ItemSlotWidget && ((ItemSlotWidget) widget).isHighlighted(point.x, point.y)) { + itemStack = ((ItemSlotWidget) widget).getCurrentStack(); + break; + } + if (itemStack == null && MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) { + RecipeViewingWidget recipeViewingWidget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui; + for(GuiEventListener entry : recipeViewingWidget.getEntries()) + if (entry instanceof ItemSlotWidget && ((ItemSlotWidget) entry).isHighlighted(point.x, point.y)) { + itemStack = ((ItemSlotWidget) entry).getCurrentStack(); + break; + } + } + if (itemStack == null && MinecraftClient.getInstance().currentGui instanceof ContainerGui) + if (containerGui.getHoveredSlot() != null) + itemStack = containerGui.getHoveredSlot().getStack(); + if (itemStack != null && !itemStack.isEmpty()) { + if (ClientHelper.RECIPE.matchesKey(int_1, int_2)) + return ClientHelper.executeRecipeKeyBind(this, itemStack, containerGui); + else if (ClientHelper.USAGE.matchesKey(int_1, int_2)) + return ClientHelper.executeUsageKeyBind(this, itemStack, containerGui); + } + if (ClientHelper.HIDE.matchesKey(int_1, int_2)) { + GuiHelper.toggleOverlayVisible(); + return true; + } return false; } diff --git a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java index f87c5a291..bf3897c47 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/ItemSlotWidget.java @@ -100,7 +100,7 @@ public class ItemSlotWidget extends Drawable implements HighlightableWidget { return ""; } - protected ItemStack getCurrentStack() { + public ItemStack getCurrentStack() { if (itemList.size() == 0) return new ItemStack(Items.AIR); return itemList.get(MathHelper.floor((System.currentTimeMillis() / 500 % (double) itemList.size()) / 1f)); diff --git a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java index 90bde332d..365ed3cdd 100644 --- a/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java +++ b/src/main/java/me/shedaniel/rei/gui/widget/RecipeViewingWidget.java @@ -6,6 +6,7 @@ import me.shedaniel.rei.api.IRecipeCategory; import me.shedaniel.rei.api.IRecipeDisplay; import me.shedaniel.rei.client.ClientHelper; import me.shedaniel.rei.client.GuiHelper; +import me.shedaniel.rei.client.RecipeHelper; import me.shedaniel.rei.listeners.IMixinContainerGui; import net.minecraft.client.MinecraftClient; import net.minecraft.client.audio.PositionedSoundInstance; @@ -18,8 +19,9 @@ import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import java.awt.*; -import java.util.*; +import java.util.ArrayList; import java.util.List; +import java.util.Map; public class RecipeViewingWidget extends Gui { @@ -46,8 +48,11 @@ public class RecipeViewingWidget extends Gui { this.widgets = Lists.newArrayList(); this.bounds = new Rectangle(window.getScaledWidth() / 2 - guiWidth / 2, window.getScaledHeight() / 2 - guiHeight / 2, guiWidth, guiHeight); this.categoriesMap = categoriesMap; - this.categories = new LinkedList<>(categoriesMap.keySet()); - Collections.reverse(categories); + this.categories = Lists.newArrayList(); + RecipeHelper.getCategories().forEach(category -> { + if (categoriesMap.containsKey(category)) + categories.add(category); + }); this.selectedCategory = categories.get(0); this.tabs = new ArrayList<>(); } @@ -172,7 +177,7 @@ public class RecipeViewingWidget extends Gui { widgets.addAll(selectedCategory.setupDisplay(getParent(), middleDisplay, new Rectangle((int) getBounds().getCenterX() - 75, getBounds().y + 108, 150, 66))); } } - + GuiHelper.getOverlay(parent.getContainerGui()).onInitialized(); listeners.addAll(tabs); listeners.add(GuiHelper.getOverlay(parent.getContainerGui())); diff --git a/src/main/java/me/shedaniel/rei/listeners/IMixinContainerGui.java b/src/main/java/me/shedaniel/rei/listeners/IMixinContainerGui.java index d87bcebab..812bf70dc 100644 --- a/src/main/java/me/shedaniel/rei/listeners/IMixinContainerGui.java +++ b/src/main/java/me/shedaniel/rei/listeners/IMixinContainerGui.java @@ -2,6 +2,7 @@ package me.shedaniel.rei.listeners; import me.shedaniel.rei.gui.ContainerGuiOverlay; import net.minecraft.client.gui.ContainerGui; +import net.minecraft.container.Slot; import net.minecraft.item.ItemStack; import java.util.List; @@ -18,6 +19,8 @@ public interface IMixinContainerGui { public ItemStack getDraggedStack(); + public Slot getHoveredSlot(); + public ContainerGui getContainerGui(); public void setOverlay(ContainerGuiOverlay overlay); diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java b/src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java index 165141cdc..3c8d65ccf 100644 --- a/src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java +++ b/src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java @@ -7,6 +7,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.ContainerGui; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiEventListener; +import net.minecraft.container.Slot; import net.minecraft.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -32,6 +33,8 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui { @Shadow private ItemStack field_2782; + @Shadow protected Slot focusedSlot; + @Override public int getContainerLeft() { return left; @@ -107,4 +110,9 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui { } } + @Override + public Slot getHoveredSlot() { + return focusedSlot; + } + } |
