diff --git a/img.png b/.github/IMG_8725.png similarity index 100% rename from img.png rename to .github/IMG_8725.png diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml deleted file mode 100644 index a1ba30736..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.yaml +++ /dev/null @@ -1,72 +0,0 @@ -name: "Bug Report" -description: "Report a bug to help us improve MinecraftConsoles" -title: "[Bug]: " -labels: ["bug"] -body: - - type: markdown - attributes: - value: | - **Thanks for taking the time to report a bug!** - Please ensure you are using the latest version of the repository and have followed the build instructions in the README. - - type: textarea - id: description - attributes: - label: Description - description: "A clear and concise description of what the bug is." - placeholder: "Describe what happened..." - validations: - required: true - - type: textarea - id: reproduction - attributes: - label: Steps to Reproduce - description: "How can we reproduce this bug?" - placeholder: | - 1. Open MinecraftConsoles.sln - 2. Set configuration to ... - 3. Run the project - 4. Do ... - validations: - required: true - - type: textarea - id: expected-actual - attributes: - label: Expected vs. Actual Behavior - description: "What did you expect to happen, and what actually happened?" - validations: - required: true - - type: dropdown - id: build-config - attributes: - label: Build Configuration - description: "Which configuration were you using?" - options: - - Debug - - Release - validations: - required: true - - type: dropdown - id: target-platform - attributes: - label: Target Platform - description: "Which platform were you targeting?" - options: - - Windows64 - - Other (please specify in context) - validations: - required: true - - type: textarea - id: environment - attributes: - label: Environment Details - description: "e.g., Visual Studio version, Windows version, Hardware specs." - placeholder: "Visual Studio 2022 v17.x, Windows 11..." - validations: - required: false - - type: textarea - id: context - attributes: - label: Additional Context - description: "Add any other context, screenshots, or logs here." - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 3ba13e0ce..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1 +0,0 @@ -blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml deleted file mode 100644 index 20a1aa738..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ /dev/null @@ -1,46 +0,0 @@ ---- -name: Feature Request -description: Suggest an idea to help us improve MinecraftConsoles -title: "[Feature]: " -labels: - - "enhancement" - -body: - - type: markdown - attributes: - value: | - **Thanks for taking the time to fill out this feature request report!** - We kindly ask that you search to see if an issue [already exists](https://github.com/smartcmd/MinecraftConsoles/issues) for your feature. - - - type: textarea - attributes: - label: Description - description: | - A clear and concise description of the feature you're interested in. - validations: - required: true - - - type: textarea - attributes: - label: Suggested Solution - description: | - Describe the solution you'd like. A clear and concise description of what you want to happen. - validations: - required: true - - - type: textarea - attributes: - label: Alternatives - description: | - Describe alternatives you've considered. - A clear and concise description of any alternative solutions or features you've considered. - validations: - required: false - - - type: textarea - attributes: - label: Additional Context - description: | - Add any other context about the problem here. - validations: - required: false diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..a499ff841 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,31 @@ +name: Build Minecraft Legacy Console Edition +on: + workflow_dispatch: + +jobs: + build: + runs-on: windows-2022 + + strategy: + matrix: + configuration: [Release, Debug] + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v2 + + - name: Build Minecraft Legacy Console Edition + run: | + msbuild MinecraftConsoles.sln ` + /p:Configuration=${{ matrix.configuration }} ` + /p:Platform=Windows64 ` + /m + + - name: Upload Release + Debug Artifacts + uses: actions/upload-artifact@v4 + with: + name: MinecraftClient-${{ matrix.configuration }} + path: x64/${{ matrix.configuration }} diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 000000000..00f18f532 --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,35 @@ +name: Nightly Release + +on: + workflow_dispatch: + push: + branches: + - 'main' + +jobs: + build: + name: Build Windows64 + runs-on: windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Setup msbuild + uses: microsoft/setup-msbuild@v2 + + - name: Build + run: MSBuild.exe MinecraftConsoles.sln /p:Configuration=Release /p:Platform="Windows64" + + - name: Zip Build + run: 7z a -r LCEWindows64.zip ./x64/Release/* + + - name: Update release + uses: andelf/nightly-release@main + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: nightly + name: Nightly Release + files: LCEWindows64.zip \ No newline at end of file diff --git a/.gitignore b/.gitignore index e24dba261..0a42b42e5 100644 --- a/.gitignore +++ b/.gitignore @@ -422,3 +422,5 @@ Minecraft.World/Debug/ Minecraft.World/x64_Debug/ Minecraft.World/Release/ Minecraft.World/x64_Release/ + +build/* \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..a9ce5f693 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,82 @@ +cmake_minimum_required(VERSION 3.24) + +project(MinecraftConsoles LANGUAGES C CXX) + +if(NOT WIN32) + message(FATAL_ERROR "This CMake build currently supports Windows only.") +endif() + +if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8) + message(FATAL_ERROR "Use a 64-bit generator/toolchain (x64).") +endif() + +set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + +include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/WorldSources.cmake") +include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/ClientSources.cmake") + +list(TRANSFORM MINECRAFT_WORLD_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/") +list(TRANSFORM MINECRAFT_CLIENT_SOURCES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/") + +add_library(MinecraftWorld STATIC ${MINECRAFT_WORLD_SOURCES}) +target_include_directories(MinecraftWorld PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers" +) +target_compile_definitions(MinecraftWorld PRIVATE + $<$:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_DEBUG;_LIB;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64> + $<$>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_LIB;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64> +) +if(MSVC) + target_compile_options(MinecraftWorld PRIVATE /W3 /MP /EHsc) +endif() + +add_executable(MinecraftClient WIN32 ${MINECRAFT_CLIENT_SOURCES}) +target_include_directories(MinecraftClient PRIVATE + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/include" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Xbox/Sentient/Include" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.World/x64headers" +) +target_compile_definitions(MinecraftClient PRIVATE + $<$:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_DEBUG;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64> + $<$>:_LARGE_WORLDS;_DEBUG_MENUS_ENABLED;_CRT_NON_CONFORMING_SWPRINTFS;_CRT_SECURE_NO_WARNINGS;_WINDOWS64> +) +if(MSVC) + target_compile_options(MinecraftClient PRIVATE /W3 /MP /EHsc) +endif() + +set_target_properties(MinecraftClient PROPERTIES + VS_DEBUGGER_WORKING_DIRECTORY "$" +) + +target_link_libraries(MinecraftClient PRIVATE + MinecraftWorld + d3d11 + XInput9_1_0 + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Iggy/lib/iggy_w64.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/Miles/lib/mss64.lib" + $<$: + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_d.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_d.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_d.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC_d.lib" + > + $<$>: + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Input_r.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Storage_r.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Profile_r.lib" + "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Windows64/4JLibs/libs/4J_Render_PC.lib" + > +) + +add_custom_command(TARGET MinecraftClient POST_BUILD + COMMAND "${CMAKE_COMMAND}" + -DPROJECT_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}" + -DOUTPUT_DIR="$" + -DCONFIGURATION=$ + -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake" + VERBATIM +) + +set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient) diff --git a/Compile.md b/Compile.md new file mode 100644 index 000000000..8947cecb1 --- /dev/null +++ b/Compile.md @@ -0,0 +1,45 @@ +# Compile Instructions + +## Visual Studio (`.sln`) + +1. Open `MinecraftConsoles.sln` in Visual Studio 2022. +2. Set `Minecraft.Client` as the Startup Project. +3. Select configuration: + - `Debug` (recommended), or + - `Release` +4. Select platform: `Windows64`. +5. Build and run: + - `Build > Build Solution` (or `Ctrl+Shift+B`) + - Start debugging with `F5`. + +## CMake (Windows x64) + +Configure (use your VS Community instance explicitly): + +```powershell +cmake -S . -B build -G "Visual Studio 17 2022" -A x64 -DCMAKE_GENERATOR_INSTANCE="C:/Program Files/Microsoft Visual Studio/2022/Community" +``` + +Build Debug: + +```powershell +cmake --build build --config Debug --target MinecraftClient +``` + +Build Release: + +```powershell +cmake --build build --config Release --target MinecraftClient +``` + +Run executable: + +```powershell +cd .\build\Debug +.\MinecraftClient.exe +``` + +Notes: +- The CMake build is Windows-only and x64-only. +- Post-build asset copy is automatic for `MinecraftClient` in CMake (Debug and Release variants). +- The game relies on relative paths (for example `Common\Media\...`), so launching from the output directory is required. diff --git a/Minecraft.Client/Common/Audio/SoundEngine.cpp b/Minecraft.Client/Common/Audio/SoundEngine.cpp index d9000a8e8..fb6c4887e 100644 --- a/Minecraft.Client/Common/Audio/SoundEngine.cpp +++ b/Minecraft.Client/Common/Audio/SoundEngine.cpp @@ -56,7 +56,7 @@ void SoundEngine::playMusicTick() {}; #else #ifdef _WINDOWS64 -char SoundEngine::m_szSoundPath[]={"Windows64Media\\Sound\\"}; +char SoundEngine::m_szSoundPath[]={"Windows64\\Sound\\"}; char SoundEngine::m_szMusicPath[]={"music\\"}; char SoundEngine::m_szRedistName[]={"redist64"}; #elif defined _DURANGO diff --git a/Minecraft.Client/Common/ConsoleGameMode.cpp b/Minecraft.Client/Common/ConsoleGameMode.cpp index b080e6284..703d3f552 100644 --- a/Minecraft.Client/Common/ConsoleGameMode.cpp +++ b/Minecraft.Client/Common/ConsoleGameMode.cpp @@ -1,9 +1,9 @@ #include "stdafx.h" #include "ConsoleGameMode.h" -#include "..\Common\Tutorial\Tutorial.h" +#include ".\Tutorial\Tutorial.h" ConsoleGameMode::ConsoleGameMode(int iPad, Minecraft *minecraft, ClientConnection *connection) : TutorialMode(iPad, minecraft, connection) { tutorial = new Tutorial(iPad); -} \ No newline at end of file +} diff --git a/Minecraft.Client/Common/ConsoleGameMode.h b/Minecraft.Client/Common/ConsoleGameMode.h index 3e486cbf3..983381b59 100644 --- a/Minecraft.Client/Common/ConsoleGameMode.h +++ b/Minecraft.Client/Common/ConsoleGameMode.h @@ -1,5 +1,5 @@ #pragma once -#include "..\Common\Tutorial\TutorialMode.h" +#include ".\Tutorial\TutorialMode.h" class ConsoleGameMode : public TutorialMode { @@ -7,4 +7,4 @@ public: ConsoleGameMode(int iPad, Minecraft *minecraft, ClientConnection *connection); virtual bool isImplemented() { return true; } -}; \ No newline at end of file +}; diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 811468963..30bc8533f 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -16,6 +16,14 @@ #include "..\Minecraft.h" #include "..\ClientConnection.h" #include "..\MultiPlayerLocalPlayer.h" +#include "..\LocalPlayer.h" +#include "..\..\Minecraft.World\Player.h" +#include "..\..\Minecraft.World\Inventory.h" +#include "..\..\Minecraft.World\Level.h" +#include "..\..\Minecraft.World\FurnaceTileEntity.h" +#include "..\..\Minecraft.World\Container.h" +#include "..\..\Minecraft.World\DispenserTileEntity.h" +#include "..\..\Minecraft.World\SignTileEntity.h" #include "..\StatsCounter.h" #include "..\GameMode.h" #include "..\Xbox\Social\SocialManager.h" @@ -30,7 +38,10 @@ #include "GameRules\ConsoleGameRules.h" #include "GameRules\ConsoleSchematicFile.h" #include "..\User.h" -#include "..\\EntityRenderDispatcher.h" +#include "..\..\Minecraft.World\LevelData.h" +#include "..\..\Minecraft.World\net.minecraft.world.entity.player.h" +#include "..\EntityRenderDispatcher.h" +#include "..\..\Minecraft.World\compression.h" #include "..\TexturePackRepository.h" #include "..\DLCTexturePack.h" #include "DLC\DLCPack.h" diff --git a/Minecraft.Client/Common/Consoles_App.h b/Minecraft.Client/Common/Consoles_App.h index 28b084038..ec36b7652 100644 --- a/Minecraft.Client/Common/Consoles_App.h +++ b/Minecraft.Client/Common/Consoles_App.h @@ -5,11 +5,11 @@ using namespace std; #include "Audio/Consoles_SoundEngine.h" #include -#include "..\Common\Tutorial\TutorialEnum.h" +#include ".\Tutorial\TutorialEnum.h" #ifdef _XBOX -#include "..\Common\XUI\XUI_Helper.h" -#include "..\Common\XUI\XUI_HelpCredits.h" +#include ".\XUI\XUI_Helper.h" +#include ".\XUI\XUI_HelpCredits.h" #endif #include "UI\UIStructs.h" @@ -17,9 +17,9 @@ using namespace std; #include #include "..\StringTable.h" -#include "..\Common\DLC\DLCManager.h" -#include "..\Common\GameRules\ConsoleGameRulesConstants.h" -#include "..\Common\GameRules\GameRuleManager.h" +#include ".\DLC\DLCManager.h" +#include ".\GameRules\ConsoleGameRulesConstants.h" +#include ".\GameRules\GameRuleManager.h" #include "..\SkinBox.h" #include "..\ArchiveFile.h" diff --git a/Minecraft.Client/Common/Tutorial/ChoiceTask.cpp b/Minecraft.Client/Common/Tutorial/ChoiceTask.cpp index c03166b50..49fb068b1 100644 --- a/Minecraft.Client/Common/Tutorial/ChoiceTask.cpp +++ b/Minecraft.Client/Common/Tutorial/ChoiceTask.cpp @@ -7,6 +7,7 @@ #include "TutorialConstraints.h" #include "ChoiceTask.h" #include "..\..\..\Minecraft.World\Material.h" +#include "..\..\Windows64\KeyboardMouseInput.h" ChoiceTask::ChoiceTask(Tutorial *tutorial, int descriptionId, int promptId /*= -1*/, bool requiresUserInput /*= false*/, int iConfirmMapping /*= 0*/, int iCancelMapping /*= 0*/, @@ -51,11 +52,11 @@ bool ChoiceTask::isCompleted() // If the player is under water then allow all keypresses so they can jump out if( pMinecraft->localplayers[tutorial->getPad()]->isUnderLiquid(Material::water) ) return false; - if(!m_bConfirmMappingComplete && InputManager.GetValue(pMinecraft->player->GetXboxPad(), m_iConfirmMapping) > 0 ) + if(!m_bConfirmMappingComplete && InputManager.GetValue(pMinecraft->player->GetXboxPad(), m_iConfirmMapping) > 0 || KMInput.IsKeyDown(VK_RETURN)) { m_bConfirmMappingComplete = true; } - if(!m_bCancelMappingComplete && InputManager.GetValue(pMinecraft->player->GetXboxPad(), m_iCancelMapping) > 0 ) + if(!m_bCancelMappingComplete && InputManager.GetValue(pMinecraft->player->GetXboxPad(), m_iCancelMapping) > 0 || KMInput.IsKeyDown('B')) { m_bCancelMappingComplete = true; } @@ -99,11 +100,11 @@ void ChoiceTask::handleUIInput(int iAction) { if(bHasBeenActivated && m_bShownForMinimumTime) { - if( iAction == m_iConfirmMapping ) + if( iAction == m_iConfirmMapping) { m_bConfirmMappingComplete = true; } - else if(iAction == m_iCancelMapping ) + else if(iAction == m_iCancelMapping) { m_bCancelMappingComplete = true; } diff --git a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp index 88820092f..fe743adc2 100644 --- a/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_MainMenu.cpp @@ -360,8 +360,11 @@ void UIScene_MainMenu::handlePress(F64 controlId, F64 childId) signInReturnedFunc = &UIScene_MainMenu::UnlockFullGame_SignInReturned; break; case eControl_Exit: + //CD - Added for audio + ui.PlayUISFX(eSFX_Press); + if( ProfileManager.IsFullVersion() ) - { + { UINT uiIDA[2]; uiIDA[0]=IDS_CANCEL; uiIDA[1]=IDS_OK; diff --git a/Minecraft.Client/Minecraft.Client.vcxproj b/Minecraft.Client/Minecraft.Client.vcxproj index be842ca85..765fb49c2 100644 --- a/Minecraft.Client/Minecraft.Client.vcxproj +++ b/Minecraft.Client/Minecraft.Client.vcxproj @@ -1606,15 +1606,24 @@ xcopy /q /y /i /s /e $(ProjectDir)DurangoMedia\CU $(LayoutDir)Image\Loose\CU Copying game assets to output directory - xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music" -xcopy /q /y /i /s /e "$(ProjectDir)Windows64\GameHDD" "$(OutDir)Windows64\GameHDD" -xcopy /q /y /i /s /e "$(ProjectDir)Common\Media" "$(OutDir)Common\Media" -xcopy /q /y /i /s /e "$(ProjectDir)Common\res" "$(OutDir)Common\res" -xcopy /q /y /i /s /e "$(ProjectDir)Common\Trial" "$(OutDir)Common\Trial" -xcopy /q /y /i /s /e "$(ProjectDir)Common\Tutorial" "$(OutDir)Common\Tutorial" -xcopy /q /y /i /s /e "$(ProjectDir)DurangoMedia" "$(OutDir)Windows64Media" -xcopy /q /y /i /s /e "$(ProjectDir)Windows64Media" "$(OutDir)Windows64Media" -mkdir "$(OutDir)Windows64\GameHDD" 2>nul + mkdir "$(OutDir)music" 2>nul +mkdir "$(OutDir)Windows64\GameHDD" 2>nul +mkdir "$(OutDir)Common\Media" 2>nul +mkdir "$(OutDir)Common\res" 2>nul +mkdir "$(OutDir)Common\Trial" 2>nul +mkdir "$(OutDir)Common\Tutorial" 2>nul +mkdir "$(OutDir)Windows64Media" 2>nul + +xcopy /q /y /i /s /e "$(ProjectDir)music" "$(OutDir)music" || exit /b 0 +xcopy /q /y /i /s /e "$(ProjectDir)Windows64\GameHDD" "$(OutDir)Windows64\GameHDD" || exit /b 0 +xcopy /q /y /i /s /e "$(ProjectDir)Common\Media" "$(OutDir)Common\Media" || exit /b 0 +xcopy /q /y /i /s /e "$(ProjectDir)Common\res" "$(OutDir)Common\res" || exit /b 0 +xcopy /q /y /i /s /e "$(ProjectDir)Common\Trial" "$(OutDir)Common\Trial" || exit /b 0 +xcopy /q /y /i /s /e "$(ProjectDir)Common\Tutorial" "$(OutDir)Common\Tutorial" || exit /b 0 +xcopy /q /y /i /s /e "$(ProjectDir)DurangoMedia" "$(OutDir)Windows64Media" || exit /b 0 +xcopy /q /y /i /s /e "$(ProjectDir)Windows64Media" "$(OutDir)Windows64Media" || exit /b 0 + +exit /b 0 $(ProjectDir)xbox\xex-dev.xml diff --git a/Minecraft.Client/Windows64/Sound/Minecraft.msscmp b/Minecraft.Client/Windows64/Sound/Minecraft.msscmp new file mode 100644 index 000000000..13983f6d2 Binary files /dev/null and b/Minecraft.Client/Windows64/Sound/Minecraft.msscmp differ diff --git a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp index 1bffe3177..a6fdd7f2d 100644 --- a/Minecraft.Client/Windows64/Windows64_Minecraft.cpp +++ b/Minecraft.Client/Windows64/Windows64_Minecraft.cpp @@ -716,6 +716,7 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); + /* // Declare DPI awareness so GetSystemMetrics returns physical pixels SetProcessDPIAware(); g_iScreenWidth = GetSystemMetrics(SM_CXSCREEN); @@ -726,6 +727,8 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, sprintf(buf, "Screen resolution: %dx%d\n", g_iScreenWidth, g_iScreenHeight); OutputDebugStringA(buf); } + */ + if(lpCmdLine) { @@ -1220,6 +1223,17 @@ int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, ToggleFullscreen(); } + // TAB opens host options menu. - Vvis :3 + if (KMInput.IsKeyPressed(VK_TAB)) + { + if (Minecraft* pMinecraft = Minecraft::GetInstance()) + { + { + ui.NavigateToScene(0, eUIScene_InGameHostOptionsMenu); + } + } + } + #if 0 // has the game defined profile data been changed (by a profile load) if(app.uiGameDefinedDataChangedBitmask!=0) diff --git a/Minecraft.World/File.cpp b/Minecraft.World/File.cpp index 7eda275a3..21bc3021a 100644 --- a/Minecraft.World/File.cpp +++ b/Minecraft.World/File.cpp @@ -12,13 +12,13 @@ const wchar_t File::pathSeparator = L'\\'; #ifdef _XBOX -const wstring File::pathRoot = L"GAME:"; // Path root after pathSeparator has been removed +const std::wstring File::pathRoot = L"GAME:"; // Path root after pathSeparator has been removed #else -const wstring File::pathRoot = L""; // Path root after pathSeparator has been removed +const std::wstring File::pathRoot = L""; // Path root after pathSeparator has been removed #endif //Creates a new File instance from a parent abstract pathname and a child pathname string. -File::File( const File &parent, const wstring& child ) +File::File( const File &parent, const std::wstring& child ) { m_abstractPathName = parent.getPath() + pathSeparator + child; } @@ -67,7 +67,7 @@ File::File( const wstring& pathname ) //: parent( NULL ) */ } -File::File( const wstring& parent, const wstring& child ) //: m_abstractPathName( child ) +File::File( const std::wstring& parent, const std::wstring& child ) //: m_abstractPathName( child ) { m_abstractPathName = pathRoot + pathSeparator + parent + pathSeparator + child; //this->parent = new File( parent ); @@ -149,9 +149,9 @@ bool File::mkdir() const // bool File::mkdirs() const { - vector path = stringSplit( m_abstractPathName, pathSeparator ); + std::vector path = stringSplit( m_abstractPathName, pathSeparator ); - wstring pathToHere = L""; + std::wstring pathToHere = L""; AUTO_VAR(itEnd, path.end()); for( AUTO_VAR(it, path.begin()); it != itEnd; it++ ) { @@ -237,7 +237,7 @@ bool File::renameTo(File dest) // 4J Stu - The wstringtofilename function returns a pointer to the same location in memory every time it is // called, therefore we were getting sourcePath and destPath having the same value. The solution here is to // make a copy of the sourcePath by storing it in a std::string - string sourcePath = wstringtofilename(getPath()); + std::string sourcePath = wstringtofilename(getPath()); const char *destPath = wstringtofilename(dest.getPath()); #ifdef _DURANGO __debugbreak(); // TODO @@ -272,9 +272,9 @@ bool File::renameTo(File dest) //An array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname. //The array will be empty if the directory is empty. Returns null if this abstract pathname does not denote a directory, //or if an I/O error occurs. -vector *File::listFiles() const +std::vector *File::listFiles() const { - vector *vOutput = new vector(); + std::vector *vOutput = new vector(); // TODO 4J Stu - Also need to check for I/O errors? if( !isDirectory() ) @@ -386,8 +386,8 @@ vector *File::listFiles() const FindClose( hFind); } #else - char path[MAX_PATH]; - sprintf( path, "%s\\*", wstringtofilename( getPath() ) ); + char path[MAX_PATH] {}; + snprintf( path, MAX_PATH, "%s\\*", wstringtofilename( getPath() ) ); HANDLE hFind = FindFirstFile( path, &wfd); if(hFind != INVALID_HANDLE_VALUE) { @@ -415,13 +415,13 @@ vector *File::listFiles() const //Returns: //An array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname. //The array will be empty if the directory is empty. Returns null if this abstract pathname does not denote a directory, or if an I/O error occurs. -vector *File::listFiles(FileFilter *filter) const +std::vector *File::listFiles(FileFilter *filter) const { // TODO 4J Stu - Also need to check for I/O errors? if( !isDirectory() ) return NULL; - vector *vOutput = new vector(); + std::vector *vOutput = new std::vector(); #ifdef __PS3__ const char *lpFileName=wstringtofilename(getPath()); @@ -521,7 +521,7 @@ bool File::isDirectory() const //Returns the length of the file denoted by this abstract pathname. The return value is unspecified if this pathname denotes a directory. //Returns: //The length, in bytes, of the file denoted by this abstract pathname, or 0L if the file does not exist -__int64 File::length() +int64_t File::length() { #ifdef __PS3__ //extern const char* getPS3HomePath(); @@ -624,7 +624,7 @@ __int64 File::length() //Returns: //A long value representing the time the file was last modified, measured in milliseconds since the epoch (00:00:00 GMT, January 1, 1970), //or 0L if the file does not exist or if an I/O error occurs -__int64 File::lastModified() +int64_t File::lastModified() { WIN32_FILE_ATTRIBUTE_DATA fileInfoBuffer; #ifdef _UNICODE @@ -657,7 +657,7 @@ __int64 File::lastModified() } } -const wstring File::getPath() const +const std::wstring File::getPath() const { /* wstring path; @@ -672,7 +672,7 @@ const wstring File::getPath() const return m_abstractPathName; } -wstring File::getName() const +std::wstring File::getName() const { unsigned int sep = (unsigned int )(m_abstractPathName.find_last_of( this->pathSeparator )); return m_abstractPathName.substr( sep + 1, m_abstractPathName.length() ); @@ -700,3 +700,9 @@ int File::hash_fnct(const File &k) return (int) hashCode; } + +int FileKeyHash::operator() (const File &k) const +{ return File::hash_fnct(k); } + +bool FileKeyEq::operator() (const File &x, const File &y) const +{ return File::eq_test(x,y); } \ No newline at end of file diff --git a/Minecraft.World/File.h b/Minecraft.World/File.h index 0b710cd46..ae07a4b7f 100644 --- a/Minecraft.World/File.h +++ b/Minecraft.World/File.h @@ -1,5 +1,9 @@ #pragma once -using namespace std; + +#include +#include +#include + // 4J Stu - Represents java standard library class class FileFilter; @@ -24,11 +28,11 @@ public: bool exists() const; bool isFile() const; bool renameTo(File dest); - vector *listFiles() const; // Array - vector *listFiles(FileFilter *filter) const; + std::vector *listFiles() const; // Array + std::vector *listFiles(FileFilter *filter) const; bool isDirectory() const; - __int64 length(); - __int64 lastModified(); + int64_t length(); + int64_t lastModified(); const wstring getPath() const; // 4J Jev: TODO wstring getName() const; @@ -43,14 +47,12 @@ private: //File(vector *path); }; -typedef struct +struct FileKeyHash { - int operator() (const File &k) const { return File::hash_fnct(k); } + int operator() (const File &k) const; +}; -} FileKeyHash; - -typedef struct +struct FileKeyEq { - bool operator() (const File &x, const File &y) const {return File::eq_test(x,y); } - -} FileKeyEq; \ No newline at end of file + bool operator() (const File &x, const File &y) const; +}; \ No newline at end of file diff --git a/Minecraft.World/JavaIntHash.h b/Minecraft.World/JavaIntHash.h index 447b8052a..fe6084699 100644 --- a/Minecraft.World/JavaIntHash.h +++ b/Minecraft.World/JavaIntHash.h @@ -1,13 +1,15 @@ #pragma once +#include + // Java doesn't have a default hash value for ints, however, the hashmap itself does some "supplemental" hashing, so // our ints actually get hashed by code as implemented below. std templates *do* have a standard hash for ints, but it // would appear to be a bit expensive so matching the java one for now anyway. This code implements the supplemental // hashing that happens in java so we can match what their maps are doing with ints. -typedef struct +struct IntKeyHash { - int operator() (const int &k) const + inline int operator()(const int &k) const { int h = k; h += ~(h << 9); @@ -16,62 +18,64 @@ typedef struct h ^= (((unsigned int)h) >> 10); return h; } +}; -} IntKeyHash; - -typedef struct +struct IntKeyEq { - bool operator() (const int &x, const int &y) const { return x==y; } -} IntKeyEq; - + inline bool operator()(const int &x, const int &y) const + { return x==y; } +}; // This hash functor is taken from the IntHashMap java class used by the game, so that we can use a standard std hashmap with this hash rather // than implement the class itself -typedef struct +struct IntKeyHash2 { - int operator() (const int &k) const + inline int operator()(const int &k) const { - unsigned int h = (unsigned int)k; + unsigned int h = static_cast(k); h ^= (h >> 20) ^ (h >> 12); - return (int)(h ^ (h >> 7) ^ (h >> 4)); + return static_cast(h ^ (h >> 7) ^ (h >> 4)); } -} IntKeyHash2; +}; // This hash functor is taken from the LongHashMap java class used by the game, so that we can use a standard std hashmap with this hash rather // than implement the class itself -typedef struct +struct LongKeyHash { - int hash(const int &k) const + inline int hash(const int &k) const { - unsigned int h = (unsigned int)k; + unsigned int h = static_cast(k); h ^= (h >> 20) ^ (h >> 12); - return (int)(h ^ (h >> 7) ^ (h >> 4)); + return static_cast(h ^ (h >> 7) ^ (h >> 4)); } - int operator() (const __int64 &k) const + inline int operator()(const int64_t &k) const { - return hash((int) ( k ^ (((__uint64)k) >> 32 ))); + return hash(static_cast(k ^ ((static_cast(k)) >> 32))); } -} LongKeyHash; +}; -typedef struct +struct LongKeyEq { - bool operator() (const __int64 &x, const __int64 &y) const { return x==y; } -} LongKeyEq; + inline bool operator() (const int64_t &x, const int64_t &y) const + { return x == y; } +}; -typedef struct +enum eINSTANCEOF; +struct eINSTANCEOFKeyHash { - int operator() (const eINSTANCEOF &k) const + int operator()(const eINSTANCEOF &k) const { - unsigned int h = (unsigned int)k; + unsigned int h = static_cast(k); h ^= (h >> 20) ^ (h >> 12); - return (int)(h ^ (h >> 7) ^ (h >> 4)); + return static_cast(h ^ (h >> 7) ^ (h >> 4)); } -} eINSTANCEOFKeyHash; +}; -typedef struct +struct eINSTANCEOFKeyEq { - bool operator() (const eINSTANCEOF &x, const eINSTANCEOF &y) const { return x==y; } -} eINSTANCEOFKeyEq; + inline bool operator()(const eINSTANCEOF &x, const eINSTANCEOF &y) const + { return x == y; } +}; diff --git a/Minecraft.World/Player.h b/Minecraft.World/Player.h index 71cad7a1a..2e223a1e5 100644 --- a/Minecraft.World/Player.h +++ b/Minecraft.World/Player.h @@ -542,13 +542,15 @@ private: #endif }; -typedef struct +struct PlayerKeyHash { - int operator() (const shared_ptr k) const { return Player::hash_fnct (k); } + inline int operator() (const shared_ptr k) const + { return Player::hash_fnct (k); } +}; -} PlayerKeyHash; - -typedef struct +struct PlayerKeyEq { - bool operator() (const shared_ptr x, const shared_ptr y) const { return Player::eq_test (x, y); } -} PlayerKeyEq; + inline bool operator() (const shared_ptr x, const shared_ptr y) const + { return Player::eq_test (x, y); } +}; + diff --git a/Minecraft.World/TickNextTickData.cpp b/Minecraft.World/TickNextTickData.cpp index af5dc9f4e..277be1f8c 100644 --- a/Minecraft.World/TickNextTickData.cpp +++ b/Minecraft.World/TickNextTickData.cpp @@ -2,7 +2,7 @@ #include "net.minecraft.world.level.tile.h" #include "TickNextTickData.h" -__int64 TickNextTickData::C = 0; +int64_t TickNextTickData::C = 0; TickNextTickData::TickNextTickData(int x, int y, int z, int tileId) { @@ -34,7 +34,7 @@ int TickNextTickData::hashCode() const return (((x * 1024 * 1024) + (z * 1024) + y) * 256); } -TickNextTickData *TickNextTickData::delay(__int64 l) +TickNextTickData *TickNextTickData::delay(int64_t l) { m_delay = l; return this; diff --git a/Minecraft.World/TickNextTickData.h b/Minecraft.World/TickNextTickData.h index 9ad18e4a8..04d9ed5ed 100644 --- a/Minecraft.World/TickNextTickData.h +++ b/Minecraft.World/TickNextTickData.h @@ -1,12 +1,14 @@ #pragma once +#include + // 4J Stu - In Java TickNextTickData implements Comparable // We don't need to do that as it is only as helper for the java sdk sorting operations class TickNextTickData { private: - static __int64 C; + static int64_t C; public: int x, y, z, tileId; @@ -14,7 +16,7 @@ public: int priorityTilt; private: - __int64 c; + int64_t c; public: TickNextTickData(int x, int y, int z, int tileId); @@ -31,19 +33,21 @@ public: bool operator==(const TickNextTickData &k); }; -typedef struct +struct TickNextTickDataKeyHash { - int operator() (const TickNextTickData &k) const { return TickNextTickData::hash_fnct (k); } + int operator() (const TickNextTickData &k) const + { return TickNextTickData::hash_fnct (k); } +}; -} TickNextTickDataKeyHash; - -typedef struct +struct TickNextTickDataKeyEq { - bool operator() (const TickNextTickData &x, const TickNextTickData &y) const { return TickNextTickData::eq_test (x, y); } -} TickNextTickDataKeyEq; + bool operator() (const TickNextTickData &x, const TickNextTickData &y) const + { return TickNextTickData::eq_test (x, y); } +}; -typedef struct +struct TickNextTickDataKeyCompare { - bool operator() (const TickNextTickData &x, const TickNextTickData &y) const { return TickNextTickData::compare_fnct (x, y); } + bool operator() (const TickNextTickData &x, const TickNextTickData &y) const + { return TickNextTickData::compare_fnct (x, y); } -} TickNextTickDataKeyCompare; \ No newline at end of file +}; \ No newline at end of file diff --git a/README.md b/README.md index 76b0afe1b..4a35d5001 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Discord](https://img.shields.io/badge/Discord-Join%20Server-5865F2?logo=discord&logoColor=white)](https://discord.gg/5CSzhc9t) -![img.png](img.png) +![img.png](.github/IMG_8725.png) ## Introduction @@ -22,16 +22,19 @@ This project contains the source code of Minecraft Legacy Console Edition v1.3.0 - **Movement**: `W` `A` `S` `D` - **Jump / Fly (Up)**: `Space` - **Sneak / Fly (Down)**: `Shift` (Hold) -- **Sprint**: `Ctrl` (Hold) +- **Sprint**: `Ctrl` (Hold) or Double-tap `W` - **Inventory**: `E` - **Drop Item**: `Q` - **Crafting**: `C` - **Toggle View (FPS/TPS)**: `F5` - **Fullscreen**: `F11` - **Pause Menu**: `Esc` +- **Toggle Mouse Capture**: `Left Alt` (for debugging) - **Attack / Destroy**: `Left Click` - **Use / Place**: `Right Click` - **Select Item**: `Mouse Wheel` or keys `1` to `9` +- **Accept or Decline Tutorial hints**: `Enter` to accept and `B` to decline +- **Host Options**: `TAB` ## Build & Run @@ -41,6 +44,13 @@ This project contains the source code of Minecraft Legacy Console Edition v1.3.0 4. Make sure `Minecraft.Client` is set as the Startup Project 5. Set the build configuration to **Debug** (Release is also OK but has some bugs) and the target platform to **Windows64**, then build and run +### CMake (Windows x64) + +```powershell +cmake -S . -B build -G "Visual Studio 17 2022" -A x64 +cmake --build build --config Debug --target MinecraftClient +``` + ## Known Issues - Builds for other platforms have not been tested and are most likely non-functional diff --git a/cmake/ClientSources.cmake b/cmake/ClientSources.cmake new file mode 100644 index 000000000..dae96fd43 --- /dev/null +++ b/cmake/ClientSources.cmake @@ -0,0 +1,453 @@ +set(MINECRAFT_CLIENT_SOURCES + "AbstractTexturePack.cpp" + "crt_compat.cpp" + "AchievementPopup.cpp" + "AchievementScreen.cpp" + "AllowAllCuller.cpp" + "ArchiveFile.cpp" + "ArrowRenderer.cpp" + "BlazeModel.cpp" + "BlazeRenderer.cpp" + "BoatModel.cpp" + "BoatRenderer.cpp" + "BookModel.cpp" + "BreakingItemParticle.cpp" + "BubbleParticle.cpp" + "BufferedImage.cpp" + "Button.cpp" + "Camera.cpp" + "ChatScreen.cpp" + "ChestModel.cpp" + "ChestRenderer.cpp" + "ChickenModel.cpp" + "ChickenRenderer.cpp" + "Chunk.cpp" + "ClientConnection.cpp" + "ClientConstants.cpp" + "ClockTexture.cpp" + "Common/Audio/Consoles_SoundEngine.cpp" + "Common/Audio/SoundEngine.cpp" + "Common/Audio/SoundNames.cpp" + "Common/Colours/ColourTable.cpp" + "Common/Consoles_App.cpp" + "Common/DLC/DLCAudioFile.cpp" + "Common/DLC/DLCCapeFile.cpp" + "Common/DLC/DLCColourTableFile.cpp" + "Common/DLC/DLCFile.cpp" + "Common/DLC/DLCGameRulesFile.cpp" + "Common/DLC/DLCGameRulesHeader.cpp" + "Common/DLC/DLCLocalisationFile.cpp" + "Common/DLC/DLCManager.cpp" + "Common/DLC/DLCPack.cpp" + "Common/DLC/DLCSkinFile.cpp" + "Common/DLC/DLCTextureFile.cpp" + "Common/DLC/DLCUIDataFile.cpp" + "Common/GameRules/AddEnchantmentRuleDefinition.cpp" + "Common/GameRules/AddItemRuleDefinition.cpp" + "Common/GameRules/ApplySchematicRuleDefinition.cpp" + "Common/GameRules/BiomeOverride.cpp" + "Common/GameRules/CollectItemRuleDefinition.cpp" + "Common/GameRules/CompleteAllRuleDefinition.cpp" + "Common/GameRules/CompoundGameRuleDefinition.cpp" + "Common/GameRules/GameRule.cpp" + "Common/GameRules/GameRuleDefinition.cpp" + "Common/GameRules/GameRuleManager.cpp" + "Common/GameRules/LevelGenerationOptions.cpp" + "Common/GameRules/LevelGenerators.cpp" + "Common/GameRules/LevelRules.cpp" + "Common/GameRules/LevelRuleset.cpp" + "Common/GameRules/NamedAreaRuleDefinition.cpp" + "Common/GameRules/StartFeature.cpp" + "Common/GameRules/UpdatePlayerRuleDefinition.cpp" + "Common/GameRules/UseTileRuleDefinition.cpp" + "Common/GameRules/ConsoleGenerateStructure.cpp" + "Common/GameRules/ConsoleSchematicFile.cpp" + "Common/GameRules/XboxStructureActionGenerateBox.cpp" + "Common/GameRules/XboxStructureActionPlaceBlock.cpp" + "Common/GameRules/XboxStructureActionPlaceContainer.cpp" + "Common/GameRules/XboxStructureActionPlaceSpawner.cpp" + "Common/Leaderboards/LeaderboardManager.cpp" + "Common/Network/GameNetworkManager.cpp" + "Common/Network/PlatformNetworkManagerStub.cpp" + "Common/Telemetry/TelemetryManager.cpp" + "Common/Trial/TrialMode.cpp" + "Common/Tutorial/AreaConstraint.cpp" + "Common/Tutorial/AreaHint.cpp" + "Common/Tutorial/AreaTask.cpp" + "Common/Tutorial/ChangeStateConstraint.cpp" + "Common/Tutorial/ChoiceTask.cpp" + "Common/Tutorial/CompleteUsingItemTask.cpp" + "Common/Tutorial/ControllerTask.cpp" + "Common/Tutorial/CraftTask.cpp" + "Common/Tutorial/DiggerItemHint.cpp" + "Common/Tutorial/EffectChangedTask.cpp" + "Common/Tutorial/FullTutorial.cpp" + "Common/Tutorial/FullTutorialActiveTask.cpp" + "Common/Tutorial/FullTutorialMode.cpp" + "Common/Tutorial/InfoTask.cpp" + "Common/Tutorial/InputConstraint.cpp" + "Common/Tutorial/LookAtEntityHint.cpp" + "Common/Tutorial/LookAtTileHint.cpp" + "Common/Tutorial/PickupTask.cpp" + "Common/Tutorial/ProcedureCompoundTask.cpp" + "Common/Tutorial/ProgressFlagTask.cpp" + "Common/Tutorial/StatTask.cpp" + "Common/Tutorial/TakeItemHint.cpp" + "Common/Tutorial/Tutorial.cpp" + "Common/Tutorial/TutorialHint.cpp" + "Common/Tutorial/TutorialMessage.cpp" + "Common/Tutorial/TutorialMode.cpp" + "Common/Tutorial/TutorialTask.cpp" + "Common/Tutorial/UseItemTask.cpp" + "Common/Tutorial/UseTileTask.cpp" + "Common/Tutorial/XuiCraftingTask.cpp" + "Common/ConsoleGameMode.cpp" + "Common/Console_Utils.cpp" + "Common/UI/IUIScene_AbstractContainerMenu.cpp" + "Common/UI/IUIScene_AnvilMenu.cpp" + "Common/UI/IUIScene_BrewingMenu.cpp" + "Common/UI/IUIScene_ContainerMenu.cpp" + "Common/UI/IUIScene_CraftingMenu.cpp" + "Common/UI/IUIScene_CreativeMenu.cpp" + "Common/UI/IUIScene_DispenserMenu.cpp" + "Common/UI/IUIScene_EnchantingMenu.cpp" + "Common/UI/IUIScene_FurnaceMenu.cpp" + "Common/UI/IUIScene_InventoryMenu.cpp" + "Common/UI/IUIScene_PauseMenu.cpp" + "Common/UI/IUIScene_StartGame.cpp" + "Common/UI/IUIScene_TradingMenu.cpp" + "Common/UI/UIComponent_DebugUIMarketingGuide.cpp" + "Common/UI/UIScene_Keyboard.cpp" + "Common/UI/UIComponent_MenuBackground.cpp" + "Common/UI/UIComponent_PressStartToPlay.cpp" + "Common/UI/UIControl_Base.cpp" + "Common/UI/UIControl_BitmapIcon.cpp" + "Common/UI/UIControl_DLCList.cpp" + "Common/UI/UIControl_DynamicLabel.cpp" + "Common/UI/UIControl_EnchantmentBook.cpp" + "Common/UI/UIControl_EnchantmentButton.cpp" + "Common/UI/UIControl_HTMLLabel.cpp" + "Common/UI/UIControl_LeaderboardList.cpp" + "Common/UI/UIControl_MinecraftPlayer.cpp" + "Common/UI/UIControl_PlayerList.cpp" + "Common/UI/UIControl_SaveList.cpp" + "Common/UI/UIControl_SpaceIndicatorBar.cpp" + "Common/UI/UIControl_TexturePackList.cpp" + "Common/UI/UIFontData.cpp" + "Common/UI/UIScene_AnvilMenu.cpp" + "Common/UI/UIScene_ControlsMenu.cpp" + "Common/UI/UIScene_Credits.cpp" + "Common/UI/UIScene_DebugCreateSchematic.cpp" + "Common/UI/UIScene_DebugSetCamera.cpp" + "Common/UI/UIScene_DLCMainMenu.cpp" + "Common/UI/UIScene_DLCOffersMenu.cpp" + "Common/UI/UIScene_EndPoem.cpp" + "Common/UI/UIScene_EULA.cpp" + "Common/UI/UIScene_HowToPlay.cpp" + "Common/UI/UIScene_InGameHostOptionsMenu.cpp" + "Common/UI/UIScene_InGameInfoMenu.cpp" + "Common/UI/UIScene_InGamePlayerOptionsMenu.cpp" + "Common/UI/UIScene_LeaderboardsMenu.cpp" + "Common/UI/UIScene_MessageBox.cpp" + "Common/UI/UIBitmapFont.cpp" + "Common/UI/UIComponent_Chat.cpp" + "Common/UI/UIComponent_DebugUIConsole.cpp" + "Common/UI/UIComponent_Logo.cpp" + "Common/UI/UIComponent_Panorama.cpp" + "Common/UI/UIComponent_Tooltips.cpp" + "Common/UI/UIComponent_TutorialPopup.cpp" + "Common/UI/UIControl.cpp" + "Common/UI/UIController.cpp" + "Common/UI/UIControl_Button.cpp" + "Common/UI/UIControl_CheckBox.cpp" + "Common/UI/UIControl_Cursor.cpp" + "Common/UI/UIControl_Label.cpp" + "Common/UI/UIControl_PlayerSkinPreview.cpp" + "Common/UI/UIControl_Progress.cpp" + "Common/UI/UIControl_ButtonList.cpp" + "Common/UI/UIControl_Slider.cpp" + "Common/UI/UIControl_SlotList.cpp" + "Common/UI/UIControl_TextInput.cpp" + "Common/UI/UIGroup.cpp" + "Common/UI/UILayer.cpp" + "Common/UI/UIScene.cpp" + "Common/UI/UIScene_AbstractContainerMenu.cpp" + "Common/UI/UIScene_BrewingStandMenu.cpp" + "Common/UI/UIScene_ConnectingProgress.cpp" + "Common/UI/UIScene_ContainerMenu.cpp" + "Common/UI/UIScene_CraftingMenu.cpp" + "Common/UI/UIScene_CreateWorldMenu.cpp" + "Common/UI/UIScene_CreativeMenu.cpp" + "Common/UI/UIScene_DeathMenu.cpp" + "Common/UI/UIScene_DebugOptions.cpp" + "Common/UI/UIScene_DebugOverlay.cpp" + "Common/UI/UIScene_DispenserMenu.cpp" + "Common/UI/UIScene_EnchantingMenu.cpp" + "Common/UI/UIScene_FullscreenProgress.cpp" + "Common/UI/UIScene_FurnaceMenu.cpp" + "Common/UI/UIScene_HelpAndOptionsMenu.cpp" + "Common/UI/UIScene_HowToPlayMenu.cpp" + "Common/UI/UIScene_HUD.cpp" + "Common/UI/UIScene_Intro.cpp" + "Common/UI/UIScene_JoinMenu.cpp" + "Common/UI/UIScene_LaunchMoreOptionsMenu.cpp" + "Common/UI/UIScene_LoadMenu.cpp" + "Common/UI/UIScene_LoadOrJoinMenu.cpp" + "Common/UI/UIScene_MainMenu.cpp" + "Common/UI/UIScene_InventoryMenu.cpp" + "Common/UI/UIScene_PauseMenu.cpp" + "Common/UI/UIScene_QuadrantSignin.cpp" + "Common/UI/UIScene_ReinstallMenu.cpp" + "Common/UI/UIScene_SaveMessage.cpp" + "Common/UI/UIScene_SettingsAudioMenu.cpp" + "Common/UI/UIScene_SettingsControlMenu.cpp" + "Common/UI/UIScene_SettingsGraphicsMenu.cpp" + "Common/UI/UIScene_SettingsMenu.cpp" + "Common/UI/UIScene_SettingsOptionsMenu.cpp" + "Common/UI/UIScene_SettingsUIMenu.cpp" + "Common/UI/UIScene_SignEntryMenu.cpp" + "Common/UI/UIScene_SkinSelectMenu.cpp" + "Common/UI/UIScene_TeleportMenu.cpp" + "Common/UI/UIScene_Timer.cpp" + "Common/UI/UIScene_TradingMenu.cpp" + "Common/UI/UIScene_TrialExitUpsell.cpp" + "Common/UI/UITTFFont.cpp" + "Common/zlib/adler32.c" + "Common/zlib/compress.c" + "Common/zlib/crc32.c" + "Common/zlib/deflate.c" + "Common/zlib/gzclose.c" + "Common/zlib/gzlib.c" + "Common/zlib/gzread.c" + "Common/zlib/gzwrite.c" + "Common/zlib/infback.c" + "Common/zlib/inffast.c" + "Common/zlib/inflate.c" + "Common/zlib/inftrees.c" + "Common/zlib/trees.c" + "Common/zlib/uncompr.c" + "Common/zlib/zutil.c" + "CompassTexture.cpp" + "ConfirmScreen.cpp" + "ConsoleInput.cpp" + "ControlsScreen.cpp" + "CowModel.cpp" + "CowRenderer.cpp" + "CreateWorldScreen.cpp" + "CreeperModel.cpp" + "CreeperRenderer.cpp" + "CritParticle.cpp" + "CritParticle2.cpp" + "Cube.cpp" + "DeathScreen.cpp" + "DefaultRenderer.cpp" + "DefaultTexturePack.cpp" + "DemoLevel.cpp" + "DemoUser.cpp" + "DerivedServerLevel.cpp" + "DirtyChunkSorter.cpp" + "DistanceChunkSorter.cpp" + "DLCTexturePack.cpp" + "DragonBreathParticle.cpp" + "DragonModel.cpp" + "DripParticle.cpp" + "EchantmentTableParticle.cpp" + "EditBox.cpp" + "EnchantTableRenderer.cpp" + "EnderChestRenderer.cpp" + "EnderCrystalModel.cpp" + "EnderCrystalRenderer.cpp" + "EnderDragonRenderer.cpp" + "EndermanModel.cpp" + "EndermanRenderer.cpp" + "EnderParticle.cpp" + "EntityRenderDispatcher.cpp" + "EntityRenderer.cpp" + "EntityTileRenderer.cpp" + "EntityTracker.cpp" + "ErrorScreen.cpp" + "ExperienceOrbRenderer.cpp" + "ExplodeParticle.cpp" + "Extrax64Stubs.cpp" + "FallingTileRenderer.cpp" + "FileTexturePack.cpp" + "FireballRenderer.cpp" + "FishingHookRenderer.cpp" + "FlameParticle.cpp" + "FolderTexturePack.cpp" + "Font.cpp" + "FootstepParticle.cpp" + "Frustum.cpp" + "FrustumCuller.cpp" + "FrustumData.cpp" + "GameRenderer.cpp" + "GhastModel.cpp" + "GhastRenderer.cpp" + "GiantMobRenderer.cpp" + "glWrapper.cpp" + "Gui.cpp" + "GuiComponent.cpp" + "GuiMessage.cpp" + "GuiParticle.cpp" + "GuiParticles.cpp" + "HeartParticle.cpp" + "HttpTexture.cpp" + "HugeExplosionParticle.cpp" + "HugeExplosionSeedParticle.cpp" + "HumanoidMobRenderer.cpp" + "HumanoidModel.cpp" + "InBedChatScreen.cpp" + "Input.cpp" + "ItemFrameRenderer.cpp" + "ItemInHandRenderer.cpp" + "ItemRenderer.cpp" + "ItemSpriteRenderer.cpp" + "JoinMultiplayerScreen.cpp" + "KeyMapping.cpp" + "LargeChestModel.cpp" + "LavaParticle.cpp" + "LavaSlimeModel.cpp" + "LavaSlimeRenderer.cpp" + "LevelRenderer.cpp" + "Lighting.cpp" + "LightningBoltRenderer.cpp" + "MemoryTracker.cpp" + "MemTexture.cpp" + "MinecartModel.cpp" + "MinecartRenderer.cpp" + "Minecraft.cpp" + "MinecraftServer.cpp" + "Minimap.cpp" + "MobRenderer.cpp" + "MobSkinMemTextureProcessor.cpp" + "MobSkinTextureProcessor.cpp" + "MobSpawnerRenderer.cpp" + "Model.cpp" + "ModelPart.cpp" + "MultiPlayerChunkCache.cpp" + "MultiPlayerGameMode.cpp" + "MultiPlayerLevel.cpp" + "MultiPlayerLocalPlayer.cpp" + "MushroomCowRenderer.cpp" + "NameEntryScreen.cpp" + "NoteParticle.cpp" + "OffsettedRenderList.cpp" + "Options.cpp" + "OptionsScreen.cpp" + "OzelotModel.cpp" + "OzelotRenderer.cpp" + "PaintingRenderer.cpp" + "Particle.cpp" + "ParticleEngine.cpp" + "PauseScreen.cpp" + "PendingConnection.cpp" + "PigModel.cpp" + "PigRenderer.cpp" + "LocalPlayer.cpp" + "PistonPieceRenderer.cpp" + "PlayerChunkMap.cpp" + "PlayerCloudParticle.cpp" + "PlayerConnection.cpp" + "PlayerList.cpp" + "PreStitchedTextureMap.cpp" + "ProgressRenderer.cpp" + "PS3/PS3Extras/ShutdownManager.cpp" + "Rect2i.cpp" + "RemotePlayer.cpp" + "PlayerRenderer.cpp" + "Polygon.cpp" + "NetherPortalParticle.cpp" + "QuadrupedModel.cpp" + "RedDustParticle.cpp" + "RenameWorldScreen.cpp" + "Screen.cpp" + "ScreenSizeCalculator.cpp" + "ScrolledSelectionList.cpp" + "SelectWorldScreen.cpp" + "ServerChunkCache.cpp" + "ServerCommandDispatcher.cpp" + "ServerConnection.cpp" + "ServerPlayerGameMode.cpp" + "ServerLevel.cpp" + "ServerLevelListener.cpp" + "ServerPlayer.cpp" + "Settings.cpp" + "SheepFurModel.cpp" + "SheepModel.cpp" + "SheepRenderer.cpp" + "SignModel.cpp" + "SignRenderer.cpp" + "SilverfishModel.cpp" + "SilverfishRenderer.cpp" + "SimpleIcon.cpp" + "SkeletonHeadModel.cpp" + "SkeletonModel.cpp" + "SkullTileRenderer.cpp" + "SlideButton.cpp" + "SlimeModel.cpp" + "SlimeRenderer.cpp" + "SmallButton.cpp" + "SmokeParticle.cpp" + "SnowManModel.cpp" + "SnowManRenderer.cpp" + "SnowShovelParticle.cpp" + "SpellParticle.cpp" + "SpiderModel.cpp" + "SpiderRenderer.cpp" + "SplashParticle.cpp" + "SquidModel.cpp" + "SquidRenderer.cpp" + "StatsCounter.cpp" + "StatsScreen.cpp" + "StatsSyncher.cpp" + "stdafx.cpp" + "StitchedTexture.cpp" + "Stitcher.cpp" + "StitchSlot.cpp" + "StringTable.cpp" + "stubs.cpp" + "SuspendedParticle.cpp" + "SuspendedTownParticle.cpp" + "TakeAnimationParticle.cpp" + "TeleportCommand.cpp" + "TerrainParticle.cpp" + "Tesselator.cpp" + "TexOffs.cpp" + "Texture.cpp" + "TextureHolder.cpp" + "TextureManager.cpp" + "TextureMap.cpp" + "TexturePack.cpp" + "TexturePackRepository.cpp" + "Textures.cpp" + "TheEndPortalRenderer.cpp" + "TileEntityRenderDispatcher.cpp" + "TileEntityRenderer.cpp" + "TileRenderer.cpp" + "Timer.cpp" + "TitleScreen.cpp" + "TntRenderer.cpp" + "TrackedEntity.cpp" + "User.cpp" + "Vertex.cpp" + "VideoSettingsScreen.cpp" + "ViewportCuller.cpp" + "VillagerGolemModel.cpp" + "VillagerGolemRenderer.cpp" + "VillagerModel.cpp" + "VillagerRenderer.cpp" + "VillagerZombieModel.cpp" + "WaterDropParticle.cpp" + "Windows64/Iggy/gdraw/gdraw_d3d11.cpp" + "Windows64/Leaderboards/WindowsLeaderboardManager.cpp" + "Windows64/Windows64_App.cpp" + "Windows64/Windows64_Minecraft.cpp" + "Windows64/KeyboardMouseInput.cpp" + "Windows64/Windows64_UIController.cpp" + "WolfModel.cpp" + "WolfRenderer.cpp" + "WstringLookup.cpp" + "Xbox/Network/NetworkPlayerXbox.cpp" + "ZombieModel.cpp" + "ZombieRenderer.cpp" +) diff --git a/cmake/CopyAssets.cmake b/cmake/CopyAssets.cmake new file mode 100644 index 000000000..47b19ca79 --- /dev/null +++ b/cmake/CopyAssets.cmake @@ -0,0 +1,83 @@ +if(NOT DEFINED PROJECT_SOURCE_DIR OR NOT DEFINED OUTPUT_DIR OR NOT DEFINED CONFIGURATION) + message(FATAL_ERROR "CopyAssets.cmake requires PROJECT_SOURCE_DIR, OUTPUT_DIR, and CONFIGURATION.") +endif() + +# Some generators may pass quoted values (e.g. "Debug"); normalize that. +string(REPLACE "\"" "" PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}") +string(REPLACE "\"" "" OUTPUT_DIR "${OUTPUT_DIR}") +string(REPLACE "\"" "" CONFIGURATION "${CONFIGURATION}") + +set(_project_dir "${PROJECT_SOURCE_DIR}/Minecraft.Client") + +function(copy_tree_if_exists src_rel dst_rel) + set(_src "${_project_dir}/${src_rel}") + set(_dst "${OUTPUT_DIR}/${dst_rel}") + if(EXISTS "${_src}") + file(MAKE_DIRECTORY "${_dst}") + execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_directory "${_src}" "${_dst}") + endif() +endfunction() + +function(ensure_dir rel_path) + file(MAKE_DIRECTORY "${OUTPUT_DIR}/${rel_path}") +endfunction() + +function(copy_file_if_exists src_rel dst_rel) + set(_src "${PROJECT_SOURCE_DIR}/${src_rel}") + set(_dst "${OUTPUT_DIR}/${dst_rel}") + if(EXISTS "${_src}") + get_filename_component(_dst_dir "${_dst}" DIRECTORY) + file(MAKE_DIRECTORY "${_dst_dir}") + execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${_src}" "${_dst}") + endif() +endfunction() + +function(copy_first_existing dst_rel) + set(_copied FALSE) + foreach(_candidate IN LISTS ARGN) + if(EXISTS "${PROJECT_SOURCE_DIR}/${_candidate}") + copy_file_if_exists("${_candidate}" "${dst_rel}") + set(_copied TRUE) + break() + endif() + endforeach() + if(NOT _copied) + message(WARNING "Runtime file not found for ${dst_rel}. Checked: ${ARGN}") + endif() +endfunction() + +if(CONFIGURATION STREQUAL "Debug") + copy_tree_if_exists("Durango/Sound" "Durango/Sound") + copy_tree_if_exists("music" "music") + copy_tree_if_exists("Windows64/GameHDD" "Windows64/GameHDD") + copy_tree_if_exists("Common/Media" "Common/Media") + copy_tree_if_exists("Common/res" "Common/res") + copy_tree_if_exists("Common/Trial" "Common/Trial") + copy_tree_if_exists("Common/Tutorial" "Common/Tutorial") +else() + copy_tree_if_exists("music" "music") + copy_tree_if_exists("Windows64/GameHDD" "Windows64/GameHDD") + copy_tree_if_exists("Common/Media" "Common/Media") + copy_tree_if_exists("Common/res" "Common/res") + copy_tree_if_exists("Common/Trial" "Common/Trial") + copy_tree_if_exists("Common/Tutorial" "Common/Tutorial") + copy_tree_if_exists("DurangoMedia" "Windows64Media") + copy_tree_if_exists("Windows64Media" "Windows64Media") +endif() + +# Some runtime code asserts if this directory tree is missing. +ensure_dir("Windows64/GameHDD") + +# Keep legacy runtime redistributables in a familiar location. +copy_tree_if_exists("Windows64/Miles/lib/redist64" "redist64") +copy_tree_if_exists("Windows64/Iggy/lib/redist64" "redist64") + +# Runtime DLLs required at launch. +copy_first_existing("iggy_w64.dll" + "Minecraft.Client/Windows64/Iggy/lib/redist64/iggy_w64.dll" + "x64/${CONFIGURATION}/iggy_w64.dll" +) +copy_first_existing("mss64.dll" + "Minecraft.Client/Windows64/Miles/lib/redist64/mss64.dll" + "x64/${CONFIGURATION}/mss64.dll" +) diff --git a/cmake/WorldSources.cmake b/cmake/WorldSources.cmake new file mode 100644 index 000000000..3fca57b61 --- /dev/null +++ b/cmake/WorldSources.cmake @@ -0,0 +1,707 @@ +set(MINECRAFT_WORLD_SOURCES + "AABB.cpp" + "Abilities.cpp" + "AbstractContainerMenu.cpp" + "Achievement.cpp" + "Achievements.cpp" + "AddEntityPacket.cpp" + "AddExperienceOrbPacket.cpp" + "AddGlobalEntityPacket.cpp" + "AddIslandLayer.cpp" + "AddMobPacket.cpp" + "AddMushroomIslandLayer.cpp" + "AddPaintingPacket.cpp" + "AddPlayerPacket.cpp" + "AddSnowLayer.cpp" + "AgableMob.cpp" + "AirTile.cpp" + "Animal.cpp" + "AnimatePacket.cpp" + "AnvilTile.cpp" + "AnvilTileItem.cpp" + "ArmorDyeRecipe.cpp" + "ArmorItem.cpp" + "ArmorRecipes.cpp" + "ArmorSlot.cpp" + "Arrow.cpp" + "ArrowAttackGoal.cpp" + "ArrowDamageEnchantment.cpp" + "ArrowFireEnchantment.cpp" + "ArrowInfiniteEnchantment.cpp" + "ArrowKnockbackEnchantment.cpp" + "AuxDataTileItem.cpp" + "AvoidPlayerGoal.cpp" + "AwardStatPacket.cpp" + "BasicTree.cpp" + "BasicTypeContainers.cpp" + "BeachBiome.cpp" + "BedItem.cpp" + "BedTile.cpp" + "BegGoal.cpp" + "BinaryHeap.cpp" + "Biome.cpp" + "BiomeCache.cpp" + "BiomeDecorator.cpp" + "BiomeInitLayer.cpp" + "BiomeOverrideLayer.cpp" + "BiomeSource.cpp" + "BirchFeature.cpp" + "Blaze.cpp" + "BlockDestructionProgress.cpp" + "BlockGenMethods.cpp" + "BlockRegionUpdatePacket.cpp" + "BlockReplacements.cpp" + "Boat.cpp" + "BoatItem.cpp" + "BodyControl.cpp" + "BonusChestFeature.cpp" + "BookItem.cpp" + "BookshelfTile.cpp" + "BossMob.cpp" + "BossMobPart.cpp" + "BottleItem.cpp" + "BoundingBox.cpp" + "BowItem.cpp" + "BowlFoodItem.cpp" + "BreakDoorGoal.cpp" + "BreedGoal.cpp" + "BrewingStandMenu.cpp" + "BrewingStandTile.cpp" + "BrewingStandTileEntity.cpp" + "BucketItem.cpp" + "Buffer.cpp" + "BufferedOutputStream.cpp" + "BufferedReader.cpp" + "Bush.cpp" + "ButtonTile.cpp" + "ByteArrayInputStream.cpp" + "ByteArrayOutputStream.cpp" + "ByteBuffer.cpp" + "CactusFeature.cpp" + "CactusTile.cpp" + "CakeTile.cpp" + "CanyonFeature.cpp" + "CarrotOnAStickItem.cpp" + "CarrotTile.cpp" + "CauldronTile.cpp" + "CaveFeature.cpp" + "CaveSpider.cpp" + "ChatPacket.cpp" + "ChestTile.cpp" + "ChestTileEntity.cpp" + "Chicken.cpp" + "ChunkPos.cpp" + "ChunkStorageProfileDecorator.cpp" + "ChunkTilesUpdatePacket.cpp" + "ChunkVisibilityAreaPacket.cpp" + "ChunkVisibilityPacket.cpp" + "Class.cpp" + "ClayFeature.cpp" + "ClayTile.cpp" + "ClientCommandPacket.cpp" + "ClientSideMerchant.cpp" + "ClockItem.cpp" + "ClothDyeRecipes.cpp" + "ClothTile.cpp" + "ClothTileItem.cpp" + "CoalItem.cpp" + "CocoaTile.cpp" + "Color.cpp" + "ColoredTileItem.cpp" + "Command.cpp" + "CommandDispatcher.cpp" + "CommonStats.cpp" + "CompassItem.cpp" + "ComplexItem.cpp" + "ComplexItemDataPacket.cpp" + "CompoundContainer.cpp" + "CompressedTileStorage.cpp" + "compression.cpp" + "Connection.cpp" + "ConsoleSaveFileConverter.cpp" + "ConsoleSaveFileOriginal.cpp" + "Container.cpp" + "ContainerAckPacket.cpp" + "ContainerButtonClickPacket.cpp" + "ContainerClickPacket.cpp" + "ContainerClosePacket.cpp" + "ContainerOpenPacket.cpp" + "ContainerSetContentPacket.cpp" + "ContainerSetDataPacket.cpp" + "ContainerSetSlotPacket.cpp" + "ControlledByPlayerGoal.cpp" + "CoralTile.cpp" + "Cow.cpp" + "CraftingContainer.cpp" + "CraftingMenu.cpp" + "DefaultGameModeCommand.cpp" + "EnchantItemCommand.cpp" + "ExperienceCommand.cpp" + "GameCommandPacket.cpp" + "GameModeCommand.cpp" + "GenericStats.cpp" + "GiveItemCommand.cpp" + "KillCommand.cpp" + "PerformanceTimer.cpp" + "TimeCommand.cpp" + "ToggleDownfallCommand.cpp" + "TradeItemPacket.cpp" + "CraftItemPacket.cpp" + "Creature.cpp" + "Creeper.cpp" + "CropTile.cpp" + "CustomLevelSource.cpp" + "CustomPayloadPacket.cpp" + "DamageEnchantment.cpp" + "DamageSource.cpp" + "DataInputStream.cpp" + "DataLayer.cpp" + "DataOutputStream.cpp" + "DeadBushFeature.cpp" + "DeadBushTile.cpp" + "DebugOptionsPacket.cpp" + "DefendVillageTargetGoal.cpp" + "DelayedRelease.cpp" + "DerivedLevelData.cpp" + "DesertBiome.cpp" + "DesertWellFeature.cpp" + "DetectorRailTile.cpp" + "DigDurabilityEnchantment.cpp" + "DiggerItem.cpp" + "DiggingEnchantment.cpp" + "Dimension.cpp" + "DiodeTile.cpp" + "Direction.cpp" + "DirectionalTile.cpp" + "DirectoryLevelStorage.cpp" + "DirectoryLevelStorageSource.cpp" + "DirtTile.cpp" + "DisconnectPacket.cpp" + "DispenserTile.cpp" + "DispenserTileEntity.cpp" + "DoorInfo.cpp" + "DoorInteractGoal.cpp" + "DragonFireball.cpp" + "EatTileGoal.cpp" + "EggTile.cpp" + "EnchantedBookItem.cpp" + "Enchantment.cpp" + "EnchantmentCategory.cpp" + "EnchantmentContainer.cpp" + "EnchantmentHelper.cpp" + "EnchantmentInstance.cpp" + "EnchantmentMenu.cpp" + "EnchantmentTableEntity.cpp" + "EnchantmentTableTile.cpp" + "EnderChestTile.cpp" + "EnderChestTileEntity.cpp" + "EnderEyeItem.cpp" + "EnderpearlItem.cpp" + "EndPodiumFeature.cpp" + "ExperienceItem.cpp" + "ExtremeHillsBiome.cpp" + "Feature.cpp" + "EnderCrystal.cpp" + "EnderDragon.cpp" + "EyeOfEnderSignal.cpp" + "FireAspectEnchantment.cpp" + "FireChargeItem.cpp" + "FleeSunGoal.cpp" + "FlippedIcon.cpp" + "FloatGoal.cpp" + "FlowerPotTile.cpp" + "FollowOwnerGoal.cpp" + "FollowParentGoal.cpp" + "Goal.cpp" + "GoalSelector.cpp" + "GoldenAppleItem.cpp" + "Golem.cpp" + "GroundBushFeature.cpp" + "GrowMushroomIslandLayer.cpp" + "HalfSlabTile.cpp" + "HangingEntity.cpp" + "HangingEntityItem.cpp" + "HellFlatLevelSource.cpp" + "HurtByTargetGoal.cpp" + "IceBiome.cpp" + "InteractGoal.cpp" + "ItemFrame.cpp" + "JumpControl.cpp" + "JungleBiome.cpp" + "KickPlayerPacket.cpp" + "KnockbackEnchantment.cpp" + "LavaSlime.cpp" + "LeapAtTargetGoal.cpp" + "LevelSoundPacket.cpp" + "LookAtPlayerGoal.cpp" + "LookAtTradingPlayerGoal.cpp" + "LookControl.cpp" + "LootBonusEnchantment.cpp" + "MakeLoveGoal.cpp" + "MegaTreeFeature.cpp" + "MeleeAttackGoal.cpp" + "MerchantContainer.cpp" + "MerchantMenu.cpp" + "MerchantRecipe.cpp" + "MerchantRecipeList.cpp" + "MerchantResultSlot.cpp" + "MilkBucketItem.cpp" + "MonsterPlacerItem.cpp" + "MoveControl.cpp" + "MoveIndoorsGoal.cpp" + "MoveThroughVillageGoal.cpp" + "MoveTowardsRestrictionGoal.cpp" + "MoveTowardsTargetGoal.cpp" + "MultiTextureTileItem.cpp" + "MushroomCow.cpp" + "MushroomIslandBiome.cpp" + "MycelTile.cpp" + "NearestAttackableTargetGoal.cpp" + "NetherBridgeFeature.cpp" + "NetherBridgePieces.cpp" + "NetherStalkTile.cpp" + "NonTameRandomTargetGoal.cpp" + "Npc.cpp" + "OcelotSitOnTileGoal.cpp" + "OfferFlowerGoal.cpp" + "OpenDoorGoal.cpp" + "OwnerHurtByTargetGoal.cpp" + "OwnerHurtTargetGoal.cpp" + "OxygenEnchantment.cpp" + "Ozelot.cpp" + "OzelotAttackGoal.cpp" + "PanicGoal.cpp" + "PathNavigation.cpp" + "PlayerAbilitiesPacket.cpp" + "PlayerEnderChestContainer.cpp" + "PlayGoal.cpp" + "PotatoTile.cpp" + "PotionBrewing.cpp" + "PotionItem.cpp" + "ProtectionEnchantment.cpp" + "QuartzBlockTile.cpp" + "RandomLookAroundGoal.cpp" + "RandomPos.cpp" + "RandomScatteredLargeFeature.cpp" + "RandomStrollGoal.cpp" + "Rarity.cpp" + "RedlightTile.cpp" + "RegionHillsLayer.cpp" + "RepairContainer.cpp" + "RepairMenu.cpp" + "RepairResultSlot.cpp" + "RestrictOpenDoorGoal.cpp" + "RestrictSunGoal.cpp" + "RotateHeadPacket.cpp" + "ScatteredFeaturePieces.cpp" + "SeedFoodItem.cpp" + "Sensing.cpp" + "SitGoal.cpp" + "SkullItem.cpp" + "SkullTile.cpp" + "SkullTileEntity.cpp" + "SparseDataStorage.cpp" + "SwampRiversLayer.cpp" + "SwellGoal.cpp" + "TakeFlowerGoal.cpp" + "TamableAnimal.cpp" + "TargetGoal.cpp" + "TemptGoal.cpp" + "ThornsEnchantment.cpp" + "TileDestructionPacket.cpp" + "TileEventData.cpp" + "TradeWithPlayerGoal.cpp" + "TripWireSourceTile.cpp" + "TripWireTile.cpp" + "Village.cpp" + "VillagerGolem.cpp" + "Villages.cpp" + "VillageSiege.cpp" + "VinesFeature.cpp" + "WallTile.cpp" + "WeighedTreasure.cpp" + "WoodSlabTile.cpp" + "C4JThread.cpp" + "WoodTile.cpp" + "WoolCarpetTile.cpp" + "XZPacket.cpp" + "ShoreLayer.cpp" + "SmoothStoneBrickTileItem.cpp" + "SparseLightStorage.cpp" + "SpikeFeature.cpp" + "NetherSphere.cpp" + "SmallFireball.cpp" + "SnowMan.cpp" + "StoneMonsterTileItem.cpp" + "TextureAndGeometryChangePacket.cpp" + "TextureAndGeometryPacket.cpp" + "TheEndBiome.cpp" + "TheEndBiomeDecorator.cpp" + "TheEndDimension.cpp" + "TheEndLevelRandomLevelSource.cpp" + "TheEndPortal.cpp" + "TheEndPortalFrameTile.cpp" + "TheEndPortalTileEntity.cpp" + "Throwable.cpp" + "ThrownEnderpearl.cpp" + "ThrownExpBottle.cpp" + "ThrownPotion.cpp" + "TileEntityDataPacket.cpp" + "UntouchingEnchantment.cpp" + "UpdateGameRuleProgressPacket.cpp" + "Distort.cpp" + "DoorItem.cpp" + "DoorTile.cpp" + "DownfallLayer.cpp" + "DownfallMixerLayer.cpp" + "DungeonFeature.cpp" + "DyePowderItem.cpp" + "EggItem.cpp" + "Emboss.cpp" + "EmptyLevelChunk.cpp" + "EnderMan.cpp" + "Enemy.cpp" + "Entity.cpp" + "EntityActionAtPositionPacket.cpp" + "EntityDamageSource.cpp" + "EntityEventPacket.cpp" + "EntityIO.cpp" + "EntityPos.cpp" + "EntityTile.cpp" + "ExperienceOrb.cpp" + "ExplodePacket.cpp" + "Explosion.cpp" + "Facing.cpp" + "FallingTile.cpp" + "FarmTile.cpp" + "FastNoise.cpp" + "FenceGateTile.cpp" + "FenceTile.cpp" + "File.cpp" + "FileHeader.cpp" + "FileInputStream.cpp" + "FileOutputStream.cpp" + "Fireball.cpp" + "FireTile.cpp" + "FishingHook.cpp" + "FishingRodItem.cpp" + "FixedBiomeSource.cpp" + "FlatLayer.cpp" + "FlatLevelSource.cpp" + "FlintAndSteelItem.cpp" + "FloatBuffer.cpp" + "FlowerFeature.cpp" + "FlyingMob.cpp" + "FoliageColor.cpp" + "FoodConstants.cpp" + "FoodData.cpp" + "FoodItem.cpp" + "FoodRecipies.cpp" + "ForestBiome.cpp" + "FurnaceMenu.cpp" + "FurnaceRecipes.cpp" + "FurnaceResultSlot.cpp" + "FurnaceTile.cpp" + "FurnaceTileEntity.cpp" + "FuzzyZoomLayer.cpp" + "GameEventPacket.cpp" + "GeneralStat.cpp" + "GetInfoPacket.cpp" + "Ghast.cpp" + "Giant.cpp" + "GlassTile.cpp" + "GlobalEntity.cpp" + "GrassColor.cpp" + "GrassTile.cpp" + "GravelTile.cpp" + "HalfTransparentTile.cpp" + "Hasher.cpp" + "HatchetItem.cpp" + "HellBiome.cpp" + "HellDimension.cpp" + "HellFireFeature.cpp" + "HellPortalFeature.cpp" + "HellRandomLevelSource.cpp" + "HellSandTile.cpp" + "HellSpringFeature.cpp" + "HellStoneTile.cpp" + "HitResult.cpp" + "HoeItem.cpp" + "HouseFeature.cpp" + "HugeMushroomFeature.cpp" + "HugeMushroomTile.cpp" + "I18n.cpp" + "IceTile.cpp" + "ImprovedNoise.cpp" + "ContainerMenu.cpp" + "IndirectEntityDamageSource.cpp" + "InputStream.cpp" + "InputStreamReader.cpp" + "InstantenousMobEffect.cpp" + "IntBuffer.cpp" + "IntCache.cpp" + "InteractPacket.cpp" + "Inventory.cpp" + "InventoryMenu.cpp" + "IslandLayer.cpp" + "Item.cpp" + "ItemEntity.cpp" + "ItemInstance.cpp" + "ItemStat.cpp" + "KeepAlivePacket.cpp" + "LadderTile.cpp" + "LakeFeature.cpp" + "Language.cpp" + "LargeCaveFeature.cpp" + "LargeFeature.cpp" + "LargeHellCaveFeature.cpp" + "Layer.cpp" + "LeafTile.cpp" + "LeafTileItem.cpp" + "LevelConflictException.cpp" + "LevelData.cpp" + "Level.cpp" + "LevelChunk.cpp" + "LevelEventPacket.cpp" + "LevelSettings.cpp" + "LevelStorage.cpp" + "LevelStorageProfilerDecorator.cpp" + "LevelSummary.cpp" + "LevelType.cpp" + "LeverTile.cpp" + "LightGemFeature.cpp" + "LightGemTile.cpp" + "LightningBolt.cpp" + "LiquidTile.cpp" + "LiquidTileDynamic.cpp" + "LiquidTileStatic.cpp" + "LockedChestTile.cpp" + "LoginPacket.cpp" + "MapItem.cpp" + "MapItemSavedData.cpp" + "Material.cpp" + "MaterialColor.cpp" + "JavaMath.cpp" + "McRegionChunkStorage.cpp" + "McRegionLevelStorageSource.cpp" + "McRegionLevelStorage.cpp" + "MelonTile.cpp" + "MenuBackup.cpp" + "MetalTile.cpp" + "Minecart.cpp" + "MinecartItem.cpp" + "Minecraft.World.cpp" + "MineShaftFeature.cpp" + "MineShaftPieces.cpp" + "MineShaftStart.cpp" + "Mob.cpp" + "MobCategory.cpp" + "MobEffect.cpp" + "MobEffectInstance.cpp" + "MobSpawner.cpp" + "MobSpawnerTile.cpp" + "MobSpawnerTileEntity.cpp" + "MockedLevelStorage.cpp" + "Monster.cpp" + "MonsterRoomFeature.cpp" + "MoveEntityPacket.cpp" + "MoveEntityPacketSmall.cpp" + "MovePlayerPacket.cpp" + "Mth.cpp" + "Mushroom.cpp" + "MusicTile.cpp" + "MusicTileEntity.cpp" + "NbtIo.cpp" + "Node.cpp" + "NotGateTile.cpp" + "ObsidianTile.cpp" + "OldChunkStorage.cpp" + "OreFeature.cpp" + "OreRecipies.cpp" + "OreTile.cpp" + "Packet.cpp" + "PacketListener.cpp" + "Painting.cpp" + "Path.cpp" + "PathFinder.cpp" + "PathfinderMob.cpp" + "PerlinNoise.cpp" + "PerlinSimplexNoise.cpp" + "PickaxeItem.cpp" + "Pig.cpp" + "PigZombie.cpp" + "PineFeature.cpp" + "PistonBaseTile.cpp" + "PistonExtensionTile.cpp" + "PistonMovingPiece.cpp" + "PistonPieceEntity.cpp" + "PistonTileItem.cpp" + "PlainsBiome.cpp" + "Player.cpp" + "PlayerActionPacket.cpp" + "PlayerCommandPacket.cpp" + "PlayerInfoPacket.cpp" + "PlayerInputPacket.cpp" + "PortalForcer.cpp" + "PortalTile.cpp" + "Pos.cpp" + "PreLoginPacket.cpp" + "PressurePlateTile.cpp" + "PrimedTnt.cpp" + "PumpkinFeature.cpp" + "PumpkinTile.cpp" + "RailTile.cpp" + "RainforestBiome.cpp" + "Random.cpp" + "RandomLevelSource.cpp" + "ReadOnlyChunkCache.cpp" + "Recipes.cpp" + "RecordingItem.cpp" + "RecordPlayerTile.cpp" + "RedStoneDustTile.cpp" + "RedStoneItem.cpp" + "RedStoneOreTile.cpp" + "ReedsFeature.cpp" + "ReedTile.cpp" + "Region.cpp" + "RegionFile.cpp" + "RegionFileCache.cpp" + "RemoveEntitiesPacket.cpp" + "RemoveMobEffectPacket.cpp" + "RespawnPacket.cpp" + "ResultContainer.cpp" + "ResultSlot.cpp" + "RiverInitLayer.cpp" + "RiverLayer.cpp" + "RiverMixerLayer.cpp" + "Rotate.cpp" + "SaddleItem.cpp" + "SandFeature.cpp" + "SandStoneTile.cpp" + "HeavyTile.cpp" + "Sapling.cpp" + "SaplingTileItem.cpp" + "SavedData.cpp" + "SavedDataStorage.cpp" + "Scale.cpp" + "SeedItem.cpp" + "ServerSettingsChangedPacket.cpp" + "SetCarriedItemPacket.cpp" + "SetCreativeModeSlotPacket.cpp" + "SetEntityDataPacket.cpp" + "SetEntityMotionPacket.cpp" + "SetEquippedItemPacket.cpp" + "SetExperiencePacket.cpp" + "SetHealthPacket.cpp" + "SetRidingPacket.cpp" + "SetSpawnPositionPacket.cpp" + "SetTimePacket.cpp" + "ShapedRecipy.cpp" + "ShapelessRecipy.cpp" + "SharedConstants.cpp" + "ShearsItem.cpp" + "Sheep.cpp" + "ShovelItem.cpp" + "SignItem.cpp" + "SignTile.cpp" + "SignTileEntity.cpp" + "SignUpdatePacket.cpp" + "Silverfish.cpp" + "SimpleContainer.cpp" + "SimplexNoise.cpp" + "Skeleton.cpp" + "Slime.cpp" + "Slot.cpp" + "SmoothFloat.cpp" + "SmoothLayer.cpp" + "SmoothStoneBrickTile.cpp" + "SmoothZoomLayer.cpp" + "Snowball.cpp" + "SnowballItem.cpp" + "SnowTile.cpp" + "Socket.cpp" + "Spider.cpp" + "Sponge.cpp" + "SpringFeature.cpp" + "SpringTile.cpp" + "SpruceFeature.cpp" + "Squid.cpp" + "Stat.cpp" + "Stats.cpp" + "StairTile.cpp" + "stdafx.cpp" + "StemTile.cpp" + "StoneMonsterTile.cpp" + "StoneSlabTile.cpp" + "StoneSlabTileItem.cpp" + "StoneTile.cpp" + "StringHelpers.cpp" + "StrongholdFeature.cpp" + "StrongholdPieces.cpp" + "StructureFeature.cpp" + "StructurePiece.cpp" + "StructureRecipies.cpp" + "StructureStart.cpp" + "SwampBiome.cpp" + "SwampTreeFeature.cpp" + "SynchedEntityData.cpp" + "Synth.cpp" + "system.cpp" + "Tag.cpp" + "TaigaBiome.cpp" + "TakeItemEntityPacket.cpp" + "TallGrass.cpp" + "TallGrassFeature.cpp" + "TeleportEntityPacket.cpp" + "TemperatureLayer.cpp" + "TemperatureMixerLayer.cpp" + "TextureChangePacket.cpp" + "TexturePacket.cpp" + "ThinFenceTile.cpp" + "ThreadName.cpp" + "ThrownEgg.cpp" + "TickNextTickData.cpp" + "Tile.cpp" + "TileEventPacket.cpp" + "TileItem.cpp" + "TileEntity.cpp" + "TilePlanterItem.cpp" + "TilePos.cpp" + "TileUpdatePacket.cpp" + "TntTile.cpp" + "ToolRecipies.cpp" + "TopSnowTile.cpp" + "TorchTile.cpp" + "TransparentTile.cpp" + "TrapDoorTile.cpp" + "TrapMenu.cpp" + "TreeFeature.cpp" + "TreeTileItem.cpp" + "UpdateMobEffectPacket.cpp" + "UpdateProgressPacket.cpp" + "UseItemPacket.cpp" + "Vec3.cpp" + "VillageFeature.cpp" + "VillagePieces.cpp" + "Villager.cpp" + "VineTile.cpp" + "VoronoiZoom.cpp" + "WaterColor.cpp" + "WaterLevelChunk.cpp" + "WaterlilyFeature.cpp" + "WaterLilyTile.cpp" + "WaterLilyTileItem.cpp" + "WaterWorkerEnchantment.cpp" + "WeaponItem.cpp" + "WeaponRecipies.cpp" + "WeighedRandom.cpp" + "Wolf.cpp" + "TreeTile.cpp" + "WebTile.cpp" + "WorkbenchTile.cpp" + "ConsoleSaveFileInputStream.cpp" + "ConsoleSaveFileOutputStream.cpp" + "Zombie.cpp" + "WaterAnimal.cpp" + "ZoomLayer.cpp" +)