From 2d43ecc0926c32a7f0e8625a0d06f17ac7634a05 Mon Sep 17 00:00:00 2001 From: Derek <19647340+ddinan@users.noreply.github.com> Date: Sun, 11 May 2025 13:13:30 +1000 Subject: [PATCH] Add ToggleBlockList CPE --- src/Protocol.c | 13 +++++++++++++ src/Protocol.h | 2 +- src/Screens.c | 6 ++++++ src/Screens.h | 1 + 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Protocol.c b/src/Protocol.c index 0f922fd86..93ebdb5be 100644 --- a/src/Protocol.c +++ b/src/Protocol.c @@ -33,6 +33,7 @@ #include "InputHandler.h" #include "HeldBlockRenderer.h" #include "Options.h" +#include "Screens.h" struct _ProtocolData Protocol; @@ -1605,6 +1606,17 @@ static void CPE_CinematicGui(cc_uint8* data) { Gui.BarSize = (float)barSize / UInt16_MaxValue; } +static void CPE_ToggleBlockList(cc_uint8* data) { + cc_bool closeBlockList = data[0]; + + if (closeBlockList) { + InventoryScreen_Hide(); + } + else { + InventoryScreen_Show(); + } +} + static void CPE_Reset(void) { cpe_serverExtensionsCount = 0; cpe_pingTicks = 0; CPEExtensions_Reset(); @@ -1649,6 +1661,7 @@ static void CPE_Reset(void) { Net_Set(OPCODE_ENTITY_TELEPORT_EXT, CPE_ExtEntityTeleport, 11); Net_Set(OPCODE_LIGHTING_MODE, CPE_LightingMode, 3); Net_Set(OPCODE_CINEMATIC_GUI, CPE_CinematicGui, 10); + Net_Set(OPCODE_TOGGLE_BLOCK_LIST, CPE_ToggleBlockList, 2); } static cc_uint8* CPE_Tick(cc_uint8* data) { diff --git a/src/Protocol.h b/src/Protocol.h index a78976d2e..4f4bf65a5 100644 --- a/src/Protocol.h +++ b/src/Protocol.h @@ -40,7 +40,7 @@ enum OPCODE_ { OPCODE_DEFINE_MODEL, OPCODE_DEFINE_MODEL_PART, OPCODE_UNDEFINE_MODEL, OPCODE_PLUGIN_MESSAGE, OPCODE_ENTITY_TELEPORT_EXT, OPCODE_LIGHTING_MODE, OPCODE_CINEMATIC_GUI, OPCODE_NOTIFY_ACTION, - OPCODE_NOTIFY_POSITION_ACTION, + OPCODE_NOTIFY_POSITION_ACTION, OPCODE_TOGGLE_BLOCK_LIST, OPCODE_COUNT }; diff --git a/src/Screens.c b/src/Screens.c index 8de67e047..3bdc48bb2 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -1819,6 +1819,12 @@ void InventoryScreen_Show(void) { CPE_SendNotifyAction(NOTIFY_ACTION_BLOCK_LIST_TOGGLED, 1); } +void InventoryScreen_Hide(void) { + struct InventoryScreen* s = &InventoryScreen; + Gui_Remove((struct Screen*)s); + CPE_SendNotifyAction(NOTIFY_ACTION_BLOCK_LIST_TOGGLED, 0); +} + /*########################################################################################################################* *------------------------------------------------------LoadingScreen------------------------------------------------------* diff --git a/src/Screens.h b/src/Screens.h index 2571b2050..76f88b9e5 100644 --- a/src/Screens.h +++ b/src/Screens.h @@ -27,6 +27,7 @@ void Screen_NullFunc(void* screen); void Screen_NullUpdate(void* screen, float delta); void InventoryScreen_Show(void); +void InventoryScreen_Hide(void); void HUDScreen_Show(void); void LoadingScreen_Show(const cc_string* title, const cc_string* message); void GeneratingScreen_Show(void);