Add screen rendering events for buttons
This commit is contained in:
@@ -18,12 +18,9 @@
|
|||||||
|
|
||||||
package moe.nea.firmament.mixins;
|
package moe.nea.firmament.mixins;
|
||||||
|
|
||||||
import moe.nea.firmament.events.HandledScreenKeyPressedEvent;
|
import moe.nea.firmament.events.*;
|
||||||
import moe.nea.firmament.events.IsSlotProtectedEvent;
|
|
||||||
import moe.nea.firmament.events.SlotRenderEvents;
|
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
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.Slot;
|
||||||
import net.minecraft.screen.slot.SlotActionType;
|
import net.minecraft.screen.slot.SlotActionType;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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)
|
@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) {
|
public void onMouseClickedSlot(Slot slot, int slotId, int button, SlotActionType actionType, CallbackInfo ci) {
|
||||||
if (IsSlotProtectedEvent.shouldBlockInteraction(slot)) {
|
if (IsSlotProtectedEvent.shouldBlockInteraction(slot)) {
|
||||||
|
|||||||
@@ -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>()
|
||||||
|
}
|
||||||
@@ -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>()
|
||||||
|
}
|
||||||
@@ -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>()
|
||||||
|
}
|
||||||
@@ -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.display.DisplayRegistry
|
||||||
import me.shedaniel.rei.api.client.registry.entry.CollapsibleEntryRegistry
|
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.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.screen.ScreenRegistry
|
||||||
import me.shedaniel.rei.api.client.registry.transfer.TransferHandler
|
import me.shedaniel.rei.api.client.registry.transfer.TransferHandler
|
||||||
import me.shedaniel.rei.api.client.registry.transfer.TransferHandlerRegistry
|
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.EntryTypeRegistry
|
||||||
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes
|
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes
|
||||||
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen
|
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen
|
||||||
|
import net.minecraft.client.gui.screen.ingame.HandledScreen
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import net.minecraft.text.Text
|
import net.minecraft.text.Text
|
||||||
import net.minecraft.util.Identifier
|
import net.minecraft.util.Identifier
|
||||||
|
import moe.nea.firmament.events.HandledScreenPushREIEvent
|
||||||
import moe.nea.firmament.features.inventory.CraftingOverlay
|
import moe.nea.firmament.features.inventory.CraftingOverlay
|
||||||
import moe.nea.firmament.recipes.SBCraftingRecipe
|
import moe.nea.firmament.recipes.SBCraftingRecipe
|
||||||
import moe.nea.firmament.recipes.SBForgeRecipe
|
import moe.nea.firmament.recipes.SBForgeRecipe
|
||||||
@@ -74,6 +77,10 @@ class FirmamentReiPlugin : REIClientPlugin {
|
|||||||
registry.add(SBForgeRecipe.Category)
|
registry.add(SBForgeRecipe.Category)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun registerExclusionZones(zones: ExclusionZones) {
|
||||||
|
zones.register(HandledScreen::class.java) { HandledScreenPushREIEvent(it).rectangles }
|
||||||
|
}
|
||||||
|
|
||||||
override fun registerDisplays(registry: DisplayRegistry) {
|
override fun registerDisplays(registry: DisplayRegistry) {
|
||||||
registry.registerDisplayGenerator(
|
registry.registerDisplayGenerator(
|
||||||
SBCraftingRecipe.Category.catIdentifier,
|
SBCraftingRecipe.Category.catIdentifier,
|
||||||
|
|||||||
Reference in New Issue
Block a user