リソースパック処理
minecraft/resource パッケージは、Bedrock Edition 用のリソースパック(.mcpack や .zip、解凍済みディレクトリ)の読み込み、クライアントへの配信、およびクライアント接続時の自動ダウンロードを管理します。
リソースパックの読み込み (resource.ReadPath)
ファイルパスまたはディレクトリを指定してリソースパックを読み込みます。
go
package main
import (
"log"
"github.com/sandertv/gophertunnel/minecraft/resource"
)
func loadPacks() []*resource.Pack {
pack, err := resource.ReadPath("packs/custom_textures.mcpack")
if err != nil {
log.Fatalf("パック読み込み失敗: %v", err)
}
log.Printf("パック名: %s, UUID: %s, バージョン: %s",
pack.Name(), pack.UUID(), pack.Version())
// 暗号化されたリソースパックの場合、復号キーを設定
// pack = pack.WithContentKey("secret-key")
return []*resource.Pack{pack}
}サーバーでのリソースパック配信
ListenConfig の ResourcePacks に渡すことで、参加してきたクライアントに対してパックのダウンロードと適用を要求できます。
go
packs := loadPacks()
lc := minecraft.ListenConfig{
ResourcePacks: packs,
// 参加にパック適用を必須とするか
TexturePacksRequired: true,
}
listener, err := lc.Listen("raknet", "0.0.0.0:19132")クライアント側のリソースパックキャッシュ
クライアントとしてサーバーに接続する際、毎回大きなリソースパックをダウンロードすると接続に時間がかかります。 ResourcePackCache を設定することで、過去にダウンロードしたパックをローカルディスクに保存・再利用できます。
go
dialer := minecraft.Dialer{
// リソースパックのローカルキャッシュディレクトリを指定
ResourcePackCache: minecraft.NewResourcePackCache("cached_packs"),
// 特定のパックをダウンロードしたくない場合のフィルタ
DownloadResourcePack: func(id uuid.UUID, version string, current, total int) bool {
// 全パックをダウンロード許可
return true
},
}