Вот так всё нормально работает, чисто пример.процесс ломания блока идёт
@SubscribeEvent
public void onBlockBreak(PlayerEvent.BreakSpeed e) {
EntityPlayer player = (EntityPlayer) e.entityLiving;
if (e.block.equals(Blocks.dirt) || e.block.equals(Blocks.grass)) {
if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemSpade) {
} else {
e.setCanceled(true);
}
}
}
@SubscribeEvent
public void onBlockBreak(PlayerInteractEvent e) {
Entity entity = (Entity)e.entity;
if (e.action == PlayerInteractEvent.Action.LEFT_CLICK_BLOCK) {
if (entity instanceof EntityPlayerMP){
EntityPlayer p = (EntityPlayer) entity;
if (p.getHeldItem() == null){
e.setCanceled(true);
}
}
}
}
}
ПопробуйОдин фиг процесс поломки блока есть
PlayerEvent.BreakSpeed
Да не, должно не так работать.только тогда, когда блок уже сломан
PlayerEvent.HarvestCheck
вызывается при попытке добычи, но с ним такая проблема - он не Cancellable
BreakSpeed
не отменять, а пересоздай его с this.newSpeed = -1;
@SubscribeEvent
public void onBlockBreak(PlayerEvent.BreakSpeed e) {
Entity entity = (Entity)e.entity;
if (entity instanceof EntityPlayerMP){
EntityPlayer p = (EntityPlayer) entity;
if (p.getHeldItem() == null){
e.newSpeed = -1;
}
}
}
Вот так всё нормально работает, чисто пример.процесс ломания блока идёт
@SubscribeEvent
public void onBlockBreak(PlayerEvent.BreakSpeed e) {
EntityPlayer player = (EntityPlayer) e.entityLiving;
if (e.block.equals(Blocks.dirt) || e.block.equals(Blocks.grass)) {
if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemSpade) {
} else {
e.setCanceled(true);
}
}
}