MixinContainerScreen.java 2.6 KB

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