瀏覽代碼

Fixed lots of guis

Unknown 6 年之前
父節點
當前提交
df941b4b67

+ 1 - 1
build.gradle

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

+ 2 - 1
src/main/java/me/shedaniel/rei/client/GuiHelper.java

@@ -2,13 +2,14 @@ package me.shedaniel.rei.client;
 
 import me.shedaniel.rei.gui.ContainerGuiOverlay;
 import me.shedaniel.rei.gui.widget.TextFieldWidget;
+import me.shedaniel.rei.listeners.IMixinContainerGui;
 import net.minecraft.client.gui.ContainerGui;
 
 public class GuiHelper {
     
+    public static TextFieldWidget searchField;
     private static boolean overlayVisible = true;
     private static ContainerGuiOverlay overlay;
-    public static TextFieldWidget searchField;
     
     public static boolean isOverlayVisible() {
         return overlayVisible;

+ 17 - 0
src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java

@@ -1,6 +1,7 @@
 package me.shedaniel.rei.gui;
 
 import com.mojang.blaze3d.platform.GlStateManager;
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
 import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.GuiHelper;
 import me.shedaniel.rei.gui.widget.*;
@@ -30,6 +31,7 @@ public class ContainerGuiOverlay extends Gui {
     private IMixinContainerGui containerGui;
     private Window window;
     private ButtonWidget buttonLeft, buttonRight;
+    private int lastLeft;
     
     public ContainerGuiOverlay(ContainerGui containerGui) {
         this.queuedTooltips = new ArrayList<>();
@@ -45,6 +47,7 @@ public class ContainerGuiOverlay extends Gui {
             this.containerGui = (IMixinContainerGui) MinecraftClient.getInstance().currentGui;
         this.rectangle = calculateBoundary();
         widgets.add(this.itemListOverlay = new ItemListOverlay(containerGui, page));
+        this.lastLeft = getLeft();
         
         this.itemListOverlay.updateList(getItemListArea(), page, searchTerm);
         widgets.add(buttonLeft = new ButtonWidget(rectangle.x, rectangle.y + 5, 16, 16, "<") {
@@ -133,6 +136,8 @@ public class ContainerGuiOverlay extends Gui {
     }
     
     public void render(int mouseX, int mouseY, float partialTicks) {
+        if (getLeft() != lastLeft)
+            onInitialized();
         GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
         GuiLighting.disable();
         this.draw(mouseX, mouseY, partialTicks);
@@ -142,6 +147,10 @@ public class ContainerGuiOverlay extends Gui {
         GuiLighting.disable();
     }
     
+    public void setContainerGui(IMixinContainerGui containerGui) {
+        this.containerGui = containerGui;
+    }
+    
     public void addTooltip(QueuedTooltip queuedTooltip) {
         queuedTooltips.add(queuedTooltip);
     }
@@ -171,6 +180,14 @@ public class ContainerGuiOverlay extends Gui {
         return new Rectangle(startX, 0, width, window.getScaledHeight());
     }
     
+    private int getLeft() {
+        if (MinecraftClient.getInstance().currentGui instanceof RecipeViewingWidget) {
+            RecipeViewingWidget widget = (RecipeViewingWidget) MinecraftClient.getInstance().currentGui;
+            return widget.getBounds().x;
+        }
+        return containerGui.getContainerLeft();
+    }
+    
     private int getTotalPage() {
         return MathHelper.ceil(itemListOverlay.getCurrentDisplayed().size() / itemListOverlay.getTotalSlotsPerPage());
     }

+ 7 - 0
src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java

@@ -0,0 +1,7 @@
+package me.shedaniel.rei.listeners;
+
+public interface IMixinTabGetter {
+    
+    public int getSelectedTab();
+    
+}

+ 22 - 22
src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java

@@ -1,13 +1,18 @@
 package me.shedaniel.rei.mixin;
 
+import me.shedaniel.rei.RoughlyEnoughItemsCore;
+import me.shedaniel.rei.client.ClientHelper;
 import me.shedaniel.rei.client.GuiHelper;
 import me.shedaniel.rei.gui.ContainerGuiOverlay;
 import me.shedaniel.rei.listeners.IMixinContainerGui;
+import me.shedaniel.rei.listeners.IMixinTabGetter;
 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.client.gui.ingame.CreativePlayerInventoryGui;
 import net.minecraft.container.Slot;
+import net.minecraft.item.ItemGroup;
 import net.minecraft.item.ItemStack;
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
@@ -27,14 +32,12 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui {
     protected int containerWidth;
     @Shadow
     protected int containerHeight;
-    
+    @Shadow
+    protected Slot focusedSlot;
     private ContainerGui lastGui;
-    
     @Shadow
     private ItemStack field_2782;
     
-    @Shadow protected Slot focusedSlot;
-    
     @Override
     public int getContainerLeft() {
         return left;
@@ -68,6 +71,11 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui {
     
     @Inject(method = "draw(IIF)V", at = @At("RETURN"))
     public void draw(int int_1, int int_2, float float_1, CallbackInfo info) {
+        if (MinecraftClient.getInstance().currentGui instanceof CreativePlayerInventoryGui) {
+            IMixinTabGetter tabGetter = (IMixinTabGetter) MinecraftClient.getInstance().currentGui;
+            if (tabGetter.getSelectedTab() != ItemGroup.INVENTORY.getId())
+                return;
+        }
         if (MinecraftClient.getInstance().currentGui instanceof ContainerGui)
             this.lastGui = (ContainerGui) MinecraftClient.getInstance().currentGui;
         GuiHelper.getOverlay(lastGui).render(int_1, int_2, float_1);
@@ -83,24 +91,6 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui {
         return lastGui;
     }
     
-    // TODO into an inject
-    @Override
-    public boolean mouseScrolled(double double_1) {
-        for(GuiEventListener entry : this.getEntries())
-            if (entry.mouseScrolled(double_1))
-                return true;
-        return false;
-    }
-    
-    // TODO into an inject
-    @Override
-    public boolean charTyped(char char_1, int int_1) {
-        for(GuiEventListener entry : this.getEntries())
-            if (entry.charTyped(char_1, int_1))
-                return true;
-        return false;
-    }
-    
     @Inject(method = "keyPressed(III)Z", at = @At("HEAD"), cancellable = true)
     public void keyPressed(int int_1, int int_2, int int_3, CallbackInfoReturnable<Boolean> ci) {
         for(GuiEventListener entry : this.getEntries())
@@ -115,4 +105,14 @@ public class MixinContainerGui extends Gui implements IMixinContainerGui {
         return focusedSlot;
     }
     
+    @Override
+    public boolean mouseScrolled(double double_1) {
+        ContainerGuiOverlay overlay = GuiHelper.getOverlay(lastGui);
+        if (GuiHelper.isOverlayVisible() && overlay.getRectangle().contains(ClientHelper.getMouseLocation()))
+            for(GuiEventListener entry : this.getEntries())
+                if (entry.mouseScrolled(double_1))
+                    return true;
+        return super.mouseScrolled(double_1);
+    }
+    
 }

+ 40 - 0
src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableGui.java

@@ -0,0 +1,40 @@
+package me.shedaniel.rei.mixin;
+
+import net.minecraft.client.gui.ContainerGui;
+import net.minecraft.client.gui.GuiEventListener;
+import net.minecraft.client.gui.container.CraftingTableGui;
+import net.minecraft.client.gui.recipebook.RecipeBookGui;
+import net.minecraft.container.Container;
+import net.minecraft.entity.player.PlayerInventory;
+import net.minecraft.text.TextComponent;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+@Mixin(CraftingTableGui.class)
+public abstract class MixinCraftingTableGui extends ContainerGui {
+    
+    @Shadow @Final private RecipeBookGui recipeBookGui;
+    
+    public MixinCraftingTableGui(Container container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
+        super(container_1, playerInventory_1, textComponent_1);
+    }
+    
+    @Override
+    public GuiEventListener getFocused() {
+        return super.getFocused();
+    }
+    
+    @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
+    public void mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> ci) {
+        if (recipeBookGui.mouseClicked(mouseX, mouseY, button)) {
+            focusOn(recipeBookGui);
+            ci.setReturnValue(true);
+            ci.cancel();
+        }
+    }
+    
+}

+ 62 - 0
src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryGui.java

@@ -0,0 +1,62 @@
+package me.shedaniel.rei.mixin;
+
+import me.shedaniel.rei.listeners.IMixinTabGetter;
+import net.minecraft.client.gui.ingame.AbstractPlayerInventoryGui;
+import net.minecraft.client.gui.ingame.CreativePlayerInventoryGui;
+import net.minecraft.entity.player.PlayerInventory;
+import net.minecraft.item.ItemGroup;
+import net.minecraft.text.TextComponent;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+@Mixin(CreativePlayerInventoryGui.class)
+public abstract class MixinCreativePlayerInventoryGui extends AbstractPlayerInventoryGui<CreativePlayerInventoryGui.CreativeContainer> implements IMixinTabGetter {
+    
+    @Shadow
+    private static int selectedTab;
+    @Shadow
+    private boolean field_2888;
+    
+    public MixinCreativePlayerInventoryGui(CreativePlayerInventoryGui.CreativeContainer container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
+        super(container_1, playerInventory_1, textComponent_1);
+    }
+    
+    @Shadow
+    protected abstract boolean doRenderScrollBar();
+    
+    @Override
+    public int getSelectedTab() {
+        return selectedTab;
+    }
+    
+    @Inject(method = "mouseScrolled", at = @At("HEAD"), cancellable = true)
+    public void mouseScrolled(double amount, CallbackInfoReturnable<Boolean> ci) {
+        if (!doRenderScrollBar())
+            if (super.mouseScrolled(amount)) {
+                ci.setReturnValue(true);
+                ci.cancel();
+            }
+    }
+    
+    @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true)
+    public void keyPressed(int int_1, int int_2, int int_3, CallbackInfoReturnable<Boolean> ci) {
+        if (selectedTab == ItemGroup.INVENTORY.getId())
+            if (super.keyPressed(int_1, int_2, int_3)) {
+                ci.setReturnValue(true);
+                ci.cancel();
+            }
+    }
+    
+    @Inject(method = "charTyped", at = @At("HEAD"), cancellable = true)
+    public void charTyped(char char_1, int int_1, CallbackInfoReturnable<Boolean> ci) {
+        if (!this.field_2888 && selectedTab == ItemGroup.INVENTORY.getId())
+            if (super.charTyped(char_1, int_1)) {
+                ci.setReturnValue(true);
+                ci.cancel();
+            }
+    }
+    
+}

+ 41 - 0
src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryGui.java

@@ -0,0 +1,41 @@
+package me.shedaniel.rei.mixin;
+
+import net.minecraft.client.gui.GuiEventListener;
+import net.minecraft.client.gui.ingame.AbstractPlayerInventoryGui;
+import net.minecraft.client.gui.ingame.PlayerInventoryGui;
+import net.minecraft.client.gui.ingame.RecipeBookProvider;
+import net.minecraft.client.gui.recipebook.RecipeBookGui;
+import net.minecraft.container.PlayerContainer;
+import net.minecraft.entity.player.PlayerInventory;
+import net.minecraft.text.TextComponent;
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+@Mixin(PlayerInventoryGui.class)
+public abstract class MixinPlayerInventoryGui extends AbstractPlayerInventoryGui<PlayerContainer> implements RecipeBookProvider {
+    
+    @Shadow @Final private RecipeBookGui recipeBook;
+    
+    public MixinPlayerInventoryGui(PlayerContainer container_1, PlayerInventory playerInventory_1, TextComponent textComponent_1) {
+        super(container_1, playerInventory_1, textComponent_1);
+    }
+    
+    @Override
+    public GuiEventListener getFocused() {
+        return super.getFocused();
+    }
+    
+    @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
+    public void mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> ci) {
+        if (recipeBook.mouseClicked(mouseX, mouseY, button)) {
+            focusOn(recipeBook);
+            ci.setReturnValue(true);
+            ci.cancel();
+        }
+    }
+    
+}

+ 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.31",
+  "version": "2.0.0.32",
   "side": "client",
   "authors": [
     "Danielshe"

+ 4 - 1
src/main/resources/roughlyenoughitems.client.json

@@ -4,7 +4,10 @@
   "compatibilityLevel": "JAVA_8",
   "mixins": [
     "MixinContainerGui",
-    "MixinClientPlayNetworkHandler"
+    "MixinClientPlayNetworkHandler",
+    "MixinPlayerInventoryGui",
+    "MixinCraftingTableGui",
+    "MixinCreativePlayerInventoryGui"
   ],
   "injectors": {
     "defaultRequire": 1