aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornea <nea@nea.moe>2023-07-13 18:23:46 +0200
committernea <nea@nea.moe>2023-07-13 18:23:46 +0200
commitce7fd22553e0e3ca8fd23a373654d5954bae5582 (patch)
tree05332169df569011819c5078a1cc61a88dbd4786
parent637864fc4f802bf3ff765364312f33ecd7c2f596 (diff)
downloadFirmament-ce7fd22553e0e3ca8fd23a373654d5954bae5582.tar.gz
Firmament-ce7fd22553e0e3ca8fd23a373654d5954bae5582.tar.bz2
Firmament-ce7fd22553e0e3ca8fd23a373654d5954bae5582.zip
Add screen rendering events for buttons
-rw-r--r--src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java17
-rw-r--r--src/main/kotlin/moe/nea/firmament/events/HandledScreenForegroundEvent.kt10
-rw-r--r--src/main/kotlin/moe/nea/firmament/events/HandledScreenPushREIEvent.kt16
-rw-r--r--src/main/kotlin/moe/nea/firmament/events/ScreenClickEvent.kt8
-rw-r--r--src/main/kotlin/moe/nea/firmament/rei/FirmamentReiPlugin.kt7
5 files changed, 54 insertions, 4 deletions
diff --git a/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java b/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java
index ac09569..5a06c47 100644
--- a/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java
+++ b/src/main/java/moe/nea/firmament/mixins/MixinHandledScreen.java
@@ -18,12 +18,9 @@
package moe.nea.firmament.mixins;
-import moe.nea.firmament.events.HandledScreenKeyPressedEvent;
-import moe.nea.firmament.events.IsSlotProtectedEvent;
-import moe.nea.firmament.events.SlotRenderEvents;
+import moe.nea.firmament.events.*;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
-import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.screen.slot.Slot;
import net.minecraft.screen.slot.SlotActionType;
import org.spongepowered.asm.mixin.Mixin;
@@ -43,6 +40,18 @@ public class MixinHandledScreen {
}
}
+ @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true)
+ public void onMouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable<Boolean> cir) {
+ if (ScreenClickEvent.Companion.publish(new ScreenClickEvent((HandledScreen<?>) (Object) this, mouseX, mouseY, button)).getCancelled()) {
+ cir.setReturnValue(true);
+ }
+ }
+
+ @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/HandledScreen;drawForeground(Lnet/minecraft/client/gui/DrawContext;II)V", shift = At.Shift.AFTER))
+ public void onAfterRenderForeground(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
+ HandledScreenForegroundEvent.Companion.publish(new HandledScreenForegroundEvent((HandledScreen<?>) (Object) this, mouseX, mouseY, delta));
+ }
+
@Inject(method = "onMouseClick(Lnet/minecraft/screen/slot/Slot;IILnet/minecraft/screen/slot/SlotActionType;)V", at = @At("HEAD"), cancellable = true)
public void onMouseClickedSlot(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) {
if (IsSlotProtectedEvent.shouldBlockInteraction(slot)) {
diff --git a/src/main/kotlin/moe/nea/firmament/events/HandledScreenForegroundEvent.kt b/src/main/kotlin/moe/nea/firmament/events/HandledScreenForegroundEvent.kt
new file mode 100644
index 0000000..2d4b652
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/events/HandledScreenForegroundEvent.kt
@@ -0,0 +1,10 @@
+package moe.nea.firmament.events
+
+import net.minecraft.client.gui.screen.ingame.HandledScreen
+
+data class HandledScreenForegroundEvent(
+ val screen: HandledScreen<*>,
+ val mouseX: Int, val mouseY: Int, val delta: Float
+) : FirmamentEvent() {
+ companion object : FirmamentEventBus<HandledScreenForegroundEvent>()
+}
diff --git a/src/main/kotlin/moe/nea/firmament/events/HandledScreenPushREIEvent.kt b/src/main/kotlin/moe/nea/firmament/events/HandledScreenPushREIEvent.kt
new file mode 100644
index 0000000..b809513
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/events/HandledScreenPushREIEvent.kt
@@ -0,0 +1,16 @@
+package moe.nea.firmament.events
+
+import me.shedaniel.math.Rectangle
+import net.minecraft.client.gui.screen.ingame.HandledScreen
+
+data class HandledScreenPushREIEvent(
+ val screen: HandledScreen<*>,
+ val rectangles: MutableList<Rectangle> = mutableListOf()
+) : FirmamentEvent() {
+
+ fun block(rectangle: Rectangle) {
+ rectangles.add(rectangle)
+ }
+
+ companion object : FirmamentEventBus<HandledScreenPushREIEvent>()
+}
diff --git a/src/main/kotlin/moe/nea/firmament/events/ScreenClickEvent.kt b/src/main/kotlin/moe/nea/firmament/events/ScreenClickEvent.kt
new file mode 100644
index 0000000..cd25991
--- /dev/null
+++ b/src/main/kotlin/moe/nea/firmament/events/ScreenClickEvent.kt
@@ -0,0 +1,8 @@
+package moe.nea.firmament.events
+
+import net.minecraft.client.gui.screen.ingame.HandledScreen
+
+data class ScreenClickEvent(val screen: HandledScreen<*>, val mouseX: Double, val mouseY: Double, val button: Int) :
+ FirmamentEvent.Cancellable() {
+ companion object : FirmamentEventBus<ScreenClickEvent>()
+}
diff --git a/src/main/kotlin/moe/nea/firmament/rei/FirmamentReiPlugin.kt b/src/main/kotlin/moe/nea/firmament/rei/FirmamentReiPlugin.kt
index 5016d96..223ee7d 100644
--- a/src/main/kotlin/moe/nea/firmament/rei/FirmamentReiPlugin.kt
+++ b/src/main/kotlin/moe/nea/firmament/rei/FirmamentReiPlugin.kt
@@ -23,6 +23,7 @@ import me.shedaniel.rei.api.client.registry.category.CategoryRegistry
import me.shedaniel.rei.api.client.registry.display.DisplayRegistry
import me.shedaniel.rei.api.client.registry.entry.CollapsibleEntryRegistry
import me.shedaniel.rei.api.client.registry.entry.EntryRegistry
+import me.shedaniel.rei.api.client.registry.screen.ExclusionZones
import me.shedaniel.rei.api.client.registry.screen.ScreenRegistry
import me.shedaniel.rei.api.client.registry.transfer.TransferHandler
import me.shedaniel.rei.api.client.registry.transfer.TransferHandlerRegistry
@@ -30,9 +31,11 @@ import me.shedaniel.rei.api.common.entry.EntryStack
import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen
+import net.minecraft.client.gui.screen.ingame.HandledScreen
import net.minecraft.item.ItemStack
import net.minecraft.text.Text
import net.minecraft.util.Identifier
+import moe.nea.firmament.events.HandledScreenPushREIEvent
import moe.nea.firmament.features.inventory.CraftingOverlay
import moe.nea.firmament.recipes.SBCraftingRecipe
import moe.nea.firmament.recipes.SBForgeRecipe
@@ -74,6 +77,10 @@ class FirmamentReiPlugin : REIClientPlugin {
registry.add(SBForgeRecipe.Category)
}
+ override fun registerExclusionZones(zones: ExclusionZones) {
+ zones.register(HandledScreen::class.java) { HandledScreenPushREIEvent(it).rectangles }
+ }
+
override fun registerDisplays(registry: DisplayRegistry) {
registry.registerDisplayGenerator(
SBCraftingRecipe.Category.catIdentifier,