From e2e45bb20d0afe1b3f720d06ed97e1c95f386c44 Mon Sep 17 00:00:00 2001 From: gnembon Date: Wed, 3 Jun 2020 00:09:34 -0300 Subject: [PATCH] added __on_player_connects and dis. fixes #294 --- docs/scarpet/Full.md | 2 ++ docs/scarpet/api/Events.md | 2 ++ docs/scarpet/resources/editors/idea/4.txt | 4 +++- docs/scarpet/resources/editors/npp/scarpet.xml | 2 ++ .../carpet/mixins/PlayerManager_coreMixin.java | 3 +++ .../ServerPlayNetworkHandler_coreMixin.java | 3 +++ .../java/carpet/script/CarpetEventServer.java | 18 ++++++++++++++++++ .../assets/carpet/scripts/event_test.sc | 16 +++++++++++++++- 8 files changed, 48 insertions(+), 2 deletions(-) diff --git a/docs/scarpet/Full.md b/docs/scarpet/Full.md index 9a537627..fc2725cf 100644 --- a/docs/scarpet/Full.md +++ b/docs/scarpet/Full.md @@ -3047,6 +3047,8 @@ __on_player_starts_sprinting(player) __on_player_stops_sprinting(player) __on_player_drops_item(player) __on_player_drops_stack(player) +__on_player_connects(player) +__on_player_disconnects(player, reason) __on_statistic(player, category, event, value) // player statistic changes diff --git a/docs/scarpet/api/Events.md b/docs/scarpet/api/Events.md index 39992450..6a616f30 100644 --- a/docs/scarpet/api/Events.md +++ b/docs/scarpet/api/Events.md @@ -48,6 +48,8 @@ __on_player_starts_sprinting(player) __on_player_stops_sprinting(player) __on_player_drops_item(player) __on_player_drops_stack(player) +__on_player_connects(player) +__on_player_disconnects(player, reason) __on_statistic(player, category, event, value) // player statistic changes diff --git a/docs/scarpet/resources/editors/idea/4.txt b/docs/scarpet/resources/editors/idea/4.txt index 4799c846..faf87463 100644 --- a/docs/scarpet/resources/editors/idea/4.txt +++ b/docs/scarpet/resources/editors/idea/4.txt @@ -30,4 +30,6 @@ __on_tick_nether __on_player_takes_damage __on_player_deals_damage __on_player_dies -__on_player_respawns \ No newline at end of file +__on_player_respawns +__on_player_disconnects +__on_player_connects \ No newline at end of file diff --git a/docs/scarpet/resources/editors/npp/scarpet.xml b/docs/scarpet/resources/editors/npp/scarpet.xml index 67ceb72a..33416a05 100644 --- a/docs/scarpet/resources/editors/npp/scarpet.xml +++ b/docs/scarpet/resources/editors/npp/scarpet.xml @@ -112,6 +112,8 @@ __on_player_deals_damage __on_player_dies __on_player_respawns + __on_player_disconnects + __on_player_connects $ 00' 01\ 02' 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 diff --git a/src/main/java/carpet/mixins/PlayerManager_coreMixin.java b/src/main/java/carpet/mixins/PlayerManager_coreMixin.java index ecd2fe61..62eeefff 100644 --- a/src/main/java/carpet/mixins/PlayerManager_coreMixin.java +++ b/src/main/java/carpet/mixins/PlayerManager_coreMixin.java @@ -9,6 +9,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import static carpet.script.CarpetEventServer.Event.PLAYER_CONNECTS; + @Mixin(PlayerManager.class) public class PlayerManager_coreMixin { @@ -16,5 +18,6 @@ public class PlayerManager_coreMixin private void onPlayerConnected(ClientConnection connection, ServerPlayerEntity player, CallbackInfo ci) { CarpetServer.onPlayerLoggedIn(player); + PLAYER_CONNECTS.onPlayerEvent(player); } } diff --git a/src/main/java/carpet/mixins/ServerPlayNetworkHandler_coreMixin.java b/src/main/java/carpet/mixins/ServerPlayNetworkHandler_coreMixin.java index 1dfbc237..43fabd5c 100644 --- a/src/main/java/carpet/mixins/ServerPlayNetworkHandler_coreMixin.java +++ b/src/main/java/carpet/mixins/ServerPlayNetworkHandler_coreMixin.java @@ -13,6 +13,8 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import static carpet.script.CarpetEventServer.Event.PLAYER_DISCONNECTS; + @Mixin(ServerPlayNetworkHandler.class) public class ServerPlayNetworkHandler_coreMixin { @Shadow @@ -21,5 +23,6 @@ public class ServerPlayNetworkHandler_coreMixin { @Inject(method = "onDisconnected", at = @At("HEAD")) private void onPlayerDisconnect(Text reason, CallbackInfo ci) { CarpetServer.onPlayerLoggedOut(this.player); + if (PLAYER_DISCONNECTS.isNeeded()) PLAYER_DISCONNECTS.onPlayerMessage(player, reason.asString()); } } diff --git a/src/main/java/carpet/script/CarpetEventServer.java b/src/main/java/carpet/script/CarpetEventServer.java index cd5d027d..4d3eb8d2 100644 --- a/src/main/java/carpet/script/CarpetEventServer.java +++ b/src/main/java/carpet/script/CarpetEventServer.java @@ -553,6 +553,23 @@ public class CarpetEventServer ), player::getCommandSource); } }, + PLAYER_CONNECTS("player_connects", 1, false) { + @Override + public void onPlayerEvent(ServerPlayerEntity player) + { + handler.call( () -> Collections.singletonList(((c, t) -> new EntityValue(player))), player::getCommandSource); + } + }, + PLAYER_DISCONNECTS("player_disconnects", 2, false) { + @Override + public void onPlayerMessage(ServerPlayerEntity player, String message) + { + handler.call( () -> Arrays.asList( + ((c, t) -> new EntityValue(player)), + ((c, t) -> new StringValue(message)) + ), player::getCommandSource); + } + }, STATISTICS("statistic", 4, false) { private Identifier getStatId(Stat stat) @@ -617,6 +634,7 @@ public class CarpetEventServer public void onTick() { } public void onChunkGenerated(ServerWorld world, Chunk chunk) { } public void onPlayerEvent(ServerPlayerEntity player) { } + public void onPlayerMessage(ServerPlayerEntity player, String message) { } public void onPlayerStatistic(ServerPlayerEntity player, Stat stat, int amount) { } public void onMountControls(ServerPlayerEntity player, float strafeSpeed, float forwardSpeed, boolean jumping, boolean sneaking) { } public void onItemAction(ServerPlayerEntity player, Hand enumhand, ItemStack itemstack) { } diff --git a/src/main/resources/assets/carpet/scripts/event_test.sc b/src/main/resources/assets/carpet/scripts/event_test.sc index 036a0e38..1659d565 100644 --- a/src/main/resources/assets/carpet/scripts/event_test.sc +++ b/src/main/resources/assets/carpet/scripts/event_test.sc @@ -229,4 +229,18 @@ __on_player_changes_dimension(player, from_pos, from_dimension, to_pos, to_dimen print(' - player: '+player); print(' - from '+from_dimension+' at '+map(from_pos, str('%.2f',_))); print(' - to '+to_dimension+if(to_pos == null, '', ' at '+map(to_pos, str('%.2f',_)))); -) +); + +__on_player_connects(player) -> +( // you will never sees it + print(''); + print('__on_player_connects(player)'); + print('Player '+player+' connects.') +); + +__on_player_disconnects(player, reason) -> +( // you will never sees it either + print(''); + print('__on_player_disconnects(player)'); + print('Player '+player+' disconnects because: '+reason) +);