{
  "name": "無人機介面",
  "icon": "pneumaticcraft:drone_interface",
  "category": "pneumaticcraft:machines",
  "flag": "|mod:computercraft,mod:opencomputers",
  "advancement": "pneumaticcraft:printed_circuit_board",
  "pages": [
    {
      "type": "text",
      "text": "無人機介面是一個$(thing)電腦/開放式電腦外設/$，用於與 $(l:tools/drone)無人機/$ 進行通訊。為此，需要使用 $(item)無人機/$ 編寫一個 $(l:programming/computer_control)電腦控制拼圖/$.$(p)當無人機執行計算機控制片段時，它會嘗試連線到位於拼圖塊區域內的一個$(ttcolor)$(t:無人機介面一次只能連線到一架無人機)可用/$ $(item)無人機介面/$。"
    },
    {
      "type": "spotlight",
      "item": "pneumaticcraft:drone_interface",
      "text": "一旦連線，無人機將完全由介面控制；具體來說，將由控制計算機呼叫介面的 Lua 方法控制。$(p)無人機介面提供了一長串 Lua 方法，所有這些方法都在接下來的頁面中有所描述。"
    },
    {
      "type": "text",
      "title": "示例",
      "text": "Lua 程式示例:$(br)$(#008)m = peripheral.wrap(\"right\")$(br)m.addArea(100, 64, 100, 120, 4, 120, \"Filled\")$(br)m.setAction(\"dig\")$(br)while not m.isActionDone()$(br)do$(br)  sleep(1)$(br)end$(br)m.clearArea()$(br)m.addArea(80, 65, 80)$(br)m.setAction(\"goto\")$(br)-- 等待完成,同上$(br)m.setAction(\"standby\")$(p)/$使無人機挖出一大片區域 - （100,64,100）->（120,4,120） 範圍內的所有方塊 - 然後返回到 （80， 65， 80） 並進入待機狀態。"
    },
    {
      "type": "text",
      "title": "示例 （續）",
      "text": "你可能會注意到，對面的程式必須明確等待 Dig（和 Goto）操作完成後才能繼續，這與透過 $(l:programming/programmer)程式設計/$ 編寫無人機程式時不同。這是因為你的 Lua 計算機程式在一個單獨的執行緒中執行，無法直接與世界互動；它只是告訴無人機下一步要做什麼，並需要詢問無人機是否完成了。"
    },
    {
      "type": "text",
      "title": "abortAction()",
      "text": "$(#800)abortAction()/$$(p)停止當前正在執行的操作."
    },
    {
      "type": "text",
      "title": "addArea()",
      "text": "$(#800)addArea(<x1>,<y1>,<z1>)/$$(p)$(#800)addArea(<x1>,<y1>,<z1>,<x2>,<y2>,<z2>,<areaType>)/$$(p)將區域新增到無人機的當前儲存區域。使用後一種方法時， x1/y1/z1 表示第一個點(即 $(l:tools/gps_area_tool)GPS區域工具/$的 P1), 而x2/y2/z2表示第二個點, 即GPS區域工具的P2點。$(p)getAreaTypes() 可用於列出有效的區域型別。"
    },
    {
      "type": "text",
      "text": "$(#800)addBlacklistItemFilter(<item/block name>, <useNBT>, <useModSimilarity>)/$$(p)就想 addWhitelistItemFilter(...),而是將物品列入黑名單。",
      "title": "addBlacklistItemFilter()"
    },
    {
      "type": "text",
      "title": "addBlacklistLiquidFilter()",
      "text": "$(#800)addBlacklistLiquidFilter(<liquid name>)/$$(p)就想 addWhitelistLiquidFilter(...), 而是將液體列入黑名單。"
    },
    {
      "type": "text",
      "title": "addBlacklistText()",
      "text": "$(#800)addBlacklistText(<text>)/$$(p)向列入黑名單的文字新增文字。 例如，用於為 \"entity_attack\" 操作指定過濾器。"
    },
    {
      "type": "text",
      "text": "$(#800)addWhitelistItemFilter(<item/block name>, <useNBT>, <useModSimilarity>)/$$(p)充當 $(l:programming/item_filter)物品篩選器/$外掛位於另一個外掛的右側。物品/方塊名稱是註冊名稱，例如 $(thing)pneumaticcraft:pressure_tube/$. 'useXXX' 是所有的布林值，用於確定將使用哪些過濾器（如在物品過濾器小部件 GUI 中所示）。",
      "title": "addWhitelistItemFilter()"
    },
    {
      "title": "addWhitelistLiquidFilter()",
      "text": "$(#800)addWhitelistLiquidFilter(<liquid name>)/$$(p)就好像你在一個方塊的右側放置了一個 $l(:programming/liquid_filter)液體過濾器/$。你必須提供流體的註冊名稱（例如 $ (thing)minecraft:water/$）。",
      "type": "text"
    },
    {
      "text": "$(#800)addWhitelistText(<text>)/$$(p)將文字新增到白名單文字列表。這可以用於指定\"entity_attack\"動作的實體過濾器，例如。",
      "type": "text",
      "title": "addWhitelistText()"
    },
    {
        "title": "clearArea()",
        "type": "text",
        "text": "$(#800)clearArea()/$$(p)清除當前儲存的區域。"
      },
      {
        "title": "clearBlacklistItemFilter()",
        "type": "text",
        "text": "$(#800)clearBlacklistItemFilter()/$$(p)清除所有儲存的黑名單物品過濾器。"
      },
      {
        "title": "clearBlacklistLiquidFilter()",
        "text": "$(#800)clearBlacklistLiquidFilter()/$$(p)清除所有儲存的黑名單液體過濾器。",
        "type": "text"
      },
      {
        "text": "$(#800)clearBlacklistText()/$$(p)清除所有儲存的黑名單文字。",
        "type": "text",
        "title": "clearBlacklistText()"
      },
      {
        "title": "clearWhitelistItemFilter()",
        "text": "$(#800)clearWhitelistItemFilter()/$$(p)清除所有儲存的白名單物品過濾器。",
        "type": "text"
      },
      {
        "type": "text",
        "text": "$(#800)clearWhitelistLiquidFilter()/$$(p)清除所有儲存的白名單液體過濾器。",
        "title": "clearWhitelistLiquidFilter()"
      },
      {
        "title": "clearWhitelistText()",
        "text": "$(#800)clearWhitelistText()/$$(p)清除所有儲存的白名單文字。",
        "type": "text"
      },
    {
      "title": "evaluateCondition()",
      "text": "$(#800)evaluateCondition()/$$(p)返回true/false. 僅在$(l:programming/conditions)條件/$中使用。根據條件是否滿足，將返回 true/false。無人機條件可以在設定 $(#800)setAction()/$ 後立即檢查，但非無人機條件需要等待 $(#800)isActionDone()/$ 返回 true 後，$(#800)evaluateCondition()/$ 的結果才有用。",
      "type": "text"
    },
    {
      "type": "text",
      "text": "$(#800)exitPiece()/$$(p)停止無人機中的 $(thing)計算機控制/$元件，並允許無人機的程式繼續執行其程式中的下一個拼圖塊。",
      "title": "exitPiece()"
    },
    {
      "type": "text",
      "title": "forgetTarget()",
      "text": "$(#800)forgetTarget()/$$(p)當無人機正在攻擊任何實體（透過使用\"entity_attack\"動作）時，這將停止攻擊該目標。"
    },
    {
      "text": "$(#800)getAction()/$$(p)返回一個字串，表示透過 $(#800)setAction()/$ 設定的最後一個動作。當未設定任何動作時，將返回 $(thing)nil/$。可以使用此方法確保僅在其不返回 nil 時呼叫 $(#800)isActionDone()/$.",
      "type": "text",
      "title": "getAction()"
    },
    {
      "title": "getAllActions()",
      "type": "text",
      "text": "$(#800)getAllActions()/$$(p)返回一個包含所有當前可選擇動作的表（例如 $(thing)pneumaticcraft:dig/$ 或 $(thing)pneumaticcraft:place/$）。每個動作都與 $(l:programming/programmer#ids)程式/$GUI中提供的程式設計小部件直接對應。$(p)注意：對於以 $(thing)pneumaticcraft:/$ 開頭的動作（這是所有預設動作），$(thing)pneumaticcraft:/$ 字首是可選的。"
    },
    {
      "title": "getAreaTypes()",
      "text": "$(#800)getAreaTypes()/$$(p)返回一個包含所有可能區域型別的表（如填充、框架、球形等）。",
      "type": "text"
    },
    {
      "title": "getDronePosition()",
      "text": "$(#800)getDronePosition()/$$(p)返回無人機的 x/y/z 位置。此方法是為了歷史相容性而存在的，建議使用新的$(#800)getDronePositionVec()/$方法。",
      "type": "text"
    },
    {
      "title": "getDronePositionVec()",
      "text": "$(#800)getDronePosition()/$$(p)返回無人機的 x/y/z 座標表。可以透過 .x、.y 和 .z 欄位輕鬆提取單個值，例如$(#800)xpos = getDronePosition().x/$.",
      "type": "text"
    },
    {
      "title": "getUpgrades()",
      "type": "text",
      "text": "$(#800)getUpgrades(<upgrade>)/$$(p)獲取給定型別插入的升級數量。$(p) 升級名稱可以透過在啟用高階資訊（F3+H）的情況下，將滑鼠懸停在任何 氣動工藝升級物品上找到，並去掉名稱中的 '_upgrade' 部分。$(p) 例如，對於 $(thing)pneumaticcraft:speed_upgrade/$，名稱為 \"speed\"。"
    },
    {
      "type": "text",
      "title": "getVariable()",
      "text": "$(#800)getVariable(<variable name>)/$$(p)返回此無人機中變數的值（x、y 和 z）。也可以獲取 $(l:programming/variables#global)全域性/$(# prefix)和 $(l:programming/variables#special)特殊/$ 變數($  prefix)。"
    },
    {
      "type": "text",
      "title": "hideArea()",
      "text": "$(#800)hideArea()/$$(p)停止在世界中高亮顯示無人機儲存的區域，如 $(#800)showArea()/$ 所示。."
    },
    {
      "type": "text",
      "title": "isActionDone()",
      "text": "$(#800)isActionDone()/$$(p)如果當前操作已完成，則返回 true（例如：\"goto\" 已到達目標位置，\"inventory import\" 無法再匯入，\"dig\" 已挖掘完所有可能的方塊……）。"
    },
    {
      "type": "text",
      "title": "isConnectedToDrone()",
      "text": "$(#800)isConnectedToDrone()/$$(p)如果無人機與該無人機介面已連線（當無人機的程式到達計算機元件並建立連線時），則返回 true。"
    },
    {
      "type": "text",
      "title": "removeArea()",
      "text": "$(#800)removeArea(<x1>,<y1>,<z1>,<x2>,<y2>,<z2>,<areaType>)/$$(p)從當前儲存的區域中移除一個區域（相當於將該區域列入黑名單）"
    },
    {
      "type": "text",
      "title": "setAction()",
      "text": "$(#800)setAction(<action>)/$$(p)要為無人機設定一個動作，您需要選擇由 $(#800)getAllActions()/$ 返回的動作之一。這些動作直接對應於 $(l:programming/programmer)程式/$ GUI 中的程式設計小部件，當按下 F3+H 時，小部件工具提示中會顯示動作名稱。"
    },
    {
      "type": "text",
      "title": "setBlockOrder()",
      "text": "$(#800)setBlockOrder(<\"closest\"/\"highToLow\"/\"lowToHigh\">)/$$(p)設定無人機的放置/挖掘順序。"
    },
    {
      "type": "text",
      "title": "setCanSteal()",
      "text": "$(#800)setCanSteal(<true/false>)/$$(p)當使用\"ickup_item\"動作時，這將控制無人機是否可以竊取它們通常應該不去觸碰的物品，例如放在 $(thing)Immersive Engineering/$ 運輸帶上的物品。預設值為 false：無人機會嘗試不去竊取物品。"
    },
    {
      "type": "text",
      "title": "setCheckLineOfSight()",
      "text": "$(#800)setCheckLineOfSight(<true/false>)/$$(p)當使用\"entity_attack\"動作時，這將控制無人機是攻擊其區域內任何目標，還是僅攻擊它們有直接視線範圍內的目標。預設值是 false；不檢查視線。"
    },
    {
      "type": "text",
      "title": "setCount()",
      "text": "$(#800)setCount(<amount>)/$$(p)這配置了由匯入/匯出/掉落動作處理的最大物品數量，並且在條件檢查中也用於檢查的數量。"
    },
    {
      "type": "text",
      "title": "setCraftingGrid()",
      "text": "$(#800)setCraftingGrid(<item/block name>, <item/block name>, ...(9x))/$$(p)設定製作網格，以便在使用\"crafting\"動作時，將使用此配方。您需要指定構成配方的所有9個物品；對於空白位置，請提供 $(thing)null/$。物品命名格式與物品過濾器相同。"
    },
    {
      "type": "text",
      "title": "setDropStraight()",
      "text": "$(#800)setDropStraight(<true/false>)/$$(p)當\"drop_item\"動作是當前動作時，這將決定物品是否以隨機速度（像原版投擲器一樣）掉落，還是直接向下掉落。"
    },
    {
      "type": "text",
      "title": "setEmittingRedstone()",
      "text": "$(#800)setEmittingRedstone(<strength>)/$$(p)設定當\"emit_redstone\"動作是當前動作時發出的紅石訊號的強度。"
    },
    {
      "type": "text",
      "title": "setIsAndFunction()",
      "text": "$(#800)setIsAndFunction(<true/false>)/$$(p)僅在條件中使用。當為真時，所有檢查的塊必須滿足條件要求（例如 >=10 等）。"
    },
    {
      "type": "text",
      "title": "setMaxActions()",
      "text": "$(#800)setMaxActions(<amount>)/$$(p)這設定了在操作被視為 “done” 之前對塊執行的最大運算元。這適用於 \"放置\"、\"挖掘\" 和 \"右鍵方塊\" 操作。確保還呼叫 $(#800)setUseMaxActions(true)/$以啟用此功能。"
    },
    {
      "type": "text",
      "text": "$(#800)setOperator(<\"=\" / \">=\" / \"<=\">)/$$(p)僅在條件中使用。說明條件是否在檢查相等數量（=）、大於或等於數量（>=）或小於或等於數量（<=）。數量可以透過使用$(#800)setCount()/$來設定。",
      "title": "setOperator()"
    },
    {
      "title": "setPlaceFluidBlocks()",
      "type": "text",
      "text": "$(#800)setPlaceFluidBlocks(<true/false>)/$$(p)僅在\"液體匯出\"操作中使用；當設定為“真”時，無人機將被允許在世界中放置流體方塊。預設值為“假”，僅允許將流體匯出到流體箱中"
    },
    {
      "title": "setRenameString()",
      "text": "$(#800)setRenameString(<name>)/$$(p)設定當使用\"重新命名\"操作時，無人機將被命名為的名稱。",
      "type": "text"
    },
    {
      "type": "text",
      "title": "setRequiresTool()",
      "text": "$(#800)setRequiresTool(<true/false>)/$$(p)這配置了無人機在執行\"挖掘\"和\"收穫\"操作時是否需要工具。如果沒有工具，無人機將不會嘗試執行這些操作。"
    },
    {
      "type": "text",
      "title": "setRightClickType()",
      "text": "$(#800)setRightClickType(\"click_item\" / \"click_block\")/$$(p)噹噹前操作為\"右鍵方塊\"時，這將控制無人機是否應使用其手持物品的點選邏輯（例如使用 $(item)打火石/$），或者嘗試啟用目標方塊（例如翻轉 $(item)拉桿/$）。預設值為“點選物品”。"
    },
    {
      "type": "text",
      "title": "setSide()",
      "text": "$(#800)setSide(<side>, <accessible>)/$$(p)將特定端設定為可存取或不可存取。在\"匯入庫存\"和\"匯出庫存\"操作中使用，以設定無人機可以存取庫存的哪一側。它還用於“放置”操作，以確定如何放置方塊。"
    },
    {
      "title": "setSides()",
      "text": "$(#800)setSides(<down>, <up>, <north>, <south>, <east>, <west>)/$$(p)同上，但採用單一方法一次設定所有邊;此方法採用6個布林引數。",
      "type": "text"
    },
    {
      "type": "text",
      "title": "setSignText()",
      "text": "$(#800)setSignText(<line1>, <line2>, ..., <lineN>)/$$(p)設定在使用$(thing)edit_sign/$ 動作時將傳送到標誌和箴言瓷磚的文字。"
    },
    {
      "title": "setSneaking()",
      "text": "$(#800)setSneaking(<true/false>)/$$(p)僅在\"右鍵塊\"操作中使用；這將設定假玩家在右鍵點選時是否潛行。",
      "type": "text"
    },
    {
      "type": "text",
      "text": "$(#800)setUseCount(<true/false>)/$$(p)設定無人機是否具有最大匯入/匯出/丟棄物品的數量。如果為真，請確保還呼叫$(#800)setCount()/$.",
      "title": "setUseCount()"
    },
    {
      "title": "setUseMaxActions()",
      "type": "text",
      "text": "$(#800)setUseMaxActions(<true/false>)/$$(p)設定無人機在一個區塊上執行的最大運算元量，以便在達到該數量之前命令被視為“完成”,適用於\"放置\"、\"挖掘\"和\"右鍵塊\"操作。如果為真，請確保還呼叫$(#800)setMaxActions()/$."
    },
    {
      "text": "$(#800)setVariable(<variable name>, <x>, <y>, <z>)/$$(p)為該無人機設定一個 $(l:programming/variables)變數/$，以指定的 X/Y/Z 座標。可以設定 $(l:programming/variables#global)全域性變數/$。",
      "type": "text",
      "title": "setVariable()"
    },
    {
      "text": "$(#800)setVariable(<variable name>, <boolean>)/$$(p)為該無人機設定一個 $(l:programming/coordinate_operator)變數/$。‘true’ 相當於傳遞 (1,0,0)，而 ‘false’ 相當於傳遞 (0,0,0)。",
      "type": "text",
      "title": "setVariable()"
    },
    {
      "type": "text",
      "title": "showArea()",
      "text": "$(#800)showArea()/$$(p)將顯示當前儲存的區域，使用的區域渲染器與在程式設計小部件選項圖形使用者介面中點選 $(thing)顯示區域/$ 時使用的相同。可以使用 $(#800)hideArea()/$來隱藏任何這樣的區域"
    },
    {
      "type": "crafting",
      "text": "製作無人機介面",
      "recipe": "pneumaticcraft:drone_interface"
    }
  ]
}