Взлом пользовательского блока

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");

    }

Игнорируйте дополнительные переменные, такие как World и PlayerInventory

Итак... Я получаю правильный блок, но когда я его сломаю... просто ничего не делаю

  • 0
    «CustomBlock» не является объектом, с которым вы можете сравнить равенство.
Теги:
plugins
minecraft
bukkit

1 ответ

4
Лучший ответ

Что такое CustomBlock? это переменная или класс? 2 вещи:

  1. Block - это просто позиция, вы не можете сериализовать его или проверить, соответствует ли он другому блоку.
  2. 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
    }

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню