Ну, на скорую руку накидал вот это:
Java:
public boolean test(Vector vector) {
return getExtent().getLazyBlock(vector).getType() != BlockID.AIR
&& !getConfig().getStringList("disallowed-blocks-material-CUT").contains(getExtent().getLazyBlock(vector).getType().toString());
}
У меня нет развернутой иде+ не знаю когда ставится блок(если test возвращает true или если возвращает false), но скорее всего когда true.В итоге получается следующее:
если(БлокНеВоздух && БлокНеЗапрещён) ставимБлокИзБуфера();
Стоит учесть, что эту проверку проходит каждый блок из буфера(в этом я не уверен, но у тебя есть возможность это проверить), так что при большом объеме буфера возможны лаги.
Так же, я заменил проверку id на material(используя класс WorldEdit'a на высшем уровне), а это значит что блоки из модов вставляться не будут(хотя они вроде и так не поддерживались).Сделал я так потому, что material есть более постоянный, чем id, и это позволяет увеличить отказоустойчивость.
Но опять таки, если сделать проверку в cut, то метод paste изменять не придется.Как я понял, у тебя вырезает наоборот, только те блоки, которые запрещены, да?Если это так то убери "!" перед строкой ids.contains(world.getBlock(vector).getId());
Тогда получится что в буфере нет запрещённых блоков, соотв. незачем их при вставке проверять.