From 786e28288906ac5a65917c9b150e3b51a25ef3d7 Mon Sep 17 00:00:00 2001 From: gnembon Date: Tue, 21 Jul 2020 02:27:26 -0300 Subject: [PATCH] player swaps hands event --- docs/scarpet/Full.md | 1 + docs/scarpet/api/Events.md | 1 + docs/scarpet/resources/editors/idea/4.txt | 1 + docs/scarpet/resources/editors/npp/scarpet.xml | 1 + .../ServerPlayNetworkHandler_scarpetEventsMixin.java | 12 ++++++++++++ src/main/java/carpet/script/CarpetEventServer.java | 8 ++++++++ .../resources/assets/carpet/scripts/event_test.sc | 6 ++++++ 7 files changed, 30 insertions(+) diff --git a/docs/scarpet/Full.md b/docs/scarpet/Full.md index 793e9c87..50792541 100644 --- a/docs/scarpet/Full.md +++ b/docs/scarpet/Full.md @@ -3267,6 +3267,7 @@ __on_player_places_block(player, item_tuple, hand, block) // player have just pl __on_player_interacts_with_entity(player, entity, hand) __on_player_chooses_recipe(player, recipe, full_stack) __on_player_switches_slot(player, from, to) +__on_player_swaps_hands(player) __on_player_attacks_entity(player, entity) __on_player_takes_damage(player, amount, source, source_entity) __on_player_deals_damage(player, amount, entity) diff --git a/docs/scarpet/api/Events.md b/docs/scarpet/api/Events.md index 05b8c4cd..90b7a87a 100644 --- a/docs/scarpet/api/Events.md +++ b/docs/scarpet/api/Events.md @@ -34,6 +34,7 @@ __on_player_places_block(player, item_tuple, hand, block) // player have just pl __on_player_interacts_with_entity(player, entity, hand) __on_player_chooses_recipe(player, recipe, full_stack) __on_player_switches_slot(player, from, to) +__on_player_swaps_hands(player) __on_player_attacks_entity(player, entity) __on_player_takes_damage(player, amount, source, source_entity) __on_player_deals_damage(player, amount, entity) diff --git a/docs/scarpet/resources/editors/idea/4.txt b/docs/scarpet/resources/editors/idea/4.txt index 1f659f99..5014093f 100644 --- a/docs/scarpet/resources/editors/idea/4.txt +++ b/docs/scarpet/resources/editors/idea/4.txt @@ -23,6 +23,7 @@ __on_player_starts_sprinting __on_player_stops_sneaking __on_player_stops_sprinting __on_player_switches_slot +__on_player_swaps_hands __on_player_uses_item __on_player_wakes_up __on_statistic diff --git a/docs/scarpet/resources/editors/npp/scarpet.xml b/docs/scarpet/resources/editors/npp/scarpet.xml index ffb50e58..4147faeb 100644 --- a/docs/scarpet/resources/editors/npp/scarpet.xml +++ b/docs/scarpet/resources/editors/npp/scarpet.xml @@ -106,6 +106,7 @@ __on_player_stops_sneaking __on_player_stops_sprinting __on_player_switches_slot + __on_player_swaps_hands __on_player_uses_item __on_player_wakes_up __on_statistic diff --git a/src/main/java/carpet/mixins/ServerPlayNetworkHandler_scarpetEventsMixin.java b/src/main/java/carpet/mixins/ServerPlayNetworkHandler_scarpetEventsMixin.java index 402497b4..e9b3aed1 100644 --- a/src/main/java/carpet/mixins/ServerPlayNetworkHandler_scarpetEventsMixin.java +++ b/src/main/java/carpet/mixins/ServerPlayNetworkHandler_scarpetEventsMixin.java @@ -37,6 +37,7 @@ import static carpet.script.CarpetEventServer.Event.PLAYER_STARTS_SNEAKING; import static carpet.script.CarpetEventServer.Event.PLAYER_STARTS_SPRINTING; import static carpet.script.CarpetEventServer.Event.PLAYER_STOPS_SNEAKING; import static carpet.script.CarpetEventServer.Event.PLAYER_STOPS_SPRINTING; +import static carpet.script.CarpetEventServer.Event.PLAYER_SWAPS_HANDS; import static carpet.script.CarpetEventServer.Event.PLAYER_SWITCHES_SLOT; import static carpet.script.CarpetEventServer.Event.PLAYER_USES_ITEM; import static carpet.script.CarpetEventServer.Event.PLAYER_WAKES_UP; @@ -67,6 +68,17 @@ public class ServerPlayNetworkHandler_scarpetEventsMixin PLAYER_DROPS_ITEM.onPlayerEvent(player); } + @Inject(method = "onPlayerAction", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/server/network/ServerPlayerEntity;getStackInHand(Lnet/minecraft/util/Hand;)Lnet/minecraft/item/ItemStack;", + ordinal = 0, + shift = At.Shift.BEFORE + )) + private void onHandSwap(PlayerActionC2SPacket playerActionC2SPacket_1, CallbackInfo ci) + { + PLAYER_SWAPS_HANDS.onPlayerEvent(player); + } + @Inject(method = "onPlayerAction", at = @At( value = "INVOKE", target = "Lnet/minecraft/server/network/ServerPlayerEntity;dropSelectedItem(Z)Z", diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index 56a7b01b..8ccf25be 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -532,6 +532,14 @@ public class CarpetEventServer }, player::getCommandSource); } }, + PLAYER_SWAPS_HANDS("player_swaps_hands", 1, false) + { + @Override + public void onPlayerEvent(ServerPlayerEntity player) + { + handler.call( () -> Collections.singletonList(((c, t) -> new EntityValue(player))), player::getCommandSource); + } + }, PLAYER_TAKES_DAMAGE("player_takes_damage", 4, false) { @Override diff --git a/src/main/resources/assets/carpet/scripts/event_test.sc b/src/main/resources/assets/carpet/scripts/event_test.sc index c6934911..9e2f14db 100644 --- a/src/main/resources/assets/carpet/scripts/event_test.sc +++ b/src/main/resources/assets/carpet/scripts/event_test.sc @@ -264,3 +264,9 @@ __on_player_switches_slot(player, from, to) -> print(' - from: '+ from); print(' - to: '+ to); ); + +__on_player_swaps_hands(player) -> ( + print(''); + print('__on_player_swaps_hands(player)'); + print(' Player '+player+' swaps hands.') +);