Machine
概要
Machine は、マシンの設計を設定に変えます。1 つの Machine Definition エントリが、マシンの 1 つの種類を記述します。入力、出力、燃料、アップグレードのスロット数、何を処理するか、燃料とエネルギーに何が必要か、見た目、ホログラムの内容、プレイヤーや島ごとに何台まで設置できるかです。拡張機能は定義を読み取り、設置されたすべてのコピーを動かします。かまど、粉砕機、丸石ジェネレーター、モブグラインダーは、コードではなくエントリです。
マシンは BTC Sky の島に属します。マシンは、プレイヤー自身の島にしか設置できず、プレイヤーごと、島ごとの制限があり、そのティアは島のリサーチツリーによって解放されます。エネルギーと液体は、島のディメンション内で共有されます。ジェネレーターとセルがプールを作り、そのディメンション内のリンクされたすべてのマシンが、そこから引き出します。
これは、BTC ビルドの TypeWriter(BTC Core、Paper または Folia)の非公開の拡張機能で、参考のために文書化されています。実行時は Folia に対応しており、スロットはメモリ上にキャッシュされ、非同期で保存されます。
機能
- マシンごとに 1 エントリ — スロット、レシピ、燃料、エネルギー、見た目、ホログラム、制限、オートメーションは、1 つの Machine Definition にまとまっています。
- 27 種類の処理タイプ — レシピマシン(精錬、粉砕、製材、混合、醸造など)、ストレージ、ロジスティクス、範囲マシン、エネルギーマシン、スポナー、グラインダーなど。
- 複数入力とランダムなレシピ — 追加の入力と出力、確率による出力、液体の入力と出力、カタログのアイテム、バニラのポーション。
- 共有のエネルギーグリッドと液体タンク — セル、ジェネレーター、タンクは、島のディメンションごとにプールされます。マシンをグリッドから切り離すこともできます。
- ティアとアップグレードモジュール — BTC Sky のリサーチで解放される恒久的なティアに加え、それと重なる、取り外し可能なモジュール(速度、収量、幸運、範囲、フィルター、容量、液体燃料)。
- 島の保護と制限 — 自分の島への設置、建築フラグ、プレイヤーごと、島ごと、ディメンションごとの上限。
- レッドストーンとホッパー — レッドストーンモード、排出、コンパレーター出力、完了パルス、ホッパーによる搬送。
- ホログラム — 各マシンの上に、進行状況バーを含むステータステキストを、完全な MiniMessage 形式で表示します。
- ダッシュボードメニュー — ディメンション内のすべてのマシンを、状態、エネルギー、リンク状態とともに一覧表示するメニュー。
- 永続化 — 設置されたマシン、インベントリ、エネルギー、進行状況は、Machine Data Artifact に保存されます。
インストール
- BTC ビルド(Paper または Folia 上の BTC Core)で TypeWriter をインストールします。
- Machine が依存する拡張機能をインストールします。Quest、RPGBundle(RPG Core)、BTC Sky、BTCMobs、GuiAndDialogs(共通の GUI レイヤー)です。
- 任意: 定義が
FURNITUREまたはCUSTOM_BLOCKの見た目を使う場合は CraftEngine を、プレースホルダーを使うには MiniPlaceholders をインストールします。 - Machine の JAR を
plugins/Typewriter/extensions/に置き、サーバーを再起動します。 - レッドストーンのコンパレーター出力と完了パルスは、BTC Core がレッドストーンの発信を提供している場合にのみ動作します。
はじめに
鉄鉱石をインゴットに精錬するかまどを作成します。
- TypeWriter の Web パネルで static ページを開き、Machine Data Artifact を追加します。設置されたすべてのマシンを保存します。その後で
artifactIdを変更しないでください。保存されたマシンが失われます。 - 同じページに Machine Definition を追加します。
nameを付け、processingTypeはSMELTINGのままにします。 storageRefに、手順 1 のアーティファクトを設定します。recipesに、1 つのレシピを追加します。inputMaterialをIRON_ORE、outputMaterialをIRON_INGOT、outputAmountを1、cookTimeを200(ティック。つまり 10 秒)にします。マシンが燃料を燃やす必要がある場合は、fuelCostを1以上のままにします。fuelTypesに、burnTimeとfuelValueを持つCOALを追加します。spawnItemに、プレイヤーがマシンを作るために設置するアイテムを設定します。定義にはspawnItemまたはvanillaBlockが必要で、ないとパブリッシュ時に拒否されます。- 任意: 島ごとのコピー数を制限するには、
perIslandLimitを設定します。 - パブリッシュします。自分の島にアイテムを設置すると、ホログラムとともにマシンが現れ、右クリックでメニューが開きます。
vanillaBlock(たとえば BREWING_STAND)を設定すると、定義がそのバニラのブロックを引き継ぎます。設置すると、代わりにマシンが作られます。バニラの変換は、設置制限の警告の対象外です。上限を設けると、バニラのブロックにも上限がかかってしまうためです。
仕組み
マシンは、定義(エントリ)とインスタンス(ワールドに設置されたコピー)からなります。定義は実行時に変化することはなく、各インスタンスが、自身のインベントリ、エネルギーの充電量、進行状況を保持します。
定義のモデル
Machine Definition のすべてのフィールドは、次のグループのいずれかに属します。
| グループ | フィールド | 制御する内容 |
|---|---|---|
| タイプ | processingType, behaviors | マシンが何をするか。behaviors は任意で、空の場合はタイプから導出されます。 |
| スロット | inputSlots, outputSlots, hasFuelSlot, upgradeSlots, essenceSlots, filterSlots, shearsSlots, maxPerSlot | インベントリのレイアウト。マシンのレイアウトは 54 スロットまでです。 |
| レシピと燃料 | recipes, fuelTypes | 何が入り、何が出てくるか、どれくらい時間がかかり、何が必要か。 |
| エネルギーと液体 | energyCapacity, energyGenerationPerTick, liquidTankCapacity, liquidFuelName | プールへの寄与と、液体の扱い。 |
| 進行 | tiers, allowedUpgrades, upgradeSpecs | 恒久的なティアと、取り外し可能なモジュール。 |
| 見た目 | spawnItem, visualType, furnitureId, customBlockId, alignWithPlayerYaw, hologram* | アイテム、モデル、ホログラム。 |
| 設置 | machineLimit, perIslandLimit, islandLimitUpgradeKey, dimensionScope, vanillaBlock | 誰が、どこに、何台まで設置できるか。 |
| オートメーション | hopperInterval, hopperTransferAmount, redstoneMode, ejectWhenPowered, redstoneComparatorOutput, redstonePulseOnComplete, redstonePulseTicks | ホッパーとレッドストーン。 |
| 永続化 | storageRef, guiStorageRef | インスタンスと STORAGE の内容が保存される場所。 |
処理タイプ
| ファミリー | タイプ |
|---|---|
recipes で動くレシピマシン | SMELTING, LIQUID_SMELTING, MULTI_SMELTING, GRINDING, SAWING, MIXING, COMPACTING, ENRICHING, RECYCLING, BREWING, AUTO_CRAFTING, INDUSTRIAL, GENERIC |
| 生産 | GENERATOR(入力なし。時間とともにレシピの出力を生産します。エネルギーコストは任意) |
| ストレージとロジスティクス | STORAGE, SORTING(各フィルタースロットが 1 つの面を担当)、CONVEYOR(方向のあるベルト) |
| 範囲マシン | VACUUM(vacuumRange)、SHEARING(shearRange、shearInterval、shearsSlots) |
| エネルギー | ENERGY_CELL, ENERGY_GENERATOR, CHARGING(chargeables、chargeRatePerSecond) |
| エンティティ | ASSEMBLER(assemblerMode が SPAWN または COLLECT、assemblerEntityType、assemblerMobId、assemblerIngredients、assemblerEnergyCost、assemblerInterval、assemblerRange、spawnerUpgrades)、MOB_GRINDING(grinder* のフィールド)、EXPERIENCE_TANK(experienceCapacity) |
| 特殊 | CONTROL_PANEL(panelOpenCommand / panelAltCommand を実行します。拾い上げることはできません)、TRANSMUTATION(アイテムの最も高いエンチャントを、経験値の瓶と引き換えに本へ移します) |
SMELTING と AUTO_CRAFTING は、レシピが宣言されていない場合、バニラのレシピにフォールバックします。レシピが 0 件の、その他のすべてのレシピマシンは、アイテムを受け付けたまま、永久に待機状態になります。拡張機能は、パブリッシュ時に警告をログに出力します。
エネルギーと液体
エネルギーは、ENERGY_CELL マシンに蓄えられます。島のディメンションのプールは、リンクされたセルの合計です。ENERGY_GENERATOR マシンがそこに供給し、消費側はそこから引き出します。マシンは、設置されるとすぐに、そのディメンションのグリッドに参加します。Machine Link ボタン(またはダッシュボード)で、グリッドから外したり、再び接続したりできます。オーバーワールドのセルが、ネザーのマシンに供給することはありません。
液体タンクも同じように動作します。リンクされたマシンは、そのディメンションのすべてのタンクに到達でき、リンクされていないマシンは、自身のタンクだけが見えます。レシピは、liquidInputName/liquidInputAmount と liquidOutputName/liquidOutputAmount で、液体を消費または生産します。
ティアとアップグレードモジュール
- ティア(
tiers)は恒久的です。各ティアは、それを解放する BTC Sky のリサーチノード(researchNode)を指定し、速度、収量、エネルギーの倍率、幸運の確率、追加スロットを設定します。ティアは昇順で列挙してください。解放された最も高いものが、島にあるそのマシンのすべてのコピーに適用されます。researchNodeが空のティアは、拒否されます。 - アップグレードモジュール(
upgradeSpecs)は、アップグレードスロットに入れるアイテムです。itemIdは BTC のアイテム ID(推奨)で、materialはフォールバックです。そのtype(SPEED、YIELD、ENERGY_EFFICIENCY、FORTUNE、RANGE、FILTER、CAPACITY、LIQUID_FUEL)は、allowedUpgradesに列挙されている場合にのみ有効です。 - ティアとモジュールは、掛け合わされます。
メニュー
Machine Menu は、共通の GUI 拡張機能のレイアウト(layoutPool、mainLayoutId、inventoryRows)で作られた GUI です。buttonType が Machine のボタンであるレイアウトのアイテムは、ライブデータで埋められます。
| ボタンタイプ | 効果 |
|---|---|
MACHINE_OPEN, MACHINE_SMELT, MACHINE_COLLECT, MACHINE_STATUS, MACHINE_FUEL | 標準的なマシンのアクションとステータス表示。 |
MACHINE_LINK | マシンを、ディメンションのグリッドにリンクする、またはリンクを解除します。 |
MACHINE_PICKUP | 開いているマシンを削除し、アイテムとして返します。 |
NAV_BACK, NAV_CLOSE | 戻る、または閉じる。 |
MACHINE_GRID_INFO | ディメンションの概要: マシン数、蓄えられたエネルギー、容量、生産量、消費量、収支。 |
MACHINE_ENTRY | タグ付きスロットごとに、ディメンション内の 1 つのマシン。左クリックでホログラムを切り替え、右クリックでグリッドへのリンクを切り替えます。 |
MACHINE_LIST_ARROW | マシンリストのスクロール矢印。ページのカウンター付きです。 |
さらに 2 つのエントリが、セットを完成させます。Open Machine GUI は、定義をメニューのタイトルとサイズに結び付けますが、現在のコードでは、トリガーされてもそのアクションは何もしません。マシンは、右クリックでメニューを開きます。Machine Position Variable は、閲覧者自身の、指定した定義のマシンの、そのディメンション内の位置を返すため、1 つの NPC エントリで、各島のマシンを追従できます。
ダッシュボードが表示するラベル(状態、リンク、ホログラム)は、Machine Dashboard Wording から取得されます。スクロールと、開くコマンドは、Machine Dashboard Command から取得されます。
コマンド
| コマンド | 説明 |
|---|---|
/typewriter machine give | 登録されているすべてのマシンを一覧表示します。 |
/typewriter machine give <machine> | ID または名前の一部(アクセントと大文字小文字は無視されます)で指定したマシンのアイテムを、自分に与えます。 |
/typewriter machine liquide | 見ているマシン(6 ブロック以内)が保持している液体を表示します。 |
/typewriter machine liquide <liquid> <millibuckets> | 対象のマシンに液体を注ぎます。テスト用のツールです。プレイヤーの操作でタンクを満たすことはできません。 |
/machine のツリーは、TypeWriter のコマンドの下に登録されるため、/typewriter machine …(エイリアス /tw machine …)と入力します。そのすべてに machine.admin が必要です。エントリは、トップレベルのコマンドとして、さらにコマンドを登録できます。
| コマンド | 説明 |
|---|---|
/<commandName> scroll <delta>、reset | ダッシュボードのリストをスクロールする、または巻き戻します。デフォルトの名前は machines です。 |
/<commandName> dashboard | dashboardMenuId で指定されたメニューを開きます。 |
/<commandName> link <instanceId>、hologram <instanceId> | マシンのグリッドへのリンクまたはホログラムを切り替えます。ダッシュボードのスロットが使います。 |
Machine Test Command の /<commandName> | criteria が一致すれば、その triggers を発火します。デフォルトの名前は machine-test です。 |
Machine Test Platform Command の /<commandName>、clear、bench | 今いる場所にマシンのショーケースを作成する、それを削除する、または loadbench_* のワールドを用意します。デフォルトの名前は machine-test-platform です。 |
権限
| 権限 | 許可される内容 |
|---|---|
machine.admin | /typewriter machine コマンド。 |
machine.protection.bypass | 島の所有権、建築フラグ、制限を無視して、どこでもマシンを設置、破壊、操作します。 |
プレースホルダー
TypeWriter を通じて提供される、machine エクスパンションの MiniPlaceholders のタグです。<instance> は、設置されたマシンの ID、<slot> は論理スロットの番号(デフォルトは 0)です。
| プレースホルダー | 返す値 |
|---|---|
<machine_input:instance:slot> | 入力スロットにアイテムがあれば true。 |
<machine_input_name:instance:slot> | 入力アイテムの素材名。 |
<machine_input_amount:instance:slot> | 入力スロットの数量。 |
<machine_output:instance:slot> | 出力スロットにアイテムがあれば true。 |
<machine_output_name:instance:slot> | 出力アイテムの素材名。 |
<machine_output_amount:instance:slot> | 出力スロットの数量。 |
<machine_tier:instance> | アクティブなティアの名前。 |
<machine_dimension> | プレイヤーが立っているディメンションの、読みやすい名前。 |
<machine_grid_count>, <machine_grid_active>, <machine_grid_stalled> | ディメンション内のマシン、稼働中のマシン、停止中のマシン。 |
<machine_energy_stored>, <machine_energy_capacity> | ディメンションの、蓄えられたエネルギーと総容量。 |
<machine_energy_produced>, <machine_energy_consumed>, <machine_energy_balance> | 毎秒の、生産、消費、正味のエネルギー。 |
プレイヤー向けのプレースホルダーは、プレイヤーがいない場合(コンソール)は、空の値を返します。
ホログラムのメッセージでは、%machine%、%tier%、%energy%、%bar%、%percent%、%time_left% が使えます。
エントリ
10 件のエントリー(拡張機能のソースから生成)。
アクション2
- Machine MenuMachine Menu
- Open Machine GUIOpen Machine GUI
コマンド3
- Machine Dashboard CommandMachine dashboard commands
- Machine Test CommandRegister a Machine test command
- Machine Test Platform CommandProvision the Machine BTC test platform
変数1
- Machine Position VariablePosition of the viewer's machine of a given definition
アーティファクト1
- Machine Data ArtifactStores machine runtime state (placed instances, energy, progress) as JSON data
マニフェスト2
- Machine Dashboard ConfigMachine Dashboard Wording
- Machine Protection ConfigMachines : messages de protection
その他のエントリー1
- Machine DefinitionMachine Definition
トラブルシューティング
定義がパブリッシュ時に拒否される。 サーバーログを確認してください。no way to obtain this machine は、spawnItem も vanillaBlock も設定されていないことを、tier[n].researchNode is blank は、ティアにリサーチノードがないことを、the machine layout needs N slots, maximum is 54 は、スロットが多すぎることを意味します。
マシンがアイテムを受け付けるが、動かない。 recipes のリストが空のレシピマシン(たとえば MIXING、GRINDING、BREWING)には、バニラへのフォールバックがありません。バニラのレシピを使うのは、SMELTING と AUTO_CRAFTING だけです。
設置が拒否される。 メッセージは Machine Protection Config から取得されます。マシンは、自分の BTC Sky の島にある必要があり、建築フラグが必要で、プレイヤー、島、ディメンションの制限と dimensionScope が適用されます。CONTROL_PANEL には、ディメンション内に安定化クリスタルが必要です。machine.protection.bypass を持つスタッフは、すべてのチェックをスキップします。
マシンが、リンクされていない、またはエネルギーがないと表示する。 同じディメンションに ENERGY_CELL と ENERGY_GENERATOR のマシンが必要で、マシンがリンクされている必要があります(リンクボタンを使います)。プールがディメンションをまたぐことはありません。
アップグレードモジュールが何も変えない。 その type が allowedUpgrades に含まれている必要があり、CAPACITY が動作するのは、STORAGE、EXPERIENCE_TANK、ENERGY_CELL だけです。LIQUID_FUEL には liquidFuelName が必要です。
ティアが適用されない。 researchNode は BTC Sky のリサーチノードの ID と一致している必要があり、島がそれを解放している必要があります。
メニューが空で開く、または開かない。 mainLayoutId を、layoutPool の ID と照らし合わせてください。一致しない場合、ログにプールの ID が示されます。
家具やカスタムブロックの見た目が失敗する。 FURNITURE と CUSTOM_BLOCK には、CraftEngine と、既存の furnitureId または customBlockId が必要です。
関連する拡張機能
- BTC Sky — マシンが依存する、島、所有権、リサーチ、ディメンション。