2017-05-21 60 views
2

好吧,我正在製作一個Bukkit插件,它應該檢測鵝卵石生成器,請記住,我不想阻止播放器製作鵝卵石生成器,我只想從事件中獲得該塊,所以我可以用鵝卵石做其他的事情。我如何檢測Bukkit產生的鵝卵石?

我試過到目前爲止:

  • BlockFromToEvent(不找鵝卵石,只發現STATIONARY_LAVA到AIR)
  • BlockFormEvent(只發現積雪在地面上形成)

我想要做什麼:

  • 我想檢測鵝卵石塊水+熔岩COM產生博
  • 我希望得到他們的位置/位置/座標

能否請您至少指向我朝着正確的方向?我已經拉了我的頭髮已經快3個小時了。

感謝大家的幫助!

編輯:解決方案在下面的圖片,將重新鍵入,如果請求! solution

回答

3

Good answer from FireBlast709 at Bukkit Forums

這將取消任何鵝卵石代。基本上,如果你想操縱鵝卵石,你可以將取消線(指示)更改爲任何你需要的。


@EventHandler 
public void onFromTo(BlockFromToEvent event){ 
    Material type = event.getBlock().getType(); 
    if (type == Material.WATER || type == Material.STATIONARY_WATER || type == Material.LAVA || type == Material.STATIONARY_LAVA){ 
     Block b = event.getToBlock(); 
     if (b.getType() == Material.AIR){ 
      if (generatesCobble(type, b)){ 
       /* DO WHATEVER YOU NEED WITH THE COBBLE */ 
       event.setCancelled(true); 
      } 
     } 
    } 
} 

private final BlockFace[] faces = new BlockFace[]{ 
     BlockFace.SELF, 
     BlockFace.UP, 
     BlockFace.DOWN, 
     BlockFace.NORTH, 
     BlockFace.EAST, 
     BlockFace.SOUTH, 
     BlockFace.WEST 
    }; 

public boolean generatesCobble(Material type, Block b){ 
    Material mirrorID1 = (type == Material.WATER || type == Material.STATIONARY_WATER ? Material.LAVA : Material.WATER); 
    Material mirrorID2 = (type == Material.WATER || type == Material.STATIONARY_WATER ? Material.STATIONARY_LAVA : Material.STATIONARY_WATER); 
    for (BlockFace face : faces){ 
     Block r = b.getRelative(face, 1); 
     if (r.getType() == mirrorID1 || r.getType() == mirrorID2){ 
      return true; 
     } 
    } 
    return false; 
} 
+0

好的,首先,謝謝你的回答,但是在後面我指定了一些東西:「好吧,我正在製作一個Bukkit插件,它應該檢測鵝卵石生成器,請記住,我不想阻止玩家們從做鵝卵石發電機,「仍然感謝回答。 –

+0

我不明白這怎麼回答你的問題?它明確地說,你應該用代碼 – Kerooker

+0

中的任何你需要的替換'event.setCancelled(true)',因此,不取消它。 – Kerooker

0

我認爲你必須使用BlockFromToEvent和做一些像

if ((
    (event.getBlock().getType()==Material.LAVA)||   
    (event.getBlock().getType()==Material.WATER)|| 
    (event.getBlock().getType()==Material.STATIONARY_LAVA)|| 
    (event.getBlock().getType()==Material.STATIONARY_WATER) 
    ) && event.getToBlock().getType()==Material.COBBLESTONE) { 
     //do what you want 
    } 
+0

好吧...可悲的是,這將無法正常工作... [This](http://prntscr.com/fatar9)是什麼情況發生。 –

0

有可以追趕創建卵石當特定事件。礦井活動,製作活動,拾取活動。這些事件中的每一個應該讓您獲取哪個塊被破壞,並檢查它是否是Cobblestone的實例或材料。

+0

我需要得到它,當它被生成時,它被開採,製作(不知道你可以工藝鵝卵石)或皮卡。我想在生成時用其他東西替換它。 –