1 回答

TA貢獻(xiàn)1847條經(jīng)驗 獲得超11個贊
就像 Benjamin Urquhart 所做的那樣,總是將你的問題分成更小的子問題,如果你搜索它們而不是搜索主要問題,這些問題可以更容易地得到解決,因為主要問題很可能是你獨有的,而子問題是不是。
考慮到這一點,我們需要開始監(jiān)聽一個事件。更具體地說是BlockPlaceEvent。將您的班級設(shè)置為偵聽器并注冊它。
在事件中,我們需要檢查放置的方塊是否是鐵軌,下方的方塊是否是粘液,如果是,則取消事件以防止其被放置。請注意,取消事件只會阻止放置鐵軌,而不會刪除。如果你想刪除軌道,你必須將它的類型設(shè)置為 AIR 而不是取消事件。
你最終會得到這樣的結(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);
}
}
您必須將此代碼放入已注冊的偵聽器類中才能調(diào)用它。我選擇使用#getBlockAgainst()來檢查我們的粘液塊。請注意,此方法返回我們放置軌道的塊,在我們的例子中,軌道只能放置在塊的頂部,這意味著該方法必須返回下面的塊。但是,請記住該方法不能確保使用鐵路以外的其他方塊。
在其他情況下,您可能必須在 coordinate 處獲取塊block.getY()-1,這將始終返回下面的塊,但需要更高的性能。我選擇是event.getBlockAgainst()因為您考慮到了性能。
添加回答
舉報