aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/shedaniel/mixins/MixinGuiContainer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me/shedaniel/mixins/MixinGuiContainer.java')
-rwxr-xr-xsrc/main/java/me/shedaniel/mixins/MixinGuiContainer.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/main/java/me/shedaniel/mixins/MixinGuiContainer.java b/src/main/java/me/shedaniel/mixins/MixinGuiContainer.java
new file mode 100755
index 000000000..b4c0dbab3
--- /dev/null
+++ b/src/main/java/me/shedaniel/mixins/MixinGuiContainer.java
@@ -0,0 +1,98 @@
+package me.shedaniel.mixins;
+
+import me.shedaniel.listenerdefinitions.*;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.IGuiEventListenerDeferred;
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.inventory.Slot;
+import net.minecraft.item.ItemStack;
+import org.dimdev.riftloader.RiftLoader;
+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.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
+
+/**
+ * Created by James on 7/27/2018.
+ */
+@Mixin(GuiContainer.class)
+public abstract class MixinGuiContainer implements IGuiEventListenerDeferred, IMixinGuiContainer {
+ @Shadow
+ protected Slot hoveredSlot;
+ @Shadow
+ private ItemStack draggedStack;
+ @Shadow
+ protected int guiLeft;
+ @Shadow
+ protected int guiTop;
+ @Shadow
+ protected int xSize;
+ @Shadow
+ protected int ySize;
+
+ @Inject(method = "render", at = @At("RETURN"))
+ private void onRender(int p_drawScreen_1_, int p_drawScreen_2_, float p_drawScreen_3_, CallbackInfo ci) {
+ for(DrawContainer listener : RiftLoader.instance.getListeners(DrawContainer.class)) {
+ listener.draw(p_drawScreen_1_, p_drawScreen_2_, p_drawScreen_3_, (GuiContainer) Minecraft.getInstance().currentScreen);
+ }
+ }
+
+ @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
+ private void onMouseClicked(double p_mouseClicked_1_, double p_mouseClicked_3_, int p_mouseClicked_5_, CallbackInfoReturnable<Boolean> ci) {
+ boolean handled = false;
+ for(GuiCickListener listener : RiftLoader.instance.getListeners(GuiCickListener.class)) {
+ if (listener.onClick((int) p_mouseClicked_1_, (int) p_mouseClicked_3_, p_mouseClicked_5_)) {
+ ci.setReturnValue(true);
+ handled = true;
+ }
+ }
+ if (handled)
+ ci.cancel();
+
+ }
+
+ @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true)
+ private void onKeyPressed(int p_keyPressed_1_, int p_keyPressed_2_, int p_keyPressed_3_, CallbackInfoReturnable<Boolean> ci) {
+ boolean handled = false;
+ for(GuiKeyDown listener : RiftLoader.instance.getListeners(GuiKeyDown.class)) {
+ if (listener.keyDown(p_keyPressed_1_, p_keyPressed_2_, p_keyPressed_3_))
+ handled = true;
+ }
+ if (handled) {
+ ci.setReturnValue(handled);
+ ci.cancel();
+ }
+ }
+
+ public boolean mouseScrolled(double p_mouseScrolled_1_) {
+ boolean handled = false;
+ for(MouseScrollListener listener : RiftLoader.instance.getListeners(MouseScrollListener.class)) {
+ if (listener.mouseScrolled(p_mouseScrolled_1_)) {
+ handled = true;
+ }
+ }
+ return handled;
+ }
+
+ @Override
+ public ItemStack getDraggedStack() {
+ return draggedStack;
+ }
+
+ @Override
+ public int getGuiLeft() {
+ return guiLeft;
+ }
+
+ @Override
+ public int getXSize() {
+ return xSize;
+ }
+
+ @Override
+ public Slot getHoveredSlot() {
+ return hoveredSlot;
+ }
+}