Skip to content

リソースパック処理

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}
}

サーバーでのリソースパック配信

ListenConfigResourcePacks に渡すことで、参加してきたクライアントに対してパックのダウンロードと適用を要求できます。

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
    },
}

Released under the MIT License.