From 92e751ac6bc9f1cf0a6f3f5c60c1fee401028df1 Mon Sep 17 00:00:00 2001 From: BlueishSapphire Date: Thu, 5 Mar 2026 23:26:55 -0500 Subject: [PATCH] Update the build system to create arc files --- CMakeLists.txt | 55 +---- cmake/AssetSources.cmake | 460 +++++++++++++++++++++++++++++++++++++++ cmake/CopyAssets.cmake | 88 ++++++++ 3 files changed, 549 insertions(+), 54 deletions(-) create mode 100644 cmake/AssetSources.cmake create mode 100644 cmake/CopyAssets.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index dbdef3f63..6d73753c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,59 +88,6 @@ target_link_libraries(MinecraftClient PRIVATE > ) -if(CMAKE_HOST_WIN32) - message(STATUS "Starting redist copy...") - execute_process( - COMMAND robocopy.exe - "${CMAKE_CURRENT_SOURCE_DIR}/x64/Release" - "${CMAKE_CURRENT_BINARY_DIR}" - /S /MT /R:0 /W:0 /NP - ) - message(STATUS "Starting asset copy...") - execute_process( - COMMAND robocopy.exe - "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client" - "${CMAKE_CURRENT_BINARY_DIR}" - /S /MT /R:0 /W:0 /NP - /XF "*.cpp" "*.c" "*.h" "*.hpp" "*.asm" - "*.xml" "*.lang" "*.vcxproj" "*.vcxproj.*" "*.sln" - "*.docx" "*.xls" - "*.bat" "*.cmd" "*.ps1" "*.py" - "*Test*" - /XD "Durango*" "Orbis*" "PS*" "Xbox" - ) - message(STATUS "Patching Windows64Media...") - execute_process( - COMMAND robocopy.exe - "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/DurangoMedia" - "${CMAKE_CURRENT_BINARY_DIR}/Windows64Media" - /S /MT /R:0 /W:0 /NP - /XF "*.h" "*.xml" "*.lang" "*.bat" - ) -elseif(CMAKE_HOST_UNIX) - message(STATUS "Starting redist copy...") - execute_process( - COMMAND rsync -av "${CMAKE_CURRENT_SOURCE_DIR}/x64/Release/" "${CMAKE_CURRENT_BINARY_DIR}/" - ) - message(STATUS "Starting asset copy...") - execute_process( - COMMAND rsync -av - "--exclude=*.cpp" "--exclude=*.c" "--exclude=*.h" "--exclude=*.hpp" "--exclude=*.asm" - "--exclude=*.xml" "--exclude=*.lang" "--exclude=*.vcxproj" "--exclude=*.vcxproj.*" "--exclude=*.sln" - "--exclude=*.docx" "--exclude=*.xls" - "--exclude=*.bat" "--exclude=*.cmd" "--exclude=*.ps1" "--exclude=*.py" - "--exclude=*Test*" - "--exclude=Durango*" "--exclude=Orbis*" "--exclude=PS*" "--exclude=Xbox" - "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/" "${CMAKE_CURRENT_BINARY_DIR}/" - ) - message(STATUS "Patching Windows64Media...") - execute_process( - COMMAND rsync -av - "--exclude=*.h" "--exclude=*.xml" "--exclude=*.lang" "--exclude=*.bat" - "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/DurangoMedia/" "${CMAKE_CURRENT_BINARY_DIR}/Windows64Media/" - ) -else() - message(FATAL_ERROR "Redist and asset copying is only supported on Windows (Robocopy) and Unix systems (rsync).") -endif() +include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CopyAssets.cmake") set_property(DIRECTORY PROPERTY VS_STARTUP_PROJECT MinecraftClient) diff --git a/cmake/AssetSources.cmake b/cmake/AssetSources.cmake new file mode 100644 index 000000000..cc1f20659 --- /dev/null +++ b/cmake/AssetSources.cmake @@ -0,0 +1,460 @@ +set(ASSETS_COMMON + "Graphics/MinecraftIcon.png" + "Graphics/SaveChest.png" + "Graphics/TexturePackIcon.png" + "HTMLColours.col" + "languages.loc" + "splashes.txt" +) + +set(ASSETS_1080P + "AnvilMenu1080.swf" + "AnvilMenuSplit1080.swf" + "BeaconMenu1080.swf" + "BeaconMenuSplit1080.swf" + "BrewingStandMenu1080.swf" + "BrewingStandMenuSplit1080.swf" + "ChestLargeMenu1080.swf" + "ChestLargeMenuSplit1080.swf" + "ChestMenu1080.swf" + "ChestMenuSplit1080.swf" + "ComponentLogo1080.swf" + "ComponentLogoSplit1080.swf" + "Controls1080.swf" + "ControlsRemotePlay1080.swf" + "ControlsSplit1080.swf" + "Crafting2x2Menu1080.swf" + "Crafting2x2MenuSplit1080.swf" + "Crafting3x3Menu1080.swf" + "Crafting3x3MenuSplit1080.swf" + "CreateWorldMenu1080.swf" + "CreativeMenu1080.swf" + "CreativeMenuSplit1080.swf" + "Credits1080.swf" + "DLCMainMenu1080.swf" + "DLCOffersMenu1080.swf" + "DeathMenu1080.swf" + "DeathMenuSplit1080.swf" + "DispenserMenu1080.swf" + "DispenserMenuSplit1080.swf" + "EULA1080.swf" + "EnchantingMenu1080.swf" + "EnchantingMenuSplit1080.swf" + "EndPoem1080.swf" + "FireworksMenu1080.swf" + "FireworksMenuSplit1080.swf" + "FullscreenProgress1080.swf" + "FullscreenProgressSplit1080.swf" + "FurnaceMenu1080.swf" + "FurnaceMenuSplit1080.swf" + "HUD1080.swf" + "HUDSplit1080.swf" + "HelpAndOptionsMenu1080.swf" + "HelpAndOptionsMenuSplit1080.swf" + "HopperMenu1080.swf" + "HopperMenuSplit1080.swf" + "HorseInventoryMenu1080.swf" + "HorseInventoryMenuSplit1080.swf" + "HowToPlay1080.swf" + "HowToPlayMenu1080.swf" + "HowToPlayMenuSplit1080.swf" + "HowToPlaySplit1080.swf" + "InGameHostOptions1080.swf" + "InGameHostOptionsSplit1080.swf" + "InGameInfoMenu1080.swf" + "InGameInfoMenuSplit1080.swf" + "InGamePlayerOptions1080.swf" + "InGamePlayerOptionsSplit1080.swf" + "InGameTeleportMenu1080.swf" + "InGameTeleportMenuSplit1080.swf" + "Intro1080.swf" + "InventoryMenu1080.swf" + "InventoryMenuSplit1080.swf" + "JoinMenu1080.swf" + "Keyboard1080.swf" + "KeyboardSplit1080.swf" + "LanguagesMenu1080.swf" + "LanguagesMenuSplit1080.swf" + "LaunchMoreOptionsMenu1080.swf" + "LeaderboardMenu1080.swf" + "LoadMenu1080.swf" + "LoadOrJoinMenu1080.swf" + "MainMenu1080.swf" + "MenuBackground1080.swf" + "MessageBox1080.swf" + "MessageBoxSplit1080.swf" + "NewUpdateMessage1080.swf" + "Panorama1080.swf" + "PanoramaSplit1080.swf" + "PauseMenu1080.swf" + "PauseMenuSplit1080.swf" + "PressStartToPlay1080.swf" + "QuadrantSignin1080.swf" + "ReinstallMenu1080.swf" + "ReinstallMenuSplit1080.swf" + "SaveMenu1080.swf" + "SaveMessage1080.swf" + "SettingsAudioMenu1080.swf" + "SettingsAudioMenuSplit1080.swf" + "SettingsControlMenu1080.swf" + "SettingsControlMenuSplit1080.swf" + "SettingsGraphicsMenu1080.swf" + "SettingsGraphicsMenuSplit1080.swf" + "SettingsMenu1080.swf" + "SettingsMenuSplit1080.swf" + "SettingsOptionsMenu1080.swf" + "SettingsOptionsMenuSplit1080.swf" + "SettingsUIMenu1080.swf" + "SettingsUIMenuSplit1080.swf" + "SignEntryMenu1080.swf" + "SignEntryMenuSplit1080.swf" + "SkinSelectMenu1080.swf" + "SkinSelectMenuSplit1080.swf" + "Timer1080.swf" + "TimerSplit1080.swf" + "ToolTips1080.swf" + "ToolTipsSplit1080.swf" + "TradingMenu1080.swf" + "TradingMenuSplit1080.swf" + "TutorialPopup1080.swf" + "TutorialPopupSplit1080.swf" +) + +set(ASSETS_DEBUG_1080P + "DebugCreateSchematic1080.swf" + "DebugMenu1080.swf" + "DebugOptionsMenu1080.swf" + "DebugSetCamera1080.swf" + "DebugUIConsoleComponent1080.swf" + "DebugUIMarketingGuide1080.swf" +) + +set(ASSETS_720P + "AnvilMenu720.swf" + "AnvilMenuSplit720.swf" + "BeaconMenu720.swf" + "BeaconMenuSplit720.swf" + "BrewingStandMenu720.swf" + "BrewingStandMenuSplit720.swf" + "ChestLargeMenu720.swf" + "ChestLargeMenuSplit720.swf" + "ChestMenu720.swf" + "ChestMenuSplit720.swf" + "ComponentLogo720.swf" + "ComponentLogoSplit720.swf" + "Controls720.swf" + "ControlsSplit720.swf" + "Crafting2x2Menu720.swf" + "Crafting2x2MenuSplit720.swf" + "Crafting3x3Menu720.swf" + "Crafting3x3MenuSplit720.swf" + "CreateWorldMenu720.swf" + "CreativeMenu720.swf" + "CreativeMenuSplit720.swf" + "Credits720.swf" + "DLCMainMenu720.swf" + "DLCOffersMenu720.swf" + "DeathMenu720.swf" + "DeathMenuSplit720.swf" + "DispenserMenu720.swf" + "DispenserMenuSplit720.swf" + "EULA720.swf" + "EnchantingMenu720.swf" + "EnchantingMenuSplit720.swf" + "EndPoem720.swf" + "FireworksMenu720.swf" + "FireworksMenuSplit720.swf" + "FullscreenProgress720.swf" + "FullscreenProgressSplit720.swf" + "FurnaceMenu720.swf" + "FurnaceMenuSplit720.swf" + "GamertagSplit720.swf" + "HUD720.swf" + "HUDSplit720.swf" + "HelpAndOptionsMenu720.swf" + "HelpAndOptionsMenuSplit720.swf" + "HopperMenu720.swf" + "HopperMenuSplit720.swf" + "HorseInventoryMenu720.swf" + "HorseInventoryMenuSplit720.swf" + "HowToPlay720.swf" + "HowToPlayMenu720.swf" + "HowToPlayMenuSplit720.swf" + "HowToPlaySplit720.swf" + "InGameHostOptions720.swf" + "InGameHostOptionsSplit720.swf" + "InGameInfoMenu720.swf" + "InGameInfoMenuSplit720.swf" + "InGamePlayerOptions720.swf" + "InGamePlayerOptionsSplit720.swf" + "InGameTeleportMenu720.swf" + "InGameTeleportMenuSplit720.swf" + "Intro720.swf" + "InventoryMenu720.swf" + "InventoryMenuSplit720.swf" + "JoinMenu720.swf" + "LanguagesMenu720.swf" + "LanguagesMenuSplit720.swf" + "LaunchMoreOptionsMenu720.swf" + "LeaderboardMenu720.swf" + "LoadMenu720.swf" + "LoadOrJoinMenu720.swf" + "MainMenu720.swf" + "MenuBackground720.swf" + "MessageBox720.swf" + "MessageBoxSplit720.swf" + "NewUpdateMessage720.swf" + "Panorama720.swf" + "PanoramaSplit720.swf" + "PauseMenu720.swf" + "PauseMenuSplit720.swf" + "PressStartToPlay720.swf" + "QuadrantSignin720.swf" + "ReinstallMenu720.swf" + "ReinstallMenuSplit720.swf" + "SaveMessage720.swf" + "SettingsAudioMenu720.swf" + "SettingsAudioMenuSplit720.swf" + "SettingsControlMenu720.swf" + "SettingsControlMenuSplit720.swf" + "SettingsGraphicsMenu720.swf" + "SettingsGraphicsMenuSplit720.swf" + "SettingsMenu720.swf" + "SettingsMenuSplit720.swf" + "SettingsOptionsMenu720.swf" + "SettingsOptionsMenuSplit720.swf" + "SettingsUIMenu720.swf" + "SettingsUIMenuSplit720.swf" + "SignEntryMenu720.swf" + "SignEntryMenuSplit720.swf" + "SkinSelectMenu720.swf" + "SkinSelectMenuSplit720.swf" + "Timer720.swf" + "ToolTips720.swf" + "ToolTipsSplit720.swf" + "TradingMenu720.swf" + "TradingMenuSplit720.swf" + "TrialExitUpsell720.swf" + "TutorialPopup720.swf" + "TutorialPopupSplit720.swf" +) + +set(ASSETS_DEBUG_720P + "DebugCreateSchematic720.swf" + "DebugMenu720.swf" + "DebugOptionsMenu720.swf" + "DebugSetCamera720.swf" + "DebugUIConsoleComponent720.swf" + "DebugUIMarketingGuide720.swf" +) + +set(ASSETS_480P + "AnvilMenu480.swf" + "BeaconMenu480.swf" + "BrewingStandMenu480.swf" + "ChestLargeMenu480.swf" + "ChestMenu480.swf" + "ComponentLogo480.swf" + "Controls480.swf" + "Crafting2x2Menu480.swf" + "Crafting3x3Menu480.swf" + "CreateWorldMenu480.swf" + "CreativeMenu480.swf" + "Credits480.swf" + "DLCMainMenu480.swf" + "DLCOffersMenu480.swf" + "DeathMenu480.swf" + "DispenserMenu480.swf" + "EULA480.swf" + "EnchantingMenu480.swf" + "EndPoem480.swf" + "FireworksMenu480.swf" + "FullscreenProgress480.swf" + "FurnaceMenu480.swf" + "HUD480.swf" + "HelpAndOptionsMenu480.swf" + "HopperMenu480.swf" + "HorseInventoryMenu480.swf" + "HowToPlay480.swf" + "HowToPlayMenu480.swf" + "InGameHostOptions480.swf" + "InGameInfoMenu480.swf" + "InGamePlayerOptions480.swf" + "InGameTeleportMenu480.swf" + "Intro480.swf" + "InventoryMenu480.swf" + "JoinMenu480.swf" + "LanguagesMenu480.swf" + "LaunchMoreOptionsMenu480.swf" + "LeaderboardMenu480.swf" + "LoadMenu480.swf" + "LoadOrJoinMenu480.swf" + "MainMenu480.swf" + "MenuBackground480.swf" + "MessageBox480.swf" + "NewUpdateMessage480.swf" + "Panorama480.swf" + "PauseMenu480.swf" + "PressStartToPlay480.swf" + "ReinstallMenu480.swf" + "SaveMessage480.swf" + "SettingsAudioMenu480.swf" + "SettingsControlMenu480.swf" + "SettingsGraphicsMenu480.swf" + "SettingsMenu480.swf" + "SettingsOptionsMenu480.swf" + "SettingsUIMenu480.swf" + "SignEntryMenu480.swf" + "SkinSelectMenu480.swf" + "Timer480.swf" + "ToolTips480.swf" + "TradingMenu480.swf" + "TrialExitUpsell480.swf" + "TutorialPopup480.swf" +) + +set(ASSETS_VITA + "AnvilMenuVita.swf" + "BeaconMenuVita.swf" + "BrewingStandMenuVita.swf" + "ChestLargeMenuVita.swf" + "ChestMenuVita.swf" + "ComponentLogoVita.swf" + "ControlsTVVita.swf" + "ControlsVita.swf" + "Crafting2x2MenuVita.swf" + "Crafting3x3MenuVita.swf" + "CreateWorldMenuVita.swf" + "CreativeMenuVita.swf" + "CreditsVita.swf" + "DLCMainMenuVita.swf" + "DLCOffersMenuVita.swf" + "DeathMenuVita.swf" + "DispenserMenuVita.swf" + "EULAVita.swf" + "EnchantingMenuVita.swf" + "EndPoemVita.swf" + "FireworksMenuVita.swf" + "FullscreenProgressVita.swf" + "FurnaceMenuVita.swf" + "HUDVita.swf" + "HelpAndOptionsMenuVita.swf" + "HopperMenuVita.swf" + "HorseInventoryMenuVita.swf" + "HowToPlayMenuVita.swf" + "HowToPlayVita.swf" + "InGameHostOptionsVita.swf" + "InGameInfoMenuVita.swf" + "InGamePlayerOptionsVita.swf" + "InGameTeleportMenuVita.swf" + "IntroVita.swf" + "InventoryMenuVita.swf" + "JoinMenuVita.swf" + "LanguagesMenuVita.swf" + "LaunchMoreOptionsMenuVita.swf" + "LeaderboardMenuVita.swf" + "LoadMenuVita.swf" + "LoadOrJoinMenuVita.swf" + "MainMenuVita.swf" + "MenuBackgroundVita.swf" + "MessageBoxVita.swf" + "NewUpdateMessageVita.swf" + "PanoramaVita.swf" + "PauseMenuVita.swf" + "PressStartToPlayVita.swf" + "ReinstallMenuVita.swf" + "SaveMessageVita.swf" + "SettingsAudioMenuVita.swf" + "SettingsControlMenuVita.swf" + "SettingsGraphicsMenuVita.swf" + "SettingsMenuVita.swf" + "SettingsOptionsMenuVita.swf" + "SettingsUIMenuVita.swf" + "SignEntryMenuVita.swf" + "SkinSelectMenuVita.swf" + "TimerVita.swf" + "ToolTipsVita.swf" + "TradingMenuVita.swf" + "TutorialPopupVita.swf" +) + +set(ASSETS_HD + "skinHDGraphicsHud.swf" + "skinHDGraphicsInGame.swf" + "skinHDGraphicsLabels.swf" + "skinHDGraphics.swf" + "skinHDHud.swf" + "skinHDInGame.swf" + "skinHDLabels.swf" + "skinHD.swf" +) + +set(ASSETS_SD + "skinGraphicsHud.swf" + "skinGraphicsInGame.swf" + "skinGraphicsLabels.swf" + "skinGraphics.swf" + "skinHud.swf" + "skinInGame.swf" + "skinLabels.swf" +) + +set(ASSETS_WINDOWS64 + ${ASSETS_COMMON} + ${ASSETS_SD} + ${ASSETS_HD} + ${ASSETS_VITA} + ${ASSETS_480P} + ${ASSETS_720P} + ${ASSETS_DEBUG_720P} + ${ASSETS_1080P} + ${ASSETS_DEBUG_1080P} + "skin.swf" + "skinHDWin.swf" + "skinWin.swf" +) + +set(ASSETS_DURANGO + ${ASSETS_COMMON} + ${ASSETS_HD} + ${ASSETS_1080P} + ${ASSETS_DEBUG_1080P} + "DefaultSaveThumbnail64x64.png" + "skinHDDurango.swf" +) + +set(ASSETS_ORBIS + ${ASSETS_COMMON} + ${ASSETS_HD} + ${ASSETS_1080P} + ${ASSETS_DEBUG_1080P} + "DefaultOptionsImage228x128.png" + "DefaultSaveImage228x128.png" + "DefaultSaveThumbnail64x64.png" + "skinHDOrbis.swf" +) + +set(ASSETS_PSVITA + ${ASSETS_COMMON} + ${ASSETS_SD} + ${ASSETS_VITA} + ${ASSETS_DEBUG_720P} + "DefaultOptionsImage320x176.png" + "DefaultSaveImage320x176.png" + "DefaultSaveThumbnail64x64.png" + "skin.swf" + "skinVita.swf" +) + +set(ASSETS_PS3 + ${ASSETS_COMMON} + ${ASSETS_SD} + ${ASSETS_480P} + ${ASSETS_720P} + ${ASSETS_DEBUG_720P} + "DefaultOptionsImage320x176.png" + "DefaultSaveImage320x176.png" + "DefaultSaveThumbnail64x64.png" + "skin.swf" + "skinPS3.swf" +) diff --git a/cmake/CopyAssets.cmake b/cmake/CopyAssets.cmake new file mode 100644 index 000000000..0fc9bb9a0 --- /dev/null +++ b/cmake/CopyAssets.cmake @@ -0,0 +1,88 @@ +include("${CMAKE_CURRENT_SOURCE_DIR}/cmake/AssetSources.cmake") + +set(_project_dir "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client") + +function(copy_tree_if_exists src_rel dst_rel) + set(_src "${_project_dir}/${src_rel}") + set(_dst "${CMAKE_CURRENT_BINARY_DIR}/${dst_rel}") + + if(EXISTS "${_src}") + file(MAKE_DIRECTORY "${_dst}") + file(GLOB_RECURSE _files RELATIVE "${_src}" "${_src}/*") + + foreach(_file IN LISTS _files) # if not a source file + if(NOT _file MATCHES "\\.(cpp|c|h|hpp|xml|lang)$") + set(_full_src "${_src}/${_file}") + set(_full_dst "${_dst}/${_file}") + + if(IS_DIRECTORY "${_full_src}") + file(MAKE_DIRECTORY "${_full_dst}") + else() + get_filename_component(_dst_dir "${_full_dst}" DIRECTORY) + file(MAKE_DIRECTORY "${_dst_dir}") + configure_file(${_full_src} ${_full_dst} COPYONLY) + endif() + endif() + endforeach() + endif() +endfunction() + +function(make_media_archive arc_name) + set(_dst "${CMAKE_CURRENT_BINARY_DIR}/Common/Media/${arc_name}") + set(_src_dir "${CMAKE_CURRENT_SOURCE_DIR}/Minecraft.Client/Common/Media") + set(_src) + foreach(file IN LISTS ARGN) + list(APPEND _src "${_src_dir}/${file}") + endforeach() + + get_filename_component(_dst_dir "${_dst}" DIRECTORY) + file(MAKE_DIRECTORY "${_dst_dir}") + + add_custom_command( + OUTPUT "${_dst}.zip" + DEPENDS ${_src} + WORKING_DIRECTORY ${_src_dir} + COMMAND ${CMAKE_COMMAND} -E tar "cf" "${_dst}.zip" --format=zip -- ${ARGN} + COMMENT "Creating archive ${arc_name}.zip" + VERBATIM + ) + + add_custom_command( + OUTPUT "${_dst}.arc" + DEPENDS "${_dst}.zip" + COMMAND python "${CMAKE_CURRENT_SOURCE_DIR}/arcconv.py" "zip2arc" "${_dst}.zip" "${_dst}.arc" + COMMENT "Creating archive ${arc_name}.arc" + VERBATIM + ) + + add_custom_target("arc_${arc_name}" DEPENDS "${_dst}.arc") + add_dependencies(MinecraftClient "arc_${arc_name}") +endfunction() + +copy_tree_if_exists("Durango/Sound" "Windows64/Sound") +copy_tree_if_exists("music" "music") +copy_tree_if_exists("Windows64/GameHDD" "Windows64/GameHDD") +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("Windows64Media" "Windows64Media") + +make_media_archive("MediaWindows64" ${ASSETS_WINDOWS64}) +make_media_archive("MediaDurango" ${ASSETS_DURANGO}) +make_media_archive("MediaOrbis" ${ASSETS_ORBIS}) +make_media_archive("MediaPSVita" ${ASSETS_PSVITA}) +make_media_archive("MediaPS3" ${ASSETS_PS3}) + +# Some runtime code asserts if this directory tree is missing. +file(MAKE_DIRECTORY "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") + +set(CONFIGURATION $<$:Release>) + +# Runtime DLLs required at launch. +configure_file("Minecraft.Client/Windows64/Iggy/lib/redist64/iggy_w64.dll" "iggy_w64.dll" COPYONLY) +configure_file("Minecraft.Client/Windows64/Miles/lib/redist64/mss64.dll" "mss64.dll" COPYONLY) +