diff options
| author | Unknown <shekwancheung0528@gmail.com> | 2019-01-12 15:23:14 +0800 |
|---|---|---|
| committer | Unknown <shekwancheung0528@gmail.com> | 2019-01-12 15:23:14 +0800 |
| commit | df941b4b679fea60840862298710916720f112b6 (patch) | |
| tree | 16edb6c434960347294a939eaf19d5a85bfdf5cb | |
| parent | 1ac6e0efb3ef837634e23b897ec9dcd826357462 (diff) | |
| download | RoughlyEnoughItems-2.0.0.32.tar.gz RoughlyEnoughItems-2.0.0.32.tar.bz2 RoughlyEnoughItems-2.0.0.32.zip | |
Fixed lots of guisv2.0.0.32
10 files changed, 197 insertions, 26 deletions
diff --git a/build.gradle b/build.gradle index b5cb35e90..be1a100fa 100755 --- a/build.gradle +++ b/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 { } diff --git a/src/main/java/me/shedaniel/rei/client/GuiHelper.java b/src/main/java/me/shedaniel/rei/client/GuiHelper.java index 21ff9c058..f9b14e4a8 100644 --- a/src/main/java/me/shedaniel/rei/client/GuiHelper.java +++ b/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; diff --git a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java b/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java index a8000d8d5..a7fde1457 100644 --- a/src/main/java/me/shedaniel/rei/gui/ContainerGuiOverlay.java +++ b/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()); } diff --git a/src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java b/src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java new file mode 100644 index 000000000..773753b66 --- /dev/null +++ b/src/main/java/me/shedaniel/rei/listeners/IMixinTabGetter.java @@ -0,0 +1,7 @@ +package me.shedaniel.rei.listeners; + +public interface IMixinTabGetter { + + public int getSelectedTab(); + +} diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java b/src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java index 3c8d65ccf..64d5eae97 100644 --- a/src/main/java/me/shedaniel/rei/mixin/MixinContainerGui.java +++ b/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); + } + } diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableGui.java b/src/main/java/me/shedaniel/rei/mixin/MixinCraftingTableGui.java new file mode 100644 index 000000000..1c2554e1a --- /dev/null +++ b/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(); + } + } + +} diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryGui.java b/src/main/java/me/shedaniel/rei/mixin/MixinCreativePlayerInventoryGui.java new file mode 100644 index 000000000..f564bad8c --- /dev/null +++ b/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(); + } + } + +} diff --git a/src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryGui.java b/src/main/java/me/shedaniel/rei/mixin/MixinPlayerInventoryGui.java new file mode 100644 index 000000000..99f1cfb30 --- /dev/null +++ b/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(); + } + } + +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 66b8d3f9a..0968e78d5 100755 --- a/src/main/resources/fabric.mod.json +++ b/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" diff --git a/src/main/resources/roughlyenoughitems.client.json b/src/main/resources/roughlyenoughitems.client.json index 1b1c99a5c..7080277f7 100755 --- a/src/main/resources/roughlyenoughitems.client.json +++ b/src/main/resources/roughlyenoughitems.client.json @@ -4,7 +4,10 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "MixinContainerGui", - "MixinClientPlayNetworkHandler" + "MixinClientPlayNetworkHandler", + "MixinPlayerInventoryGui", + "MixinCraftingTableGui", + "MixinCreativePlayerInventoryGui" ], "injectors": { "defaultRequire": 1 |
