From b1cc482d47f15c1d5d1ee8d674ba5a91ff6a8725 Mon Sep 17 00:00:00 2001 From: ch-yx Date: Tue, 17 Oct 2023 22:36:43 +0800 Subject: [PATCH] event --- .../carpet/mixins/ServerPlayer_scarpetEventMixin.java | 11 +++++++++++ src/main/java/carpet/script/CarpetEventServer.java | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/main/java/carpet/mixins/ServerPlayer_scarpetEventMixin.java b/src/main/java/carpet/mixins/ServerPlayer_scarpetEventMixin.java index afba6cde38..0013c590b5 100644 --- a/src/main/java/carpet/mixins/ServerPlayer_scarpetEventMixin.java +++ b/src/main/java/carpet/mixins/ServerPlayer_scarpetEventMixin.java @@ -2,7 +2,9 @@ import carpet.fakes.EntityInterface; import carpet.fakes.ServerPlayerInterface; +import carpet.script.CarpetEventServer; import carpet.script.EntityEventsGroup; + import com.mojang.authlib.GameProfile; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceKey; @@ -10,6 +12,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.stats.Stat; import net.minecraft.world.InteractionHand; +import net.minecraft.world.MenuProvider; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; @@ -45,6 +48,14 @@ public ServerPlayer_scarpetEventMixin(Level level, BlockPos blockPos, float f, G @Shadow public boolean wonGame; + @Inject(method = "openMenu", at = @At("RETURN")) + private void grabStat(MenuProvider menuProvider, CallbackInfoReturnable cir) + { + if (cir.getReturnValue().isPresent()) { + CarpetEventServer.Event.PLAYER_OPEN_SCREEN.onPlayerEvent((ServerPlayer)(Object)this); + }; + } + @Redirect(method = "completeUsingItem", at = @At( value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;completeUsingItem()V" diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index c749b47be1..57ed360bf9 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -853,6 +853,17 @@ public void onSlotSwitch(ServerPlayer player, int from, int to) ), player::createCommandSourceStack); } }; + public static final Event PLAYER_OPEN_SCREEN = new Event("player_open_screen", 1, false) + { + @Override + public boolean onPlayerEvent(ServerPlayer player) + { + return handler.call(() -> + Arrays.asList( + new EntityValue(player) + ), player::createCommandSourceStack); + } + }; public static final Event PLAYER_SWAPS_HANDS = new Event("player_swaps_hands", 1, false) { @Override