Unknown 6 年之前
父節點
當前提交
1ac6e0efb3

+ 1 - 1
build.gradle

@@ -6,7 +6,7 @@ sourceCompatibility = 1.8
 targetCompatibility = 1.8
 
 archivesBaseName = "RoughlyEnoughItems"
-version = "2.0.0.30"
+version = "2.0.0.31"
 
 minecraft {
 }

+ 2 - 1
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);
         });
     }
     

+ 18 - 0
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());
     }
     
 }

+ 0 - 1
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;

+ 9 - 0
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);

+ 0 - 4
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;

+ 32 - 1
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;
     }
     

+ 1 - 1
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));

+ 9 - 4
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()));

+ 3 - 0
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);

+ 8 - 0
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;
+    }
+    
 }

+ 3 - 3
src/main/resources/assets/roughlyenoughitems/lang/en_us.json

@@ -1,8 +1,8 @@
 {
   "key.rei.category": "Roughly Enough Items",
-  "key.rei.recipe": "Show Recipe",
-  "key.rei.hide": "Hide/Show REI",
-  "key.rei.use": "Show Uses",
+  "key.roughlyenoughitems.recipe_keybind": "Show Recipe",
+  "key.roughlyenoughitems.hide_keybind": "Hide/Show REI",
+  "key.roughlyenoughitems.usage_keybind": "Show Uses",
   "text.rei.cheat": "Cheat",
   "text.rei.nocheat": "§4§mCheat",
   "text.rei.mod": "§9§o%s",

+ 1 - 1
src/main/resources/fabric.mod.json

@@ -2,7 +2,7 @@
   "id": "roughlyenoughitems",
   "name": "RoughlyEnoughItems",
   "description": "To allow players to view items and recipes.",
-  "version": "2.0.0.30",
+  "version": "2.0.0.31",
   "side": "client",
   "authors": [
     "Danielshe"