Skip to content

Commit

Permalink
Cleaned up GuiEvents
Browse files Browse the repository at this point in the history
  • Loading branch information
odtheking committed Apr 27, 2024
1 parent 745ca1d commit 8792f7a
Show file tree
Hide file tree
Showing 31 changed files with 146 additions and 119 deletions.
36 changes: 18 additions & 18 deletions odin/src/main/java/me/odin/mixin/mixins/MixinGuiContainer.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package me.odin.mixin.mixins;

import me.odinmain.events.impl.*;
import me.odinmain.events.impl.GuiEvent;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
import net.minecraftforge.common.MinecraftForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
Expand All @@ -14,7 +13,7 @@
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(value = GuiContainer.class, priority = 1)
public class MixinGuiContainer {
public abstract class MixinGuiContainer {

@Unique
private final GuiContainer gui = (GuiContainer) (Object) this;
Expand All @@ -30,38 +29,39 @@ public class MixinGuiContainer {

@Shadow protected int guiTop;

@Shadow private Slot theSlot;

@Shadow protected abstract boolean isMouseOverSlot(Slot slotIn, int mouseX, int mouseY);

@Inject(method = "drawSlot", at = @At("HEAD"), cancellable = true)
private void onDrawSlot(Slot slotIn, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new DrawSlotEvent(inventorySlots, gui, slotIn, slotIn.xDisplayPosition, slotIn.yDisplayPosition)))
ci.cancel();
}

@Inject(method = "drawItemStack", at = @At("HEAD"), cancellable = true)
private void onDrawItemStack(ItemStack stack, int x, int y, String altText, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new DrawItemStackEvent(inventorySlots, gui, stack, x, y)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.DrawSlotEvent(inventorySlots, gui, slotIn, slotIn.xDisplayPosition, slotIn.yDisplayPosition)))
ci.cancel();
}

@Inject(method = "drawScreen", at = @At(value = "HEAD"), cancellable = true)
private void startDrawScreen(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new DrawGuiContainerScreenEvent(gui.inventorySlots, gui, this.xSize, this.ySize, guiLeft, guiTop)))
GuiEvent.DrawGuiContainerScreenEvent event = new GuiEvent.DrawGuiContainerScreenEvent(gui.inventorySlots, gui, this.xSize, this.ySize, guiLeft, guiTop);
if (MinecraftForge.EVENT_BUS.post(event)) {
ci.cancel();
}

@Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
private void onMouseClicked(int mouseX, int mouseY, int mouseButton, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new GuiClickEvent(gui.inventorySlots, gui, mouseX, mouseY, mouseButton)))
ci.cancel();
this.theSlot = null;
for (int i = 0; i < this.inventorySlots.inventorySlots.size(); ++i) {
Slot slot = this.inventorySlots.inventorySlots.get(i);
if (!this.isMouseOverSlot(slot, mouseX, mouseY) || !slot.canBeHovered()) continue;
this.theSlot = slot;
}
}
}

@Inject(method = "keyTyped", at = @At("HEAD"), cancellable = true)
private void keyTyped(char typedChar, int keyCode, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new GuiKeyPressEvent(gui.inventorySlots, gui, keyCode)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.GuiKeyPressEvent(gui.inventorySlots, gui, keyCode)))
ci.cancel();
}

@Inject(method = "onGuiClosed", at = @At("HEAD"))
private void onGuiClosed(CallbackInfo ci) {
MinecraftForge.EVENT_BUS.post(new GuiClosedEvent(gui));
MinecraftForge.EVENT_BUS.post(new GuiEvent.GuiClosedEvent(gui));
}
}
9 changes: 7 additions & 2 deletions odin/src/main/java/me/odin/mixin/mixins/MixinGuiScreen.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,28 @@
package me.odin.mixin.mixins;

import me.odinmain.events.impl.PreGuiClickEvent;
import me.odinmain.events.impl.GuiEvent;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.common.MinecraftForge;
import org.lwjgl.input.Mouse;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(GuiScreen.class)
public class MixinGuiScreen {

@Unique
private final GuiScreen odin$gui = (GuiScreen) (Object) this;

@Inject(method = "handleMouseInput", at = @At(value = "INVOKE", target = "net/minecraft/client/gui/GuiScreen.mouseClicked(III)V"), cancellable = true)
private void onMouseInput(CallbackInfo ci){
int k = Mouse.getEventButton();
if (Mouse.getEventButtonState()) {
if (MinecraftForge.EVENT_BUS.post(new PreGuiClickEvent(k)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.GuiMouseClickEvent(odin$gui, k, Mouse.getEventX(), Mouse.getEventY()))) {
ci.cancel();
}
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions odin/src/main/java/me/odin/mixin/mixins/MixinRenderItem.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.odin.mixin.mixins;

import me.odinmain.events.impl.DrawSlotOverlayEvent;
import me.odinmain.events.impl.GuiEvent;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
Expand All @@ -15,7 +15,7 @@ public abstract class MixinRenderItem {

@Inject(method = "renderItemOverlayIntoGUI", at = @At("HEAD"), cancellable = true)
private void renderItemOverlayPost(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new DrawSlotOverlayEvent(stack, xPosition, yPosition, text)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.DrawSlotOverlayEvent(stack, xPosition, yPosition, text)))
ci.cancel();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.odinclient.mixin.mixins;

import me.odinmain.events.impl.*;
import me.odinmain.events.impl.GuiEvent;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.Slot;
Expand Down Expand Up @@ -35,13 +35,13 @@ public abstract class MixinGuiContainer {

@Inject(method = "drawSlot", at = @At("HEAD"), cancellable = true)
private void onDrawSlot(Slot slotIn, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new DrawSlotEvent(inventorySlots, gui, slotIn, slotIn.xDisplayPosition, slotIn.yDisplayPosition)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.DrawSlotEvent(inventorySlots, gui, slotIn, slotIn.xDisplayPosition, slotIn.yDisplayPosition)))
ci.cancel();
}

@Inject(method = "drawScreen", at = @At(value = "HEAD"), cancellable = true)
private void startDrawScreen(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) {
DrawGuiContainerScreenEvent event = new DrawGuiContainerScreenEvent(gui.inventorySlots, gui, this.xSize, this.ySize, guiLeft, guiTop);
GuiEvent.DrawGuiContainerScreenEvent event = new GuiEvent.DrawGuiContainerScreenEvent(gui.inventorySlots, gui, this.xSize, this.ySize, guiLeft, guiTop);
if (MinecraftForge.EVENT_BUS.post(event)) {
ci.cancel();

Expand All @@ -54,21 +54,14 @@ private void startDrawScreen(int mouseX, int mouseY, float partialTicks, Callbac
}
}

@Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
private void onMouseClicked(int mouseX, int mouseY, int mouseButton, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new GuiClickEvent(gui.inventorySlots, gui, mouseX, mouseY, mouseButton)))
ci.cancel();
}

@Inject(method = "keyTyped", at = @At("HEAD"), cancellable = true)
private void keyTyped(char typedChar, int keyCode, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new GuiKeyPressEvent(gui.inventorySlots, gui, keyCode)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.GuiKeyPressEvent(gui.inventorySlots, gui, keyCode)))
ci.cancel();
}

@Inject(method = "onGuiClosed", at = @At("HEAD"))
private void onGuiClosed(CallbackInfo ci) {
MinecraftForge.EVENT_BUS.post(new GuiClosedEvent(gui));
MinecraftForge.EVENT_BUS.post(new GuiEvent.GuiClosedEvent(gui));
}

}
Original file line number Diff line number Diff line change
@@ -1,23 +1,28 @@
package me.odinclient.mixin.mixins;

import me.odinmain.events.impl.PreGuiClickEvent;
import me.odinmain.events.impl.GuiEvent;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.common.MinecraftForge;
import org.lwjgl.input.Mouse;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(GuiScreen.class)
public class MixinGuiScreen {

@Unique
private final GuiScreen odin$gui = (GuiScreen) (Object) this;

@Inject(method = "handleMouseInput", at = @At(value = "INVOKE", target = "net/minecraft/client/gui/GuiScreen.mouseClicked(III)V"), cancellable = true)
private void onMouseInput(CallbackInfo ci){
int k = Mouse.getEventButton();
if (Mouse.getEventButtonState()) {
if (MinecraftForge.EVENT_BUS.post(new PreGuiClickEvent(k)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.GuiMouseClickEvent(odin$gui, k, Mouse.getEventX(), Mouse.getEventY()))) {
ci.cancel();
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.odinclient.mixin.mixins;

import me.odinmain.events.impl.DrawSlotOverlayEvent;
import me.odinmain.events.impl.GuiEvent;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.item.ItemStack;
Expand All @@ -15,7 +15,7 @@ public abstract class MixinRenderItem {

@Inject(method = "renderItemOverlayIntoGUI", at = @At("HEAD"), cancellable = true)
private void renderItemOverlayPost(FontRenderer fr, ItemStack stack, int xPosition, int yPosition, String text, CallbackInfo ci) {
if (MinecraftForge.EVENT_BUS.post(new DrawSlotOverlayEvent(stack, xPosition, yPosition, text)))
if (MinecraftForge.EVENT_BUS.post(new GuiEvent.DrawSlotOverlayEvent(stack, xPosition, yPosition, text)))
ci.cancel();
}
}
8 changes: 6 additions & 2 deletions odinclient/src/main/kotlin/me/odinclient/ModCore.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import com.google.gson.reflect.TypeToken
import me.odinclient.commands.impl.autoSellCommand
import me.odinclient.features.impl.dungeon.*
import me.odinclient.features.impl.dungeon.AutoSell.sellList
import me.odinclient.features.impl.floor7.*
import me.odinclient.features.impl.floor7.DioriteFucker
import me.odinclient.features.impl.floor7.FreezeGame
import me.odinclient.features.impl.floor7.RelicAura
import me.odinclient.features.impl.floor7.p3.*
import me.odinclient.features.impl.render.*
import me.odinclient.features.impl.skyblock.*
Expand All @@ -20,7 +22,9 @@ import me.odinmain.utils.render.RenderUtils
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.fml.common.Mod
import net.minecraftforge.fml.common.Mod.EventHandler
import net.minecraftforge.fml.common.event.*
import net.minecraftforge.fml.common.event.FMLInitializationEvent
import net.minecraftforge.fml.common.event.FMLLoadCompleteEvent
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.TickEvent

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package me.odinclient.features.impl.floor7.p3

import me.odinclient.utils.skyblock.PlayerUtils
import me.odinmain.events.impl.GuiLoadedEvent
import me.odinmain.events.impl.GuiEvent
import me.odinmain.features.Category
import me.odinmain.features.Module
import me.odinmain.features.impl.floor7.p3.TerminalSolver
Expand Down Expand Up @@ -30,7 +30,7 @@ object AutoTerms : Module(


@SubscribeEvent
fun onGuiOpen(event: GuiLoadedEvent) {
fun onGuiOpen(event: GuiEvent.GuiLoadedEvent) {
clickedThisWindow = false
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,25 @@ import me.odinmain.features.Module
import me.odinmain.features.impl.dungeon.DungeonWaypoints.toBlockPos
import me.odinmain.features.impl.dungeon.DungeonWaypoints.toVec3
import me.odinmain.features.settings.Setting.Companion.withDependency
import me.odinmain.features.settings.impl.*
import me.odinmain.features.settings.impl.BooleanSetting
import me.odinmain.features.settings.impl.ColorSetting
import me.odinmain.features.settings.impl.DualSetting
import me.odinmain.features.settings.impl.NumberSetting
import me.odinmain.ui.clickgui.util.ColorUtil.withAlpha
import me.odinmain.utils.*
import me.odinmain.utils.PositionLook
import me.odinmain.utils.clock.Clock
import me.odinmain.utils.equal
import me.odinmain.utils.etherwarpRotateTo
import me.odinmain.utils.render.Color
import me.odinmain.utils.render.RenderUtils.renderVec
import me.odinmain.utils.render.Renderer
import me.odinmain.utils.skyblock.*
import me.odinmain.utils.skyblock.EtherWarpHelper
import me.odinmain.utils.skyblock.EtherWarpHelper.etherPos
import me.odinmain.utils.skyblock.dungeon.DungeonUtils
import me.odinmain.utils.skyblock.extraAttributes
import me.odinmain.utils.skyblock.getBlockAt
import me.odinmain.utils.skyblock.holdingEtherWarp
import me.odinmain.utils.smoothRotateTo
import net.minecraft.util.MathHelper
import net.minecraft.util.Vec3
import net.minecraftforge.client.event.RenderWorldLastEvent
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package me.odinclient.features.impl.skyblock

import me.odinmain.events.impl.GuiLoadedEvent
import me.odinmain.events.impl.GuiEvent
import me.odinmain.features.Category
import me.odinmain.features.Module
import me.odinmain.features.settings.impl.BooleanSetting
Expand Down Expand Up @@ -43,7 +43,7 @@ object AutoExperiments : Module(
}

@SubscribeEvent
fun onGuiOpen(event: GuiLoadedEvent) {
fun onGuiOpen(event: GuiEvent.GuiLoadedEvent) {
reset()
if (LocationUtils.currentArea != Island.PrivateIsland) return
val chestName = event.name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,10 @@ import net.minecraft.network.play.server.S02PacketChat
import net.minecraft.network.play.server.S32PacketConfirmTransaction
import net.minecraftforge.client.event.GuiOpenEvent
import net.minecraftforge.client.event.RenderWorldLastEvent
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.fml.common.eventhandler.Event
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent

object EventDispatcher {

/** Used to make code simpler. */
fun post(event: Event) = MinecraftForge.EVENT_BUS.post(event)

/**
* Dispatches [ChatPacketEvent] and [RealServerTick].
*/
Expand Down Expand Up @@ -62,7 +57,7 @@ object EventDispatcher {
val deferred = waitUntilLastItem(container)
try { deferred.await() } catch (e: Exception) { return@launch } // Wait until the last item in the chest isn't null

GuiLoadedEvent(chestName, container).postAndCatch()
GuiEvent.GuiLoadedEvent(chestName, container).postAndCatch()
}

}
43 changes: 25 additions & 18 deletions odinmain/src/main/kotlin/me/odinmain/events/impl/GuiEvents.kt
Original file line number Diff line number Diff line change
@@ -1,34 +1,41 @@
package me.odinmain.events.impl

import net.minecraft.client.gui.GuiScreen
import net.minecraft.client.gui.inventory.GuiContainer
import net.minecraft.inventory.*
import net.minecraft.inventory.Container
import net.minecraft.inventory.ContainerChest
import net.minecraft.inventory.Slot
import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.Cancelable
import net.minecraftforge.fml.common.eventhandler.Event

@Cancelable
class DrawGuiContainerScreenEvent(val container: Container, val gui: GuiContainer, val xSize: Int, val ySize: Int, val guiLeft: Int, val guiTop: Int) : Event()

class GuiLoadedEvent(val name: String, val gui: ContainerChest) : Event()
abstract class GuiEvent : Event() {

@Cancelable
class GuiClickEvent(val container: Container, val gui: GuiContainer, val x: Int, val y: Int, val button: Int) : Event()
data class GuiLoadedEvent(val name: String, val gui: ContainerChest) : GuiEvent()

@Cancelable
data class DrawGuiContainerScreenEvent(val container: Container, val gui: GuiContainer, val xSize: Int, val ySize: Int, val guiLeft: Int, val guiTop: Int) : GuiEvent()

@Cancelable
class DrawSlotEvent(val container: Container, val gui: GuiContainer, var slot: Slot, val x: Int, val y: Int) : GuiEvent()

@Cancelable
class DrawSlotOverlayEvent(val stack: ItemStack?, val x: Int?, val y: Int?, val text: String?) : GuiEvent()

@Cancelable
data class GuiMouseClickEvent(val gui: GuiScreen, val button: Int, val x: Int, val y: Int) : GuiEvent()

@Cancelable
class GuiKeyPressEvent(val container: Container, val gui: GuiContainer, val keyCode: Int) : Event()


class GuiClosedEvent(val gui: GuiContainer) : GuiEvent()
}

@Cancelable
class PreGuiClickEvent(val button: Int) : Event()

@Cancelable
class GuiKeyPressEvent(val container: Container, val gui: GuiContainer, val keyCode: Int) : Event()

@Cancelable
class GuiClosedEvent(val gui: GuiContainer) : Event()

@Cancelable
class DrawSlotOverlayEvent(val stack: ItemStack?, val x: Int?, val y: Int?, val text: String?) : Event()

@Cancelable
class DrawSlotEvent(val container: Container, val gui: GuiContainer, var slot: Slot, val x: Int, val y: Int) : Event()

@Cancelable
class DrawItemStackEvent(val container: Container, val gui: GuiContainer, val stack: ItemStack, val x: Int, val y: Int) : Event()

Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@ open class RenderChestEvent(var chest: TileEntityChest, var x: Double, var y: Do
class Pre(tileEntity: TileEntityChest, x: Double, y: Double, z: Double, partialTicks: Float) : RenderChestEvent(tileEntity, x, y, z, partialTicks)

class Post(tileEntity: TileEntityChest, x: Double, y: Double, z: Double, partialTicks: Float) : RenderChestEvent(tileEntity, x, y, z, partialTicks)

}
Loading

0 comments on commit 8792f7a

Please sign in to comment.