Hytale Modding
Hytale Mod開発
確立された情報

サーバーのコードの洞察

Slikey氏は、2025年12月15日にサーバーのコードについていくつかの洞察を共有した。 この文書では、その議論からの主要なポイントと要点について説明します。

注意

以下の情報は、2025年12月15日にHytale Discord Serverに掲載された、技術ディレクターのSlikey氏が共有した洞察に基づいています。 これは、サーバコードのアーキテクチャとプラグインの機能の概要を提供します。

この文書のほとんどはSlikey氏からの直接の引用であり、最小限のコメントが付けられています。 共有された情報をありのままに保存することを重要視しています。

サーバーのソース コード

サーバーは、共有ソースとしてリリースされます - 私達は、難読化無し・コメント付きでソースコードを入手出来ます。

ライセンス

Hytaleの利用規約(ライセンス)は、サーバーのソースコードをあらゆる Hytaleに関連するもの に許可しています。サーバーやソースコードを自身のゲームを作るのに利用したり、アルゴリズムを売ったりすることは禁止されています。

権限システム

Hytale Moddingサーバーで尋ねられた後、リードアーキテクトのZeroは次のように返信しました。

非常に基本的な物なので、あまり期待して欲しくないですが、権限システムが組み込まれています。 また、独自のバックエンドの実装もサポートします。 例: データベースに保存したい場合。

権限システムのコードスニペット

ワールド生成の実装

次の文章は、リードアーキテクトのZeroによるものです。

プラグインにより、完全にカスタムしたワールド生成を簡単に実装出来ます。 地形を生成するための完全に異なる設定やロジックが必要な場合は、プラグインに実装してワールドでそれを利用するように設定できます。プレハブをロードするためのものや再利用可能なものが既存のワールド生成のコードにありますが、地形生成そのものについての詳細なAPIはありません。

public interface IWorldGenProvider {
    BuilderCodecMapCodec<IWorldGenProvider> CODEC = new BuilderCodecMapCodec<>("Type", true);

    IWorldGen getGenerator() throws WorldGenLoadException;
}
public interface IWorldGen {
    @Nullable
    WorldGenTimingsCollector getTimings();

    CompletableFuture<GeneratedChunk> generate(int seed, long index, int x, int z, LongPredicate stillNeeded);

    @Deprecated
    Transform[] getSpawnPoints(int seed);

    @Nonnull
    default ISpawnProvider getDefaultSpawnProvider(int seed) {
        return new FitToHeightMapSpawnProvider(new IndividualSpawnProvider(getSpawnPoints(seed)));
    }

    default void shutdown() {}
}

サーバーのコードスニペット

彼らが作ったプラグインからのコードスニペットも共有されました。 以下のスニペットは、技術ディレクターであるSlikeyのものからの引用です。

BlockSpawner プラグイン

"BlockSpawner"という、設定されたルールに基づいて世界に配置されたときに「ランダム」なブロックに変わる簡単なプラグインのコードスニペットを共有します。

一般的に、ここにはより多くのコードがありますが、それはアセットシステムとプラグインのレイアウトに関するものです。 アセットシステムがデータをシリアライズおよびデシリアライズするために使用する「コーデック」を定義していることがわかります。 これらのコーデックを使用してスキーマを生成できます。 例えばサーバーに接続してアセットエディタを開くと、サーバーはアセットのスキーマを自動的に送信します。その結果、サーバー側で定義されているすべてのアセットタイプ(自分で定義したものも含めて)が、クライアント側のアセットエディタにそのまま反映されます。特別な設定や作業は不要で、定義したアセットを作成するためのエディタUIをすぐに利用できます。

Block Spawner Code 1 Block Spawner Code 2 Block Spawner Code 3 Block Spawner Manifest

この部分は、言語キーを格納するために定数を使用する方法も少し示していると思います - Slikey (下の画像を参照)

言語キーを格納するための定数

チャンクのストレージプロバイダーを完全にカスタマイズすることもできます。例として、ディスクからチャンクを一切読み込まない空のストレージプロバイダーを作ります。 例えば MySQLChunkStorageProvider (MySQLを利用したチャンクのストレージプロバイダー) を追加することができるし、ワールド生成でも同様です。ワールド生成器を作るためにはこのインターフェースを実装するだけです。 - slikey

Chunks 1 Chunks 2 Chunks 3

つまり、使える武器の定義はすべて公開しているので、実際に見てもらえれば分かると思います。もちろん制限は見つかるでしょうが、変更や調整を行える余地は十分にあります。ただ、この仕組み自体を作るのは正直かなり大変で、今後さらに多くの QoL 改善が必要だと考えています。

Weapons 1