From ce5307aa3048291d6c6c40b0cacdd5b645dba2c4 Mon Sep 17 00:00:00 2001 From: InviseDivine Date: Fri, 13 Mar 2026 19:08:27 +0200 Subject: [PATCH] FEAT: Tweaks in options --- data/lang/en_US.lang | 4 ++ src/client/Minecraft.cpp | 17 ++++-- src/client/OptionStrings.cpp | 7 ++- src/client/OptionStrings.h | 4 ++ src/client/Options.cpp | 66 ++++++++++++++++-------- src/client/Options.h | 18 +++++++ src/client/gui/Gui.cpp | 15 ++++-- src/client/gui/screens/OptionsScreen.cpp | 10 +++- src/client/player/LocalPlayer.cpp | 4 +- src/raknet/RakPeer.cpp | 2 +- 10 files changed, 113 insertions(+), 34 deletions(-) diff --git a/data/lang/en_US.lang b/data/lang/en_US.lang index d9c161c..7ceb1e2 100755 --- a/data/lang/en_US.lang +++ b/data/lang/en_US.lang @@ -148,6 +148,10 @@ options.group.mojang=Login options.group.game=Game options.group.controls=Controls options.group.graphics=Graphics +options.group.tweaks=Tweaks +options.sprint=Sprint +options.barontop=HUD above inventory +options.autojump=Auto Jump options.thirdperson=Third Person options.servervisible=Server Visible options.sensitivity=Sensitivity diff --git a/src/client/Minecraft.cpp b/src/client/Minecraft.cpp index bd41577..c3fcf85 100755 --- a/src/client/Minecraft.cpp +++ b/src/client/Minecraft.cpp @@ -1,5 +1,7 @@ #include "Minecraft.h" #include "client/player/input/IBuildInput.h" +#include "world/item/Item.h" +#include "world/item/ItemInstance.h" #include #include @@ -728,13 +730,24 @@ void Minecraft::tickInput() { if (key == Keyboard::KEY_E) { screenChooser.setScreen(SCREEN_BLOCKSELECTION); } + if (!screen && key == Keyboard::KEY_T && level) { setScreen(new ConsoleScreen()); } + if (!screen && key == Keyboard::KEY_O || key == 250) { releaseMouse(); } + if (key == Keyboard::KEY_F) + options.viewDistance = (options.viewDistance + 1) % 4; + + if (key == Keyboard::KEY_F3) { + options.renderDebug = !options.renderDebug; + } + if (key == Keyboard::KEY_F4) { + player->inventory->add(new ItemInstance(Tile::ironBlock)); + } if (key == Keyboard::KEY_F5) { options.thirdPersonView = !options.thirdPersonView; /* @@ -743,6 +756,7 @@ void Minecraft::tickInput() { printf("%d\t%f\n", i, noise.grad2(i, 3, 8)); */ } + #endif #if defined(WIN32) if (key == Keyboard::KEY_F) { @@ -822,9 +836,6 @@ void Minecraft::tickInput() { if (player->inventory->getItem(i)) player->inventory->dropSlot(i, false); } - if (key == Keyboard::KEY_F3) { - options.renderDebug = !options.renderDebug; - } if (key == Keyboard::KEY_M) { options.difficulty = (options.difficulty == Difficulty::PEACEFUL)? Difficulty::NORMAL : Difficulty::PEACEFUL; diff --git a/src/client/OptionStrings.cpp b/src/client/OptionStrings.cpp index 9851771..1f71033 100755 --- a/src/client/OptionStrings.cpp +++ b/src/client/OptionStrings.cpp @@ -18,9 +18,12 @@ const char* OptionStrings::Controls_UseTouchJoypad = "ctrl_usetouchjoypad"; const char* OptionStrings::Controls_IsLefthanded = "ctrl_islefthanded"; // why it isnt ctrl_feedback_vibration? i dont want touch it because compatibility with older versions const char* OptionStrings::Controls_FeedbackVibration = "feedback_vibration"; +const char* OptionStrings::Controls_AutoJump = "ctrl_autojump"; -const char* OptionStrings::Audio_Music = "audio_music"; -const char* OptionStrings::Audio_Sound = "audio_sound"; +const char* OptionStrings::Audio_Music = "audio_music"; +const char* OptionStrings::Audio_Sound = "audio_sound"; const char* OptionStrings::Game_DifficultyLevel = "game_difficulty"; +const char* OptionStrings::Tweaks_Sprint = "tweaks_sprint"; +const char* OptionStrings::Tweaks_BarOnTop = "tweaks_barontop"; \ No newline at end of file diff --git a/src/client/OptionStrings.h b/src/client/OptionStrings.h index 0778312..3f4e839 100755 --- a/src/client/OptionStrings.h +++ b/src/client/OptionStrings.h @@ -20,6 +20,7 @@ public: static const char* Controls_UseTouchJoypad; static const char* Controls_IsLefthanded; static const char* Controls_FeedbackVibration; + static const char* Controls_AutoJump; static const char* Audio_Music; static const char* Audio_Sound; @@ -27,6 +28,9 @@ public: static const char* Game_DifficultyLevel; + static const char* Tweaks_Sprint; + static const char* Tweaks_BarOnTop; + }; #endif /*NET_MINECRAFT_CLIENT__OptionsStrings_H__*/ diff --git a/src/client/Options.cpp b/src/client/Options.cpp index 5fa6951..f532b57 100755 --- a/src/client/Options.cpp +++ b/src/client/Options.cpp @@ -23,9 +23,13 @@ void Options::initDefaultValues() { useMouseForDigging = false; destroyVibration = true; isLeftHanded = false; + autoJump = true; isJoyTouchArea = false; + useSprinting = true; + barOnTop = false; + music = 1; sound = 1; sensitivity = 0.5f; @@ -126,27 +130,30 @@ void Options::initDefaultValues() { } const Options::Option - Options::Option::MUSIC (0, "options.music", true, false), - Options::Option::SOUND (1, "options.sound", true, false), - Options::Option::INVERT_MOUSE (2, "options.invertMouse", false, true), - Options::Option::SENSITIVITY (3, "options.sensitivity", true, false), - Options::Option::RENDER_DISTANCE (4, "options.renderDistance",false, false), - Options::Option::VIEW_BOBBING (5, "options.viewBobbing", false, true), - Options::Option::ANAGLYPH (6, "options.anaglyph", false, true), - Options::Option::LIMIT_FRAMERATE (7, "options.limitFramerate",false, true), - Options::Option::DIFFICULTY (8, "options.difficulty", false, false), - Options::Option::GRAPHICS (9, "options.graphics", false, true), - Options::Option::AMBIENT_OCCLUSION (10, "options.ao", false, true), - Options::Option::GUI_SCALE (11, "options.guiScale", false, false), - Options::Option::THIRD_PERSON (12, "options.thirdperson", false, true), - Options::Option::HIDE_GUI (13, "options.hidegui", false, true), - Options::Option::SERVER_VISIBLE (14, "options.servervisible", false, true), - Options::Option::LEFT_HANDED (15, "options.lefthanded", false, true), - Options::Option::USE_TOUCHSCREEN (16, "options.usetouchscreen", false, true), - Options::Option::USE_TOUCH_JOYPAD (17, "options.usetouchpad", false, true), - Options::Option::DESTROY_VIBRATION (18, "options.destroyvibration", false, true), + Options::Option::MUSIC (0, "options.music", true, false), + Options::Option::SOUND (1, "options.sound", true, false), + Options::Option::INVERT_MOUSE (2, "options.invertMouse", false, true), + Options::Option::SENSITIVITY (3, "options.sensitivity", true, false), + Options::Option::RENDER_DISTANCE (4, "options.renderDistance",false, false), + Options::Option::VIEW_BOBBING (5, "options.viewBobbing", false, true), + Options::Option::ANAGLYPH (6, "options.anaglyph", false, true), + Options::Option::LIMIT_FRAMERATE (7, "options.limitFramerate",false, true), + Options::Option::DIFFICULTY (8, "options.difficulty", false, false), + Options::Option::GRAPHICS (9, "options.graphics", false, true), + Options::Option::AMBIENT_OCCLUSION (10, "options.ao", false, true), + Options::Option::GUI_SCALE (11, "options.guiScale", false, false), + Options::Option::THIRD_PERSON (12, "options.thirdperson", false, true), + Options::Option::HIDE_GUI (13, "options.hidegui", false, true), + Options::Option::SERVER_VISIBLE (14, "options.servervisible", false, true), + Options::Option::LEFT_HANDED (15, "options.lefthanded", false, true), + Options::Option::USE_TOUCHSCREEN (16, "options.usetouchscreen", false, true), + Options::Option::USE_TOUCH_JOYPAD (17, "options.usetouchpad", false, true), + Options::Option::DESTROY_VIBRATION (18, "options.destroyvibration", false, true), Options::Option::PIXELS_PER_MILLIMETER(19, "options.pixelspermilimeter", true, false), - Options::Option::VSYNC (20, "options.vsync", false, true); + Options::Option::VSYNC (20, "options.vsync", false, true), + Options::Option::SPRINTING (21, "options.sprint", false, true), + Options::Option::BARONTOP (22, "options.barontop", false, true), + Options::Option::AUTOJUMP (23, "options.autojump", false, true); /* private */ const float Options::SOUND_MIN_VALUE = 0.0f; @@ -216,6 +223,9 @@ void Options::update() if (key == OptionStrings::Controls_IsLefthanded) { readBool(value, isLeftHanded); } + if (key == OptionStrings::Controls_AutoJump) { + readBool(value, autoJump); + } if (key == OptionStrings::Controls_UseTouchJoypad) { readBool(value, isJoyTouchArea); if (!minecraft->useTouchscreen()) @@ -268,6 +278,14 @@ void Options::update() if (difficulty != Difficulty::PEACEFUL && difficulty != Difficulty::NORMAL) difficulty = Difficulty::NORMAL; } + + // Enchancements + if (key == OptionStrings::Tweaks_Sprint) { + readBool(value, useSprinting); + } + if (key == OptionStrings::Tweaks_BarOnTop) { + readBool(value, barOnTop); + } } #ifdef __APPLE__ @@ -323,9 +341,11 @@ void Options::save() // Login addOptionToSaveOutput(stringVec, OptionStrings::Multiplayer_Username, username); + // Game addOptionToSaveOutput(stringVec, OptionStrings::Multiplayer_ServerVisible, serverVisible); addOptionToSaveOutput(stringVec, OptionStrings::Game_DifficultyLevel, difficulty); + // Input addOptionToSaveOutput(stringVec, OptionStrings::Controls_InvertMouse, invertYMouse); addOptionToSaveOutput(stringVec, OptionStrings::Controls_Sensitivity, sensitivity); @@ -333,6 +353,8 @@ void Options::save() addOptionToSaveOutput(stringVec, OptionStrings::Controls_UseTouchScreen, useTouchScreen); addOptionToSaveOutput(stringVec, OptionStrings::Controls_UseTouchJoypad, isJoyTouchArea); addOptionToSaveOutput(stringVec, OptionStrings::Controls_FeedbackVibration, destroyVibration); + addOptionToSaveOutput(stringVec, OptionStrings::Controls_AutoJump, autoJump); + // Graphics addOptionToSaveOutput(stringVec, OptionStrings::Graphics_Vsync, vsync); addOptionToSaveOutput(stringVec, OptionStrings::Graphics_GUIScale, guiScale); @@ -342,11 +364,13 @@ void Options::save() addOptionToSaveOutput(stringVec, OptionStrings::Graphics_Anaglyph, anaglyph3d); addOptionToSaveOutput(stringVec, OptionStrings::Graphics_ViewBobbing, bobView); - //addOptionToSaveOutput(stringVec, OptionStrings::VIEW_BOBBING, fancyGraphics); // Audio addOptionToSaveOutput(stringVec, OptionStrings::Audio_Music, music); addOptionToSaveOutput(stringVec, OptionStrings::Audio_Sound, sound); + // Tweaks + addOptionToSaveOutput(stringVec, OptionStrings::Tweaks_Sprint, useSprinting); + addOptionToSaveOutput(stringVec, OptionStrings::Tweaks_BarOnTop, barOnTop); // // static const Option MUSIC; // static const Option SOUND; diff --git a/src/client/Options.h b/src/client/Options.h index db71d80..63fc95f 100755 --- a/src/client/Options.h +++ b/src/client/Options.h @@ -30,6 +30,7 @@ public: static const Option SOUND; static const Option INVERT_MOUSE; static const Option SENSITIVITY; + static const Option AUTOJUMP; static const Option RENDER_DISTANCE; static const Option VIEW_BOBBING; static const Option ANAGLYPH; @@ -49,6 +50,8 @@ public: static const Option PIXELS_PER_MILLIMETER; static const Option VSYNC; + static const Option SPRINTING; + static const Option BARONTOP; /* static Option* getItem(int id) { @@ -120,6 +123,7 @@ public: bool useMouseForDigging; bool isLeftHanded; bool destroyVibration; + bool autoJump; //std::string skin; KeyMapping keyUp; @@ -163,6 +167,10 @@ public: bool isJoyTouchArea; bool useTouchScreen; float pixelsPerMillimeter; + + bool useSprinting; + bool barOnTop; + Options(Minecraft* minecraft, const std::string& workingDirectory) : minecraft(minecraft) { @@ -246,6 +254,10 @@ public: ambientOcclusion = !ambientOcclusion; //minecraft->levelRenderer.allChanged(); } + if (option == &Option::SPRINTING) useSprinting = !useSprinting; + if (option == &Option::BARONTOP) barOnTop = !barOnTop; + if (option == &Option::AUTOJUMP) autoJump = !autoJump; + notifyOptionUpdate(option, getBooleanValue(option)); save(); } @@ -289,12 +301,18 @@ public: return serverVisible; if (item == &Option::LEFT_HANDED) return isLeftHanded; + if (item == &Option::AUTOJUMP) + return autoJump; if (item == &Option::USE_TOUCHSCREEN) return useTouchScreen; if (item == &Option::USE_TOUCH_JOYPAD) return isJoyTouchArea; if (item == &Option::DESTROY_VIBRATION) return destroyVibration; + if (item == &Option::SPRINTING) + return useSprinting; + if (item == &Option::BARONTOP) + return barOnTop; return false; } diff --git a/src/client/gui/Gui.cpp b/src/client/gui/Gui.cpp index d6ddc14..8d576cb 100755 --- a/src/client/gui/Gui.cpp +++ b/src/client/gui/Gui.cpp @@ -585,11 +585,14 @@ void Gui::renderHearts() { int oh = minecraft->player->lastHealth; random.setSeed(tickCount * 312871); - int xx = 2;//screenWidth / 2 - getNumSlots() * 10; + int screenWidth = (int)(minecraft->width * InvGuiScale); + int screenHeight = (int)(minecraft->height * InvGuiScale); + + int xx = (minecraft->options.barOnTop) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2; int armor = minecraft->player->getArmorValue(); for (int i = 0; i < Player::MAX_HEALTH / 2; i++) { - int yo = 2; + int yo = (minecraft->options.barOnTop) ? screenHeight - 32 : 2; int ip2 = i + i + 1; if (armor > 0) { @@ -617,11 +620,15 @@ void Gui::renderHearts() { void Gui::renderBubbles() { if (minecraft->player->isUnderLiquid(Material::water)) { - int yo = 12; + int screenWidth = (int)(minecraft->width * InvGuiScale); + int screenHeight = (int)(minecraft->height * InvGuiScale); + + int xx = (minecraft->options.barOnTop) ? screenWidth / 2 - getNumSlots() * 10 - 1 : 2; + int yo = (minecraft->options.barOnTop) ? screenHeight - 42 : 12; int count = (int) std::ceil((minecraft->player->airSupply - 2) * 10.0f / Player::TOTAL_AIR_SUPPLY); int extra = (int) std::ceil((minecraft->player->airSupply) * 10.0f / Player::TOTAL_AIR_SUPPLY) - count; for (int i = 0; i < count + extra; i++) { - int xo = i * 8 + 2; + int xo = i * 8 + xx; if (i < count) blit(xo, yo, 16, 9 * 2, 9, 9); else blit(xo, yo, 16 + 9, 9 * 2, 9, 9); } diff --git a/src/client/gui/screens/OptionsScreen.cpp b/src/client/gui/screens/OptionsScreen.cpp index f652767..c1dbe63 100755 --- a/src/client/gui/screens/OptionsScreen.cpp +++ b/src/client/gui/screens/OptionsScreen.cpp @@ -76,6 +76,7 @@ void OptionsScreen::init() { categoryButtons.push_back(new Touch::TButton(3, "Game")); categoryButtons.push_back(new Touch::TButton(4, "Controls")); categoryButtons.push_back(new Touch::TButton(5, "Graphics")); + categoryButtons.push_back(new Touch::TButton(6, "Tweaks")); btnChangeUsername = new Touch::TButton(10, "Username"); btnCredits = new Touch::TButton(11, "Credits"); @@ -221,6 +222,7 @@ void OptionsScreen::generateOptionScreens() { optionPanes.push_back(new OptionsPane()); optionPanes.push_back(new OptionsPane()); optionPanes.push_back(new OptionsPane()); + optionPanes.push_back(new OptionsPane()); // Login Pane optionPanes[0]->createOptionsGroup("options.group.mojang") @@ -235,7 +237,8 @@ void OptionsScreen::generateOptionScreens() { // Controls Pane optionPanes[2]->createOptionsGroup("options.group.controls") - .addOptionItem(&Options::Option::INVERT_MOUSE, minecraft); + .addOptionItem(&Options::Option::INVERT_MOUSE, minecraft) + .addOptionItem(&Options::Option::AUTOJUMP, minecraft); // Graphics Pane optionPanes[3]->createOptionsGroup("options.group.graphics") @@ -246,6 +249,11 @@ void OptionsScreen::generateOptionScreens() { .addOptionItem(&Options::Option::VSYNC, minecraft) .addOptionItem(&Options::Option::MUSIC, minecraft) .addOptionItem(&Options::Option::SOUND, minecraft); + + // Tweaks Pane + optionPanes[4]->createOptionsGroup("options.group.tweaks") + .addOptionItem(&Options::Option::SPRINTING, minecraft) + .addOptionItem(&Options::Option::BARONTOP, minecraft); } void OptionsScreen::mouseClicked(int x, int y, int buttonNum) { diff --git a/src/client/player/LocalPlayer.cpp b/src/client/player/LocalPlayer.cpp index fbc52c7..a1062fe 100755 --- a/src/client/player/LocalPlayer.cpp +++ b/src/client/player/LocalPlayer.cpp @@ -182,7 +182,7 @@ void LocalPlayer::aiStep() { // Sprint: detect W double-tap { bool forwardHeld = (input->ya > 0); - if (forwardHeld && !prevForwardHeld) { + if (forwardHeld && !prevForwardHeld && minecraft->options.useSprinting) { // leading edge of W press if (sprintDoubleTapTimer > 0) sprinting = true; @@ -271,7 +271,7 @@ void LocalPlayer::move(float xa, float ya, float za) { float newX = x, newZ = z; - if (autoJumpTime <= 0 && autoJumpEnabled) + if (autoJumpTime <= 0 && minecraft->options.autoJump) { // auto-jump when crossing the middle of a tile, and the tile in the front is blocked bool jump = false; diff --git a/src/raknet/RakPeer.cpp b/src/raknet/RakPeer.cpp index 698374e..a24a2b5 100755 --- a/src/raknet/RakPeer.cpp +++ b/src/raknet/RakPeer.cpp @@ -124,7 +124,7 @@ static const unsigned int MAX_OFFLINE_DATA_LENGTH=400; // I set this because I l #pragma warning(disable:4309) // 'initializing' : truncation of constant value #endif // Make sure highest bit is 0, so isValid in DatagramHeaderFormat is false -static const char OFFLINE_MESSAGE_DATA_ID[16]={0x00,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFD,0xFD,0x12,0x34,0x56,0x78}; +static const unsigned char OFFLINE_MESSAGE_DATA_ID[16]={0x00,0xFF,0xFF,0x00,0xFE,0xFE,0xFE,0xFE,0xFD,0xFD,0xFD,0xFD,0x12,0x34,0x56,0x78}; struct PacketFollowedByData {