2014-12-22 66 views
1

我想,当我键入命令打破,我收到一个自定义块“/ customblock”打破自定义模块

@EventHandler 
public void onBlockBreak(BlockBreakEvent broke){ 




    Player player = broke.getPlayer(); 
    PlayerInventory inventory = broke.getPlayer().getInventory(); 
    World world = player.getWorld(); 
    Material block = broke.getBlock().getType(); 


    if(block.equals(CustomBlock)){ 

     player.sendMessage("Test"); 

    } 

忽略,如世界和PlayerInventory

大二的附加变量..我收到正确的块,但当我打破它...只是不做任何事

+0

“CustomBlock”不是您可以比较平等的对象。 – Constant

回答

3

什么是CustomBlock?它是一个变量还是一个类? 两件事:

  1. 一个Block只是一个位置,你不能把它序列化,或检查它是否等于另一个块。
  2. block.equals()是本地Object's方法,不被bukkit覆盖。它只会检查一个对象是否与另一个对象相等。

检查块的最佳方法是你的“自定义块”,就是简单地记录每个自定义块的位置,并检查块是否在其中一个位置。例如:

public List<Location> customBlocks = new ArrayList<Location>(); 

//... in the block place event add the block's location to the list 

@EventHandler 
public void onBlockBreak(BlockBreakEvent broke){ 

    Player player = broke.getPlayer(); 
    PlayerInventory inventory = broke.getPlayer().getInventory(); 
    World world = player.getWorld(); 
    Material block = broke.getBlock().getType(); 


    if(customBlocks.contains(block.getLocation())){ 
     //custom block 
     block.setType(Material.AIR); //destroy the block 
    } 

}