MixinContainerScreen.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package me.shedaniel.rei.mixin;
  2. import me.shedaniel.rei.api.TabGetter;
  3. import me.shedaniel.rei.client.ClientHelper;
  4. import me.shedaniel.rei.client.ScreenHelper;
  5. import me.shedaniel.rei.gui.ContainerScreenOverlay;
  6. import me.shedaniel.rei.listeners.ContainerScreenHooks;
  7. import net.minecraft.client.MinecraftClient;
  8. import net.minecraft.client.gui.ContainerScreen;
  9. import net.minecraft.client.gui.Screen;
  10. import net.minecraft.client.gui.ingame.CreativePlayerInventoryScreen;
  11. import net.minecraft.container.Slot;
  12. import net.minecraft.item.ItemGroup;
  13. import org.spongepowered.asm.mixin.Mixin;
  14. import org.spongepowered.asm.mixin.Shadow;
  15. import org.spongepowered.asm.mixin.injection.At;
  16. import org.spongepowered.asm.mixin.injection.Inject;
  17. import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
  18. @Mixin(ContainerScreen.class)
  19. public class MixinContainerScreen extends Screen implements ContainerScreenHooks {
  20. @Shadow
  21. protected int left;
  22. @Shadow
  23. protected int top;
  24. @Shadow
  25. protected int width;
  26. @Shadow
  27. protected int height;
  28. @Shadow
  29. protected Slot focusedSlot;
  30. @Override
  31. public int rei_getContainerLeft() {
  32. return left;
  33. }
  34. @Override
  35. public int rei_getContainerTop() {
  36. return top;
  37. }
  38. @Override
  39. public int rei_getContainerWidth() {
  40. return width;
  41. }
  42. @Override
  43. public int rei_getContainerHeight() {
  44. return height;
  45. }
  46. @Override
  47. public Slot rei_getHoveredSlot() {
  48. return focusedSlot;
  49. }
  50. @Override
  51. public boolean mouseScrolled(double double_1) {
  52. if (MinecraftClient.getInstance().currentScreen instanceof CreativePlayerInventoryScreen) {
  53. TabGetter tabGetter = (TabGetter) MinecraftClient.getInstance().currentScreen;
  54. if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
  55. return super.mouseScrolled(double_1);
  56. }
  57. ContainerScreenOverlay overlay = ScreenHelper.getLastOverlay();
  58. if (ScreenHelper.isOverlayVisible() && overlay.getRectangle().contains(ClientHelper.getMouseLocation()))
  59. if (overlay.mouseScrolled(double_1))
  60. return true;
  61. return super.mouseScrolled(double_1);
  62. }
  63. @Inject(method = "keyPressed(III)Z", at = @At("HEAD"), cancellable = true)
  64. public void keyPressed(int int_1, int int_2, int int_3, CallbackInfoReturnable<Boolean> ci) {
  65. if (MinecraftClient.getInstance().currentScreen instanceof CreativePlayerInventoryScreen) {
  66. TabGetter tabGetter = (TabGetter) MinecraftClient.getInstance().currentScreen;
  67. if (tabGetter.rei_getSelectedTab() != ItemGroup.INVENTORY.getIndex())
  68. return;
  69. }
  70. if (ScreenHelper.getLastOverlay().keyPressed(int_1, int_2, int_3)) {
  71. ci.setReturnValue(true);
  72. ci.cancel();
  73. }
  74. }
  75. }