mc-js/src/java/me/topchetoeu/mcscript/mixin/ScreenHandlerMixin.java
2024-04-16 10:11:04 +03:00

35 lines
1.4 KiB
Java
Executable File

package me.topchetoeu.mcscript.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import me.topchetoeu.mcscript.events.ScreenHandlerEvents;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.screen.ScreenHandler;
import net.minecraft.screen.slot.SlotActionType;
import net.minecraft.server.network.ServerPlayerEntity;
@Mixin(ScreenHandler.class)
public class ScreenHandlerMixin {
@Inject(method = "onSlotClick", at = @At("HEAD"), cancellable = true)
private void onSlotClick(int slotIndex, int button, SlotActionType actionType, PlayerEntity player, CallbackInfo cbi) {
if (!(player instanceof ServerPlayerEntity sp)) return;
var handle = (ScreenHandler)(Object)this;
var cancelled = !ScreenHandlerEvents.SLOT_CLICKED.invoker().slotClicked(handle, slotIndex, button, actionType, sp);
if (cancelled) cbi.cancel();
}
@Inject(method = "onClosed", at = @At("HEAD"), cancellable = true)
private void onClosed(PlayerEntity player, CallbackInfo cbi) {
if (!(player instanceof ServerPlayerEntity sp)) return;
var handle = (ScreenHandler)(Object)this;
var cancelled = !ScreenHandlerEvents.SCREEN_CLOSE.invoker().screenClosed(handle, sp);
if (cancelled) cbi.cancel();
}
}