1 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
就像 Benjamin Urquhart 所做的那樣,總是將你的問(wèn)題分成更小的子問(wèn)題,如果你搜索它們而不是搜索主要問(wèn)題,這些問(wèn)題可以更容易地得到解決,因?yàn)橹饕獑?wèn)題很可能是你獨(dú)有的,而子問(wèn)題是不是。
考慮到這一點(diǎn),我們需要開(kāi)始監(jiān)聽(tīng)一個(gè)事件。更具體地說(shuō)是BlockPlaceEvent。將您的班級(jí)設(shè)置為偵聽(tīng)器并注冊(cè)它。
在事件中,我們需要檢查放置的方塊是否是鐵軌,下方的方塊是否是粘液,如果是,則取消事件以防止其被放置。請(qǐng)注意,取消事件只會(huì)阻止放置鐵軌,而不會(huì)刪除。如果你想刪除軌道,你必須將它的類型設(shè)置為 AIR 而不是取消事件。
你最終會(huì)得到這樣的結(jié)果:
@EventHandler
public void onBlockPlace(BlockPlaceEvent event) {
Block block = event.getBlock();
Block against = event.getBlockAgainst();
if(block.getType().equals(Material.RAIL) && against.getType().equals(Material.SLIME_BLOCK)) {
event.setCancelled(true);
}
}
您必須將此代碼放入已注冊(cè)的偵聽(tīng)器類中才能調(diào)用它。我選擇使用#getBlockAgainst()來(lái)檢查我們的粘液塊。請(qǐng)注意,此方法返回我們放置軌道的塊,在我們的例子中,軌道只能放置在塊的頂部,這意味著該方法必須返回下面的塊。但是,請(qǐng)記住該方法不能確保使用鐵路以外的其他方塊。
在其他情況下,您可能必須在 coordinate 處獲取塊block.getY()-1,這將始終返回下面的塊,但需要更高的性能。我選擇是event.getBlockAgainst()因?yàn)槟紤]到了性能。
添加回答
舉報(bào)