@SubscribeEvent public void renderExtraBlockBreak(RenderWorldLastEvent event) { PlayerControllerMP controllerMP = Minecraft.getMinecraft().playerController; EntityPlayer player = Minecraft.getMinecraft().thePlayer; World world = player.worldObj; // AOE preview if (player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() instanceof IAoeTool) { MovingObjectPosition mop = player.rayTrace(controllerMP.getBlockReachDistance(), event.partialTicks); if (mop != null) { ItemStack stack = player.getCurrentEquippedItem(); ImmutableList<BlockPos> extraBlocks = ((IAoeTool) stack.getItem()).getAOEBlocks(stack, world, player, mop.getBlockPos()); for (BlockPos pos : extraBlocks) { event.context.drawSelectionBox( player, new MovingObjectPosition(new Vec3(0, 0, 0), null, pos), 0, event.partialTicks); } } } // extra-blockbreak animation if (controllerMP.isHittingBlock) { if (controllerMP.currentItemHittingBlock != null && controllerMP.currentItemHittingBlock.getItem() instanceof IAoeTool && ((IAoeTool) controllerMP.currentItemHittingBlock.getItem()).isAoeHarvestTool()) { ItemStack stack = controllerMP.currentItemHittingBlock; BlockPos pos = controllerMP.currentBlock; drawBlockDamageTexture( Tessellator.getInstance(), Tessellator.getInstance().getWorldRenderer(), player, event.partialTicks, world, ((IAoeTool) stack.getItem()).getAOEBlocks(stack, world, player, pos)); } } }