diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 991dfad6..11800947 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -53,6 +53,11 @@ * `Always Save Chest Tile Entities` * `Fix Transferring Durability When Using Items` * `Fix Switching Perspective While Sneaking` + * `Log Chat Messages` + * `Log Game Status` + * `Screenshot Support` + * `Fix Camera Functionality` + * `Property Scale Animated Textures` * Split Up `Remove Creative Mode Restrictions` Feature Flag * `Remove Creative Mode Restrictions` (Disabled By Default) * `Display Slot Count In Creative Mode` (Disabled By Default) diff --git a/launcher/src/client/available-feature-flags b/launcher/src/client/available-feature-flags index 0433f9d3..1b892494 100644 --- a/launcher/src/client/available-feature-flags +++ b/launcher/src/client/available-feature-flags @@ -97,4 +97,9 @@ TRUE Fix Text Wrapping TRUE Fullscreen Support TRUE Always Save Chest Tile Entities TRUE Fix Transferring Durability When Using Items -TRUE Fix Switching Perspective While Sneaking \ No newline at end of file +TRUE Fix Switching Perspective While Sneaking +TRUE Log Chat Messages +TRUE Log Game Status +TRUE Screenshot Support +TRUE Fix Camera Functionality +TRUE Property Scale Animated Textures \ No newline at end of file diff --git a/mods/include/mods/text-input-box/TextInputBox.h b/mods/include/mods/text-input-box/TextInputBox.h index 3a582b1d..dbf4d505 100644 --- a/mods/include/mods/text-input-box/TextInputBox.h +++ b/mods/include/mods/text-input-box/TextInputBox.h @@ -16,10 +16,10 @@ struct TextInputBox { void tick(); void setFocused(bool b); void onClick(int x, int y); - bool clicked(int x, int y); - std::string getText(); + [[nodiscard]] bool clicked(int x, int y) const; + [[nodiscard]] std::string getText() const; void setText(std::string text); - bool isFocused(); + [[nodiscard]] bool isFocused() const; void setMaxLength(int max_length); private: diff --git a/mods/src/camera/camera.cpp b/mods/src/camera/camera.cpp index 76507eac..fb4c60ee 100644 --- a/mods/src/camera/camera.cpp +++ b/mods/src/camera/camera.cpp @@ -50,7 +50,9 @@ static void TripodCameraRenderer_render_TileRenderer_tesselateCrossTexture_injec // Init void init_camera() { // Implement AppPlatform_linux::saveScreenshot So Cameras Work - overwrite_calls(AppPlatform_saveScreenshot, AppPlatform_saveScreenshot_injection); + if (feature_has("Fix Camera Functionality", server_disabled)) { + overwrite_calls(AppPlatform_saveScreenshot, AppPlatform_saveScreenshot_injection); + } // Fix Camera Rendering if (feature_has("Fix Camera Rendering", server_disabled)) { diff --git a/mods/src/death/death.cpp b/mods/src/death/death.cpp index 5df8079b..c30e71fd 100644 --- a/mods/src/death/death.cpp +++ b/mods/src/death/death.cpp @@ -13,9 +13,9 @@ std::string get_death_message(Player *player, Entity *cause, const bool was_shot std::string message = player->username; if (cause) { // Entity cause - int type_id = cause->getEntityTypeId(); + const int type_id = cause->getEntityTypeId(); int aux = cause->getAuxData(); - bool is_player = cause->isPlayer(); + const bool is_player = cause->isPlayer(); if (cause->getCreatureBaseType() != 0 || is_player) { // Killed by a creature if (was_shot) { @@ -134,12 +134,12 @@ void init_death() { overwrite_calls(LocalPlayer_actuallyHurt, LocalPlayer_actuallyHurt_injection); patch_vtable(ServerPlayer_actuallyHurt, ServerPlayer_actuallyHurt_injection); overwrite_calls(Mob_hurt, Mob_hurt_injection); - } - // Fix TNT - // This changes PrimedTnt_explode from Level::explode(nullptr, x, y, z, 3.1f) to Level::explode(this, x, y, z, 3.1f) - unsigned char cpy_r1_r0_patch[4] = {0x00, 0x10, 0xa0, 0xe1}; // "cpy r1, r0" - patch((void *) 0x87998, cpy_r1_r0_patch); - unsigned char ldr_r0_24_patch[4] = {0x24, 0x00, 0x90, 0xe5}; // "ldr r0, [r0, #0x24]" - patch((void *) 0x8799c, ldr_r0_24_patch); + // Fix TNT + // This changes PrimedTnt_explode from Level::explode(nullptr, x, y, z, 3.1f) to Level::explode(this, x, y, z, 3.1f) + unsigned char cpy_r1_r0_patch[4] = {0x00, 0x10, 0xa0, 0xe1}; // "cpy r1, r0" + patch((void *) 0x87998, cpy_r1_r0_patch); + unsigned char ldr_r0_24_patch[4] = {0x24, 0x00, 0x90, 0xe5}; // "ldr r0, [r0, #0x24]" + patch((void *) 0x8799c, ldr_r0_24_patch); + } } diff --git a/mods/src/game-mode/game-mode.cpp b/mods/src/game-mode/game-mode.cpp index d23a7180..496101f6 100644 --- a/mods/src/game-mode/game-mode.cpp +++ b/mods/src/game-mode/game-mode.cpp @@ -57,7 +57,7 @@ void init_game_mode() { overwrite_call((void *) 0x16f84, (void *) ServerLevel_constructor->get(true)); // Allocate Correct Size For ServerLevel - uint32_t level_size = sizeof(ServerLevel); + constexpr uint32_t level_size = sizeof(ServerLevel); patch_address((void *) 0x17004, (void *) level_size); // Disable CreatorMode-Specific API Features (Polling Block Hits) In SurvivalMode, This Is Preferable To Crashing diff --git a/mods/src/init/init.cpp b/mods/src/init/init.cpp index 5afd16f5..8675e099 100644 --- a/mods/src/init/init.cpp +++ b/mods/src/init/init.cpp @@ -12,9 +12,8 @@ __attribute__((constructor)) static void init() { init_compat(); if (reborn_is_server()) { init_server(); - } else { - init_multiplayer(); } + init_multiplayer(); if (!reborn_is_headless()) { init_sound(); } diff --git a/mods/src/input/attack.cpp b/mods/src/input/attack.cpp index 49eaf128..7d3eede7 100644 --- a/mods/src/input/attack.cpp +++ b/mods/src/input/attack.cpp @@ -12,7 +12,7 @@ static bool MouseBuildInput_tickBuild_injection(MouseBuildInput_tickBuild_t orig const bool ret = original(mouse_build_input, local_player, build_action_intention_return); // Convert Remove/Attack Into Attack If A Tile Is Not Selected if (ret && *build_action_intention_return == REMOVE_ATTACK_BAI) { - Minecraft *minecraft = ((LocalPlayer *) local_player)->minecraft; + const Minecraft *minecraft = ((LocalPlayer *) local_player)->minecraft; if (minecraft->hit_result.type != 0) { *build_action_intention_return = ATTACK_BAI; } diff --git a/mods/src/input/bow.cpp b/mods/src/input/bow.cpp index 0800ff61..6b1c2d00 100644 --- a/mods/src/input/bow.cpp +++ b/mods/src/input/bow.cpp @@ -7,7 +7,7 @@ // Store Right-Click Status static int is_right_click = 0; -void input_set_is_right_click(int val) { +void input_set_is_right_click(const int val) { is_right_click = val; } diff --git a/mods/src/input/drop.cpp b/mods/src/input/drop.cpp index 34b5bb22..d08fe17e 100644 --- a/mods/src/input/drop.cpp +++ b/mods/src/input/drop.cpp @@ -38,7 +38,7 @@ static void _handle_drop(Minecraft *minecraft) { inventory_item->count = 0; } else { // Drop Item - const int drop_count = 1; + constexpr int drop_count = 1; dropped_item->count = drop_count; inventory_item->count -= drop_count; } @@ -59,7 +59,7 @@ static void _handle_drop(Minecraft *minecraft) { // Init void _init_drop() { if (feature_has("Bind \"Q\" Key To Item Dropping", server_disabled)) { - misc_run_on_game_key_press([](Minecraft *mc, int key) { + misc_run_on_game_key_press([](Minecraft *mc, const int key) { if (key == MC_KEY_q) { _handle_drop(mc); return true; diff --git a/mods/src/input/misc.cpp b/mods/src/input/misc.cpp index a52b6952..432e8c45 100644 --- a/mods/src/input/misc.cpp +++ b/mods/src/input/misc.cpp @@ -32,7 +32,7 @@ static bool OptionsScreen_handleBackEvent_injection(OptionsScreen *screen, bool } // Fix "Sleeping Beauty" Bug -static bool InBedScreen_handleBackEvent_injection(InBedScreen *screen, bool do_nothing) { +static bool InBedScreen_handleBackEvent_injection(InBedScreen *screen, const bool do_nothing) { if (!do_nothing) { // Close Screen Minecraft *minecraft = screen->minecraft; @@ -48,7 +48,7 @@ static bool InBedScreen_handleBackEvent_injection(InBedScreen *screen, bool do_n // Block UI Interaction When Mouse Is Locked static bool Gui_tickItemDrop_Minecraft_isCreativeMode_call_injection(Minecraft *minecraft) { - bool is_in_game = minecraft->screen == nullptr || minecraft->screen->vtable == (Screen_vtable *) Touch_IngameBlockSelectionScreen_vtable_base; + const bool is_in_game = minecraft->screen == nullptr || minecraft->screen->vtable == (Screen_vtable *) Touch_IngameBlockSelectionScreen_vtable_base; if (!enable_misc || (SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_OFF && is_in_game)) { // Call Original Method return creative_is_restricted() && minecraft->isCreativeMode(); diff --git a/mods/src/misc/logging.cpp b/mods/src/misc/logging.cpp index 970dda93..a3b223c1 100644 --- a/mods/src/misc/logging.cpp +++ b/mods/src/misc/logging.cpp @@ -5,6 +5,7 @@ #include "misc-internal.h" #include +#include // Print Chat To Log static bool Gui_addMessage_recursing = false; @@ -13,7 +14,7 @@ static void Gui_addMessage_injection(Gui_addMessage_t original, Gui *gui, const char *new_message = strdup(text.c_str()); ALLOC_CHECK(new_message); sanitize_string(new_message, -1, 1); - std::string cpp_str = new_message; + const std::string cpp_str = new_message; // Process Message if (!Gui_addMessage_recursing) { @@ -50,8 +51,8 @@ static void print_progress(Minecraft *minecraft) { progress = -1; } if (message != nullptr) { - bool message_different = message != last_message; - bool progress_significant = is_progress_difference_significant(progress, last_progress); + const bool message_different = message != last_message; + const bool progress_significant = is_progress_difference_significant(progress, last_progress); if (message_different || progress_significant) { if (progress != -1) { INFO("Status: %s: %i%%", message, progress); @@ -86,13 +87,18 @@ static void Level_saveLevelData_injection(Level_saveLevelData_t original, Level // Init void _init_misc_logging() { // Print Chat To Log - overwrite_calls(Gui_addMessage, Gui_addMessage_injection); + if (feature_has("Log Chat Messages", server_enabled)) { + overwrite_calls(Gui_addMessage, Gui_addMessage_injection); + } - // Print Progress Reports - misc_run_on_update(Minecraft_update_injection); + // Game Status + if (feature_has("Log Game Status", server_enabled)) { + // Print Progress Reports + misc_run_on_update(Minecraft_update_injection); - // Print Log On Game Save - overwrite_calls(Level_saveLevelData, Level_saveLevelData_injection); + // Print Log On Game Save + overwrite_calls(Level_saveLevelData, Level_saveLevelData_injection); + } // Disable stdout Buffering setvbuf(stdout, nullptr, _IONBF, 0); diff --git a/mods/src/misc/misc.cpp b/mods/src/misc/misc.cpp index 134dc621..8f1b4a3a 100644 --- a/mods/src/misc/misc.cpp +++ b/mods/src/misc/misc.cpp @@ -81,16 +81,6 @@ static RakNet_StartupResult RakNetInstance_host_RakNet_RakPeer_Startup_injection return result; } -// Fix Bug Where RakNetInstance Starts Pinging Potential Servers Before The "Join Game" Screen Is Opened -static RakNetInstance *RakNetInstance_injection(RakNetInstance_constructor_t original, RakNetInstance *rak_net_instance) { - // Call Original Method - RakNetInstance *result = original(rak_net_instance); - // Fix - rak_net_instance->pinging_for_hosts = 0; - // Return - return result; -} - // Fix Furnace Not Checking Item Auxiliary When Inserting New Item static int32_t FurnaceScreen_handleAddItem_injection(FurnaceScreen_handleAddItem_t original, FurnaceScreen *furnace_screen, int32_t slot, const ItemInstance *item) { // Get Existing Item @@ -461,11 +451,6 @@ void init_misc() { overwrite_call((void *) 0x73778, (void *) RakNetInstance_host_RakNet_RakPeer_Startup_injection); } - // Fix Bug Where RakNetInstance Starts Pinging Potential Servers Before The "Join Game" Screen Is Opened - if (feature_has("Prevent Unnecessary Server Pinging", server_enabled)) { - overwrite_calls(RakNetInstance_constructor, RakNetInstance_injection); - } - // Fix Furnace Not Checking Item Auxiliary When Inserting New Item if (feature_has("Fix Furnace Not Checking Item Auxiliary", server_disabled)) { overwrite_calls(FurnaceScreen_handleAddItem, FurnaceScreen_handleAddItem_injection); diff --git a/mods/src/multiplayer/multiplayer.cpp b/mods/src/multiplayer/multiplayer.cpp index f5d9e1a2..9116d5d3 100644 --- a/mods/src/multiplayer/multiplayer.cpp +++ b/mods/src/multiplayer/multiplayer.cpp @@ -113,10 +113,25 @@ static void RakNetInstance_pingForHosts_injection(RakNetInstance_pingForHosts_t }); } +// Fix Bug Where RakNetInstance Starts Pinging Potential Servers Before The "Join Game" Screen Is Opened +static RakNetInstance *RakNetInstance_injection(RakNetInstance_constructor_t original, RakNetInstance *rak_net_instance) { + // Call Original Method + RakNetInstance *result = original(rak_net_instance); + // Fix + rak_net_instance->pinging_for_hosts = false; + // Return + return result; +} + // Init void init_multiplayer() { // Inject Code if (feature_has("External Server Support", server_disabled)) { overwrite_calls(RakNetInstance_pingForHosts, RakNetInstance_pingForHosts_injection); } + + // Fix Bug Where RakNetInstance Starts Pinging Potential Servers Before The "Join Game" Screen Is Opened + if (feature_has("Prevent Unnecessary Server Pinging", server_enabled)) { + overwrite_calls(RakNetInstance_constructor, RakNetInstance_injection); + } } diff --git a/mods/src/screenshot/screenshot.cpp b/mods/src/screenshot/screenshot.cpp index 439b6f42..c2e6b940 100644 --- a/mods/src/screenshot/screenshot.cpp +++ b/mods/src/screenshot/screenshot.cpp @@ -18,6 +18,7 @@ #include #include #include +#include // Ensure Screenshots Folder Exists static std::string get_screenshot_dir() { @@ -46,7 +47,7 @@ void screenshot_take(Gui *gui) { // Get Timestamp time_t raw_time; time(&raw_time); - tm *time_info = localtime(&raw_time); + const tm *time_info = localtime(&raw_time); char time[512]; strftime(time, 512, "%Y-%m-%d_%H.%M.%S", time_info); @@ -66,10 +67,10 @@ void screenshot_take(Gui *gui) { // Get Image Size GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); - int x = viewport[0]; - int y = viewport[1]; - int width = viewport[2]; - int height = viewport[3]; + const int x = viewport[0]; + const int y = viewport[1]; + const int width = viewport[2]; + const int height = viewport[3]; // Get Line Size int line_size = width * 4; @@ -80,7 +81,7 @@ void screenshot_take(Gui *gui) { // Round line_size = ALIGN_UP(line_size, alignment); } - int size = height * line_size; + const int size = height * line_size; // Read Pixels unsigned char *pixels = (unsigned char *) malloc(size); @@ -105,15 +106,17 @@ void screenshot_take(Gui *gui) { // Init void init_screenshot() { - // Create Directory - get_screenshot_dir(); - // Take Screenshot On F2 - misc_run_on_key_press([](Minecraft *mc, int key) { - if (key == MC_KEY_F2) { - screenshot_take(&mc->gui); - return true; - } else { - return false; - } - }); + if (feature_has("Screenshot Support", server_disabled)) { + // Create Directory + get_screenshot_dir(); + // Take Screenshot On F2 + misc_run_on_key_press([](Minecraft *mc, int key) { + if (key == MC_KEY_F2) { + screenshot_take(&mc->gui); + return true; + } else { + return false; + } + }); + } } \ No newline at end of file diff --git a/mods/src/skin/skin.cpp b/mods/src/skin/skin.cpp index 759e0ceb..1e1407be 100644 --- a/mods/src/skin/skin.cpp +++ b/mods/src/skin/skin.cpp @@ -69,7 +69,7 @@ static int32_t Textures_loadAndBindTexture_injection(Textures *textures, __attri // Change Texture static std::string new_texture; if (new_texture.length() == 0) { - std::string username = base64_encode(Strings::default_username); + const std::string username = base64_encode(Strings::default_username); new_texture = '$' + username; } diff --git a/mods/src/sound/sound.cpp b/mods/src/sound/sound.cpp index 9d0a7cce..c9259e2e 100644 --- a/mods/src/sound/sound.cpp +++ b/mods/src/sound/sound.cpp @@ -59,9 +59,9 @@ std::string _sound_get_source_file() { // Play Sound // The pitch value is unsued because it causes glitchy sounds, it is seemingly unused in MCPE as well. -static void play(std::string name, float x, float y, float z, float volume, float pitch, bool is_ui) { - std::string source = _sound_get_source_file(); - std::string resolved_name = _sound_pick(name); +static void play(const std::string &name, const float x, const float y, const float z, const float volume, float pitch, const bool is_ui) { + const std::string source = _sound_get_source_file(); + const std::string resolved_name = _sound_pick(name); if (pitch < 0.01f) { pitch = 1; } @@ -69,10 +69,10 @@ static void play(std::string name, float x, float y, float z, float volume, floa media_audio_play(source.c_str(), resolved_name.c_str(), x, y, z, pitch, volume, is_ui); } } -static void SoundEngine_playUI_injection(__attribute__((unused)) SoundEngine_playUI_t original, __attribute__((unused)) SoundEngine *sound_engine, const std::string &name, float volume, float pitch) { +static void SoundEngine_playUI_injection(__attribute__((unused)) SoundEngine_playUI_t original, __attribute__((unused)) SoundEngine *sound_engine, const std::string &name, const float volume, const float pitch) { play(name, 0, 0, 0, volume, pitch, true); } -static void SoundEngine_play_injection(__attribute__((unused)) SoundEngine_play_t original, __attribute__((unused)) SoundEngine *sound_engine, const std::string &name, float x, float y, float z, float volume, float pitch) { +static void SoundEngine_play_injection(__attribute__((unused)) SoundEngine_play_t original, __attribute__((unused)) SoundEngine *sound_engine, const std::string &name, const float x, const float y, const float z, const float volume, const float pitch) { play(name, x, y, z, volume, pitch, false); } @@ -89,7 +89,7 @@ static void SoundEngine_update_injection(__attribute__((unused)) SoundEngine_upd Options *options = sound_engine->options; // Volume - int32_t sound_enabled = options->sound; + const int32_t sound_enabled = options->sound; volume = sound_enabled ? 1 : 0; // Position And Rotation diff --git a/mods/src/text-input-box/TextInputBox.cpp b/mods/src/text-input-box/TextInputBox.cpp index eca3f1df..a84d4bb2 100644 --- a/mods/src/text-input-box/TextInputBox.cpp +++ b/mods/src/text-input-box/TextInputBox.cpp @@ -28,7 +28,7 @@ TextInputBox *TextInputBox::create(const std::string &placeholder, const std::st return self; } -void TextInputBox::setSize(int x, int y, int width, int height) { +void TextInputBox::setSize(const int x, const int y, const int width, const int height) { m_xPos = x; m_yPos = y; m_width = width; @@ -40,11 +40,11 @@ void TextInputBox::init(Font *pFont) { m_pFont = pFont; } -void TextInputBox::setEnabled(bool bEnabled) { +void TextInputBox::setEnabled(const bool bEnabled) { m_bEnabled = bEnabled; } -void TextInputBox::keyPressed(int key) { +void TextInputBox::keyPressed(const int key) { if (!m_bFocused) { return; } @@ -125,7 +125,7 @@ void TextInputBox::tick() { } } -void TextInputBox::setFocused(bool b) { +void TextInputBox::setFocused(const bool b) { if (m_bFocused == b) { return; } @@ -144,7 +144,7 @@ void TextInputBox::onClick(int x, int y) { } static int PADDING = 5; -void TextInputBox::charPressed(int k) { +void TextInputBox::charPressed(const int k) { if (!m_bFocused) { return; } @@ -165,9 +165,9 @@ void TextInputBox::charPressed(int k) { recalculateScroll(); } -static std::string get_rendered_text(Font *font, int width, int scroll_pos, std::string text) { +static std::string get_rendered_text(Font *font, const int width, const int scroll_pos, std::string text) { std::string rendered_text = text.substr(scroll_pos); - int max_width = width - (PADDING * 2); + const int max_width = width - (PADDING * 2); while (font->width(rendered_text) > max_width) { rendered_text.pop_back(); } @@ -194,14 +194,14 @@ void TextInputBox::render() { } rendered_text = get_rendered_text(m_pFont, m_width, scroll_pos, rendered_text); - int textYPos = (m_height - 8) / 2; + const int textYPos = (m_height - 8) / 2; super.drawString(m_pFont, rendered_text, m_xPos + PADDING, m_yPos + textYPos, text_color); if (m_bCursorOn) { - int cursor_pos = m_insertHead - m_scrollPos; + const int cursor_pos = m_insertHead - m_scrollPos; if (cursor_pos >= 0 && cursor_pos <= int(rendered_text.length())) { std::string substr = rendered_text.substr(0, cursor_pos); - int xPos = PADDING + m_pFont->width(substr); + const int xPos = PADDING + m_pFont->width(substr); std::string str; str += CURSOR_CHAR; @@ -210,7 +210,7 @@ void TextInputBox::render() { } } -bool TextInputBox::clicked(int xPos, int yPos) { +bool TextInputBox::clicked(const int xPos, const int yPos) const { if (!m_bEnabled) { return false; } @@ -237,18 +237,18 @@ void TextInputBox::recalculateScroll() { return; } // Ensure Cursor Is Visible - bool is_cursor_at_end = m_insertHead == int(m_text.length()); + const bool is_cursor_at_end = m_insertHead == int(m_text.length()); if (m_scrollPos >= m_insertHead && m_scrollPos > 0) { // Cursor Is At Scroll Position // Move Back Scroll As Far As Possible while (true) { - int test_scroll_pos = m_scrollPos - 1; + const int test_scroll_pos = m_scrollPos - 1; std::string rendered_text = m_text; if (is_cursor_at_end) { rendered_text += CURSOR_CHAR; } rendered_text = get_rendered_text(m_pFont, m_width, test_scroll_pos, rendered_text); - int cursor_pos = m_insertHead - test_scroll_pos; + const int cursor_pos = m_insertHead - test_scroll_pos; if (cursor_pos >= int(rendered_text.length())) { break; } else { @@ -267,7 +267,7 @@ void TextInputBox::recalculateScroll() { rendered_text += CURSOR_CHAR; } rendered_text = get_rendered_text(m_pFont, m_width, m_scrollPos, rendered_text); - int cursor_pos = m_insertHead - m_scrollPos; + const int cursor_pos = m_insertHead - m_scrollPos; if (cursor_pos < int(rendered_text.length())) { break; } else { @@ -282,7 +282,7 @@ void TextInputBox::recalculateScroll() { } } -std::string TextInputBox::getText() { +std::string TextInputBox::getText() const { return m_text; } @@ -291,10 +291,10 @@ void TextInputBox::setText(std::string str) { m_insertHead = int(m_text.size()); } -bool TextInputBox::isFocused() { +bool TextInputBox::isFocused() const { return m_bFocused; } -void TextInputBox::setMaxLength(int max_length) { +void TextInputBox::setMaxLength(const int max_length) { m_maxLength = max_length; } diff --git a/mods/src/text-input-box/TextInputScreen.cpp b/mods/src/text-input-box/TextInputScreen.cpp index 499849ee..41236d2e 100644 --- a/mods/src/text-input-box/TextInputScreen.cpp +++ b/mods/src/text-input-box/TextInputScreen.cpp @@ -1,11 +1,9 @@ -#include - #include // VTable void TextInputScreen::setup(Screen_vtable *vtable) { static Screen_keyPressed_t original_keyPressed = vtable->keyPressed; - vtable->keyPressed = [](Screen *super2, int key) { + vtable->keyPressed = [](Screen *super2, const int key) { original_keyPressed(super2, key); TextInputScreen *self = (TextInputScreen *) super2; for (int i = 0; i < int(self->m_textInputs->size()); i++) { @@ -14,7 +12,7 @@ void TextInputScreen::setup(Screen_vtable *vtable) { } }; static Screen_keyboardNewChar_t original_keyboardNewChar = vtable->keyboardNewChar; - vtable->keyboardNewChar = [](Screen *super2, char key) { + vtable->keyboardNewChar = [](Screen *super2, const char key) { original_keyboardNewChar(super2, key); TextInputScreen *self = (TextInputScreen *) super2; for (int i = 0; i < int(self->m_textInputs->size()); i++) { @@ -23,7 +21,7 @@ void TextInputScreen::setup(Screen_vtable *vtable) { } }; static Screen_mouseClicked_t original_mouseClicked = vtable->mouseClicked; - vtable->mouseClicked = [](Screen *super2, int x, int y, int param_1) { + vtable->mouseClicked = [](Screen *super2, const int x, const int y, const int param_1) { original_mouseClicked(super2, x, y, param_1); TextInputScreen *self = (TextInputScreen *) super2; for (int i = 0; i < int(self->m_textInputs->size()); i++) { @@ -32,7 +30,7 @@ void TextInputScreen::setup(Screen_vtable *vtable) { } }; static Screen_render_t original_render = vtable->render; - vtable->render = [](Screen *super2, int x, int y, float param_1) { + vtable->render = [](Screen *super2, const int x, const int y, const float param_1) { original_render(super2, x, y, param_1); TextInputScreen *self = (TextInputScreen *) super2; for (int i = 0; i < int(self->m_textInputs->size()); i++) { diff --git a/mods/src/textures/textures.cpp b/mods/src/textures/textures.cpp index 954cd81a..459b1b65 100644 --- a/mods/src/textures/textures.cpp +++ b/mods/src/textures/textures.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include @@ -49,7 +49,7 @@ HOOK(glTexImage2D, void, (GLenum target, GLint level, GLint internalformat, GLsi HOOK(glDeleteTextures, void, (GLsizei n, const GLuint *textures)) { // Remove Old Data for (int i = 0; i < n; i++) { - GLint id = textures[i]; + const GLint id = textures[i]; std::vector::iterator it = get_texture_data().begin(); while (it != get_texture_data().end()) { texture_data data = *it; @@ -65,7 +65,7 @@ HOOK(glDeleteTextures, void, (GLsizei n, const GLuint *textures)) { ensure_glDeleteTextures(); real_glDeleteTextures(n, textures); } -static void get_texture_size(GLint id, GLsizei *width, GLsizei *height) { +static void get_texture_size(const GLint id, GLsizei *width, GLsizei *height) { // Iterate std::vector::iterator it = get_texture_data().begin(); while (it != get_texture_data().end()) { @@ -85,7 +85,7 @@ static void get_texture_size(GLint id, GLsizei *width, GLsizei *height) { // Scale Texture (Remember To Free) #define PIXEL_SIZE 4 -static int get_line_size(int width) { +static int get_line_size(const int width) { int line_size = width * PIXEL_SIZE; { // Handle Alignment @@ -96,9 +96,9 @@ static int get_line_size(int width) { } return line_size; } -static void *scale_texture(const unsigned char *src, GLsizei old_width, GLsizei old_height, GLsizei new_width, GLsizei new_height) { - int old_line_size = get_line_size(old_width); - int new_line_size = get_line_size(new_width); +static void *scale_texture(const unsigned char *src, const GLsizei old_width, const GLsizei old_height, const GLsizei new_width, const GLsizei new_height) { + const int old_line_size = get_line_size(old_width); + const int new_line_size = get_line_size(new_width); // Allocate unsigned char *dst = (unsigned char *) malloc(new_height * new_line_size); @@ -106,13 +106,13 @@ static void *scale_texture(const unsigned char *src, GLsizei old_width, GLsizei // Scale for (int new_x = 0; new_x < new_width; new_x++) { - int old_x = (int) (((float) new_x / (float) new_width) * (float) old_width); + const int old_x = (int) (((float) new_x / (float) new_width) * (float) old_width); for (int new_y = 0; new_y < new_height; new_y++) { - int old_y = (int) (((float) new_y / (float) new_height) * (float) old_height); + const int old_y = (int) (((float) new_y / (float) new_height) * (float) old_height); // Find Position - int new_position = (new_y * new_line_size) + (new_x * PIXEL_SIZE); - int old_position = (old_y * old_line_size) + (old_x * PIXEL_SIZE); + const int new_position = (new_y * new_line_size) + (new_x * PIXEL_SIZE); + const int old_position = (old_y * old_line_size) + (old_x * PIXEL_SIZE); // Copy static_assert(sizeof (int32_t) == PIXEL_SIZE, "Pixel Size Doesn't Match 32-Bit Integer Size"); @@ -125,7 +125,7 @@ static void *scale_texture(const unsigned char *src, GLsizei old_width, GLsizei } // Scale Animated Textures -void glTexSubImage2D_with_scaling(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLsizei normal_texture_width, GLsizei normal_texture_height, GLenum format, GLenum type, const void *pixels) { +void glTexSubImage2D_with_scaling(const GLenum target, const GLint level, const GLint xoffset, const GLint yoffset, const GLsizei width, const GLsizei height, const GLsizei normal_texture_width, const GLsizei normal_texture_height, const GLenum format, const GLenum type, const void *pixels) { // Get Current Texture Size GLint current_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, ¤t_texture); @@ -134,8 +134,8 @@ void glTexSubImage2D_with_scaling(GLenum target, GLint level, GLint xoffset, GLi get_texture_size(current_texture, &texture_width, &texture_height); // Calculate Factor - float width_factor = ((float) texture_width) / ((float) normal_texture_width); - float height_factor = ((float) texture_height) / ((float) normal_texture_height); + const float width_factor = ((float) texture_width) / ((float) normal_texture_width); + const float height_factor = ((float) texture_height) / ((float) normal_texture_height); // Only Scale If Needed if (width_factor == 1.0f && height_factor == 1.0f) { @@ -149,25 +149,25 @@ void glTexSubImage2D_with_scaling(GLenum target, GLint level, GLint xoffset, GLi } // Scale - GLsizei new_width = width * width_factor; - GLsizei new_height = height * height_factor; + const GLsizei new_width = width * width_factor; + const GLsizei new_height = height * height_factor; void *new_pixels = scale_texture((const unsigned char *) pixels, width, height, new_width, new_height); // Call Original Method - GLint new_xoffset = xoffset * width_factor; - GLint new_yoffset = yoffset * height_factor; + const GLint new_xoffset = xoffset * width_factor; + const GLint new_yoffset = yoffset * height_factor; glTexSubImage2D(target, level, new_xoffset, new_yoffset, new_width, new_height, format, type, new_pixels); // Free free(new_pixels); } } -static void Textures_tick_glTexSubImage2D_injection(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels) { +static void Textures_tick_glTexSubImage2D_injection(const GLenum target, const GLint level, const GLint xoffset, const GLint yoffset, const GLsizei width, const GLsizei height, const GLenum format, const GLenum type, const void *pixels) { glTexSubImage2D_with_scaling(target, level, xoffset, yoffset, width, height, 256, 256, format, type, pixels); } // Load Textures -static Texture AppPlatform_linux_loadTexture_injection(__attribute__((unused)) AppPlatform_linux_loadTexture_t original, __attribute__((unused)) AppPlatform_linux *app_platform, const std::string &path, bool b) { +static Texture AppPlatform_linux_loadTexture_injection(__attribute__((unused)) AppPlatform_linux_loadTexture_t original, __attribute__((unused)) AppPlatform_linux *app_platform, const std::string &path, const bool b) { Texture out; std::string real_path = path; if (b) { @@ -217,9 +217,9 @@ void init_textures() { } // Tick Dynamic Textures (Animated Water) - bool animated_water = feature_has("Animated Water", server_disabled); - bool animated_lava = feature_has("Animated Lava", server_disabled); - bool animated_fire = feature_has("Animated Fire", server_disabled); + const bool animated_water = feature_has("Animated Water", server_disabled); + const bool animated_lava = feature_has("Animated Lava", server_disabled); + const bool animated_fire = feature_has("Animated Fire", server_disabled); if (animated_water || animated_lava || animated_fire) { // Tick Dynamic Textures misc_run_on_tick(Minecraft_tick_injection); @@ -234,7 +234,9 @@ void init_textures() { } // Scale Animated Textures - overwrite_call((void *) 0x53274, (void *) Textures_tick_glTexSubImage2D_injection); + if (feature_has("Property Scale Animated Textures", server_disabled)) { + overwrite_call((void *) 0x53274, (void *) Textures_tick_glTexSubImage2D_injection); + } // Load Textures overwrite_calls(AppPlatform_linux_loadTexture, AppPlatform_linux_loadTexture_injection); diff --git a/mods/src/touch/touch.cpp b/mods/src/touch/touch.cpp index 16ecd22d..f73dc6dd 100644 --- a/mods/src/touch/touch.cpp +++ b/mods/src/touch/touch.cpp @@ -19,14 +19,14 @@ static unsigned char *operator_new_IngameBlockSelectionScreen_injection(__attrib // Improved Button Hover Behavior static int32_t Button_hovered_injection(__attribute__((unused)) Button_hovered_t original, __attribute__((unused)) Button *button, __attribute__((unused)) Minecraft *minecraft, __attribute__((unused)) int32_t click_x, __attribute__((unused)) int32_t click_y) { // Get Mouse Position - int32_t x = Mouse::getX() * Gui::InvGuiScale; - int32_t y = Mouse::getY() * Gui::InvGuiScale; + const int32_t x = Mouse::getX() * Gui::InvGuiScale; + const int32_t y = Mouse::getY() * Gui::InvGuiScale; // Get Button Position - int32_t button_x1 = button->x; - int32_t button_y1 = button->y; - int32_t button_x2 = button_x1 + button->width; - int32_t button_y2 = button_y1 + button->height; + const int32_t button_x1 = button->x; + const int32_t button_y1 = button->y; + const int32_t button_x2 = button_x1 + button->width; + const int32_t button_y2 = button_y1 + button->height; // Check return x >= button_x1 && x < button_x2 && y >= button_y1 && y < button_y2; @@ -50,7 +50,7 @@ static Button *create_button(int id, std::string text) { button->constructor(id, text); return (Button *) button; } -Button *touch_create_button(int id, std::string text) { +Button *touch_create_button(const int id, std::string text) { if (touch_gui) { return create_button(id, text); } else { @@ -102,7 +102,7 @@ void init_touch() { } // Show Block Outlines - int block_outlines = feature_has("Show Block Outlines", server_disabled); + const bool block_outlines = feature_has("Show Block Outlines", server_disabled); unsigned char outline_patch[4] = {(unsigned char) (block_outlines ? !touch_gui : touch_gui), 0x00, 0x50, 0xe3}; // "cmp r0, #0x1" or "cmp r0, #0x0" patch((void *) 0x4a210, outline_patch); } diff --git a/symbols/src/network/RakNetInstance.def b/symbols/src/network/RakNetInstance.def index ddd0aa0e..33fad764 100644 --- a/symbols/src/network/RakNetInstance.def +++ b/symbols/src/network/RakNetInstance.def @@ -8,4 +8,4 @@ virtual-method uint isServer() = 0x48; virtual-method void pingForHosts(int base_port) = 0x14; property RakNet_RakPeer *peer = 0x4; -property uchar pinging_for_hosts = 0x24; +property bool pinging_for_hosts = 0x24;