From a82f451c2678f41de507a3515cc0864794aefe4a Mon Sep 17 00:00:00 2001 From: PetteriM1 <26197131+PetteriM1@users.noreply.github.com> Date: Wed, 19 Jun 2024 14:32:44 +0300 Subject: [PATCH] Add method to hide hud elements (#2183) --- src/main/java/cn/nukkit/Player.java | 12 +++++++ .../nukkit/network/protocol/ProtocolInfo.java | 11 +++++- .../nukkit/network/protocol/SetHudPacket.java | 35 +++++++++++++++++++ .../network/protocol/types/HudElement.java | 24 +++++++++++++ .../java/cn/nukkit/scoreboard/Scoreboard.java | 1 - 5 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 src/main/java/cn/nukkit/network/protocol/SetHudPacket.java create mode 100644 src/main/java/cn/nukkit/network/protocol/types/HudElement.java diff --git a/src/main/java/cn/nukkit/Player.java b/src/main/java/cn/nukkit/Player.java index 10a16693b81..8b4986cba4a 100644 --- a/src/main/java/cn/nukkit/Player.java +++ b/src/main/java/cn/nukkit/Player.java @@ -5523,4 +5523,16 @@ public void onCompletion(Server server) { this.server.getScheduler().scheduleAsyncTask(this.preLoginEventTask); this.processLogin(); } + + /** + * Show or hide hud elements for the player + * @param visible whether the listed elements will be visible + * @param elements elements + */ + public void setHudElementVisibility(boolean visible, HudElement... elements) { + SetHudPacket pk = new SetHudPacket(); + pk.elements.addAll(Arrays.asList(elements)); + pk.visible = visible; + this.dataPacket(pk); + } } diff --git a/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java b/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java index f0bf223a228..d06b703953e 100644 --- a/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java +++ b/src/main/java/cn/nukkit/network/protocol/ProtocolInfo.java @@ -220,5 +220,14 @@ public interface ProtocolInfo { // MC packet IDs continue from 300 (0x12c) // Hack: 100 is added to the IDs below on encode // TODO: New pid() function (int) while trying not to break too many plugins - byte __INTERNAL__OPEN_SIGN_PACKET = (byte) 203; // 303 + byte __INTERNAL__CAMERA_INSTRUCTION_PACKET = (byte) 200; + byte __INTERNAL__COMPRESSED_BIOME_DEFINITIONS_LIST_PACKET = (byte) 201; + byte __INTERNAL__TRIM_DATA_PACKET = (byte) 202; + byte __INTERNAL__OPEN_SIGN_PACKET = (byte) 203; + byte __INTERNAL__AGENT_ANIMATION_PACKET = (byte) 204; + byte __INTERNAL__REFRESH_ENTITLEMENTS_PACKET = (byte) 205; + byte __INTERNAL__TOGGLE_CRAFTER_SLOT_REQUEST_PACKET = (byte) 206; + byte __INTERNAL__SET_PLAYER_INVENTORY_OPTIONS_PACKET = (byte) 207; + byte __INTERNAL__SET_HUD_PACKET = (byte) 208; + byte __INTERNAL__AWARD_ACHIEVEMENT_PACKET = (byte) 209; } diff --git a/src/main/java/cn/nukkit/network/protocol/SetHudPacket.java b/src/main/java/cn/nukkit/network/protocol/SetHudPacket.java new file mode 100644 index 00000000000..52af99108d1 --- /dev/null +++ b/src/main/java/cn/nukkit/network/protocol/SetHudPacket.java @@ -0,0 +1,35 @@ +package cn.nukkit.network.protocol; + +import cn.nukkit.network.protocol.types.HudElement; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import lombok.ToString; + +import java.util.List; + +@ToString +public class SetHudPacket extends DataPacket { + + public static final byte NETWORK_ID = ProtocolInfo.__INTERNAL__SET_HUD_PACKET; + + public final List elements = new ObjectArrayList<>(); + public boolean visible; + + @Override + public byte pid() { + return NETWORK_ID; + } + + @Override + public void decode() { + } + + @Override + public void encode() { + this.reset(); + this.putUnsignedVarInt(this.elements.size()); + for (HudElement element : this.elements) { + this.putUnsignedVarInt(element.ordinal()); + } + this.putBoolean(this.visible); + } +} diff --git a/src/main/java/cn/nukkit/network/protocol/types/HudElement.java b/src/main/java/cn/nukkit/network/protocol/types/HudElement.java new file mode 100644 index 00000000000..c7db0510bc1 --- /dev/null +++ b/src/main/java/cn/nukkit/network/protocol/types/HudElement.java @@ -0,0 +1,24 @@ +package cn.nukkit.network.protocol.types; + +public enum HudElement { + + PAPER_DOLL, + ARMOR, + TOOL_TIPS, + TOUCH_CONTROLS, + CROSSHAIR, + HOTBAR, + HEALTH, + PROGRESS_BAR, + FOOD_BAR, + AIR_BUBBLES_BAR, + VEHICLE_HEALTH, + /** + * @since v671 + */ + EFFECTS_BAR, + /** + * @since v671 + */ + ITEM_TEXT_POPUP +} diff --git a/src/main/java/cn/nukkit/scoreboard/Scoreboard.java b/src/main/java/cn/nukkit/scoreboard/Scoreboard.java index 85e5cc8c2d5..6dee5abc293 100644 --- a/src/main/java/cn/nukkit/scoreboard/Scoreboard.java +++ b/src/main/java/cn/nukkit/scoreboard/Scoreboard.java @@ -5,7 +5,6 @@ import cn.nukkit.network.protocol.RemoveObjectivePacket; import cn.nukkit.network.protocol.SetDisplayObjectivePacket; import cn.nukkit.network.protocol.SetScorePacket; -import com.google.common.collect.ImmutableMap; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor;