From c6d97972d30cba155bfa2433a5fa909f364dbfe8 Mon Sep 17 00:00:00 2001 From: Govindas Date: Sat, 23 Oct 2021 16:39:28 +0200 Subject: [PATCH] Add 'belowname_display_1.12.2-ThatPacketAddon.sk' --- belowname_display_1.12.2-ThatPacketAddon.sk | 101 ++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 belowname_display_1.12.2-ThatPacketAddon.sk diff --git a/belowname_display_1.12.2-ThatPacketAddon.sk b/belowname_display_1.12.2-ThatPacketAddon.sk new file mode 100644 index 0000000..e1d3d3d --- /dev/null +++ b/belowname_display_1.12.2-ThatPacketAddon.sk @@ -0,0 +1,101 @@ +#made by Govindas @ limework.net + +import: + com.comphenix.protocol.wrappers.EnumWrappers$ScoreboardAction + net.minecraft.server.v1_12_R1.IScoreboardCriteria$EnumScoreboardHealthDisplay + +#cache packets / reflection, so we can run code much faster +on script load: + #remove scoreboard objective packet + + set {-scoreboard_objective_remove_packet} to new play_server_scoreboard_objective packet + set int field 0 of {-scoreboard_objective_remove_packet} to 1 #1 means remove + + #create scoreboard objective packet + + set {-scoreboard_objective_create_packet} to new play_server_scoreboard_objective packet + set int field 0 of {-scoreboard_objective_create_packet} to 0 #0 means create + set {-scoreboard_objective_create_packet}.getHandle().c to EnumScoreboardHealthDisplay.INTEGER + + #update scoreboard objective packet + + set {-scoreboard_objective_update_packet} to new play_server_scoreboard_objective packet + set int field 0 of {-scoreboard_objective_update_packet} to 2 #2 means update + + #set objective display slot + #2 = below name + #0 = sidebar + + set {-belowname_display_packet} to new play_server_scoreboard_display_objective packet + set int field 0 of {-belowname_display_packet} to 2 + + #set the number displayed + + set {-scoreboard_score_packet} to new play_server_scoreboard_score packet + set ScoreboardAction field 0 of {-scoreboard_score_packet} to ScoreboardAction.CHANGE + +effect set below[ ]name of %player/string% for %player% to %number% named %string%: + trigger: + + #register scoreboard objective + if {-hpbelowpacket::%expression 2%} is not set: + set {_packet} to {-scoreboard_objective_create_packet} + + #random scoreboard name to support bungeecord + + + set {_uuid} to first 16 characters of random uuid + + set string field 0 of {_packet} to {_uuid} + set string field 1 of {_packet} to expression 4 #text that is displayed below name + + send packet {_packet} to expression 2 + set {-hpbelowpacket::%expression 2%} to expression 4 + + set {-hpbelowpacketid::%expression 2%} to {_uuid} + + + #below name display packet, MUST be sent only once + set {_packet} to {-belowname_display_packet} + set string field 0 of {_packet} to {-hpbelowpacketid::%expression 2%} + send packet {_packet} to expression 2 + + #update the name if objective already present + + else if {-hpbelowpacket::%expression 2%} is not expression 4: + + set {_packet} to {-scoreboard_objective_update_packet} + set string field 0 of {_packet} to {-hpbelowpacketid::%expression 2%} + set string field 1 of {_packet} to expression 4 #new text displayed below name + + send packet {_packet} to expression 2 + set {-hpbelowpacket::%expression 2%} to expression 4 + + #set the number displayed + + set {_packet} to {-scoreboard_score_packet} + set int field 0 of {_packet} to expression 3 #number + set string field 0 of {_packet} to "%expression 1%" #player name + set string field 1 of {_packet} to {-hpbelowpacketid::%expression 2%} + send packet {_packet} to expression 2 + +effect (remove|reset|delete) below[ ]name for %player%: + trigger: + #removed this condition... as it was sometimes preventing legitimate reset, maybe sometimes it just needs to do it twice?) + #{-hpbelowpacketid::%expression 1%} is set: + #needed to re-create the display, to reset it easier + #somehow without re-setting it before removing, it bugs out and doesn't let to remove it anymore without relog sometimes + set {_id} to "%{-hpbelowpacketid::%expression 1%}%" + wait 2 ticks + {_id} is "%{-hpbelowpacketid::%expression 1%}%" + set belowname of expression 1 for expression 1 to 0 named "reset" + set {_packet} to {-scoreboard_objective_remove_packet} + set string field 0 of {_packet} to {-hpbelowpacketid::%expression 1%} + send packet {_packet} to expression 1 + + delete {-hpbelowpacketid::%expression 1%} and {-hpbelowpacket::%expression 1%} +on quit: + remove belowname for player +on player world change: + {-hpbelowpacketid::%player%} is set: + remove belowname for player \ No newline at end of file