挖掘與放置
本頁說明 bot.dig、bot.placeBlock、bot.placeEntity 以及對方塊使用物品在 Bedrock 上如何工作——在 Bedrock 上,
方塊的破壞和放置都由服務器自己完成。觀測環境為 BDS 1.26.51.1(協議 2193,bedrock-protocol 3.60.1)。
服務器權威的方塊破壞
- 影響:
bot.dig、bot.stopDigging、diggingCompleted、diggingAborted、bot.targetDigBlock - Java: 客戶端發送
block_dig開始(status 0),自己等待digTime毫秒,發送完成(status 2)並在本地把方塊設為空氣; 取消 = status 1。 - Bedrock: BDS 上
start_game.server_authoritative_block_breaking為 true。方塊操作隨player_auth_input.block_action發送(每 tick 一個輸入)。實測行為:start_break= 在方塊上按下鼠標。從這個輸入開始,BDS 每 tick 自己累加破壞進度——開始的那個 tick 也算——使用的是 它自己那份手持物品、狀態效果、是否著地和眼睛是否在水中的狀態;只要保持破壞狀態,它就會在進度達到 1 的那個輸入中 破壞方塊(含開始輸入在內的第ceil(1/speed)個輸入),不需要任何其他操作。它會向所有觀察者報告速度(先level_event block_start_break,然後每 tick 一個block_break_speed,data = 每 tick 進度 × 65535,向下取整), 以update_block(空氣)+particle_destroy報告破壞,隨後是掉落物(add_item_entity)。predict_break(客戶端的“已經破壞”)從同一個輸入起才被接受;早一個輸入發送時,BDS 會回一個恢復該方塊的update_block(而若破壞仍在保持,它仍會在下一 tick 破壞方塊)。continue_break會讓 BDS 重新開始破壞:每發送一次,它都會向所有觀察者發送block_stop_break+block_start_break(其他玩家看到的裂紋動畫和 mineflayer 的blockBreakProgressObserved每 tick 都會重新開始)。crack_break被接受,但不改變任何東西。abort_break結束破壞。stop_break不會:一次破壞完成後,BDS 會繼續“按住”該位置,並自行破壞隨後放到那裡的下一個 方塊(即使是/setblock放置的)。- 面和視線方向都不被校驗(任意麵、看向別處、距離最遠約 7 格,都能破壞)。
- 創造模式:僅
start_break就會瞬間破壞(無掉落物);僅發送player_action creative_player_destroy_block沒有任何 效果。
- bedboo: 在轉向之後的輸入中發送
start_break,保持破壞期間不發送任何東西;當 BDS 自己每 tick 的進度報告 (block_break_speed)顯示還差一個 tick 就完成時發送predict_break——也就是在客戶端和服務器同步運行時,恰好在 BDS 完成破壞的那個輸入中(實測為 BDS 接受的最早輸入);服務器落後時會更晚,但絕不提前。純客戶端的 tick 計數不夠:在負載較高 的主機上,BDS 會落後於客戶端的輸入計數並恢復方塊。BDS 不發送進度報告時,bedboo 使用自己的計數並留一個 tick 的餘量。- 以服務器的
update_block(空氣;含水方塊 / 冰則為液體)作為完成標誌,隨後發送abort_break釋放破壞狀態;攜帶它的輸入 發出後(≤ 1 tick)dig才結束,因此調用方接下來做的任何事——在該位置放置方塊、繼續挖掘——都會在釋放之後才到達 BDS (實測:否則在 update 之後立即執行的/setblock會再次被 BDS 破壞)。 - 創造模式和瞬間破壞(第一個 tick 進度 ≥ 1):
start_break+predict_break放在同一個輸入中。 stopDigging/ 新的挖掘 / 死亡 / 切換維度:abort_break。- 當 BDS 報告的被挖方塊速度與本地估算不同時,以前者替換後者,因此不一致永遠不會導致客戶端提前預測。
- 保留上游每 350 ms 揮一次手(
animate)的行為。 - 舊式(非服務器權威)服務器:發送
start_break,每 tick 發送crack_break,在digTime之後發送stop_break+ 一個inventory_transactionbreak_block,並像上游一樣在本地預測方塊被破壞。BDS 始終是服務器權威的,因此無法用它測試這條路徑。
- 以服務器的
dig() 在服務器確認後完成
- 影響:
bot.dig(promise 何時結束)、diggingCompleted、bot.lastDigTime - Java: 客戶端自己的
digTime計時器觸發時 promise resolve(方塊在本地設為空氣)。 - Bedrock: 方塊由服務器破壞;客戶端自行設為空氣只是一種猜測,服務器可能會推翻它。
- bedboo:
dig在服務器的update_block之後 resolve(並以空氣方塊觸發diggingCompleted):它在開始輸入之後digTime− 1 tick + 往返延遲到達(在本地 BDS 上對 848 次計時挖掘的實測:相對digTime中位數 −21 ms,範圍 −75…+44 ms),挖掘隨釋放輸入最多晚一個 tick 結束(見 服務器權威的方塊破壞)。- BDS 會在大約一個 tick 內多次發送被破壞方塊的
update_block(破壞本身,以及對predict_break/abort_break的應答): 等待該位置“下一次更新”的代碼應先讓這些更新過去。 - “已破壞” = 空氣、液體(含水方塊、海帶、珊瑚扇和冰會留下水;靈魂沙 / 岩漿塊上方的氣泡柱),或少了一個蛋的海龜蛋。
- 如果在
predict_break之後 40 tick 內服務器都沒有任何破壞該方塊的跡象(沒有更新、沒有速度報告——仍在破壞時 BDS 每 tick 都會報告速度;例如冒險模式、受保護的方塊或教育版方塊),則像stopDigging一樣中止挖掘(diggingAborted, reject 信息為Digging aborted: the server did not break <name> at <pos>);上游無論如何都會 resolve。 - 斷開連接也會 reject 正在進行的挖掘(
Digging aborted: the connection ended;上游的計時器會讓它 resolve)。 bot._bedrock.digging(內部)保存最近幾次挖掘的診斷信息(開始 / 結束時間、tick 數、BDS 報告的速度、恢復次數)。
- BDS 會在大約一個 tick 內多次發送被破壞方塊的
挖掘速度:Bedrock 的狀態效果係數
- 影響:
bot.digTime,以及被 mineflayer-pathfinder / mineflayer-tool 直接調用的block.digTime(...)(prismarine-block) - Java: 急迫和潮湧能量把速度乘以
1 + 0.2 × level;挖掘疲勞乘以 0.3 / 0.09 / 0.0027 / 0.00081(等級 1–4+)。 - Bedrock(實測,
level_event數據): 急迫 / 潮湧能量(取較高等級)乘以(1 + 0.2 × level) × 1.2^level(I 1.44、II 2.016、III 2.7648、V 4.9766);挖掘疲勞乘以0.21^level(= 0.3^level × 0.7^level:I 0.21、 II 0.0441、III 0.0093、IV 0.0019、V 0.0004)。其餘部分都與 Java 公式相同,並已在 BDS 上驗證:各材質的工具倍率(來自 Bedrock 數據,包括金 12 和銅 5)、不能採集的工具其等級仍會提速(木鎬挖鐵礦石)、效率level² + 1僅在工具倍率大於 1 時 生效、頭盔上的水下速掘、眼睛在水中 ÷5、不在地面 ÷5(兩者同時:÷25)、canHarvest ? 30 : 100、硬度 0 = 瞬間破壞 (BDS 報告 65535 = 1.0)、ceil(1/speed)個 tick。 - bedboo:
bot.digTime使用lib/bedrock/dig_speed.js(結構與 prismarine-block 的digTime相同,但使用 Bedrock 的效果係數;沒有這些效果時,對每種方塊 × 工具 × 水中 / 空中 / 附魔組合,結果都與 prismarine-block 相同)。 prismarine-block 自己的block.digTime保留 Java 的效果係數(未打補丁):在急迫或挖掘疲勞下調用它的插件成本估算會偏差 這些係數(挖掘本身是正確的,因為它等待服務器)。打過補丁的 mineflayer-pathfinder 和 mineflayer-tool 改用bot._bedrock.digging.blockDigTime(見 mineflayer-pathfinder、 mineflayer-tool)。對每種可挖掘方塊,BDS 報告的速度都等於bot.digTime。
創造模式:劍、三叉戟和重錘不能破壞方塊
- 影響: 創造模式下的
bot.digTime、bot.dig - Java: 創造模式下所有方塊的
digTime都為 0(Java 創造模式玩家同樣不能用劍破壞方塊;上游忽略這一點,服務器會恢復 方塊)。 - Bedrock(實測): 創造模式玩家手持任意劍、三叉戟或重錘破壞方塊時,BDS 會恢復方塊;長矛、工具、其他物品和空手都能 瞬間破壞。
- bedboo: 在創造模式下手持這些物品時
digTime為Infinity,因此dig會立即以上游的dig time for <name> is Infinityreject,而不是等待服務器。
眼部水體包括含水方塊
- 影響:
bot.digTime、bot._getBlockAtEyeLevel(未改動) - Java: 當眼部方塊是
water/flowing_water時,上游認為眼睛在水下。 - Bedrock: 水也可能是方塊的第二層(含水方塊、海帶、海草)。
- bedboo: 眼部方塊為
water、flowing_water,或第 1 層為水的方塊(block.isWaterlogged)時眼睛在水下。不使用bot.entity.isInWater(與上游相同)。眼睛在水下時挖掘耗時為 5 倍,BDS 的結果與此一致。
'auto' 挖掘面
- 影響:
bot.targetDigFace、方塊操作所帶的面 - Java:
dig(block)在digFace為 'auto' 時看向方塊中心併發送面 1(頂面)。 - Bedrock: BDS 不校驗面,但原版客戶端發送的是準星下的面,而且這個面決定了其他玩家看到的敲擊粒子。
- bedboo: 'auto'(帶轉向)使用從眼睛到方塊中心的視線進入方塊時穿過的那個面(例如 bot 與方塊同高且位於其西側時為
4 = 西)。面向量、'raycast' 和
forceLook: 'ignore'(面 1)沿用上游。
工具耐久
- 影響: 挖掘後
bot.heldItem的耐久、heldItemChanged - Java: 服務器扣減工具耐久併發送
set_slot。 - Bedrock: 原版客戶端會在
predict_break中附帶一個item_stack_requestmine_block{ 快捷欄槽位、預測耐久、 stack id };BDS 只在破壞完成的那個輸入中接受它(晚一個輸入就回復status: error),然後在響應的durability_correction中報告耐久,而不是發送槽位。沒有這個請求時,BDS 自己扣減工具耐久,併發送帶新Damage的inventory_slot。 - bedboo: 不發送
mine_block請求(只有在服務器同步運行時,預測才會落在完成的那個輸入中,見 服務器權威的方塊破壞);物品欄模型應用服務器的inventory_slot(每個方塊 Damage +1,耗盡時工具消失,heldItemChanged與 Java 的set_slot一致)。
挖掘空氣
- 影響:
bot.dig(air)、bot.digTime(air)、registry.blocksByName.air.hardness - Java: 空氣硬度為 0:
digTime為 0,dig立即 resolve 並觸發diggingCompleted。 - Bedrock: minecraft-data PR #1335 和 BDS 自己導出的方塊數據都把空氣硬度設為 -1(不可破壞)。
- bedboo: 數據覆蓋層把空氣硬度設為 0(
packages/bedrock-data/scripts/tables.jsBLOCK_FIXES),因此digTime(air)與上游一樣為 0。對世界中為空氣的方塊執行bot.dig(包括一個已不存在的方塊的過期 Block 對象——例如門的 另一半)會立即以diggingCompleted(air)完成,不發送任何東西(BDS 從不報告破壞空氣)。若過期的空氣 Block 所在位置現在 已有方塊,則正常挖掘。
無法佈置或挖掘的方塊
-
影響: 整個方塊註冊表範圍內的
bot.dig、bot.digTime -
Java: 每種可挖掘的 Java 方塊都可以放置並挖掘(少數除外)。
-
Bedrock: 註冊表中有 1,442 種可挖掘方塊。在 BDS 1.26.51.1 上,其中約 230 種無法放進生存模式的測試世界,或永遠不會被 破壞:
/setblock拒絕的 id:教育版的element_*、化合物和硬化玻璃,unknown/info_update/reserved6等內部 id, 以及 BDS 1.26.51.1 不認識的*_concrete_double_slab/*_wool_double_slab狀態;- 設置後無法留在原處的方塊(珊瑚壁扇、絆線鉤、靈魂火、氣泡柱……);
frosted_ice(挖掘過程中會融化);- 教育版的
allow/deny/border_block(BDS 在生存模式下從不破壞它們)。
默認朝下的附著類方塊(按鈕、物品展示框、旗幟、拉桿)只有設置在地面上(
facing_direction1)或牆上時才能留下。挖掘後 “消失” = 空氣或液體(冰、海帶、海草、珊瑚扇和海泡菜會留下水)。 -
bedboo: 其餘每種方塊都在生存模式下用下列工具中最快的一種挖掘過:下界合金鎬 / 斧 / 鍬 / 鋤和剪刀(效率 V)、下界合金劍 以及空手:BDS 報告的速度均等於
bot.digTime,且 BDS 從未恢復過被挖掘的方塊。
瞬間破壞之後的進度報告
- 影響:
bot._bedrock.digging.last.serverSpeedData(診斷信息) - Java: 無對應情況(客戶端自己為挖掘計時)。
- Bedrock: 瞬間破壞之後,BDS 可能會報告取代該方塊之物的破壞進度(水源中的植物被破壞後留下的水,例如
short_dry_grass)——有時出現在破壞的update_block之前的那一批數據包中。 - bedboo: 瞬間破壞(開始和預測在同一個輸入中)只把瞬間級別的報告(每 tick ≥ 1:被挖方塊自己的報告)作為服務器速度; 更慢的報告只算作服務器活動。
放置協議:用 start/stop_item_use_on 包裹的 click_block
- 影響:
bot._genericPlace、bot.placeBlock、bot._placeBlockWithOptions、bot.placeEntity、blockPlaced - Java:
block_place(位置、方向、手、光標位置);無論是否放置了東西,服務器都會先為被點擊的方塊、再為面對面的方塊 回覆block_change。 - Bedrock: 與原版客戶端一樣,點擊方塊的一個面依次為
player_action start_item_use_on(被點擊方塊、被點擊方塊 + 面、 面)→inventory_transaction item_use click_block(手持物品在服務器上的精確副本,包括其 stack id、被點擊方塊的 runtime id、面上的點擊點、面、快捷欄槽位、手、位於眼睛高度的玩家位置、預測success)→ 150 ms 後的player_action stop_item_use_on(被點擊方塊 + 面)。實測應答(本地約 80–120 ms):先是物品欄(所有窗口的inventory_content:使用後的數量、耐久或新的 stack id),然後是一串update_block——被點擊方塊、面對面的方塊、被點擊方塊 的下方鄰居、再次是面對面的方塊、它的上方鄰居、再次是被點擊方塊——約 20 ms 後目標位置再更新一次,並帶有place音效。 被拒絕時(有實體擋路、玩家自己的碰撞箱、物品不是方塊、超出世界)收到同樣的一串更新,但目標位置不變(外加一個set_entity_data重同步),物品欄也不變。 - bedboo:
bot.placeBlock/bot._placeBlockWithOptions是上游代碼(原樣內置);bot._genericPlace/bot.placeEntity保留上游的檢查、選項、轉向和事件。應答的形式與 Java 相同(先是參考方塊,再是目標位置),因此上游的place_block.js及其錯誤信息都無需修改(Server refused to place <item> at <pos>: the block is still <name>、Server did not answer the placement at …、must be holding an item to place)。點擊一進入隊列_genericPlace就 resolve(上游:緊接在block_place之後);一次點擊的 stop 會在下一次點擊的 start 之前發送(成對的操作不會交錯)。 與上游一樣,客戶端不預測放置:方塊隨服務器的更新出現。
對可交互方塊潛行放置
- 影響:
bot._genericPlace以及基於它的一切(placeBlock、placeEntity;mineflayer-pathfinder) - Java: mineflayer 不會告訴服務器自己在潛行(
generic_place.js中的 “TODO”);mineflayer-pathfinder 會針對它的interactable.json(Java 名稱)自己按下潛行。 - Bedrock: 除非玩家在潛行,否則 BDS 會執行被點擊方塊的使用動作(打開箱子 / 工作臺 / 熔爐、開關門、打開告示牌編輯器……)
而不是放置;潛行按鍵隨
player_auth_input發送,服務器必須在處理點擊之前已處理該輸入(提前一個輸入就足夠;set_entity_data的sneaking即為確認)。飛行中的玩家永遠不會進入sneaking狀態,但輸入中的原始潛行按鍵仍然有效。 - bedboo: 當參考方塊可交互時(
lib/bedrock/placement.js的isInteractive,Bedrock 名稱:容器、工作站、除鐵質外的 門 / 活板門 / 柵欄門、按鈕、拉桿、中繼器、比較器、告示牌、床、蛋糕、物品展示框……),_genericPlace會按住潛行控制, 等它隨一個輸入發出(有bot._bedrock.physics.controlsSent()時用它,否則等下一個發出的輸入)並得到服務器確認(飛行時 不等確認),然後點擊,再鬆開它自己按下的潛行(調用方按住的潛行會保留,例如 mineflayer-pathfinder 的)。騎乘時不按任何鍵 (在 Bedrock 上潛行會下坐騎)。飛行時 bot 可能在那個 tick 內略微下降(潛行 = 下降)。這樣在生存模式下可以放置到箱子、 工作臺、熔爐、木門、站立告示牌或木桶的上面,在創造飛行中也可以對著箱子放置。
放置會等待服務器對上一次點擊的應答
- 影響:
bot.placeBlock、bot._placeBlockWithOptions、bot.placeEntity,以及使用桶和船的bot.activateItem—— 多個同時進行或緊挨著執行時 - Java:
block_place不攜帶物品:進行中的放置不會相互失效。 - Bedrock: 每次點擊都攜帶手持物品在服務器上的精確副本;每次使用後 BDS 都會給該堆疊分配新的 stack id(在它的
update_block應答之前的inventory_content中),並拒絕帶舊 id 的點擊(實測:兩次放置相隔 0–30 ms → 第二次被拒絕)。 - bedboo: 點擊在放置器中串行化(
lib/bedrock/placement.js):下一次點擊要等手持物品已更新、被點擊方塊已得到應答,或 500 ms 之後才發出。依次 await 的放置(例如 mineflayer-pathfinder)從不需要等待;對多個放置使用Promise.all會把它們 全部放下。在某次放置尚未得到應答時發起的桶 / 船使用(activateItem→ 所看向的方塊)會保留其目標和快捷欄槽位,並在其後 發出。其他物品使用(activateBlock、activateItem的click_air)不串行化:在放置後不 await 就立即發起時,它們仍可能 攜帶舊的 stack id。
帶有過期方塊狀態的點擊會重試
- 影響: 對服務器剛剛改變過的方塊執行
bot.placeBlock/_placeBlockWithOptions - Java:
block_place不攜帶方塊狀態。 - Bedrock: 點擊攜帶被點擊方塊的 runtime id,BDS 會拒絕 id 與它自己對該方塊的狀態不一致的點擊。某些方塊會在相鄰方塊 更新後一個 tick 才被 BDS 改變(耕地和土徑在其上放置方塊後會變成泥土,發生在放置應答之後 50–90 ms),因此緊接著對它們的 下一次點擊會被拒絕。
- bedboo: 點擊的應答會透露服務器上被點擊方塊的狀態;若被拒絕的點擊攜帶的是另一個狀態,就用方塊當前的狀態重試一次
(
generic_place.js中對內置place_block.js的包裝)。其他拒絕與上游一樣 reject。改變了被點擊方塊本身的點擊絕不會被 當作過期點擊:對著可替換方塊(snow_layer、short_grass、fern、vine、seagrass……)或手持物品可以合併進去的方塊 (同種半磚 → 雙層半磚,再加一根蠟燭 / 一個海泡菜 / 一層雪 / 一片花瓣,蠟燭插到蛋糕上)點擊時,BDS 會把方塊放到被點擊的 位置,面對面的方塊保持不變——與 Java 完全相同,因此調用在一次點擊後就以上游的Server refusedreject(而不是再點一次、 在其上方放下第二個方塊);用掉了物品的點擊也同樣不會被當作過期點擊。
手持堆疊在服務器上已變化的點擊會重試
- 影響: 在拾取物品、被給予物品(
/give)或手持堆疊以其他方式增加期間執行的bot.placeBlock/_placeBlockWithOptions(先挖後放的循環、mineflayer-pathfinder 的搭路) - Java:
block_place不攜帶物品。 - Bedrock: 點擊攜帶手持物品在服務器上的精確副本(其 stack id)。若在點擊發出到被處理之間有拾取合併進手持堆疊,該堆疊會
先得到新的 stack id(
inventory_transactionnormal,然後inventory_content),BDS 會拒絕這次點擊(實測:先挖後放的 循環中 180 次放置有 4 次;在點擊前剛執行/give:每次都會)。 - bedboo: 放置器會記錄點擊與其應答之間手持槽位在服務器端的變化(該槽位的
inventory_transaction,或堆疊變多); 這樣的拒絕會用服務器的副本重試一次(此時客戶端已拿到該副本)。其他拒絕與上游一樣 reject。
墊高與搭橋(mineflayer-pathfinder 搭路)
-
影響:
bot._genericPlace(跳躍放置)、mineflayer-pathfinder 的allow1by1towers和搭橋 -
Java: pathfinder 跳起,腳一離地就在腳下調用
placeBlock;點擊被拒絕會重置路徑(place_error)並重試。 -
Bedrock: BDS 會拒絕與玩家服務器端碰撞箱相交的任何方塊(實測:重疊 0.01 格也會被拒絕;不會有方塊被放進玩家體內, 因此也沒有推出)。它在處理點擊之前先處理此前發出的玩家輸入,所以點擊必須跟在一個碰撞箱已離開目標位置的輸入之後。
-
bedboo: 當 bot 正從目標方塊中升起,或一直在跳(按住跳躍控制)時,點擊會等待(≤ 20 個輸入)第一個碰撞箱已離開該方塊 的輸入,並緊隨其後發出;不會離開的 bot 會立即點擊,並像上游一樣收到服務器的拒絕。實測(生存模式、有重力、本地 BDS):
- 手動墊高 ×4(腳一離地就放置):0 次拒絕,0 次糾正;
- pathfinder 墊高 ×5:0 次
place_error,0 次糾正(每格約 0.45 s,點擊在腳離地後 2 tick 發出); - 手動搭橋 ×4(潛行後退到邊緣,對著下方方塊的側面放置):0 次糾正;
- pathfinder 搭橋 ×5–6:未打補丁時有 3–4 次 0.16–0.64 格的糾正,全部來自 pathfinder 自己的
fullStop(),它在客戶端把bot.entity.position移到方塊中心(在 Java 上“服務器察覺不到差別”;服務器權威的 BDS 會察覺:它把 bot 糾正回去,然後 bot 繼續走)。打過補丁的 pathfinder 會跳過這次居中:0 次糾正(見 mineflayer-pathfinder)。
在天花板下墊高另有限制:見 1×1 塔。
不能從副手放置
- 影響:
bot._genericPlace/bot._placeBlockWithOptions/bot._placeEntityWithOptions的offhand選項 - Java:
hand: 1放置副手物品。 - Bedrock: 副手只能放少數物品(盾牌、圖騰、箭、煙花火箭、地圖……,見 副手),玩家也從不對方塊
使用副手;用
hand: off_hand和副手物品(或主手物品)點擊什麼都不會放置(實測,用/replaceitem強行把方塊放進副手)。 - bedboo: 按原版客戶端的方式發送點擊(手為
off_hand,帶副手的線上物品),服務器拒絕,placeBlock以上游的拒絕信息 reject;保留上游對空副手的檢查。
placeEntity
- 影響:
bot.placeEntity、bot._placeEntityWithOptions、entityPlaced - Java: 點擊方塊(
block_place);船還額外發送use_item(服務器沿視線做射線檢測);在目標位置 2 格(船為 3 格)內按 名稱查找實體(EnderCrystal/end_crystal、boat、armor_stand、刷怪蛋對應的生物);不支持礦車(斷言 'Unimplemented')。 - Bedrock: 一切都是對方塊的點擊:盔甲架、末影水晶(黑曜石 / 基岩)、刷怪蛋、礦車(放在鐵軌上)和船(BDS 忽略船的
click_air;原版客戶端點擊它所瞄準的水;船也可以放在陸地上)。實體名稱:ender_crystal、boat/chest_boat(運輸船、竹筏)、armor_stand、minecart/chest_minecart/ ……,刷怪蛋villager→villager_v2、zombie_villager→zombie_villager_v2、evoker→evocation_illager、tropical_fish→tropicalfish。和平模式下 敵對生物的刷怪蛋什麼也不會生成(蛋仍會被消耗)。 - bedboo: 使用上游代碼,另外:
- 參考方塊為液體時,船會點擊液體的頂面(無論給出的是哪個面,船都會在其上居中生成;視線方向無關緊要,所以船永遠不會落在 bot 身上);
- 接受礦車(放在鐵軌上),運輸船也可以放在陸地上;
- 使用上述 Bedrock 名稱;
- 上游在第一個
entitySpawn之後就停止監聽,即使那是另一個實體(之後總是在 5 s 後超時);這裡的監聽會一直保留,直到所 放置的實體生成或超時('Failed to place entity',未改動)。
對方塊使用物品:桶、打火石、骨粉、煙花
- 影響: 使用這些物品時的
bot.placeBlock/bot.activateBlock/bot.activateItem - Java:
activateItem(use_item)對玩家看向的方塊使用桶或船(服務器射線檢測);手持桶、打火石或骨粉的placeBlock/activateBlock作用於被點擊的方塊。 - Bedrock: BDS 會忽略桶和船的
click_air(實測:什麼也不發生);原版客戶端點擊所看向的方塊(click_block:空桶點擊 液體源本身,裝滿的桶點擊液體後面的實心方塊,液體出現在面的另一側)。用打火石click_block會點火(黑曜石框架變成portal方塊),骨粉催熟被點擊的植物,對方塊使用煙花火箭會發射它;與 Java 一樣,未滑翔時在空中使用火箭沒有效果。 - bedboo: 手持水桶 / 岩漿桶的
placeBlock以blockPlaced(air, water|lava)resolve,手持打火石時以blockPlaced(air, fire|portal)resolve;手持空桶執行activateBlock(<液体源>)會裝滿它。手持桶或船的bot.activateItem會調用bot._bedrock.placement.useOnLookedAtBlock(item, offHand),即這種使用在 Bedrock 上的形式:沿視線做射線檢測 (在物品可作用的地方包括液體),然後點擊。其他物品使用見 物品使用、進食與盾牌。