- Баллы
- 96
Собственно есть какое-то множество блоков. Если какой либо из них ломают, взрывают и т.д. - нужно превратить его в Бедрок, а через N времени в блок, которым он был раньше(до того как его сломали, взорвали и т.д.).
Как это сделал я:
Вопрос, правильна ли реализация и как можно её улучшить?
p.s. Event действительно нужен. Он тут не просто так.
Как это сделал я:
PHP:
@EventHandler(ignoreCancelled = true)
public void onBlockBreak(final BlockBreakEvent event) {
final Block block = event.getBlock();
if (this.source.getSomeManager().isSomeBlock(block)) {
Bukkit.getPluginManager().callEvent(new SomeBlockBreakEvent(block));
}
}
public class SomeBlockBreakEvent extends Event implements Cancellable {
//...
private final Block block;
private final Material material; //давно делал, даже не помню нахрена материал отдельно сохраняю.
public SomeBlockBreakEvent(Block block) {
this.block = block;
this.material = block.getType();
}
//...
}
private static final N = ...;
@EventHandler(ignoreCancelled = true)
public void onSomeBlockBreak(SomeBlockBreakEvent event) {
final Block block = event.getBlock();
final Material old = block.getType();
Bukkit.getScheduler().runTask(source, () -> block.setType(Material.BEDROCK));
Bukkit.getScheduler().runTaskLater(source, () -> block.setType(old), N);
}
Вопрос, правильна ли реализация и как можно её улучшить?
p.s. Event действительно нужен. Он тут не просто так.