Я пытаюсь сломать пользовательский блок, который я получаю, когда я набираю команду "/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");
}
Игнорируйте дополнительные переменные, такие как World и PlayerInventory
Итак... Я получаю правильный блок, но когда я его сломаю... просто ничего не делаю
Что такое CustomBlock
? это переменная или класс? 2 вещи:
Block
- это просто позиция, вы не можете сериализовать его или проверить, соответствует ли он другому блоку.block.equals()
- это метод native Object's
, который не перезаписывается bukkit. Он просто проверяет, равен ли один объект другому.Лучшим способом проверки блока является ваш "настраиваемый блок", это просто запись каждого пользовательского расположения блока и проверка того, находится ли блок в одном из этих местоположений. Например:
public List<Location> customBlocks = new ArrayList<Location>();
//... in the block place event add the block 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
}
}