Skip to content

Instantly share code, notes, and snippets.

@nyanshiba
Created August 22, 2019 20:17
Show Gist options
  • Save nyanshiba/cc389af19f9fa629561feb42c41f7ebc to your computer and use it in GitHub Desktop.
Save nyanshiba/cc389af19f9fa629561feb42c41f7ebc to your computer and use it in GitHub Desktop.
Minecraftのjarファイルでは手に入らない音声ファイル等を抽出するPowerShellスクリプト
#190823
#設定
$Settings =
@{
#インデックスファイルの場所
JsonPath = "$env:AppData\.minecraft\assets\indexes\1.14.json"
#オブジェクトファイルのルートディレクトリ
ObjectsPath = "$env:AppData\.minecraft\assets\objects"
#出力先ディレクトリ
ExtractPath = "$env:USERPROFILE\Desktop\MCAssetsExtr"
#抽出するファイルの条件
Sort = "*.*" #すべてのファイル
#Sort = "*.ogg" #音声ファイルのみ
}
#抽出したいOggが記述されているJsonを取得
$Objects = (Get-Content $Settings.JsonPath | ConvertFrom-Json).objects
#Nameがソート条件に一致するオブジェクトの名前を抽出 PSCustomObjectはArrayと違い扱いが少し複雑
($Objects | Get-Member -Name $Settings.Sort).Name | ForEach-Object {
$_
#Copy-Item前にディレクトリ作成
$Null = New-Item "$(Split-Path "$($Settings.ExtractPath)\$_" -Parent)" -itemType Directory -ErrorAction SilentlyContinue
#ファイルを取得、読める名前でコピー
Copy-Item -LiteralPath "$($Settings.ObjectsPath)\$(($Objects."$_".hash).Substring(0,2))\$($Objects."$_".hash)" -Destination "$($Settings.ExtractPath)\$_" -ErrorAction SilentlyContinue
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment