によって HytaleCharts Team カテゴリー: technical :mins min 読み込み

包括的な API リファレンスによる、マスター・ヒタルサーバーの開発 PlayerConnectについて イベント, PlayerDisconnect イベント、チャットフォーマット、コマンド登録、レガシーエンジンのJavaベースのアーキテクチャを使用して最初のプラグインを作成するメッセージクラス.

Hytale Server アーキテクチャの理解 Hytale サーバ API は、Minecraft サーバー プラグインを扱う人達に精通した、堅牢な Java ベースのアーキテクチャーで構築されています。 レガシーエンジンに戻ると、開発者は、クロスプラットフォームの複雑性を優先する成熟したテスト済みのコードベースにアクセスできるようになりました。 サーバの心臓部では、com.hypixel.hytale.server.coreパッケージを置き、すべてのサーバー側の操作の基礎を提供します。 プレイヤー管理、ワールドハンドリング、イベントディスパッチ、コマンド処理を含みます。 プレイヤー・コネクション・イベント:参加・退去の処理 サーバープラグインの最も一般的な要件の1つは、参加または退去するプレーヤーに応答しています。 Hytale APIは、この目的のために2つの重要なイベントを提供します。 PlayerConnectイベント プレイヤーがサーバーに接続すると、このイベントはプレイヤーの参照にアクセスし、プレイヤーが世界中に飛び込む前にアクセスします。 主な特性: playerRef - UUID、ユーザー名、ネットワーク情報を含む PlayerRef インスタンス player - 世界を代表するプレイヤーの実体 world - 彼らが参加している世界インスタンス holder - コンポーネントアクセスのエンティティティティストアホルダー 他のイベントとは異なり、PlayerConnect イベントは は cancellable ではありません。 プレイヤーが参加を防止する必要がある場合は、代わりに認証レイヤーでこれを処理する必要があります。 eventRegistry.register(PlayerConnectEvent::class.java) { イベント -> val プレイヤー = event.playerRef logger.info("Player に接続: ${player.username}") // // // // 歓迎メッセージを送る player.sendMessage(Message.raw(「サーバーに来る!」)) お問い合わせ PlayerDisconnectイベント プレイヤーがサーバーを離れるときにトリガーされたこのイベントは、why に関する重要なコンテキストを含みます。 それらは切断しました: playerRef - プレイヤーのリファレンス disconnectReason - タイムアウト、キック、終了、またはサーバーのシャットダウンを示す列 このイベントは、ネットワークレベルでの接続が既に発生しているため、非キャンセルです。 メッセージクラス:リッチテキストフォーマット 洗練されたチャット体験を作成するためのサーバー所有者は、メッセージクラスで重要な時間を費やします。 コアメッセージングパッケージに位置し、フォーマットされたテキストを作成するための流暢なAPIを提供します。 基本メッセージ作成 ///>>>>>/>>>/>>>>>>>>>/>>>>>>>>>>>>>>>>>/>/>/>>>>>>>>/>>>>/>>>/>/> 簡単なテキストメッセージ val msg = Message.raw(「こんにちは、世界!」) // // // // 色のフォーマットを使って val スタイル = Message.raw(「重要!」) .color("赤") .bold(true) .italic(偽) .monospace(true) パラメータ置換 動的コンテンツの場合、パラメータプレースホルダーを使用します。 val 歓迎 = Message.raw("Welcome, {name})! {coins}コインがあります。" .param("name", player.username") .param("coins", playerData.coinBalance.toString() クリック可能なリンク メッセージはクリック可能なハイパーリンクを含むことができます: val link = Message.raw("ここをクリックして当社のウェブサイトを訪問する") .link("https://example.com") イベント登録パターン Hytaleイベントシステムは、同期イベントと非同期イベント処理の両方をサポートし、開発者のパフォーマンス要件に基づいて柔軟に対応します。 同期 登録 サーバスレッドで即時処理が必要なイベントの場合: eventRegistry.register(PlayerInteractEvent::class.java) { イベント -> もし(event.action) タイプ == ActionType.RIGHT_CLICK { // // // // 相互作用を処理する イベント.setCancelled(true) お問い合わせ お問い合わせ 非同期 登録 メインスレッドから処理できるイベント(チャットのモデレーションのような): eventRegistry.registerAsync(PlayerChatEvent:class.java) { 未来 → 未来。 その後、Apply { イベント -> // // // // async チャットフィルタリングを実行する もし(containsBannedWords(event.content)) お問い合わせ イベント.setCancelled(true) お問い合わせ イベント お問い合わせ お問い合わせ コンモン イベント参照テーブル サーバ開発で最も頻繁に使用されるイベントのクイックリファレンス: イベント名 キープロパティ PlayerConnectEvent NoplayerRef、プレーヤー、世界、ホールダー PlayerDisconnectEvent NoplayerRef、disconnectReason PlayerChatEventsender, target, content, formatter PlayerInteractEventplayer、アクション タイプ、項目InHand、 targetBlock、 targetEntity PlayerDeathEvent Noplayer PlayerRespawnEvent Noplayer BreakBlockEventitem InHand、targetBlock、blockType PlaceBlockEventitemInHand、 targetBlock、rotation DamageBlockEventitem InHand, targetBlock, currentDamage, ダメージ DropItemEventitem, Location CraftRecipeEvent はい カスタムコマンドのビルド コマンドシステムは、プレイヤーがチャットで実行できるスラッシュコマンドを登録することができます。 基本コマンドの実装 クラス MyCommand : コマンド { オーバーライド楽しいgetName(): 文字列 = "mycommand" オーバーライド楽しい実行(ベンダー: CommandSender、args: Array) { sender.sendMessage(Message.raw(「カスタムコマンドからこんにちは!」))) お問い合わせ お問い合わせ // プラグインのセットアップフェーズで登録 commandRegistry.registerCommand(MyCommand() Commanagerを使う コマンドをプログラム的に実行することもできます: val コマンドマネージャー = CommandManager.get() commandManager.handleCommand(sender, "time day") プルギンのライフサイクルと構造 すべてのHytaleサーバープラグインは、必須のレジストリとライフサイクルのホックを提供するJavaPluginベースクラスを拡張します。 プルギンのライフサイクルフェーズ 建設 - プラグインクラスのインスタンス化 PreLoad - サーバー開始前の非同期初期化 Setup - コンポーネント、イベント、コマンドの登録 Start - サーバーはプレーヤーを受け入れる準備ができています シャットダウン - サーバーが停止する前にクリーンアップ キープラグインプロパティ ///>>>>>/>>>/>>>>>>>>>/>>>>>>>>>>>>>>>>>/>/>/>>>>>>>>/>>>>/>>>/>/> プラグインクラスで利用可能 ロガー: ハイターロガー // 記録機能 マニフェスト: PluginManifest? // // // // manifestファイルからのプラグインメタデータ eventRegistry: イベントRegistry // イベントリスナー登録 commandRegistry: コマンドレジストリ // コマンドの登録 データデータ ディレクトリ: Path // プラグインの保存場所 TaskRegistry: TaskRegistry // タスク管理のスケジュール 設定ヘルパー Plugins は JSON 設定ファイルを簡単に読み込むことができます: ///>>>>>/>>>/>>>>>>>>>/>>>>>>>>>>>>>>>>>/>/>/>>>>>>>>/>>>>/>>>/>/> デフォルト config.json を使用する val 設定: Config = withConfig(MyConfigClass.CODEC) の設定 // カスタムファイル名を使う val config: Config = withConfig("custom-name.json", MyConfigClass.CODEC) プレイヤーと働く PlayerRef クラスは、接続されたプレーヤーとやり取りするための主要なインターフェイスです。 プレイヤーのアイデンティティと場所 val プレーヤー: PlayerRef = event.playerRef // アイデンティティ val uuid: UUID = player.uuid val名: 文字列 = player.username val 言語: 文字列 = player.language // ポジション val 変換: 変換 = player.transform valworldUuid: UUID = player.worldUuid val headRotation: Vector3f = player.headRotation プレイヤーエンティティーアクセス 在庫管理のようなより深いやり取りのために、プレイヤーの実体にアクセスして下さい: val playerEntity: Player = player.entity // 在庫操作 val 在庫: 在庫 = playerEntity.inventory PlayerEntity.sendInventory() は、 // UI マネージャー val ホットバー = playerEntity.hotbarManager val ウィンドウ = playerEntity.windowManager val ページ = playerEntity.pageManager val hud = プレイヤーEntity.hudManager // 権限 val canBuild: Boolean = playerEntity.hasPermission("server.build") 世界と宇宙のマネジメント ユニバースシングルトンは、すべての世界と接続されたプレーヤーへのアクセスを提供します。 val ユニバース = Universe.get() // // // // プレイヤーアクセス val allPlayers: List = ユニバース.players val プレイヤー カウント: Int = Universe.playerCount val の特定のプレーヤー: PlayerRef ? = Universe.getPlayer(uuid) // 世界アクセス バルワールド: Map = 宇宙.worlds val デフォルト 世界:世界? = 宇宙.defaultWorld val の特定の 世界:世界? = 宇宙.getWorld("my-world") // 世界経営 val newWorld: CompletableFuture = Universe.addWorld("new-world") 読み込まれるval: コンパイル可能 Future = Universe.loadWorld("existing-world") 3つの安全警告 コンポーネントアクセスは、世界スレッドで行われる必要があります。 常に実行ブロックの操作をラップ: world.execute お問い合わせ // // // // 安全なコンポーネントアクセスはこちら val 実体 = world.getEntities() お問い合わせ サーバー開発者向け次のステップ この API リファレンスを基盤として、Hytale サーバープラグインの構築を開始できます。 次を探索する主要なリソース: 先進的なエンティティティ・コンポーネント・システム(ECS)のマニピュレーション NPC、ポータル、Questシステムなどの組み込みモジュール ゲーム動作のビジュアルスクリプトシステム カスタムパケット処理のためのネットワークプロトコル Hytale が初期アクセスを経由して動くように、API は進化する可能性があることを覚えておいてください。 コミュニティと公式のドキュメントと連携して開発します。