diff options
Diffstat (limited to 'src/main/java/me/shedaniel/rei/mixin')
4 files changed, 165 insertions, 22 deletions
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(); + } + } + +} |
